fix merge with master
[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 cshlib')
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"'
70     libsmf.includes     = ['./src']
71     libsmf.name         = 'libsmf'
72     libsmf.target       = 'smf'
73     libsmf.uselib       = 'GLIB'
74     libsmf.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
75
76     lib_source = '''
77             src/Control.cpp
78             src/ControlList.cpp
79             src/ControlSet.cpp
80             src/Curve.cpp
81             src/Event.cpp
82             src/midi_util.cpp
83             src/MIDIEvent.cpp
84             src/Note.cpp
85             src/SMF.cpp
86             src/Sequence.cpp
87             src/debug.cpp
88     '''
89
90     # Library
91     if bld.is_defined ('INTERNAL_SHARED_LIBS'):
92         obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=lib_source)
93         # DLL exports for this library
94         obj.defines      = [ 'LIBEVORAL_DLL_EXPORTS=1' ]
95         obj.cxxflags     = [ '-fvisibility=hidden' ]
96         obj.cflags       = [ '-fvisibility=hidden' ]
97     else:
98         obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=lib_source)
99         obj.cxxflags     = [ '-fPIC' ]
100         obj.cflags       = [ '-fPIC' ]
101         obj.defines      = [ ]
102
103     obj.export_includes = ['.']
104     obj.includes       = ['.', './src']
105     obj.name           = 'libevoral'
106     obj.target         = 'evoral'
107     obj.uselib         = 'GLIBMM GTHREAD SMF'
108     obj.use            = 'libsmf libpbd'
109     obj.vnum           = EVORAL_LIB_VERSION
110     obj.install_path   = os.path.join(bld.env['LIBDIR'], 'ardour3')
111     obj.defines       += [ 'PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
112
113     if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
114         # Static library (for unit test code coverage)
115         obj = bld(features = 'cxx cstlib')
116         obj.source       = lib_source
117         obj.source         = lib_source
118         obj.export_includes = ['.']
119         obj.includes       = ['.', './src']
120         obj.name           = 'libevoral_static'
121         obj.target         = 'evoral_static'
122         obj.uselib         = 'GLIBMM GTHREAD SMF'
123         obj.use            = 'libsmf libpbd'
124         obj.vnum           = EVORAL_LIB_VERSION
125         obj.install_path   = ''
126         if bld.env['TEST_COVERAGE']:
127             obj.linkflags      = '-lgcov'
128             obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
129             obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
130         obj.defines        = ['PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
131
132         # Unit tests
133         obj              = bld(features = 'cxx cxxprogram')
134         obj.source       = '''
135                 test/SequenceTest.cpp
136                 test/SMFTest.cpp
137                 test/RangeTest.cpp
138                 test/testrunner.cpp
139         '''
140         obj.includes     = ['.', './src']
141         obj.use          = 'libevoral_static'
142         obj.uselib       = 'CPPUNIT SNDFILE'
143         obj.target       = 'run-tests'
144         obj.name         = 'libevoral-tests'
145         obj.install_path = ''
146         if bld.env['TEST_COVERAGE']:
147             obj.linkflags      = '-lgcov'
148             obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
149             obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
150
151 def shutdown():
152     autowaf.shutdown()