#!/usr/bin/env python # Licensed under the GNU GPL v2 or later, see COPYING file for details. # Copyright (C) 2008-2010 David Robillard # Copyright (C) 2008 Nedko Arnaudov import os from waflib.extras import autowaf as autowaf import waflib.Options as Options, waflib.Utils as Utils # Version of this package (even if built as a child) PATCHAGE_VERSION = '0.5.0' # Variables for 'waf dist' APPNAME = 'patchage' VERSION = PATCHAGE_VERSION APP_HUMAN_NAME = 'Patchage' # Mandatory variables top = '.' out = 'build' def options(opt): autowaf.set_options(opt) 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 + "']") opt.add_option('--jack-dbus', action='store_true', default=False, dest='jack_dbus', help="Use Jack via D-Bus [Default: False (use libjack)]") opt.add_option('--no-lash', action='store_true', default=False, dest='no_lash', help="Do not build Lash support") opt.add_option('--no-alsa', action='store_true', default=False, dest='no_alsa', help="Do not build Alsa Sequencer support") opt.add_option('--no-binloc', action='store_true', default=False, dest='no_binloc', help="Do not try to read files from executable's parent directory") def configure(conf): autowaf.configure(conf) autowaf.display_header('Patchage Configuration') conf.load('compiler_cxx') 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, 'libgnomecanvasmm-2.6', uselib_store='GNOMECANVASMM', mandatory=True) 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.11.12', mandatory=True) autowaf.check_pkg(conf, 'libglademm-2.4', uselib_store='GLADEMM', atleast_version='2.6.0', mandatory=True) autowaf.check_pkg(conf, 'flowcanvas', uselib_store='FLOWCANVAS', atleast_version='0.8.0', mandatory=True) autowaf.check_pkg(conf, 'raul', uselib_store='RAUL', atleast_version='0.5.1', mandatory=True) # Check for dladdr conf.check(function_name='dladdr', header_name='dlfcn.h', cflags='-D_GNU_SOURCE', linkflags='-ldl', 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.is_defined('HAVE_DBUS') and conf.is_defined('HAVE_DBUS_GLIB'): autowaf.define(conf, 'HAVE_JACK_DBUS', 1) else: autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.107.0', mandatory=False) if conf.is_defined('HAVE_JACK'): autowaf.define(conf, 'PATCHAGE_LIBJACK', 1) if conf.is_defined('HAVE_JACK') and conf.is_defined('HAVE_JACK_DBUS'): autowaf.define(conf, 'HAVE_JACK_MIDI', 1) # Use Alsa if present unless --no-alsa if not Options.options.no_alsa: autowaf.check_pkg(conf, 'alsa', uselib_store='ALSA', mandatory=False) # Use LASH if we have DBUS unless --no-lash if not Options.options.no_lash and conf.is_defined('HAVE_DBUS_GLIB'): autowaf.define(conf, 'HAVE_LASH', 1) # 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) # Boost headers autowaf.check_header(conf, 'boost/shared_ptr.hpp', mandatory=True) autowaf.check_header(conf, 'boost/weak_ptr.hpp', mandatory=True) 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_msg(conf, "Install name", "'" + conf.env['APP_INSTALL_NAME'] + "'", 'CYAN') autowaf.display_msg(conf, "App human name", "'" + conf.env['APP_HUMAN_NAME'] + "'", 'CYAN') autowaf.display_msg(conf, "Jack (D-Bus)", conf.is_defined('HAVE_JACK_DBUS')) autowaf.display_msg(conf, "LASH (D-Bus)", conf.is_defined('HAVE_LASH')) autowaf.display_msg(conf, "Jack (libjack)", conf.is_defined('PATCHAGE_LIBJACK')) autowaf.display_msg(conf, "Alsa Sequencer", conf.is_defined('HAVE_ALSA')) print('') def build(bld): out_base = '' if Options.platform == 'darwin': out_base = 'Patchage.app/Contents/' # Program prog = bld(features = 'cxx cxxprogram') prog.includes = ['.', 'src'] prog.target = out_base + bld.env['APP_INSTALL_NAME'] prog.install_path = '${BINDIR}' autowaf.use_lib(bld, prog, 'DBUS FLOWCANVAS GLADEMM DBUS_GLIB GNOMECANVASMM GTHREAD RAUL') prog.source = ''' src/Client.cpp src/Patchage.cpp src/PatchageCanvas.cpp src/PatchageEvent.cpp src/PatchageModule.cpp src/StateManager.cpp src/main.cpp ''' if bld.is_defined('HAVE_JACK_DBUS'): prog.source += ''' src/JackDbusDriver.cpp ''' if bld.is_defined('HAVE_LASH'): prog.source += ''' src/LashProxy.cpp src/LoadProjectDialog.cpp src/Project.cpp src/ProjectList.cpp src/ProjectPropertiesDialog.cpp src/Session.cpp ''' if bld.is_defined('HAVE_LASH') or bld.is_defined('HAVE_JACK_DBUS'): prog.source += ' src/DBus.cpp ' if bld.is_defined('PATCHAGE_LIBJACK'): prog.source += ' src/JackDriver.cpp ' prog.uselib += ' JACK ' if bld.is_defined('HAVE_ALSA'): prog.source += ' src/AlsaDriver.cpp ' prog.uselib += ' ALSA ' if bld.is_defined('PATCHAGE_BINLOC'): prog.linkflags = ['-ldl'] # Glade XML UI definition bld(features = 'subst', source = 'src/patchage.glade', target = out_base + 'patchage.glade', 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 Options.platform == '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', '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, 512] 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'), 'icons/' + d + '/patchage.png') bld.install_as( os.path.join(bld.env['DATADIR'], 'icons', 'hicolor', 'scalable', 'apps', bld.env['APP_INSTALL_NAME'] + '.svg'), 'icons/scalable/patchage.svg') bld.install_files('${MANDIR}/man1', bld.path.ant_glob('doc/*.1'))