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