Clean up funny code and initialize variables.
[ardour.git] / wscript
diff --git a/wscript b/wscript
index 184126bcc6793c0260479cf48585b3bd139b7962..df1aea53e41d971e2683fcfc55ee7e721f0f33e7 100644 (file)
--- a/wscript
+++ b/wscript
@@ -7,6 +7,7 @@ import string
 import subprocess
 import sys
 import platform as PLATFORM
+from waflib.Tools import winres
 
 def fetch_git_revision ():
     cmd = "git describe HEAD"
@@ -155,15 +156,18 @@ def set_compiler_flags (conf,opt):
         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' ]
 
+    # OSX
+    if platform == 'darwin':
+        if re.search ("^13[.]", version) != None:
+            conf.env['build_host'] = 'mavericks'
+        elif re.search ("^14[.]", version) != None:
+            conf.env['build_host'] = 'yosemite'
+        else:
+            conf.env['build_host'] = 'irrelevant'
+
     # Autodetect
     if opt.dist_target == 'auto':
         if platform == 'darwin':
@@ -180,8 +184,10 @@ def set_compiler_flags (conf,opt):
                 conf.env['build_target'] = 'lion'
             elif re.search ("^12[.]", version) != None:
                 conf.env['build_target'] = 'mountainlion'
+            elif re.search ("^13[.]", version) != None:
+                conf.env['build_target'] = 'mavericks'
             else:
-                conf.env['build_target'] = 'mavericks' # 13.0.0
+                conf.env['build_target'] = 'yosemite'
         else:
             match = re.search(
                     "(?P<cpu>i[0-6]86|x86_64|powerpc|ppc|ppc64|arm|s390x?)",
@@ -202,15 +208,25 @@ def set_compiler_flags (conf,opt):
         # 
         compiler_flags.append ('-U__STRICT_ANSI__')
 
-    if conf.options.cxx11 or conf.env['build_target'] == 'mavericks':
+    if conf.options.cxx11 or conf.env['build_host'] in [ 'mavericks', 'yosemite' ]:
         conf.check_cxx(cxxflags=["-std=c++11"])
         cxx_flags.append('-std=c++11')
         if platform == "darwin":
-            cxx_flags.append('-stdlib=libc++')
-            linker_flags.append('-lc++')
+            cxx_flags.append('--stdlib=libstdc++')
+            # Mavericks and later changed the syntax to be used when including Carbon headers,
+            # from requiring a full path to requiring just the header name.
+            cxx_flags.append('-DCARBON_FLAT_HEADERS')
+            linker_flags.append('--stdlib=libstdc++')
             # 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':
 
 
@@ -284,8 +300,7 @@ def set_compiler_flags (conf,opt):
     # a single way to test if we're on OS X
     #
 
-    if conf.env['build_target'] in ['panther', 'tiger', 'leopard', 'snowleopard' ]:
-        conf.define ('IS_OSX', 1)
+    if conf.env['build_target'] in ['panther', 'tiger', 'leopard' ]:
         # force tiger or later, to avoid issues on PPC which defaults
         # back to 10.1 if we don't tell it otherwise.
 
@@ -293,12 +308,20 @@ def set_compiler_flags (conf,opt):
                 ("-DMAC_OS_X_VERSION_MIN_REQUIRED=1040",
                  '-mmacosx-version-min=10.4'))
 
+    elif conf.env['build_target'] in [ 'snowleopard' ]:
+        compiler_flags.extend(
+                ("-DMAC_OS_X_VERSION_MIN_REQUIRED=1060",
+                 '-mmacosx-version-min=10.6'))
+
     elif conf.env['build_target'] in [ 'lion', 'mountainlion' ]:
         compiler_flags.extend(
                 ("-DMAC_OS_X_VERSION_MIN_REQUIRED=1070",
                  '-mmacosx-version-min=10.7'))
-    else:
-        conf.define ('IS_OSX', 0)
+
+    elif conf.env['build_target'] in [ 'mavericks', 'yosemite' ]:
+        compiler_flags.extend(
+                ("-DMAC_OS_X_VERSION_MAX_ALLOWED=1090",
+                 "-mmacosx-version-min=10.8"))
 
     #
     # save off CPU element in an env
@@ -350,6 +373,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
     #
@@ -413,6 +440,8 @@ def options(opt):
                    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')
     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',
@@ -435,6 +464,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',
@@ -475,6 +506,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',
@@ -506,6 +539,9 @@ def sub_config_and_use(conf, name, has_objects = True):
 def configure(conf):
     conf.load('compiler_c')
     conf.load('compiler_cxx')
+    if Options.options.dist_target == 'mingw':
+        conf.load('winres')
+
     conf.env['VERSION'] = VERSION
     conf.env['MAJOR'] = MAJOR
     conf.env['MINOR'] = MINOR
@@ -686,6 +722,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')
@@ -754,6 +795,8 @@ def configure(conf):
         conf.env['BUILD_ALSABACKEND'] = True
     if opts.build_dummy:
         conf.env['BUILD_DUMMYBACKEND'] = True
+    if opts.build_wavesbackend:
+        conf.env['BUILD_WAVESBACKEND'] = True
 
     set_compiler_flags (conf, Options.options)
 
@@ -807,6 +850,7 @@ const char* const ardour_config_info = "\\n\\
     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('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'))
@@ -818,7 +862,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('Mac i386 Architecture', opts.generic)
+    write_config_text('Mac ppc Architecture',  opts.ppc)
+    write_config_text('Waves Backend',         opts.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)