diff options
Diffstat (limited to 'wscript')
-rw-r--r-- | wscript | 225 |
1 files changed, 225 insertions, 0 deletions
@@ -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')) |