rescue some of the worst casualties of the color changes
[ardour.git] / wscript
diff --git a/wscript b/wscript
index 84792f461a9e12558241e2de3796b17953e683dd..1568e0a3b16fd86338f066fb6fd78cd94e77d598 100644 (file)
--- a/wscript
+++ b/wscript
@@ -148,20 +148,22 @@ def set_compiler_flags (conf,opt):
     version = u[2]
 
     # waf adds -O0 -g itself. thanks waf!
-    is_clang = conf.env['CXX'][0].endswith('clang++')
-    
+    is_clang = conf.check_cxx(fragment = '''
+#ifndef __clang__
+#error
+#endif
+int main() { return 0; }''',
+                         features  = 'cxx',
+                         mandatory = False,
+                         execute   = False,
+                         msg       = 'Checking for clang')
+
     if conf.options.asan:
         conf.check_cxx(cxxflags=["-fsanitize=address", "-fno-omit-frame-pointer"], linkflags=["-fsanitize=address"])
         cxx_flags.append('-fsanitize=address')
         cxx_flags.append('-fno-omit-frame-pointer')
         linker_flags.append('-fsanitize=address')
 
-    if is_clang and platform == "darwin":
-        # Silence warnings about the non-existing osx clang compiler flags
-        # -compatibility_version and -current_version.  These are Waf
-        # generated and not needed with clang
-        cxx_flags.append("-Qunused-arguments")
-        
     if opt.gprofile:
         debug_flags = [ '-pg' ]
 
@@ -226,6 +228,13 @@ def set_compiler_flags (conf,opt):
             # Prevents visibility issues in standard headers
             conf.define("_DARWIN_C_SOURCE", 1)
 
+    if (is_clang and platform == "darwin") or conf.env['build_host'] in ['mavericks', 'yosemite']:
+        # Silence warnings about the non-existing osx clang compiler flags
+        # -compatibility_version and -current_version.  These are Waf
+        # generated and not needed with clang
+        c_flags.append("-Qunused-arguments")
+        cxx_flags.append("-Qunused-arguments")
+
     if ((re.search ("i[0-9]86", cpu) != None) or (re.search ("x86_64", cpu) != None)) and conf.env['build_target'] != 'none':
 
 
@@ -372,6 +381,10 @@ def set_compiler_flags (conf,opt):
         compiler_flags.extend(('-arch', 'i386'))
         linker_flags.extend(('-arch', 'i386'))
 
+    if opt.ppc:
+        compiler_flags.extend(('-arch', 'ppc'))
+        linker_flags.extend(('-arch', 'ppc'))
+
     #
     # warnings flags
     #
@@ -381,6 +394,10 @@ def set_compiler_flags (conf,opt):
 
     c_flags.extend(('-Wstrict-prototypes', '-Wmissing-prototypes'))
     cxx_flags.append('-Woverloaded-virtual')
+    if (not is_clang and not platform == "darwin"):
+        cxx_flags.append('-Wno-unused-local-typedefs')
+    if is_clang:
+        cxx_flags.append('-Wno-mismatched-tags')
 
     #
     # more boilerplate
@@ -430,13 +447,9 @@ def options(opt):
     opt.add_option ('--trx', action='store_true', default=False, dest='trx_build',
                     help='Whether to build for TRX')
     opt.add_option('--arch', type='string', action='store', dest='arch',
-                    help='Architecture-specific compiler flags')
-    opt.add_option('--with-dummy', action='store_true', default=False, dest='build_dummy',
-                   help='Build the dummy backend (no audio/MIDI I/O, useful for profiling)')
-    opt.add_option('--with-alsabackend', action='store_true', default=False, dest='build_alsabackend',
-                   help='Build the ALSA backend')
-    opt.add_option('--with-wavesbackend', action='store_true', default=False, dest='build_wavesbackend',
-                   help='Build the Waves/Portaudio backend')
+                    help='Architecture-specific compiler FLAGS')
+    opt.add_option('--with-backends', type='string', action='store', default='jack', dest='with_backends',
+                    help='Specify which backend modules are to be included(jack,alsa,wavesaudio,dummy)')
     opt.add_option('--backtrace', action='store_true', default=True, dest='backtrace',
                     help='Compile with -rdynamic -- allow obtaining backtraces from within Ardour')
     opt.add_option('--no-carbon', action='store_true', default=False, dest='nocarbon',
@@ -459,6 +472,8 @@ def options(opt):
                     help='Build a version suitable for distribution as a zero-cost binary')
     opt.add_option('--gprofile', action='store_true', default=False, dest='gprofile',
                     help='Compile for use with gprofile')
