summaryrefslogtreecommitdiffstats
path: root/wscript
diff options
context:
space:
mode:
Diffstat (limited to 'wscript')
-rw-r--r--wscript225
1 files changed, 225 insertions, 0 deletions
diff --git a/wscript b/wscript
new file mode 100644
index 0000000..88bf7c2
--- /dev/null
+++ b/wscript
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+# Licensed under the GNU GPL v3 or later, see COPYING file for details.
+# Copyright 2008-2013 David Robillard
+# Copyright 2008 Nedko Arnaudov
+
+import os
+
+from waflib import Options, Utils
+from waflib.extras import autowaf
+
+# Version of this package (even if built as a child)
+PATCHAGE_VERSION = '1.0.1'
+
+# Variables for 'waf dist'
+APPNAME = 'patchage'
+VERSION = PATCHAGE_VERSION
+APP_HUMAN_NAME = 'Patchage'
+
+# Mandatory variables
+top = '.'
+out = 'build'
+
+def options(ctx):
+ ctx.load('compiler_cxx')
+ autowaf.set_options(ctx)
+ opt = ctx.get_option_group('Configuration options')
+
+ opt.add_option('--patchage-install-name', type='string', default=APPNAME,
+ dest='patchage_install_name',
+ help='patchage install name. [default: '' + APPNAME + '']')
+ opt.add_option('--patchage-human-name', type='string', default=APP_HUMAN_NAME,
+ dest='patchage_human_name',
+ help='patchage human name [default: '' + APP_HUMAN_NAME + '']')
+
+ autowaf.add_flags(
+ opt,
+ {'jack-dbus': 'use Jack via D-Bus',
+ 'jack-session-manage': 'include JACK session management support',
+ 'no-alsa': 'do not build Alsa Sequencer support',
+ 'no-binloc': 'do not try to read files from executable location',
+ 'light-theme': 'use light coloured theme'})
+
+def configure(conf):
+ autowaf.display_header('Patchage Configuration')
+ conf.load('compiler_cxx', cache=True)
+ conf.load('autowaf', cache=True)
+ autowaf.set_cxx_lang(conf, 'c++11')
+
+ autowaf.check_pkg(conf, 'dbus-1', uselib_store='DBUS',
+ mandatory=False)
+ autowaf.check_pkg(conf, 'dbus-glib-1', uselib_store='DBUS_GLIB',
+ mandatory=False)
+ autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
+ atleast_version='2.14.0', mandatory=True)
+ autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM',
+ atleast_version='2.14.0', mandatory=True)
+ autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
+ atleast_version='2.12.0', mandatory=True)
+ autowaf.check_pkg(conf, 'ganv-1', uselib_store='GANV',
+ atleast_version='1.5.2', mandatory=True)
+
+ if conf.env.DEST_OS == 'darwin':
+ autowaf.check_pkg(conf, 'gtk-mac-integration', uselib_store='GTK_OSX',
+ atleast_version='1.0.0', mandatory=False)
+ if conf.env.HAVE_GTK_OSX:
+ autowaf.define(conf, 'PATCHAGE_GTK_OSX', 1)
+
+ # Check for dladdr
+ autowaf.check_function(conf, 'cxx', 'dladdr',
+ header_name = 'dlfcn.h',
+ defines = ['_GNU_SOURCE'],
+ lib = ['dl'],
+ define_name = 'HAVE_DLADDR',
+ mandatory = False)
+
+ # Use Jack D-Bus if requested (only one jack driver is allowed)
+ if Options.options.jack_dbus and conf.env.HAVE_DBUS and conf.env.HAVE_DBUS_GLIB:
+ autowaf.define(conf, 'HAVE_JACK_DBUS', 1)
+ else:
+ autowaf.check_pkg(conf, 'jack', uselib_store='JACK',
+ atleast_version='0.120.0', mandatory=False)
+ if conf.env.HAVE_JACK:
+ autowaf.define(conf, 'PATCHAGE_LIBJACK', 1)
+ if Options.options.jack_session_manage:
+ autowaf.define(conf, 'PATCHAGE_JACK_SESSION', 1)
+ autowaf.check_function(conf, 'cxx', 'jack_get_property',
+ header_name = 'jack/metadata.h',
+ define_name = 'HAVE_JACK_METADATA',
+ uselib = 'JACK',
+ mandatory = False)
+
+ # Use Alsa if present unless --no-alsa
+ if not Options.options.no_alsa:
+ autowaf.check_pkg(conf, 'alsa', uselib_store='ALSA', mandatory=False)
+
+ # Find files at binary location if we have dladdr unless --no-binloc
+ if not Options.options.no_binloc and conf.is_defined('HAVE_DLADDR'):
+ autowaf.define(conf, 'PATCHAGE_BINLOC', 1)
+
+ if Options.options.light_theme:
+ autowaf.define(conf, 'PATCHAGE_USE_LIGHT_THEME', 1)
+
+ # Boost headers
+ conf.check_cxx(header_name='boost/format.hpp')
+ conf.check_cxx(header_name='boost/shared_ptr.hpp')
+ conf.check_cxx(header_name='boost/utility.hpp')
+ conf.check_cxx(header_name='boost/weak_ptr.hpp')
+
+ conf.env.PATCHAGE_VERSION = PATCHAGE_VERSION
+
+ conf.env.APP_INSTALL_NAME = Options.options.patchage_install_name
+ conf.env.APP_HUMAN_NAME = Options.options.patchage_human_name
+ autowaf.define(conf, 'PATCHAGE_DATA_DIR', os.path.join(
+ conf.env.DATADIR, conf.env.APP_INSTALL_NAME))
+
+ conf.write_config_header('patchage_config.h', remove=False)
+
+ autowaf.display_summary(
+ conf,
+ {'Install name': conf.env.APP_INSTALL_NAME,
+ 'App human name': conf.env.APP_HUMAN_NAME,
+ 'Jack (D-Bus)': bool(conf.env.HAVE_JACK_DBUS),
+ 'Jack (libjack)': conf.is_defined('PATCHAGE_LIBJACK'),
+ 'Jack Session Management': conf.is_defined('PATCHAGE_JACK_SESSION'),
+ 'Jack Metadata': conf.is_defined('HAVE_JACK_METADATA'),
+ 'Alsa Sequencer': bool(conf.env.HAVE_ALSA)})
+
+ if conf.env.DEST_OS == 'darwin':
+ autowaf.display_msg(conf, "Mac Integration", bool(conf.env.HAVE_GTK_OSX))
+
+def build(bld):
+ out_base = ''
+ if bld.env.DEST_OS == 'darwin':
+ out_base = 'Patchage.app/Contents/'
+
+ # Program
+ prog = bld(features = 'cxx cxxprogram',
+ includes = ['.', 'src'],
+ target = out_base + bld.env.APP_INSTALL_NAME,
+ install_path = '${BINDIR}')
+ autowaf.use_lib(bld, prog, 'DBUS GANV DBUS_GLIB GTKMM GNOMECANVAS GTHREAD GTK_OSX')
+ prog.source = '''
+ src/Configuration.cpp
+ src/Patchage.cpp
+ src/PatchageCanvas.cpp
+ src/PatchageEvent.cpp
+ src/PatchageModule.cpp
+ src/main.cpp
+ '''
+ if bld.env.HAVE_JACK_DBUS:
+ prog.source += ' src/JackDbusDriver.cpp '
+ if bld.is_defined('PATCHAGE_LIBJACK'):
+ prog.source += ' src/JackDriver.cpp '
+ prog.uselib += ' JACK NEWJACK '
+ if bld.env.HAVE_ALSA:
+ prog.source += ' src/AlsaDriver.cpp '
+ prog.uselib += ' ALSA '
+ if bld.is_defined('PATCHAGE_BINLOC') and bld.is_defined('HAVE_DLADDR'):
+ prog.lib = ['dl']
+
+ # XML UI definition
+ bld(features = 'subst',
+ source = 'src/patchage.ui',
+ target = out_base + 'patchage.ui',
+ install_path = '${DATADIR}/' + bld.env.APP_INSTALL_NAME,
+ chmod = Utils.O644,
+ PATCHAGE_VERSION = PATCHAGE_VERSION)
+
+ # 'Desktop' file (menu entry, icon, etc)
+ bld(features = 'subst',
+ source = 'patchage.desktop.in',
+ target = 'patchage.desktop',
+ install_path = '${DATADIR}/applications',
+ chmod = Utils.O644,
+ BINDIR = os.path.normpath(bld.env.BINDIR),
+ APP_INSTALL_NAME = bld.env.APP_INSTALL_NAME,
+ APP_HUMAN_NAME = bld.env.APP_HUMAN_NAME)
+
+ if bld.env.DEST_OS == 'darwin':
+ # Property list
+ bld(features = 'subst',
+ source = 'osx/Info.plist.in',
+ target = out_base + 'Info.plist',
+ install_path = '',
+ chmod = Utils.O644)
+
+ # Icons
+ bld(rule = 'cp ${SRC} ${TGT}',
+ source = 'osx/Patchage.icns',
+ target = out_base + 'Resources/Patchage.icns')
+
+ # Gtk/Pango/etc configuration files
+ for i in ['pangorc', 'pango.modules', 'loaders.cache', 'gtkrc']:
+ bld(rule = 'cp ${SRC} ${TGT}',
+ source = 'osx/' + i,
+ target = out_base + 'Resources/' + i)
+
+ # Icons
+ # After installation, icon cache should be updated using:
+ # gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+ icon_sizes = [16, 22, 24, 32, 48, 128, 256]
+ for s in icon_sizes:
+ d = '%dx%d' % (s, s)
+ bld.install_as(
+ os.path.join(bld.env.DATADIR, 'icons', 'hicolor', d, 'apps',
+ bld.env.APP_INSTALL_NAME + '.png'),
+ os.path.join('icons', d, 'patchage.png'))
+
+ bld.install_as(
+ os.path.join(bld.env.DATADIR, 'icons', 'hicolor', 'scalable', 'apps',
+ bld.env.APP_INSTALL_NAME + '.svg'),
+ os.path.join('icons', 'scalable', 'patchage.svg'))
+
+ bld.install_files('${MANDIR}/man1', bld.path.ant_glob('doc/*.1'))
+
+def posts(ctx):
+ path = str(ctx.path.abspath())
+ autowaf.news_to_posts(
+ os.path.join(path, 'NEWS'),
+ {'title' : 'Patchage',
+ 'description' : autowaf.get_blurb(os.path.join(path, 'README')),
+ 'dist_pattern' : 'http://download.drobilla.net/patchage-%s.tar.bz2'},
+ { 'Author' : 'drobilla',
+ 'Tags' : 'Hacking, LAD, Patchage' },
+ os.path.join(out, 'posts'))