Update ContrilList debug output.
[ardour.git] / libs / evoral / wscript
index 1b05ce0bfa556eed13e6ff1325189d31f2859f5b..12ebffe1d2341d336349089b4e7c4bceb14d8b26 100644 (file)
 #!/usr/bin/env python
-import Params
+from waflib.extras import autowaf as autowaf
+from waflib import Options
+import os
+
+# Version of this package (even if built as a child)
+EVORAL_VERSION = '0.0.0'
+
+# Library version (UNIX style major, minor, micro)
+# major increment <=> incompatible changes
+# minor increment <=> compatible changes (additions)
+# micro increment <=> no interface changes
+# Version history:
+#   0.0.0 = 0,0,0
+EVORAL_LIB_VERSION = '0.0.0'
 
 # Variables for 'waf dist'
-VERSION = '0.0.1'
 APPNAME = 'evoral'
+VERSION = EVORAL_VERSION
 
 # Mandatory variables
-srcdir = '.'
-blddir = 'build'
+top = '.'
+out = 'build'
 
-def set_options(opt):
-       opt.tool_options('compiler_cxx')
+def options(opt):
+    autowaf.set_options(opt)
+    opt.add_option('--test', action='store_true', default=False, dest='build_tests',
+                    help="Build unit tests")
+    opt.add_option('--test-coverage', action='store_true', default=False, dest='test_coverage',
+                    help="Use gcov to test for code coverage")
 
 def configure(conf):
-       if not conf.env['GLIBMM']:
-               conf.check_pkg('glibmm-2.4', destvar='GLIBMM', vnum='2.16.0', mandatory=True)
-       if not conf.env['GTHREAD']:
-               conf.check_pkg('gthread-2.0', destvar='GTHREAD', vnum='2.16.0', mandatory=True)
-       if not conf.env['CXX']:
-               conf.check_tool('compiler_cxx')
+    conf.load('compiler_cxx')
+    autowaf.configure(conf)
+    #autowaf.display_header('Evoral Configuration')
+
+    autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=False)
+    autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB', atleast_version='2.2')
+    autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM', atleast_version='2.14.0')
+    autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD', atleast_version='2.14.0')
+
+    # Boost headers
+    autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
+    autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
+
+    conf.env['BUILD_TESTS'] = Options.options.build_tests
+    conf.env['TEST_COVERAGE'] = Options.options.test_coverage
+
+    #autowaf.display_msg(conf, "Unit tests", str(conf.env['BUILD_TESTS']))
+    #print
 
 def build(bld):
