Fix occasional crash when recording MIDI.
[ardour.git] / libs / evoral / wscript
1 #!/usr/bin/env python
2 from waflib.extras import autowaf as autowaf
3 from waflib import Options
4 import os
5
6 # Version of this package (even if built as a child)
7 EVORAL_VERSION = '0.0.0'
8
9 # Library version (UNIX style major, minor, micro)
10 # major increment <=> incompatible changes
11 # minor increment <=> compatible changes (additions)
12 # micro increment <=> no interface changes
13 # Version history:
14 #   0.0.0 = 0,0,0
15 EVORAL_LIB_VERSION = '0.0.0'
16
17 # Variables for 'waf dist'
18 APPNAME = 'evoral'
19 VERSION = EVORAL_VERSION
20
21 # Mandatory variables
22 top = '.'
23 out = 'build'
24
25 def options(opt):
26     autowaf.set_options(opt)
27     opt.add_option('--test', action='store_true', default=False, dest='build_tests',
28                     help="Build unit tests")
29     opt.add_option('--test-coverage', action='store_true', default=False, dest='test_coverage',
30                     help="Use gcov to test for code coverage")
31
32 def configure(conf):
33     conf.load('compiler_cxx')
34     autowaf.configure(conf)
35     #autowaf.display_header('Evoral Configuration')
36
37     autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=False)
38     autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB', atleast_version='2.2')
39     autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM', atleast_version='2.14.0')
40     autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD', atleast_version='2.14.0')
41
42     # Boost headers
43     autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
44     autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
45
46     conf.env['BUILD_TESTS'] = Options.options.build_tests
47     conf.env['TEST_COVERAGE'] = Options.options.test_coverage
48
49     #autowaf.display_msg(conf, "Unit tests", str(conf.env['BUILD_TESTS']))
50     #print
51
52 def build(bld):
53     # Headers
54     #bld.install_files('${INCLUDEDIR}/evoral', 'evoral/*.h')
55     #bld.install_files('${INCLUDEDIR}/evoral', 'evoral/*.hpp')
56
57     # Pkgconfig file
58     #autowaf.build_pc(bld, 'EVORAL', EVORAL_VERSION, 'GLIBMM GTHREAD')
59
60     libsmf = bld(features = 'c cstlib')
61     libsmf.source = '''
62             src/libsmf/smf.c
63             src/libsmf/smf_decode.c
64             src/libsmf/smf_load.c
65             src/libsmf/smf_save.c
66             src/libsmf/smf_tempo.c
67     '''
68     libsmf.export_includes = ['./src/libsmf']
69     libsmf.defines      = ['SMF_VERSION="1.2"', 'LIBSMF_DLL_EXPORTS']
70     libsmf.includes     = ['./src']
71     libsmf.name         = 'libsmf'
72     libsmf.target       = 'smf'
73     libsmf.uselib       = 'GLIB'
74     libsmf.cxxflags     = [ '-fPIC' ]
75     libsmf.cflags       = [ '-fPIC' ]
76     libsmf.install_path = bld.env['LIBDIR']
77
78     lib_source = '''
79             src/Control.cpp
80             src/ControlList.cpp
81             src/ControlSet.cpp
82             src/Curve.cpp
83             src/Event.cpp
84             src/midi_util.cpp
85             src/MIDIEvent.cpp
86             src/Note.cpp
87             src/SMF.cpp
88             src/Sequence.cpp
89             src/TimeConverter.cpp
90             src/debug.cpp
91             src/types.cpp
92     '''
93
94     # Library
95     if bld.is_defined ('INTERNAL_SHARED_LIBS'):
96         obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=lib_source)
97         # DLL exports for this library
98         obj.defines      = [ 'LIBEVORAL_DLL_EXPORTS' ]
99     else:
100         obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=lib_source)
101         obj.cxxflags     = [ '-fPIC' ]
102         obj.cflags       = [ '-fPIC' ]
103         obj.defines      = [ ]
104
105     obj.export_includes = ['.']
106     obj.includes       = ['.', './src']
107     obj.name           = 'libevoral'
108     obj.target         = 'evoral'
109     obj.uselib         = 'GLIBMM GTHREAD SMF'
110     obj.use            = 'libsmf libpbd'
111     obj.vnum           = EVORAL_LIB_VERSION
112     obj.install_path   = bld.env['LIBDIR']
113     obj.defines       += [ 'PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
114
115     if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
116         # Static library (for unit test code coverage)
117         obj = bld(features = 'cxx cstlib')
118         obj.source       = lib_source
119         obj.source         = lib_source
120         obj.export_includes = ['.']
121         obj.includes       = ['.', './src']
122         obj.name           = 'libevoral_static'
123         obj.target         = 'evoral_static'
124         obj.uselib         = 'GLIBMM GTHREAD SMF'
125         obj.use            = 'libsmf libpbd'
126         obj.vnum           = EVORAL_LIB_VERSION
127         obj.install_path   = ''
128         if bld.env['TEST_COVERAGE']:
129             obj.linkflags      = '-lgcov'
130             obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
131             obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
132         obj.defines        = ['PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
133
134         # Unit tests
135         obj              = bld(features = 'cxx cxxprogram')
136         obj.source       = '''
137                 test/SequenceTest.cpp
138                 test/SMFTest.cpp
139                 test/RangeTest.cpp
140                 test/testrunner.cpp
141         '''
142         obj.includes     = ['.', './src']
143         obj.use          = 'libevoral_static'
144         obj.uselib       = 'CPPUNIT SNDFILE'
145         obj.target       = 'run-tests'
146         obj.name         = 'libevoral-tests'
147         obj.install_path = ''
148         obj.defines      = ['PACKAGE="libevoraltest"']
149         if bld.env['TEST_COVERAGE']:
150             obj.linkflags      = '-lgcov'
151             obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
152             obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
153
154 def shutdown():
155     autowaf.shutdown()