#!/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 import autowaf import Options # Version of this package (even if built as a child) PATCHAGE_VERSION = '0.4.6' # 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") def configure(conf): autowaf.configure(conf) autowaf.display_header('Patchage Configuration') conf.check_tool('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.7.1', mandatory=True) autowaf.check_pkg(conf, 'raul', uselib_store='RAUL', atleast_version='0.5.1', mandatory=True) # Use Jack D-Bus if requested (only one jack driver is allowed) conf.env['HAVE_JACK_DBUS'] = conf.env['HAVE_DBUS'] == 1 and conf.env['HAVE_DBUS_GLIB'] == 1 and Options.options.jack_dbus if conf.env['HAVE_JACK_DBUS']: autowaf.define(conf, 'HAVE_JACK_DBUS', conf.env['HAVE_JACK_DBUS']) else: autowaf.check_pkg(conf, 'jack', uselib_store='JACK', atleast_version='0.107.0', mandatory=False) if conf.env['HAVE_JACK'] == 1: autowaf.define(conf, 'USE_LIBJACK', 1) autowaf.define(conf, 'HAVE_JACK_MIDI', int(conf.env['HAVE_JACK'] == 1 or conf.env['HAVE_JACK_DBUS'] == 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.env['HAVE_DBUS_GLIB']: autowaf.define(conf, 'HAVE_LASH', 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)", str(conf.env['HAVE_JACK_DBUS'])) autowaf.display_msg(conf, "LASH (D-Bus)", str(conf.env['HAVE_LASH'] == 1)) autowaf.display_msg(conf, "Jack (libjack)", str(conf.env['USE_LIBJACK'] == 1)) autowaf.display_msg(conf, "Alsa Sequencer", str(conf.env['HAVE_ALSA'] == 1)) print def build(bld): # Program prog = bld(features = 'cxx cxxprogram') prog.includes = ['.', 'src'] prog.target = 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.env['HAVE_JACK_DBUS']: prog.source += ''' src/JackDbusDriver.cpp ''' if bld.env['HAVE_LASH']: prog.source += ''' src/LashProxy.cpp src/LoadProjectDialog.cpp src/Project.cpp src/ProjectList.cpp src/ProjectPropertiesDialog.cpp src/Session.cpp ''' if bld.env['HAVE_LASH'] or bld.env['HAVE_JACK_DBUS']: prog.source += ' src/DBus.cpp ' if bld.env['USE_LIBJACK']: prog.source += ' src/JackDriver.cpp ' prog.uselib += ' JACK ' if bld.env['HAVE_ALSA'] == 1: prog.source += ' src/AlsaDriver.cpp ' prog.uselib += ' ALSA ' # Glade UI definitions (XML) bld.install_files('${DATADIR}/' + bld.env['APP_INSTALL_NAME'], 'src/patchage.glade') # 'Desktop' file (menu entry, icon, etc) bld(features = 'subst', source = 'patchage.desktop.in', target = 'patchage.desktop', install_path = '${DATADIR}/applications', chmod = 0755, BINDIR = os.path.normpath(bld.env['BINDIR']), APP_INSTALL_NAME = bld.env['APP_INSTALL_NAME'], APP_HUMAN_NAME = bld.env['APP_HUMAN_NAME']) # Icons # # Installation layout (with /usr prefix) # /usr/bin/patchage # /usr/share/applications/patchage.desktop # /usr/share/icons/hicolor/16x16/apps/patchage.png # /usr/share/icons/hicolor/22x22/apps/patchage.png # /usr/share/icons/hicolor/24x24/apps/patchage.png # /usr/share/icons/hicolor/32x32/apps/patchage.png # /usr/share/icons/hicolor/48x48/apps/patchage.png # /usr/share/icons/hicolor/scalable/apps/patchage.svg # /usr/share/patchage/patchage.glade # # icon cache is updated using: # gtk-update-icon-cache -f -t $(datadir)/icons/hicolor icon_sizes = ['16x16', '22x22', '24x24', '32x32', '48x48'] for s in icon_sizes: bld.install_as( os.path.join(bld.env['DATADIR'], 'icons', 'hicolor', s, 'apps', bld.env['APP_INSTALL_NAME'] + '.png'), 'icons/' + s + '/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'))