summaryrefslogtreecommitdiff
path: root/wscript
diff options
context:
space:
mode:
Diffstat (limited to 'wscript')
-rw-r--r--wscript156
1 files changed, 109 insertions, 47 deletions
diff --git a/wscript b/wscript
index 57d3496465..440ba088c0 100644
--- a/wscript
+++ b/wscript
@@ -6,6 +6,7 @@ import re
import string
import subprocess
import sys
+import platform as PLATFORM
def fetch_git_revision ():
cmd = "git describe HEAD"
@@ -50,29 +51,28 @@ top = '.'
out = 'build'
children = [
- 'libs/pbd',
- 'libs/midi++2',
- 'libs/evoral',
- 'libs/vamp-sdk',
+ # optionally external libraries
'libs/qm-dsp',
'libs/vamp-plugins',
- 'libs/taglib',
'libs/libltc',
- 'libs/rubberband',
+ # core ardour libraries
+ 'libs/pbd',
+ 'libs/midi++2',
+ 'libs/evoral',
'libs/surfaces',
'libs/panners',
'libs/backends',
'libs/timecode',
'libs/ardour',
'libs/gtkmm2ext',
- 'libs/clearlooks-newer',
'libs/audiographer',
+ 'libs/canvas',
'libs/plugins/reasonablesynth.lv2',
'gtk2_ardour',
'export',
'midi_maps',
'mcp',
- 'patchfiles'
+ 'patchfiles',
]
i18n_children = [
@@ -81,19 +81,10 @@ i18n_children = [
'libs/gtkmm2ext',
]
-if sys.platform == 'linux2':
- children += [ 'tools/sanity_check' ]
- lxvst_default = True
-elif sys.platform == 'darwin':
- children += [ 'libs/appleutility' ]
- lxvst_default = False
-else:
- lxvst_default = False
-
# Version stuff
def fetch_gcc_version (CC):
- cmd = "LANG= %s --version" % CC
+ cmd = "%s --version" % CC
output = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE).communicate()[0].splitlines()
o = output[0].decode('utf-8')
version = o.split(' ')[2].split('.')
@@ -145,7 +136,7 @@ def set_compiler_flags (conf,opt):
# Debugging flags
debug_flags = []
- u = os.uname ()
+ u = PLATFORM.uname ()
cpu = u[4]
platform = u[0].lower()
version = u[2]
@@ -294,7 +285,7 @@ def set_compiler_flags (conf,opt):
print("However, this is tricky and not recommended for beginners.")
sys.exit (-1)
- if opt.lxvst:
+ if conf.env['LXVST_SUPPORT'] == True:
if conf.env['build_target'] == 'x86_64':
compiler_flags.append("-DLXVST_64BIT")
else:
@@ -397,10 +388,12 @@ def set_compiler_flags (conf,opt):
# need ISOC9X for llabs()
compiler_flags.extend(
- ('-DBOOST_SYSTEM_NO_DEPRECATED', '-D_ISOC9X_SOURCE',
- '-D_LARGEFILE64_SOURCE', '-D_FILE_OFFSET_BITS=64'))
- cxx_flags.extend(('-D__STDC_LIMIT_MACROS', '-D__STDC_FORMAT_MACROS'))
-
+ ('-DBOOST_SYSTEM_NO_DEPRECATED', '-D_ISOC9X_SOURCE',
+ '-D_LARGEFILE64_SOURCE', '-D_FILE_OFFSET_BITS=64'))
+ cxx_flags.extend(
+ ('-D__STDC_LIMIT_MACROS', '-D__STDC_FORMAT_MACROS',
+ '-DCANVAS_COMPATIBILITY', '-DCANVAS_DEBUG'))
+
if opt.nls:
compiler_flags.append('-DENABLE_NLS')
@@ -442,10 +435,11 @@ def options(opt):
opt.add_option('--depstack-root', type='string', default='~', dest='depstack_root',
help='Directory/folder where dependency stack trees (gtk, a3) can be found (defaults to ~)')
opt.add_option('--dist-target', type='string', default='auto', dest='dist_target',
- help='Specify the target for cross-compiling [auto,none,x86,i386,i686,x86_64,powerpc,tiger,leopard]')
+ help='Specify the target for cross-compiling [auto,none,x86,i386,i686,x86_64,powerpc,tiger,leopard,mingw]')
opt.add_option('--fpu-optimization', action='store_true', default=True, dest='fpu_optimization',
help='Build runtime checked assembler code (default)')
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')
opt.add_option('--freebie', action='store_true', default=False, dest='freebie',
@@ -462,7 +456,8 @@ def options(opt):
help='Compile with support for LV2 (if Lilv+Suil is available)')
opt.add_option('--no-lv2', action='store_false', dest='lv2',
help='Do not compile with support for LV2')
- opt.add_option('--lxvst', action='store_true', default=lxvst_default, dest='lxvst',
+ opt.add_option('--lv2dir', type='string', help="install destination for builtin LV2 bundles [Default: LIBDIR/lv2]")
+ opt.add_option('--lxvst', action='store_true', default=True, dest='lxvst',
help='Compile with support for linuxVST plugins')
opt.add_option('--nls', action='store_true', default=True, dest='nls',
help='Enable i18n (native language support) (default)')
@@ -578,6 +573,13 @@ def configure(conf):
conf.env.append_value ('CXXFLAGS', '-DNO_PLUGIN_STATE')
conf.define ('NO_PLUGIN_STATE', 1)
+ if Options.options.lv2dir:
+ conf.env['LV2DIR'] = Options.options.lv2dir
+ else:
+ conf.env['LV2DIR'] = os.path.join(conf.env['LIBDIR'], 'lv2')
+
+ conf.env['LV2DIR'] = os.path.normpath(conf.env['LV2DIR'])
+
if sys.platform == 'darwin':
# this is required, potentially, for anything we link and then relocate into a bundle
@@ -657,23 +659,67 @@ def configure(conf):
okmsg = 'ok',
errmsg = 'too old\nPlease install boost version 1.39 or higher.')
- autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB', atleast_version='2.2')
- autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD', atleast_version='2.2')
- autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM', atleast_version='2.32.0')
- autowaf.check_pkg(conf, 'sndfile', uselib_store='SNDFILE', atleast_version='1.0.18')
- autowaf.check_pkg(conf, 'giomm-2.4', uselib_store='GIOMM', atleast_version='2.2')
- autowaf.check_pkg(conf, 'libcurl', uselib_store='CURL', atleast_version='7.0.0')
- autowaf.check_pkg(conf, 'liblo', uselib_store='LO', atleast_version='0.26')
-
- conf.check_cc(function_name='dlopen', header_name='dlfcn.h', lib='dl', uselib_store='DL')
+ 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, '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, 'rubberband', uselib_store='RUBBERBAND', mandatory=True)
+
+ if Options.options.dist_target == 'mingw':
+ Options.options.fpu_optimization = False
+ conf.env.append_value('CFLAGS', '-DPLATFORM_WINDOWS')
+ conf.env.append_value('CFLAGS', '-DCOMPILER_MINGW')
+ conf.env.append_value('CXXFLAGS', '-DPLATFORM_WINDOWS')
+ conf.env.append_value('CXXFLAGS', '-DCOMPILER_MINGW')
+ conf.env.append_value('LIB', 'pthread')
+ # needed for at least libsmf
+ conf.check_cc(function_name='htonl', header_name='winsock2.h', lib='ws2_32')
+ conf.env.append_value('LIB', 'ws2_32')
+ # needed for mingw64 packages, not harmful on normal mingw build
+ conf.env.append_value('LIB', 'intl')
+ conf.check_cc(function_name='regcomp', header_name='regex.h',
+ lib='regex', uselib_store="REGEX", define_name='HAVE_REGEX_H')
+ # TODO put this only where it is needed
+ conf.env.append_value('LIB', 'regex')
+
+ if Options.options.dist_target != 'mingw':
+ conf.check_cc(function_name='dlopen', header_name='dlfcn.h', lib='dl', uselib_store='DL')
+
+ conf.check_cxx(fragment = "#include <boost/version.hpp>\nint main(void) { return (BOOST_VERSION >= 103900 ? 0 : 1); }\n",
+ execute = "1",
+ mandatory = True,
+ msg = 'Checking for boost library >= 1.39',
+ okmsg = 'ok',
+ errmsg = 'too old\nPlease install boost version 1.39 or higher.')
# Tell everyone that this is a waf build
conf.env.append_value('CFLAGS', '-DWAF_BUILD')
conf.env.append_value('CXXFLAGS', '-DWAF_BUILD')
- # Set up waf environment and C defines
opts = Options.options
+
+ # (optionally) Adopt Microsoft-like convention that makes all non-explicitly exported
+ # symbols invisible (rather than doing this all over the wscripts in the src tree)
+ #
+ # This won't apply to MSVC but that hasn't been added as a target yet
+ #
+ # We can't do this till all tests are complete, since some fail if this is et.
+ if opts.exports_hidden:
+ conf.define ('EXPORT_VISIBILITY_HIDDEN', True)
+ if opts.internal_shared_libs:
+ conf.env.append_value ('CXXFLAGS', '-fvisibility=hidden')
+ conf.env.append_value ('CFLAGS', '-fvisibility=hidden')
+ else:
+ conf.define ('EXPORT_VISIBILITY_HIDDEN', False)
+
+ # Set up waf environment and C defines
if opts.phone_home:
conf.define('PHONE_HOME', 1)
conf.env['PHONE_HOME'] = True
@@ -696,8 +742,13 @@ def configure(conf):
conf.env.append_value('CXXFLAGS', '-I' + Options.options.wine_include)
autowaf.check_header(conf, 'cxx', 'windows.h', mandatory = True)
if opts.lxvst:
- conf.define('LXVST_SUPPORT', 1)
- conf.env['LXVST_SUPPORT'] = True
+ if sys.platform == 'darwin':
+ conf.env['LXVST_SUPPORT'] = False
+ elif Options.options.dist_target == 'mingw':
+ conf.env['LXVST_SUPPORT'] = False
+ else:
+ conf.define('LXVST_SUPPORT', 1)
+ conf.env['LXVST_SUPPORT'] = True
conf.define('WINDOWS_KEY', opts.windows_key)
conf.env['PROGRAM_NAME'] = opts.program_name
if opts.rt_alloc_debug:
@@ -714,6 +765,14 @@ def configure(conf):
set_compiler_flags (conf, Options.options)
+ if sys.platform == 'darwin':
+ sub_config_and_use(conf, 'libs/appleutility')
+ elif Options.options.dist_target != 'mingw':
+ sub_config_and_use(conf, 'tools/sanity_check')
+
+ if Options.options.dist_target != 'mingw':
+ sub_config_and_use(conf, 'libs/clearlooks-newer')
+
for i in children:
sub_config_and_use(conf, i)
@@ -739,6 +798,7 @@ const char* const ardour_config_info = "\\n\\
write_config_text('Strict compiler flags', conf.env['STRICT'])
write_config_text('Internal Shared Libraries', conf.is_defined('INTERNAL_SHARED_LIBS'))
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('Architecture flags', opts.arch)
write_config_text('Aubio', conf.is_defined('HAVE_AUBIO'))
@@ -758,7 +818,6 @@ const char* const ardour_config_info = "\\n\\
write_config_text('OGG', conf.is_defined('HAVE_OGG'))
write_config_text('Phone home', conf.is_defined('PHONE_HOME'))
write_config_text('Program name', opts.program_name)
- write_config_text('Rubberband', conf.is_defined('HAVE_RUBBERBAND'))
write_config_text('Samplerate', conf.is_defined('HAVE_SAMPLERATE'))
# write_config_text('Soundtouch', conf.is_defined('HAVE_SOUNDTOUCH'))
write_config_text('Translation', opts.nls)
@@ -772,7 +831,7 @@ const char* const ardour_config_info = "\\n\\
write_config_text('C compiler flags', conf.env['CFLAGS'])
write_config_text('C++ compiler flags', conf.env['CXXFLAGS'])
- write_config_text('Linker flags', conf.env['LINKFLAGS'])
+ write_config_text('Linker flags', conf.env['LINKFLAGS'])
config_text.write ('";\n}\n')
config_text.close ()
@@ -783,22 +842,25 @@ def build(bld):
# add directories that contain only headers, to workaround an issue with waf
- bld.path.find_dir ('libs/evoral/evoral')
if not bld.is_defined('USE_EXTERNAL_LIBS'):
- bld.path.find_dir ('libs/vamp-sdk/vamp-sdk')
+ bld.path.find_dir ('libs/libltc/ltc')
+ bld.path.find_dir ('libs/evoral/evoral')
bld.path.find_dir ('libs/surfaces/control_protocol/control_protocol')
bld.path.find_dir ('libs/timecode/timecode')
- if not bld.is_defined('USE_EXTERNAL_LIBS'):
- bld.path.find_dir ('libs/libltc/ltc')
- bld.path.find_dir ('libs/rubberband/rubberband')
bld.path.find_dir ('libs/gtkmm2ext/gtkmm2ext')
bld.path.find_dir ('libs/ardour/ardour')
- if not bld.is_defined('USE_EXTERNAL_LIBS'):
- bld.path.find_dir ('libs/taglib/taglib')
bld.path.find_dir ('libs/pbd/pbd')
autowaf.set_recursive()
+ if sys.platform == 'darwin':
+ bld.recurse('libs/appleutility')
+ elif bld.env['build_target'] != 'mingw':
+ bld.recurse('tools/sanity_check')
+
+ if bld.env['build_target'] != 'mingw':
+ bld.recurse('libs/clearlooks-newer')
+
for i in children:
bld.recurse(i)