remove redundant os.path.join() calls when specifying install path as bld.env['LIBDIR']
[ardour.git] / libs / evoral / wscript
index 3b44c01514b9faf188e264b912df0463f90f1895..a4aea3a3a269f137dd16c089b25460532eb8497d 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
-import Params
-import autowaf
+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'
@@ -18,57 +19,135 @@ APPNAME = 'evoral'
 VERSION = EVORAL_VERSION
 
 # Mandatory variables
-srcdir = '.'
-blddir = 'build'
+top = '.'
+out = 'build'
 
-def set_options(opt):
-       autowaf.set_options(opt)
-       opt.tool_options('compiler_cc')
-       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):
-       autowaf.configure(conf)
-       autowaf.check_tool(conf, 'compiler_cxx')
-       autowaf.check_pkg(conf, 'glibmm-2.4', destvar='GLIBMM', vnum='2.16.0', mandatory=True)
-       autowaf.check_pkg(conf, 'gthread-2.0', destvar='GTHREAD', vnum='2.16.0', mandatory=True)
+    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
-       #install_files('PREFIX', 'include/evoral', 'evoral/*.h')
-       #install_files('PREFIX', 'include/evoral', 'evoral/*.hpp')
-       
-       # Pkgconfig file
-       #autowaf.build_pc(bld, 'EVORAL', EVORAL_VERSION, 'GLIBMM GTHREAD')
-       
-       # Library
-       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     = EVORAL_LIB_VERSION
-       obj.inst_var = 0
-       
-       # Unit tests
-       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')
 
-def shutdown():
-       autowaf.shutdown()
+    # 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.cxxflags     = [ '-fPIC' ]
+    libsmf.cflags       = [ '-fPIC' ]
+    libsmf.install_path = bld.env['LIBDIR']
 
+    lib_source = '''
+            src/Control.cpp
+            src/ControlList.cpp
+            src/ControlSet.cpp
+            src/Curve.cpp
+            src/Event.cpp
+            src/IdentityConverter.cpp
+            src/midi_util.cpp
+            src/MIDIEvent.cpp
+            src/Note.cpp
+            src/SMF.cpp
+            src/Sequence.cpp
+            src/debug.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/testrunner.cpp
+        '''
+        obj.includes     = ['.', './src']
+        obj.use          = 'libevoral_static'
+        obj.uselib       = 'CPPUNIT SNDFILE'
+        obj.target       = 'run-tests'
+        obj.name         = 'libevoral-tests'
+        obj.install_path = ''
+        if bld.env['TEST_COVERAGE']:
+            obj.linkflags      = '-lgcov'
+            obj.cflags         = [ '-fprofile-arcs',  '-ftest-coverage' ]
+            obj.cxxflags       = [ '-fprofile-arcs',  '-ftest-coverage' ]
+
+def shutdown():
+    autowaf.shutdown()