+    opt.add_option('--libjack', type='string', default="auto", dest='libjack_link',
+                    help='libjack link mode  [auto|link|weak]')
     opt.add_option('--internal-shared-libs', action='store_true', default=True, dest='internal_shared_libs',
                    help='Build internal libs as shared libraries')
     opt.add_option('--internal-static-libs', action='store_false', dest='internal_shared_libs',
@@ -499,6 +514,8 @@ def options(opt):
     # help='Compile with support for Frontier Designs Tranzport (if libusb is available)')
     opt.add_option('--generic', action='store_true', default=False, dest='generic',
                     help='Compile with -arch i386 (OS X ONLY)')
+    opt.add_option('--ppc', action='store_true', default=False, dest='ppc',
+                    help='Compile with -arch ppc (OS X ONLY)')
     opt.add_option('--versioned', action='store_true', default=False, dest='versioned',
                     help='Add revision information to executable name inside the build directory')
     opt.add_option('--windows-vst', action='store_true', default=False, dest='windows_vst',
@@ -687,13 +704,13 @@ def configure(conf):
     autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB', atleast_version='2.2', mandatory=True)
     autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD', atleast_version='2.2', mandatory=True)
     autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM', atleast_version='2.32.0', mandatory=True)
-    autowaf.check_pkg(conf, 'sndfile', uselib_store='SNDFILE', atleast_version='1.0.18, mandatory=True')
+    autowaf.check_pkg(conf, 'sndfile', uselib_store='SNDFILE', atleast_version='1.0.18', mandatory=True)
     autowaf.check_pkg(conf, 'giomm-2.4', uselib_store='GIOMM', atleast_version='2.2', mandatory=True)
     autowaf.check_pkg(conf, 'libcurl', uselib_store='CURL', atleast_version='7.0.0', mandatory=True)
     autowaf.check_pkg(conf, 'liblo', uselib_store='LO', atleast_version='0.26', mandatory=True)
     autowaf.check_pkg(conf, 'taglib', uselib_store='TAGLIB', atleast_version='1.6', mandatory=True)
-    autowaf.check_pkg(conf, 'vamp-sdk', uselib_store='VAMPSDK', atleast_version='2.4', mandatory=True)
-    autowaf.check_pkg(conf, 'vamp-hostsdk', uselib_store='VAMPHOSTSDK', atleast_version='2.4', mandatory=True)
+    autowaf.check_pkg(conf, 'vamp-sdk', uselib_store='VAMPSDK', atleast_version='2.1', mandatory=True)
+    autowaf.check_pkg(conf, 'vamp-hostsdk', uselib_store='VAMPHOSTSDK', atleast_version='2.1', mandatory=True)
     autowaf.check_pkg(conf, 'rubberband', uselib_store='RUBBERBAND', mandatory=True)
 
     if Options.options.dist_target == 'mingw':
@@ -713,6 +730,11 @@ def configure(conf):
         # TODO put this only where it is needed
         conf.env.append_value('LIB', 'regex')
 
+        # work around GdkDrawable BitBlt performance issue on windows
+        # see http://gareus.org/wiki/ardour_windows_gdk_and_cairo
+        conf.env.append_value('CFLAGS', '-DUSE_CAIRO_IMAGE_SURFACE')
+        conf.env.append_value('CXXFLAGS', '-DUSE_CAIRO_IMAGE_SURFACE')
+
     # Tell everyone that this is a waf build
 
     conf.env.append_value('CFLAGS', '-DWAF_BUILD')
@@ -777,12 +799,17 @@ def configure(conf):
         conf.env['DEBUG_DENORMAL_EXCEPTION'] = True
     if opts.build_tests:
         autowaf.check_pkg(conf, 'cppunit', uselib_store='CPPUNIT', atleast_version='1.12.0', mandatory=True)
-    if opts.build_alsabackend:
-        conf.env['BUILD_ALSABACKEND'] = True
-    if opts.build_dummy:
-        conf.env['BUILD_DUMMYBACKEND'] = True
-    if opts.build_wavesbackend:
-        conf.env['BUILD_WAVESBACKEND'] = True
+
+    backends = opts.with_backends.split(',')
+    if not backends:
+        print("Must configure and build at least one backend")
+        sys.exit(1)
+
+    conf.env['BACKENDS'] = backends
+    conf.env['BUILD_JACKBACKEND'] = any('jack' in b for b in backends)
+    conf.env['BUILD_ALSABACKEND'] = any('alsa' in b for b in backends)
+    conf.env['BUILD_DUMMYBACKEND'] = any('dummy' in b for b in backends)
+    conf.env['BUILD_WAVESBACKEND'] = any('wavesaudio' in b for b in backends)
 
     set_compiler_flags (conf, Options.options)
 
@@ -820,7 +847,7 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('Use External Libraries', conf.is_defined('USE_EXTERNAL_LIBS'))
     write_config_text('Library exports hidden', conf.is_defined('EXPORT_VISIBILITY_HIDDEN'))
 
-    write_config_text('ALSA Backend',          opts.build_alsabackend)
+    write_config_text('ALSA Backend',          conf.env['BUILD_ALSABACKEND'])
     write_config_text('ALSA DBus Reservation', conf.is_defined('HAVE_DBUS'))
     write_config_text('Architecture flags',    opts.arch)
     write_config_text('Aubio',                 conf.is_defined('HAVE_AUBIO'))
@@ -830,12 +857,14 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('CoreAudio',             conf.is_defined('HAVE_COREAUDIO'))
     write_config_text('Debug RT allocations',  conf.is_defined('DEBUG_RT_ALLOC'))
     write_config_text('Debug Symbols',         conf.is_defined('debug_symbols') or conf.env['DEBUG'])
-    write_config_text('Dummy backend',         opts.build_dummy)
+    write_config_text('Dummy backend',         conf.env['BUILD_DUMMYBACKEND'])
     write_config_text('Process thread timing', conf.is_defined('PT_TIMING'))
     write_config_text('Denormal exceptions',   conf.is_defined('DEBUG_DENORMAL_EXCEPTION'))
     write_config_text('FLAC',                  conf.is_defined('HAVE_FLAC'))
     write_config_text('FPU optimization',      opts.fpu_optimization)
     write_config_text('Freedesktop files',     opts.freedesktop)
+    write_config_text('JACK Backend',          conf.env['BUILD_JACKBACKEND'])
+    write_config_text('Libjack linking',       conf.env['libjack_link'])
     write_config_text('LV2 UI embedding',      conf.is_defined('HAVE_SUIL'))
     write_config_text('LV2 support',           conf.is_defined('LV2_SUPPORT'))
     write_config_text('LXVST support',         conf.is_defined('LXVST_SUPPORT'))
@@ -847,8 +876,9 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('Translation',           opts.nls)
 #    write_config_text('Tranzport',             opts.tranzport)
     write_config_text('Unit tests',            conf.env['BUILD_TESTS'])
-    write_config_text('Generic x86 CPU',       opts.generic)
-    write_config_text('Waves Backend',         opts.build_wavesbackend)
+    write_config_text('Mac i386 Architecture', opts.generic)
+    write_config_text('Mac ppc Architecture',  opts.ppc)
+    write_config_text('Waves Backend',         conf.env['BUILD_WAVESBACKEND'])
     write_config_text('Windows VST support',   opts.windows_vst)
     write_config_text('Wiimote support',       conf.is_defined('BUILD_WIIMOTE'))
     write_config_text('Windows key',           opts.windows_key)
@@ -888,6 +918,7 @@ def build(bld):
     # shared objects loaded at runtime go here (two aliases)
     bld.env['DLLDIR'] = os.path.join(bld.env['LIBDIR'], lwrcase_dirname)
     bld.env['LIBDIR'] = bld.env['DLLDIR']
+    bld.env['LOCALEDIR'] = os.path.join(bld.env['DATADIR'], 'locale')
 
     autowaf.set_recursive()