X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=wscript;h=db1a3ddbb53c5186d95e3b53470cc27a331d39ff;hb=c85f1c7aa3324881fe24e00d0640b4efb3c3953f;hp=b24e561e960decd4e2a52675817ce11aecbfee82;hpb=67aa2f876344e6052d634575529e9821f6458f9e;p=ardour.git diff --git a/wscript b/wscript index b24e561e96..db1a3ddbb5 100644 --- 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( "(?Pi[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 -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 +#include +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')