speed-up smf_track_delete() from O(N^2) to O(n)
[ardour.git] / libs / evoral / wscript
index a0c99029a56fab721d2e724bef04278bff25e214..12ebffe1d2341d336349089b4e7c4bceb14d8b26 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
-import autowaf
-import Options
+from waflib.extras import autowaf as autowaf
+from waflib import Options
 import os
 
 # Version of this package (even if built as a child)
@@ -19,116 +19,139 @@ APPNAME = 'evoral'
 VERSION = EVORAL_VERSION
 
 # Mandatory variables
-srcdir = '.'
-blddir = 'build'
+top = '.'
+out = 'build'
 
-def set_options(opt):
-        autowaf.set_options(opt)
-        opt.add_option('--test', action='store_true', default=False, dest='build_tests',
-                       help="Build unit tests")
+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):
-        autowaf.configure(conf)
-        #autowaf.display_header('Evoral Configuration')
-
-        conf.check_tool('compiler_cxx')
-        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, 'boost/shared_ptr.hpp')
-        autowaf.check_header(conf, 'boost/weak_ptr.hpp')
-        
-        conf.env['BUILD_TESTS'] = Options.options.build_tests
-        
-        #autowaf.display_msg(conf, "Unit tests", str(conf.env['BUILD_TESTS']))
-        #print
+    conf.load('compiler_cxx')
+    autowaf.configure(conf)
+    #autowaf.display_header('Evoral Configuration')
 
-def build(bld):
-        # 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.new_task_gen('cc', 'shlib')
-        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_incdirs = ['./src/libsmf']
-        libsmf.defines      = 'SMF_VERSION="1.2"'
-        libsmf.includes     = ['./src']
-        libsmf.name         = 'libsmf'
-        libsmf.target       = 'smf'
-        libsmf.uselib       = 'GLIB'
-        libsmf.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
-
-        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/debug.cpp
-        '''
+    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
 
-        # Library
-        obj = bld.new_task_gen('cxx', 'shlib')
+    #autowaf.display_msg(conf, "Unit tests", str(conf.env['BUILD_TESTS']))
+    #print
+
+def build(bld):
+    # 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_incdirs = ['.']
+        obj.export_includes = ['.']
         obj.includes       = ['.', './src']
-        obj.name           = 'libevoral'
-        obj.target         = 'evoral'
+        obj.name           = 'libevoral_static'
+        obj.target         = 'evoral_static'
         obj.uselib         = 'GLIBMM GTHREAD SMF'
-        obj.uselib_local   = 'libsmf libpbd'
+        obj.use            = 'libsmf libpbd'
         obj.vnum           = EVORAL_LIB_VERSION
-        obj.install_path   = os.path.join(bld.env['LIBDIR'], 'ardour3')
-
-        if bld.env['BUILD_TESTS'] and bld.env['HAVE_CPPUNIT']:
-               # Static library (for unit test code coverage)
-               obj = bld.new_task_gen('cxx', 'staticlib')
-               obj.source       = lib_source
-               obj.source         = lib_source
-               obj.export_incdirs = ['.']
-               obj.includes       = ['.', './src']
-               obj.name           = 'libevoral_static'
-               obj.target         = 'evoral_static'
-               obj.uselib         = 'GLIBMM GTHREAD SMF'
-               obj.uselib_local   = 'libsmf libpbd'
-               obj.vnum           = EVORAL_LIB_VERSION
-               obj.install_path   = ''
-               obj.ccflags        = [ '-fprofile-arcs',  '-ftest-coverage' ]
-               obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
-
-               # Unit tests
-               obj              = bld.new_task_gen('cxx', 'program')
-               obj.source       = '''
-                       test/SequenceTest.cpp
-                       test/SMFTest.cpp
-                       test/testrunner.cpp
-               '''
-               obj.includes     = ['.', './src']
-               obj.uselib_local = 'libevoral_static'
-               obj.uselib       = 'CPPUNIT SNDFILE'
-               obj.libs         = 'gcov'
-               obj.target       = 'run-tests'
-               obj.name         = 'libevoral-tests'
-               obj.install_path = ''
-               obj.ccflags      = [ '-fprofile-arcs',  '-ftest-coverage' ]
-               obj.cxxflags     = [ '-fprofile-arcs',  '-ftest-coverage' ]
+        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()
-
+    autowaf.shutdown()