-       # Headers (evoral)
-       install_files('PREFIX', 'include/evoral', 'evoral/*.hpp')
-       
-       # Library (src)
-       obj = bld.create_obj('cpp', 'shlib')
-       obj.source = '''
-               src/Control.cpp
-               src/ControlList.cpp
-               src/ControlSet.cpp
-               src/Curve.cpp
-               src/Event.cpp
-               src/MIDIEvent.cpp
-               src/Note.cpp
-               src/SMF.cpp
-               src/SMFReader.cpp
-               src/Sequence.cpp
-       '''
-       obj.includes = '..'
-       obj.name     = 'libevoral'
-       obj.target   = 'evoral'
-       obj.uselib   = 'GLIBMM GTHREAD'
-       obj.vnum     = '0.0.0'
-       
-       # Test (test)
-       obj = bld.create_obj('cpp', 'program')
-       obj.source       = 'test/sequence.cpp'
-       obj.includes     = '..'
-       obj.uselib_local = 'libevoral'
-       obj.target       = 'sequence'
-       obj.inst_var     = 0
+    # Headers
+    #bld.install_files('${INCLUDEDIR}/evoral', 'evoral/*.h')
+    #bld.install_files('${INCLUDEDIR}/evoral', 'evoral/*.hpp')
+
+    # Pkgconfig file
+    #autowaf.build_pc(bld, 'EVORAL', EVORAL_VERSION, 'GLIBMM GTHREAD')
+
+    libsmf = bld(features = 'c cstlib')
+    libsmf.source = '''
+            src/libsmf/smf.c
+            src/libsmf/smf_decode.c
+            src/libsmf/smf_load.c
+            src/libsmf/smf_save.c
+            src/libsmf/smf_tempo.c
+    '''
+    libsmf.export_includes = ['./src/libsmf']
+    libsmf.defines      = ['SMF_VERSION="1.2"', 'LIBSMF_DLL_EXPORTS']
+    libsmf.includes     = ['./src']
+    libsmf.name         = 'libsmf'
+    libsmf.target       = 'smf'
+    libsmf.uselib       = 'GLIB'
+    libsmf.install_path = None
+    if bld.env['build_target'] != 'mingw':
+        libsmf.cxxflags     = [ '-fPIC' ]
+        libsmf.cflags       = [ '-fPIC' ]
+
+    lib_source = '''
+            src/Control.cpp
+            src/ControlList.cpp
+            src/ControlSet.cpp
+            src/Curve.cpp
+            src/Event.cpp
+            src/midi_util.cpp
+            src/MIDIEvent.cpp
+            src/Note.cpp
+            src/SMF.cpp
+            src/Sequence.cpp
+            src/TimeConverter.cpp
+            src/debug.cpp
+            src/types.cpp
+    '''
+
+    # Library
+    if bld.is_defined ('INTERNAL_SHARED_LIBS'):
+        obj              = bld.shlib(features = 'c cxx cshlib cxxshlib', source=lib_source)
+        # DLL exports for this library
+        obj.defines      = [ 'LIBEVORAL_DLL_EXPORTS' ]
+    else:
+        obj              = bld.stlib(features = 'c cxx cstlib cxxstlib', source=lib_source)
+        obj.cxxflags     = [ '-fPIC' ]
+        obj.cflags       = [ '-fPIC' ]
+        obj.defines      = [ ]
+
+    obj.export_includes = ['.']
+    obj.includes       = ['.', './src']
+    obj.name           = 'libevoral'
+    obj.target         = 'evoral'
+    obj.uselib         = 'GLIBMM GTHREAD SMF'
+    obj.use            = 'libsmf libpbd'
+    obj.vnum           = EVORAL_LIB_VERSION
+    obj.install_path   = bld.env['LIBDIR']
+    obj.defines       += [ 'PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
+
+    if bld.env['BUILD_TESTS'] and bld.is_defined('HAVE_CPPUNIT'):
+        # Static library (for unit test code coverage)
+        obj = bld(features = 'cxx cstlib')
+        obj.source       = lib_source
+        obj.source         = lib_source
+        obj.export_includes = ['.']
+        obj.includes       = ['.', './src']
+        obj.name           = 'libevoral_static'
+        obj.target         = 'evoral_static'
+        obj.uselib         = 'GLIBMM GTHREAD SMF'
+        obj.use            = 'libsmf libpbd'
+        obj.vnum           = EVORAL_LIB_VERSION
+        obj.install_path   = ''
+        if bld.env['TEST_COVERAGE']:
+            obj.linkflags      = '-lgcov'
+            obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
+            obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
+        obj.defines        = ['PACKAGE="libevoral"', 'EVORAL_MIDI_XML=1' ]
+
+        # Unit tests
+        obj              = bld(features = 'cxx cxxprogram')
+        obj.source       = '''
+                test/SequenceTest.cpp
+                test/SMFTest.cpp
+                test/RangeTest.cpp
+                test/CurveTest.cpp
+                test/testrunner.cpp
+        '''
+        obj.includes     = ['.', './src']
+        obj.use          = 'libevoral_static'
+        obj.uselib       = 'CPPUNIT SNDFILE'
+        obj.target       = 'run-tests'
+        obj.name         = 'libevoral-tests'
+        obj.install_path = ''
+        obj.defines      = ['PACKAGE="libevoraltest"']
+        if bld.env['TEST_COVERAGE']:
+            obj.linkflags      = '-lgcov'
+            obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
+            obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
 
+def shutdown():
+    autowaf.shutdown()