wscript: add option to disable libsamplerate
[aubio.git] / wscript
diff --git a/wscript b/wscript
index 9eff5cad91c0636619d0e0b8e5b6a3bd0d4d1ffa..1b675457fd4de2655584bf45d70564caedcfc804 100644 (file)
--- a/wscript
+++ b/wscript
@@ -1,7 +1,6 @@
-# TODO
-#  - plugins/puredata: add pd compilation
-#  - java: add swig compilation
-#  - doc: add docbook2html and doxygen
+#! /usr/bin/python
+# 
+#  - doc: add doxygen
 #  - tests: move to new unit test system 
 
 APPNAME = 'aubio'
@@ -10,28 +9,28 @@ LIB_VERSION = '2.1.1'
 srcdir = '.'
 blddir = 'build'
 
-import UnitTest
-
 def init(opt):
   pass
 
 def set_options(opt):
+  opt.add_option('--enable-double', action='store_true', default=False,
+      help='compile aubio in double precision mode')
   opt.add_option('--disable-fftw3f', action='store_true', default=False,
       help='compile with fftw3 instead of fftw3f')
-  opt.add_option('--disable-complex', action='store_true', default=False,
-      help='compile without C99 complex')
+  opt.add_option('--enable-complex', action='store_true', default=False,
+      help='compile with C99 complex')
   opt.add_option('--disable-jack', action='store_true', default=False,
       help='compile without jack support')
-  opt.add_option('--disable-alsa', action='store_true', default=False,
-      help='compile without alsa support')
   opt.add_option('--disable-lash', action='store_true', default=False,
       help='compile without lash support')
-  opt.add_option('--enable-java', action='store_true', default=False,
-      help='compile with java support')
+  opt.add_option('--disable-libsamplerate', action='store_true', default=False,
+      help='compile without libsamplerate support')
+  opt.add_option('--with-target-platform', type='string',
+      help='set target platform for cross-compilation', dest='target_platform')
   opt.tool_options('compiler_cc')
   opt.tool_options('compiler_cxx')
   opt.tool_options('gnu_dirs')
-  #opt.tool_options('UnitTest')
+  opt.tool_options('UnitTest')
 
 def configure(conf):
   import Options
@@ -40,37 +39,53 @@ def configure(conf):
   conf.check_tool('gnu_dirs') # helpful for autotools transition and .pc generation
   conf.check_tool('misc') # needed for subst
 
+  if Options.options.target_platform:
+    Options.platform = Options.options.target_platform
+
+  if Options.platform == 'win32':
+    conf.env['shlib_PATTERN'] = 'lib%s.dll'
+
   # check for required headers
   conf.check(header_name='stdlib.h')
   conf.check(header_name='stdio.h')
   conf.check(header_name='math.h')
   conf.check(header_name='string.h')
+  conf.check(header_name='limits.h')
 
   # optionally use complex.h
-  if (Options.options.disable_complex == False):
+  if (Options.options.enable_complex == True):
     conf.check(header_name='complex.h')
 
-  # required dependancies
+  # check dependencies
   conf.check_cfg(package = 'sndfile', atleast_version = '1.0.4',
     args = '--cflags --libs')
-  conf.check_cfg(package = 'samplerate', atleast_version = '0.0.15',
-    args = '--cflags --libs')
+  if (Options.options.disable_libsamplerate == False):
+      conf.check_cfg(package = 'libsamplerate', atleast_version = '0.0.15',
+        args = '--cflags --libs')
+
+  # double precision mode
+  if (Options.options.enable_double == True):
+    conf.define('HAVE_AUBIO_DOUBLE', 1)
+  else:
+    conf.define('HAVE_AUBIO_DOUBLE', 0)
 
   # one of fftwf or fftw3f
   if (Options.options.disable_fftw3f == True):
     conf.check_cfg(package = 'fftw3', atleast_version = '3.0.0',
-    args = '--cflags --libs')
+        args = '--cflags --libs')
   else:
