LTC Slave, add support for variable framerates
[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     conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False)
47
48     conf.write_config_header('libpbd-config.h', remove=False)
49
50     # Boost headers
51     autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
52     autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
53     # autowaf.check_header(conf, 'cxx', 'boost/uuid/uuid.hpp')
54
55 def build(bld):
56     
57     # Make signals_generated.h using signals.py
58     bld(rule = 'python ${SRC} ${TGT}', source = 'pbd/signals.py', target = 'pbd/signals_generated.h')
59
60     # Library
61     obj = bld(features = 'cxx cxxshlib')
62     obj.source = '''
63             basename.cc
64             base_ui.cc
65             boost_debug.cc
66             cartesian.cc
67             command.cc
68             convert.cc
69             controllable.cc
70             controllable_descriptor.cc
71             clear_dir.cc
72             crossthread.cc
73             cpus.cc
74             debug.cc
75             enumwriter.cc
76             event_loop.cc
77             dmalloc.cc
78             enums.cc
79             epa.cc
80             error.cc
81             file_manager.cc
82             file_utils.cc
83             fpu.cc
84             id.cc
85             locale_guard.cc
86             malign.cc
87             mountpoint.cc
88             openuri.cc
89             pathscanner.cc
90             pool.cc
91             property_list.cc
92             pthread_utils.cc
93             receiver.cc
94             search_path.cc
95             semutils.cc
96             shortpath.cc
97             signals.cc
98             sndfile_manager.cc
99             stacktrace.cc
100             stateful_diff_command.cc
101             stateful.cc
102             strreplace.cc
103             strsplit.cc
104             textreceiver.cc
105             transmitter.cc
106             undo.cc
107             uuid.cc
108             version.cc
109             whitespace.cc
110             xml++.cc
111     '''
112
113     if bld.is_defined('DEBUG_RT_ALLOC'):
114         obj.source += 'debug_rt_alloc.c'
115
116     obj.export_includes = ['.']
117     obj.includes     = ['.']
118     obj.name         = 'libpbd'
119     obj.target       = 'pbd'
120     obj.uselib       = 'GLIBMM SIGCPP XML UUID SNDFILE GIOMM'
121     if sys.platform == 'darwin':
122         TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
123         obj.source += 'cocoa_open_uri.mm'
124         obj.uselib += ' OSX'
125     obj.vnum         = LIBPBD_LIB_VERSION
126     obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
127     obj.defines     = ['PACKAGE="' + I18N_PACKAGE + '"']
128
129     if bld.env['build_target'] == 'x86_64':
130         obj.defines += [ 'USE_X86_64_ASM' ]
131
132     if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
133         # Unit tests
134         testobj              = bld(features = 'cxx cxxprogram')
135         testobj.source       = '''
136                 test/testrunner.cc
137                 test/xpath.cc
138                 test/scalar_properties.cc
139                 test/signals_test.cc
140                 test/convert_test.cc
141                 test/filesystem_test.cc
142         '''.split()
143         testobj.target       = 'run-tests'
144         testobj.includes     = obj.includes + ['test', '../pbd']
145         testobj.uselib       = 'CPPUNIT XML SNDFILE'
146         testobj.use          = 'libpbd'
147         testobj.name         = 'libpbd-tests'
148         if sys.platform != 'darwin':
149             testobj.linkflags    = ['-lrt']
150
151
152 def shutdown():
153     autowaf.shutdown()