8afc89ea87d9be4dd77707564783385b1e81b18f
[ardour.git] / libs / pbd / wscript
1 #!/usr/bin/env python
2 from waflib.extras import autowaf as autowaf
3 from waflib import TaskGen
4 import os
5 import sys
6
7 # Version of this package (even if built as a child)
8 MAJOR = '4'
9 MINOR = '1'
10 MICRO = '0'
11 LIBPBD_VERSION = "%s.%s.%s" % (MAJOR, MINOR, MICRO)
12
13 # Library version (UNIX style major, minor, micro)
14 # major increment <=> incompatible changes
15 # minor increment <=> compatible changes (additions)
16 # micro increment <=> no interface changes
17 LIBPBD_LIB_VERSION = '4.1.0'
18
19 # Variables for 'waf dist'
20 APPNAME = 'libpbd'
21 VERSION = LIBPBD_VERSION
22 I18N_PACKAGE = 'libpbd4'
23
24 # Mandatory variables
25 top = '.'
26 out = 'build'
27
28 path_prefix = 'libs/pbd/'
29
30 def options(opt):
31     autowaf.set_options(opt)
32
33 def configure(conf):
34     conf.load('compiler_cxx')
35     autowaf.build_version_files(path_prefix+'pbd/version.h', path_prefix+'version.cc',
36                     'libpbd', MAJOR, MINOR, MICRO)
37     autowaf.configure(conf)
38     autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
39     autowaf.check_pkg(conf, 'sigc++-2.0', uselib_store='SIGCPP', atleast_version='2.0')
40     if sys.platform != 'darwin':
41         autowaf.check_pkg(conf, 'uuid', uselib_store='UUID')
42
43     conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT',mandatory=False)
44     conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False)
45     conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
46     if conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600',mandatory=False) == False:
47         conf.define ('NO_POSIX_MEMALIGN',1)
48
49     conf.write_config_header('libpbd-config.h', remove=False)
50
51     # Boost headers
52     autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
53     autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
54     # autowaf.check_header(conf, 'cxx', 'boost/uuid/uuid.hpp')
55
56 def build(bld):
57     # Library
58     obj = bld(features = 'cxx cxxshlib')
59     obj.source = '''
60             basename.cc
61             base_ui.cc
62             boost_debug.cc
63             cartesian.cc
64             command.cc
65             convert.cc
66             controllable.cc
67             controllable_descriptor.cc
68             clear_dir.cc
69             crossthread.cc
70             cpus.cc
71             debug.cc
72             enumwriter.cc
73             event_loop.cc
74             dmalloc.cc
75             enums.cc
76             epa.cc
77             error.cc
78             filesystem.cc
79             filesystem_paths.cc
80             file_manager.cc
81             file_utils.cc
82             fpu.cc
83             id.cc
84             locale_guard.cc
85             malign.cc
86             mountpoint.cc
87             openuri.cc
88             pathscanner.cc
89             pool.cc
90             property_list.cc
91             pthread_utils.cc
92             receiver.cc
93             search_path.cc
94             semutils.cc
95             shortpath.cc
96             signals.cc
97             sndfile_manager.cc
98             stacktrace.cc
99             stateful_diff_command.cc
100             stateful.cc
101             strreplace.cc
102             strsplit.cc
103             textreceiver.cc
104             transmitter.cc
105             undo.cc
106             uuid.cc
107             version.cc
108             whitespace.cc
109             xml++.cc
110     '''
111
112     if bld.is_defined('DEBUG_RT_ALLOC'):
113         obj.source += 'debug_rt_alloc.c'
114
115     obj.export_includes = ['.']
116     obj.includes     = ['.']
117     obj.name         = 'libpbd'
118     obj.target       = 'pbd'
119     obj.uselib       = 'GLIBMM SIGCPP XML UUID SNDFILE GIOMM'
120     if sys.platform == 'darwin':
121         TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
122         obj.source += 'cocoa_open_uri.mm'
123         obj.uselib += ' OSX'
124     obj.vnum         = LIBPBD_LIB_VERSION
125     obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
126     obj.defines     = ['PACKAGE="' + I18N_PACKAGE + '"']
127
128     if bld.env['build_target'] == 'x86_64':
129         obj.defines += [ 'USE_X86_64_ASM' ]
130
131     if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
132         # Unit tests
133         testobj              = bld(features = 'cxx cxxprogram')
134         testobj.source       = '''
135                 test/testrunner.cc
136                 test/xpath.cc
137                 test/scalar_properties.cc
138                 test/signals_test.cc
139         '''.split()
140         testobj.target       = 'run-tests'
141         testobj.includes     = obj.includes + ['test', '../pbd']
142         testobj.uselib       = 'CPPUNIT XML SNDFILE'
143         testobj.use          = 'libpbd'
144
145
146 def shutdown():
147     autowaf.shutdown()