-    conf.check_cfg(package = 'fftw3f', atleast_version = '3.0.0',
-    args = '--cflags --libs')
+    # fftw3f not disabled, take most sensible one according to enable_double
+    if (Options.options.enable_double == True):
+      conf.check_cfg(package = 'fftw3', atleast_version = '3.0.0',
+          args = '--cflags --libs')
+    else:
+      conf.check_cfg(package = 'fftw3f', atleast_version = '3.0.0',
+          args = '--cflags --libs')
 
   # optional dependancies
   if (Options.options.disable_jack == False):
     conf.check_cfg(package = 'jack', atleast_version = '0.15.0',
     args = '--cflags --libs')
-  if (Options.options.disable_alsa == False):
-    conf.check_cfg(package = 'alsa', atleast_version = '0.0.9',
-    args = '--cflags --libs')
   if (Options.options.disable_lash == False):
     conf.check_cfg(package = 'lash-1.0', atleast_version = '0.5.0',
     args = '--cflags --libs', uselib_store = 'LASH')
@@ -86,11 +101,6 @@ def configure(conf):
       conf.check_python_version((2,4,2))
       conf.check_python_headers()
 
-    # java
-    if (Options.options.enable_java == True):
-      conf.fatal('Java build not yet implemented')
-      conf.check_tool('java')
-
   # check support for C99 __VA_ARGS__ macros
   check_c99_varargs = '''
 #include <stdio.h>
@@ -104,9 +114,6 @@ def configure(conf):
   # write configuration header
   conf.write_config_header('src/config.h')
 
-  # check for puredata header
-  conf.check(header_name='m_pd.h')
-
   # add some defines used in examples 
   conf.define('AUBIO_PREFIX', conf.env['PREFIX'])
   conf.define('PACKAGE', APPNAME)
@@ -119,12 +126,10 @@ def build(bld):
   bld.env['LIB_VERSION'] = LIB_VERSION 
 
   # add sub directories
-  bld.add_subdirs('src ext examples cpp tests/src')
+  bld.add_subdirs('src examples')
   if bld.env['SWIG']:
     if bld.env['PYTHON']:
       bld.add_subdirs('python/aubio python')
-    if bld.env['JAVA']:
-      pass
 
   # create the aubio.pc file for pkg-config
   aubiopc = bld.new_task_gen('subst')
@@ -146,18 +151,32 @@ def build(bld):
         source=bld.path.ant_glob('doc/*.sgml'))
     bld.install_files('${MANDIR}/man1', bld.path.ant_glob('doc/*.1'))
 
-  if bld.env['HAVE_M_PD_H']:
-    bld.add_subdirs('plugins/puredata')
-
   # install woodblock sound
   bld.install_files('${PREFIX}/share/sounds/aubio/', 
       'sounds/woodblock.aiff')
 
+  # build and run the unit tests
+  build_tests(bld)
+  import UnitTest
+  bld.add_post_fun(UnitTest.summary)
+
 def shutdown(bld):
   pass
 
-def check(bld):
-  ut = UnitTest.unit_test()
-  ut.change_to_testfile_dir = True
-  ut.run()
-  ut.print_results()
+# loop over all *.c filenames in tests/src to build them all
+# target name is filename.c without the .c
+def build_tests(bld):
+  for target_name in bld.path.ant_glob('tests/src/**/*.c').split():
+    this_target = bld.new_task_gen(
+        features = 'cc cprogram test',
+        source = target_name,
+        target = target_name.split('.')[0],
+        includes = 'src',
+        defines = 'AUBIO_UNSTABLE_API=1',
+        uselib_local = 'aubio')
+    # phasevoc-jack also needs jack 
+    if target_name.endswith('test-phasevoc-jack.c'):
+      this_target.includes = ['src', 'examples']
+      this_target.uselib_local = ['aubio']
+      this_target.uselib = ['JACK']
+      this_target.source += ' examples/jackio.c'