update plugin presets in mixer-sidebar
[ardour.git] / wscript
diff --git a/wscript b/wscript
index b24e561e960decd4e2a52675817ce11aecbfee82..db1a3ddbb53c5186d95e3b53470cc27a331d39ff 100644 (file)
--- a/wscript
+++ b/wscript
@@ -35,13 +35,15 @@ Context.Context.is_tracks_build = is_tracks_build
 compiler_flags_dictionaries= {
     'gcc' : {
         # Flags required when building a debug build
-        'debuggable' : [ '-O0', '-g' ],
+        'debuggable' : [ '-g' ],
         # Flags required for the linker (if any) when building a debug build
         'linker-debuggable' : '',
         # Flags required when building a non-debug optimized build
         'nondebuggable' : '-DNDEBUG',
-        # Flags required to enable profiling at runtime
-        'profile' : '-pg',
+        # Flags required to enable profiling at runtime with optimized builds
+        'profile' : [ '-fno-omit-frame-pointer' ],
+        # Flags required to enable gprofile profiling
+        'gprofile' : '-pg',
         # Flags required to disable warnings about unused arguments to function calls
         'silence-unused-arguments' : '',
         # Flags required to use SSE unit for general math
@@ -89,7 +91,7 @@ compiler_flags_dictionaries= {
         'debuggable' : ['/DDEBUG', '/Od', '/Zi', '/MDd', '/Gd', '/EHsc'],
         'linker-debuggable' : ['/DEBUG', '/INCREMENTAL' ],
         'nondebuggable' : ['/DNDEBUG', '/Ob1', '/MD', '/Gd', '/EHsc'],
-        'profile' : '',
+        'profile' : '/Oy-',
         'sse' : '/arch:SSE',
         'silence-unused-arguments' : '',
         'sse' : '',
@@ -221,6 +223,7 @@ children = [
         'mcp',
         'patchfiles',
         'headless',
+        'session_utils',
         # shared helper binaries (plugin-scanner, exec-wrapper)
         'libs/fst',
         'libs/vfork',
@@ -332,7 +335,7 @@ int main() { return 0; }''',
         linker_flags.append('-fsanitize=address')
 
     if opt.gprofile:
-        debug_flags = [ flags_dict['profile'] ]
+        debug_flags = [ flags_dict['gprofile'] ]
 
     # OSX
     if platform == 'darwin':
@@ -340,6 +343,8 @@ int main() { return 0; }''',
             conf.env['build_host'] = 'mavericks'
         elif re.search ("^14[.]", version) != None:
             conf.env['build_host'] = 'yosemite'
+        elif re.search ("^15[.]", version) != None:
+            conf.env['build_host'] = 'el_capitan'
         else:
             conf.env['build_host'] = 'irrelevant'
 
@@ -361,8 +366,10 @@ int main() { return 0; }''',
                 conf.env['build_target'] = 'mountainlion'
             elif re.search ("^13[.]", version) != None:
                 conf.env['build_target'] = 'mavericks'
-            else:
+            elif re.search ("^14[.]", version) != None:
                 conf.env['build_target'] = 'yosemite'
+            else:
+                conf.env['build_target'] = 'el_capitan'
         else:
             match = re.search(
                     "(?P<cpu>i[0-6]86|x86_64|powerpc|ppc|ppc64|arm|s390x?)",
@@ -383,19 +390,28 @@ int main() { return 0; }''',
         #
         compiler_flags.append ('-U__STRICT_ANSI__')
 
-    if conf.options.cxx11 or conf.env['build_host'] in [ 'mavericks', 'yosemite' ]:
+    if opt.use_libcpp:
+       cxx_flags.append('--stdlib=libc++')
+       linker_flags.append('--stdlib=libc++')
+
+    if conf.options.cxx11 or conf.env['build_host'] in [ 'mavericks', 'yosemite', 'el_capitan' ]:
         conf.check_cxx(cxxflags=["-std=c++11"])
         cxx_flags.append('-std=c++11')
         if platform == "darwin":
-            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++')
+
+            if not opt.use_libcpp:
+                cxx_flags.append('--stdlib=libstdc++')
+                linker_flags.append('--stdlib=libstdc++')
             # Prevents visibility issues in standard headers
             conf.define("_DARWIN_C_SOURCE", 1)
+        else:
+            cxx_flags.append('-DBOOST_NO_AUTO_PTR')
 
-    if (is_clang and platform == "darwin") or conf.env['build_host'] in ['mavericks', 'yosemite']:
+
+    if (is_clang and platform == "darwin") or conf.env['build_host'] in ['mavericks', 'yosemite', 'el_capitan']:
         # Silence warnings about the non-existing osx clang compiler flags
         # -compatibility_version and -current_version.  These are Waf
         # generated and not needed with clang
@@ -474,10 +490,9 @@ int main() { return 0; }''',
 
     if conf.env['build_target'] == 'x86_64' and opt.windows_vst:
         print("\n\n==================================================")
-        print("You cannot use VST plugins with a 64 bit host. Please run waf with --windows-vst=0")
-        print("\nIt is theoretically possible to build a 32 bit host on a 64 bit system.")
-        print("However, this is tricky and not recommended for beginners.")
-        sys.exit (-1)
+        print("64bit Windows VST support on 64bit Linux is experimental.")
+        print("(This version of ardour will not load 32bit VSTs)")
+        print("==================================================\n\n")
 
     if conf.env['LXVST_SUPPORT'] == True:
         if conf.env['build_target'] == 'x86_64':
@@ -507,7 +522,7 @@ int main() { return 0; }''',
                 ("-DMAC_OS_X_VERSION_MIN_REQUIRED=1070",
                  '-mmacosx-version-min=10.7'))
 
-    elif conf.env['build_target'] in [ 'mavericks', 'yosemite' ]:
+    elif conf.env['build_target'] in [ 'mavericks', 'yosemite', 'el_capitan' ]:
         compiler_flags.extend(
                 ("-DMAC_OS_X_VERSION_MAX_ALLOWED=1090",
                  "-mmacosx-version-min=10.8"))
@@ -543,6 +558,9 @@ int main() { return 0; }''',
     if opt.debug_symbols:
         optimization_flags += flags_dict['debuggable']
 
+    if opt.profile:
+        optimization_flags += flags_dict['profile']
+
     if opt.stl_debug:
         cxx_flags.append("-D_GLIBCXX_DEBUG")
 
@@ -585,6 +603,10 @@ int main() { return 0; }''',
     if opt.nls:
         compiler_flags.append('-DENABLE_NLS')
 
+    # use sparingly, prefer runtime profile
+    if Options.options.program_name.lower() == "mixbus":
+        compiler_flags.append ('-DMIXBUS')
+
     compiler_flags.append ('-DPROGRAM_NAME="' + Options.options.program_name + '"')
     compiler_flags.append ('-DPROGRAM_VERSION="' + PROGRAM_VERSION + '"')
 
@@ -641,9 +663,11 @@ def options(opt):
     opt.add_option('--no-fpu-optimization', action='store_false', dest='fpu_optimization')
     opt.add_option('--exports-hidden', action='store_true', default=False, dest='exports_hidden')
     opt.add_option('--freedesktop', action='store_true', default=False, dest='freedesktop',
-                    help='Install MIME type, icons and .desktop file as per freedesktop.org standards')
+                    help='Build MIME type and .desktop files as per freedesktop.org standards (will be placed in build/gtk2_ardour)')
     opt.add_option('--freebie', action='store_true', default=False, dest='freebie',
                     help='Build a version suitable for distribution as a zero-cost binary')
+    opt.add_option('--profile', action='store_true', default=False, dest='profile',
+                    help='Compile for use with profiling tools requiring a frame pointer')
     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',
@@ -711,6 +735,8 @@ def options(opt):
                     help='Do not ask questions that require confirmation during the build')
     opt.add_option('--cxx11', action='store_true', default=False, dest='cxx11',
                     help='Turn on c++11 compiler flags (-std=c++11)')
+    opt.add_option('--use-libc++', action='store_true', default=False, dest='use_libcpp',
+                    help='use libc++ instead of default or auto-detected stdlib')
     opt.add_option('--address-sanitizer', action='store_true', default=False, dest='asan',
                     help='Turn on AddressSanitizer (requires GCC >= 4.8 or clang >= 3.1)')
     opt.add_option('--ptformat', action='store_true', default=False, dest='ptformat',
@@ -739,6 +765,19 @@ def configure(conf):
         conf.env['CFLAGS'] = []
         conf.env['CXXFLAGS'] = []
 
+    # freedesktop translations needs itstool > 1.0.3 (-j option)
+    if Options.options.freedesktop:
+        output = subprocess.Popen("itstool --version", shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines()
+        o = output[0].decode('utf-8')
+        itstool = o.split(' ')[0]
+        version = o.split(' ')[1].split('.')
+        # use  distutils.version.StrictVersion  or something python to check >= 1.0.4
+        # but first make sure that all build-hosts (incl. OSX-10.5/PPC) have that python lib.
+        # lazy approach: just use major version 2.X.X
+        if itstool != "itstool" or version[0] < "2":
+            print("--freedesktop requires itstool > 2.0.0 to translate files.")
+            sys.exit(-1)
+
     conf.env['VERSION'] = VERSION
     conf.env['MAJOR'] = MAJOR
     conf.env['MINOR'] = MINOR
@@ -748,12 +787,6 @@ def configure(conf):
     autowaf.configure(conf)
     autowaf.display_header('Ardour Configuration')
 
-    gcc_versions = fetch_gcc_version(str(conf.env['CC']))
-    if not Options.options.debug and gcc_versions[0] == '4' and gcc_versions[1] > '4':
-        print('Version 4.5 of gcc is not ready for use when compiling Ardour with optimization.')
-        print('Please use a different version or re-configure with --debug')
-        exit (1)
-
     # systems with glibc have libintl builtin. systems without require explicit
     # linkage against libintl.
     #
@@ -908,7 +941,7 @@ def configure(conf):
 
     have_rf64_riff_support = conf.check_cc(fragment = '''
 #include <sndfile.h>
-int main () { int x = SFC_AUTO_DOWNGRADE_RF64; return 0; }
+int main () { int x = SFC_RF64_AUTO_DOWNGRADE; return 0; }
 ''',
                                            features  = 'c',
                                            mandatory = False,
@@ -921,7 +954,7 @@ int main () { int x = SFC_AUTO_DOWNGRADE_RF64; return 0; }
     if have_rf64_riff_support:
             conf.env.append_value('CXXFLAGS', "-DHAVE_RF64_RIFF")
             conf.env.append_value('CFLAGS', "-DHAVE_RF64_RIFF")
-    
+
     if Options.options.dist_target == 'mingw':
         Options.options.fpu_optimization = True
         conf.env.append_value('CFLAGS', '-DPLATFORM_WINDOWS')
@@ -948,6 +981,23 @@ int main () { int x = SFC_AUTO_DOWNGRADE_RF64; return 0; }
         conf.env.append_value('CXXFLAGS', '-DUSE_CAIRO_IMAGE_SURFACE')
         conf.define ('WINDOWS', 1)
 
+        have_ptw_semaphore = conf.check_cc(fragment = '''
+#include <pthread.h>
+#include <semaphore.h>
+int main () { return 0; }
+''',
+                                           features  = 'c',
+                                           mandatory = False,
+                                           execute   = False,
+                                           msg       = 'Checking for pthread posix semaphore',
+                                           okmsg     = 'Found',
+                                           errmsg    = 'Not found, falling back to Windows Semaphore.')
+
+        #if have_ptw_semaphore:
+        #    conf.define('USE_PTW32_SEMAPHORE', 1)
+        #    conf.env.append_value('CFLAGS', '-DUSE_PTW32_SEMAPHORE')
+        #    conf.env.append_value('CXXFLAGS', '-DUSE_PTW32_SEMAPHORE')
+
     if Options.options.dist_target == 'msvc':
         conf.env.append_value('CFLAGS', '-DPLATFORM_WINDOWS')
         conf.env.append_value('CFLAGS', '-DCOMPILER_MSVC')
@@ -987,6 +1037,8 @@ int main () { int x = SFC_AUTO_DOWNGRADE_RF64; return 0; }
         conf.env['PHONE_HOME'] = True
     if opts.fpu_optimization:
         conf.env['FPU_OPTIMIZATION'] = True
+    if opts.freedesktop:
+        conf.env['FREEDESKTOP'] = True
     if opts.nls:
         conf.define('ENABLE_NLS', 1)
         conf.env['ENABLE_NLS'] = True
@@ -1068,6 +1120,7 @@ int main () { int x = SFC_AUTO_DOWNGRADE_RF64; return 0; }
         sub_config_and_use(conf, 'libs/appleutility')
     elif Options.options.dist_target != 'mingw':
         sub_config_and_use(conf, 'tools/sanity_check')
+        sub_config_and_use(conf, 'tools/gccabicheck')
 
     sub_config_and_use(conf, 'libs/clearlooks-newer')
 
@@ -1106,6 +1159,7 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('Free/Demo copy',        conf.is_defined('FREEBIE'))
     write_config_text('Build target',          conf.env['build_target'])
     write_config_text('CoreAudio',             conf.is_defined('HAVE_COREAUDIO'))
+    write_config_text('CoreAudio 10.5 compat', conf.is_defined('COREAUDIO105'))
     write_config_text('CoreAudio/Midi Backend',conf.env['BUILD_CORECRAPPITA'])
     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'])
@@ -1125,7 +1179,8 @@ const char* const ardour_config_info = "\\n\\
     write_config_text('Phone home',            conf.is_defined('PHONE_HOME'))
     write_config_text('Program name',          opts.program_name)
     write_config_text('Samplerate',            conf.is_defined('HAVE_SAMPLERATE'))
-    write_config_text('PT format',            conf.is_defined('PTFORMAT'))
+    write_config_text('PT format',             conf.is_defined('PTFORMAT'))
+    write_config_text('PTW32 Semaphore',       conf.is_defined('USE_PTW32_SEMAPHORE'))
 #    write_config_text('Soundtouch',            conf.is_defined('HAVE_SOUNDTOUCH'))
     write_config_text('Translation',           opts.nls)
 #    write_config_text('Tranzport',             opts.tranzport)
@@ -1183,6 +1238,7 @@ def build(bld):
         bld.recurse('libs/appleutility')
     elif bld.env['build_target'] != 'mingw':
         bld.recurse('tools/sanity_check')
+        bld.recurse('tools/gccabicheck')
 
     bld.recurse('libs/clearlooks-newer')