X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fwscript;h=4597ecefb2b3718340d1a062590723ba995f9098;hb=004b57e9f67c6b818357759005c8e53b041dead4;hp=acdb1eba62640c8030975589d4981006e10fae20;hpb=cbb4be908a88c0f845242fd476cfbd54de23a3cc;p=ardour.git diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index acdb1eba62..4597ecefb2 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -9,13 +9,20 @@ import re import time from waflib.Task import Task from waflib.Tools import winres - -I18N_PACKAGE = 'gtk2_ardour3' +import subprocess +import glob +import copy # Mandatory variables top = '.' out = 'build' +from waflib import TaskGen +@TaskGen.extension('.m') +def m_hook(self, node): + """Alias .m files to be compiled the same as .c files, gcc will do the right thing.""" + return self.create_compiled_task('c', node) + path_prefix = 'gtk2_ardour/' gtk2_ardour_sources = [ @@ -28,7 +35,9 @@ gtk2_ardour_sources = [ 'ardour_dialog.cc', 'ardour_display.cc', 'ardour_dropdown.cc', + 'ardour_http.cc', 'ardour_knob.cc', + 'ardour_spinner.cc', 'ardour_ui.cc', 'ardour_ui2.cc', 'ardour_ui_dependents.cc', @@ -52,16 +61,21 @@ gtk2_ardour_sources = [ 'bundle_manager.cc', 'button_joiner.cc', 'clock_group.cc', + 'color_theme_manager.cc', 'configinfo.cc', 'control_point.cc', 'control_point_dialog.cc', + 'control_slave_ui.cc', + 'cursor_context.cc', 'curvetest.cc', 'debug.cc', + 'duplicate_routes_dialog.cc', 'edit_note_dialog.cc', 'editing.cc', 'editor.cc', 'editor_actions.cc', 'editor_audio_import.cc', + 'editor_pt_import.cc', 'editor_audiotrack.cc', 'editor_canvas.cc', 'editor_canvas_events.cc', @@ -94,6 +108,7 @@ gtk2_ardour_sources = [ 'export_format_dialog.cc', 'export_format_selector.cc', 'export_preset_selector.cc', + 'export_report.cc', 'export_timespan_selector.cc', 'fft.cc', 'fft_graph.cc', @@ -107,7 +122,8 @@ gtk2_ardour_sources = [ 'group_tabs.cc', 'gtk_pianokeyboard.c', 'gui_object.cc', - 'insert_time_dialog.cc', + 'insert_remove_time_dialog.cc', + 'instrument_selector.cc', 'interthread_progress_window.cc', 'io_selector.cc', 'hit.cc', @@ -117,6 +133,9 @@ gtk2_ardour_sources = [ 'led.cc', 'level_meter.cc', 'location_ui.cc', + 'lua_script_manager.cc', + 'luainstance.cc', + 'luawindow.cc', 'main.cc', 'main_clock.cc', 'marker.cc', @@ -136,7 +155,6 @@ gtk2_ardour_sources = [ 'midi_velocity_dialog.cc', 'missing_file_dialog.cc', 'missing_plugin_dialog.cc', - 'mixer_actor.cc', 'mixer_group_tabs.cc', 'mixer_strip.cc', 'mixer_ui.cc', @@ -144,6 +162,7 @@ gtk2_ardour_sources = [ 'meter_strip.cc', 'meter_patterns.cc', 'monitor_section.cc', + 'monitor_selector.cc', 'mono_panner.cc', 'mono_panner_editor.cc', 'mouse_cursors.cc', @@ -153,6 +172,7 @@ gtk2_ardour_sources = [ 'note.cc', 'note_base.cc', 'note_player.cc', + 'note_select_dialog.cc', 'nsm.cc', 'nsmclient.cc', 'option_editor.cc', @@ -166,6 +186,8 @@ gtk2_ardour_sources = [ 'pingback.cc', 'playlist_selector.cc', 'plugin_eq_gui.cc', + 'plugin_pin_dialog.cc', + 'plugin_setup_dialog.cc', 'plugin_selector.cc', 'plugin_ui.cc', 'port_group.cc', @@ -198,8 +220,11 @@ gtk2_ardour_sources = [ 'route_time_axis.cc', 'route_ui.cc', 'ruler_dialog.cc', + 'save_as_dialog.cc', 'search_path_option.cc', + 'script_selector.cc', 'selection.cc', + 'selection_memento.cc', 'send_ui.cc', 'session_dialog.cc', 'session_import_dialog.cc', @@ -219,6 +244,7 @@ gtk2_ardour_sources = [ 'strip_silence_dialog.cc', 'sys_ex.cc', 'tape_region_view.cc', + 'tempo_curve.cc', 'tempo_dialog.cc', 'tempo_lines.cc', 'theme_manager.cc', @@ -227,20 +253,23 @@ gtk2_ardour_sources = [ 'time_fx_dialog.cc', 'time_info_box.cc', 'time_selection.cc', + 'timers.cc', + 'tooltips.cc', 'track_selection.cc', 'track_view_list.cc', + 'transform_dialog.cc', 'transpose_dialog.cc', 'ui_config.cc', 'utils.cc', + 'vca_master_strip.cc', 'verbose_cursor.cc', - 'version.cc', 'visibility_group.cc', - 'volume_controller.cc', 'window_manager.cc', # video-timeline related sources: 'video_image_frame.cc', 'add_video_dialog.cc', 'editor_videotimeline.cc', + 'vca_time_axis.cc', 'video_timeline.cc', 'video_monitor.cc', 'transcode_ffmpeg.cc', @@ -248,27 +277,56 @@ gtk2_ardour_sources = [ 'video_server_dialog.cc', 'utils_videotl.cc', 'export_video_dialog.cc', - 'export_video_infobox.cc' + 'export_video_infobox.cc', + 'video_tool_paths.cc' ] +def enoify (major, minor): + # Code names based on + # https://en.wikipedia.org/wiki/Brian_Eno_discography + # + # sort Studio albums + Collaborative albums + Compilation albums by Month/Year. + # (no Singles, no EPs, no Video Albums, no Production) + if major == 3: + return "\\n\\\"E-No\\\"" + elif major == 4: + if minor == 0: + return "\\n\\\"No Pussyfooting\\\"" + elif minor == 1: + return "\\n\\\"Here Come the Warm Jets\\\"" + elif minor == 2: + return "\\n\\\"Taking Tiger Mountain\\\"" + elif minor == 3: + return "\\n\\\"Lady June's Linguistic Leprosy\\\"" + elif minor == 4: + return "\\n\\\"Discreet Music\\\"" + elif minor == 5: + return "\\n\\\"Another Green World\\\"" + elif minor == 6: + return "\\n\\\"Evening Star\\\"" + elif minor == 7: + return "\\n\\\"Cluster and Eno\\\"" + elif major == 5: + if minor == 0: + return "\\n\\\"Before and After Science\\\"" + elif minor == 1: + return "\\n\\\"After the Heat\\\"" + return "\\\"\\\"" + def options(opt): autowaf.set_options(opt) def configure(conf): conf.load('misc') conf.load('compiler_cxx') - # we don't use hard-coded micro versions with ardour, so hard code it to zero - autowaf.build_version_files( - path_prefix + 'version.h', - path_prefix + 'version.cc', - 'gtk2_ardour', conf.env['MAJOR'], conf.env['MINOR'], 0, - '', '') autowaf.configure(conf) # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F', mandatory=True) + autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F', + atleast_version='3.3.5', mandatory=False) autowaf.check_pkg(conf, 'flac', uselib_store='FLAC', atleast_version='1.2.1') autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD', @@ -281,11 +339,29 @@ def configure(conf): autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False) autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG') + + if sys.platform == 'darwin': + retval = conf.run_c_code (code='#include \n\ + int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n', + env = conf.env.derive (), + features = [ 'c' ], + compiler = 'cc', + compile_filename='test.m', + mandatory = False, + ) + + if retval == 0: + autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok') + conf.define ('HAVE_COCOA_LIVE_RESIZING', 1) + else: + autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size') + conf.write_config_header('gtk2ardour-config.h', remove=False) bak = conf.env['define_key'] conf.define('VERSIONSTRING', str (conf.env['VERSION'])) - conf.env['define_key'] = ['VERSIONSTRING'] + conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR']))) + conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ] conf.write_config_header('gtk2ardour-version.h') conf.env['define_key'] = bak; @@ -312,7 +388,7 @@ def _doPyp(infileName, deps = False): inLines = fd.readlines() if fd != sys.stdin: fd.close() - + for line in inLines: bits = re_spaces.split(line) @@ -362,16 +438,52 @@ def build_color_scheme(path, prefix): def build(bld): VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR']) + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + + # Tool to dump lua-bindings (of gtk2ardour + libs) + if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']: + obj = bld (features = 'cxx c cxxprogram') + obj.install_path = None + obj.source = list(gtk2_ardour_sources) + obj.target = 'luadoc' + obj.includes = ['.', '../libs'] + obj.ldflags = ['-no-undefined'] + obj.use = [ + 'libpbd', + 'libardour', + 'libardour_cp', + 'libtimecode', + 'libmidipp', + 'libgtkmm2ext', + 'libcanvas', + 'libptformat', + ] + obj.defines = [ + 'NOMAIN', + 'PACKAGE="' + I18N_PACKAGE + '"', + 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"', + 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"', + 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"', + ] + obj.linkflags = '' + obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML ' + obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ] + if bld.is_defined('HAVE_SUIL'): + obj.source += [ 'lv2_plugin_ui.cc' ] + obj.use += [ 'SUIL' ] + if bld.is_defined('LXVST_SUPPORT'): + obj.source += [ 'vst_plugin_ui.cc' ] + obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ] + obj.defines += [ 'LXVST_SUPPORT' ] + obj.use += [ 'X11' ] + if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw': # Windows VST support w/wine # If we require VST support we build a stub main() and the FST library # here using winegcc, and link it to the GTK front-end library obj = bld (features = 'cxx c cxxprogram wine') - obj.source = ( - '../libs/fst/vstwin.c', - '../vst/winmain.c', - ) + obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' ) # # XXX do we really need to explicitly link to all of these for the wine executable? # @@ -383,28 +495,34 @@ def build(bld): 'libmidipp', 'libgtk2_ardour', 'libgtkmm2ext', - 'libcanvas' + 'libcanvas', + 'libptformat', ] obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so' obj.includes = [ '../libs/fst', '.' ] obj.linkflags = ['-mwindows', '-Wl,--export-dynamic'] + obj.linkflags += bld.env['LDFLAGS'] obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX'] obj.install_path = bld.env['DLLDIR'] # end of the wine executable # now the shared library containing the GTK GUI for ardour obj = bld (features = 'cxx c cxxshlib') - obj.source = gtk2_ardour_sources + # operate on copy to avoid adding sources twice + obj.source = list(gtk2_ardour_sources) obj.includes = [ '../libs/fst', '.' ] obj.name = 'libgtk2_ardour' obj.target = 'gtk2_ardour' + obj.cflags = [ '-fPIC' ] + else: # just the normal executable version of the GTK GUI if bld.env['build_target'] == 'mingw': obj = bld (features = 'cxx c cxxprogram winres') else: obj = bld (features = 'cxx c cxxprogram') - obj.source = gtk2_ardour_sources + # operate on copy to avoid adding sources twice + obj.source = list(gtk2_ardour_sources) obj.target = 'ardour-' + str (bld.env['VERSION']) obj.includes = ['.'] obj.ldflags = ['-no-undefined'] @@ -423,22 +541,21 @@ def build(bld): 'libmidipp', 'libgtkmm2ext', 'libcanvas', + 'libptformat', ] obj.defines = [ 'PACKAGE="' + I18N_PACKAGE + '"', 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"', 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"', - 'LOCALEDIR="' + os.path.join(os.path.normpath(bld.env['DATADIR']), 'locale') + '"', + 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"', ] obj.install_path = bld.env['DLLDIR'] - obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL' - obj.uselib += ' GTKMM CANVAS FFTW3F' - obj.uselib += ' AUDIOUNITS OSX GTKOSX LO ' - obj.uselib += ' TAGLIB ' + obj.linkflags = '' + obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML ' if sys.platform == 'darwin': - obj.uselib += ' AUDIOUNITS OSX GTKOSX' + obj.uselib += ' AUDIOUNITS OSX ' obj.use += ' libappleutility' obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ] elif bld.env['build_target'] == 'mingw': @@ -449,23 +566,27 @@ def build(bld): obj.includes += ['../libs'] + obj.use += 'libptformat' + if bld.env['build_target'] == 'mingw': - if bld.env['DEBUG'] == False: - obj.linkflags = ['-mwindows'] + obj.linkflags += ' -mwindows' if bld.is_defined('HAVE_SUIL'): obj.source += [ 'lv2_plugin_ui.cc' ] obj.use += [ 'SUIL' ] + if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw': + bld.env['LIB_FFTW3F'] += ['fftw3f_threads'] + if bld.is_defined('NEED_INTL'): - obj.linkflags = ' -lintl' + obj.linkflags += ' -lintl' if bld.is_defined('WINDOWS_VST_SUPPORT'): obj.source += [ 'windows_vst_plugin_ui.cc' ] obj.defines += [ 'WINDOWS_VST_SUPPORT' ] if bld.env['build_target'] != 'mingw': obj.use += [ 'X11' ] - + if bld.is_defined('LXVST_SUPPORT'): obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ] obj.defines += [ 'LXVST_SUPPORT' ] @@ -473,7 +594,7 @@ def build(bld): if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT'): obj.source += [ 'vst_plugin_ui.cc' ] - + if bld.is_defined('PHONE_HOME'): obj.defines += [ 'PHONE_HOME' ] @@ -492,7 +613,7 @@ def build(bld): 'DATADIR' : os.path.normpath(bld.env['DATADIR']), 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']), 'LIBS' : 'build/libs', - 'VERSION' : bld.env['VERSION'], + 'VERSION' : str (bld.env['VERSION']), 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION']) } @@ -500,7 +621,7 @@ def build(bld): for i in dict: setattr(obj, i, dict[i]) - obj = bld(features = 'subst', rule= 'chmod 0755 ${TGT}') + obj = bld(features = 'subst') obj.source = 'ardev_common.sh.in' obj.target = 'ardev_common_waf.sh' obj.chmod = Utils.O755 @@ -509,7 +630,7 @@ def build(bld): obj = bld(features = 'subst') obj.source = 'ardour.sh.in' - obj.target = 'ardour3' + obj.target = 'ardour' + str (bld.env['MAJOR']) obj.chmod = Utils.O755 obj.dict = wrapper_subst_dict obj.install_path = bld.env['BINDIR'] @@ -518,7 +639,7 @@ def build(bld): if bld.is_defined('WINDOWS_VST_SUPPORT'): obj = bld(features = 'subst') obj.source = '../vst/ardourvst.in' - obj.target = 'ardourvst3' + obj.target = 'ardourvst' + str (bld.env['MAJOR']) obj.chmod = Utils.O755 obj.dict = wrapper_subst_dict obj.install_path = bld.env['BINDIR'] @@ -526,14 +647,12 @@ def build(bld): # Font configuration - dark_rc_subst_dict = {} - light_rc_subst_dict = {} - ui_conf_dict = {} + font_subst_dict = {} font_sizes = {} base_font = "" # Set up font sizes - if bld.is_defined('GTKOSX'): # OS X fonts + if sys.platform == 'darwin': basefont = "" font_sizes = { 'SMALLER' : '9', @@ -546,9 +665,9 @@ def build(bld): 'HUGER' : '36', 'MASSIVE' : '60', } - + # There is no acceptable monospace font available on older versions of OS X - # and no API on those versions to load TTF files that will work with + # and no API on those versions to load TTF files that will work with # GTK/fontconfig/pango. # # In addition, the ArdourMono font gets clipped for some reason on OS X @@ -557,23 +676,25 @@ def build(bld): # so just use it. # font_names = { - 'MONOSPACE' : 'Lucida Grande', + 'MONOSPACE' : 'Monaco', + 'CLOCKFONT' : 'Lucida Grande', } else: # Linux/X11 fonts basefont = '' # unspecified - use system defaults font_sizes = { - 'SMALLER' : '8', - 'SMALL' : '9', - 'NORMAL' : '10', - 'BIG' : '14', - 'BIGGER' : '17', - 'LARGE' : '18', - 'LARGER' : '24', - 'HUGER' : '34', - 'MASSIVE' : '60', + 'SMALLER' : '6', + 'SMALL' : '7', + 'NORMAL' : '8', + 'BIG' : '11', + 'BIGGER' : '13.5', + 'LARGE' : '14.5', + 'LARGER' : '19', + 'HUGER' : '27', + 'MASSIVE' : '48', } font_names = { 'MONOSPACE' : 'ArdourMono', + 'CLOCKFONT' : 'ArdourMono', } # Set up font substitution dictionary @@ -587,100 +708,42 @@ def build(bld): key = "_".join (['FONT',sizename]) fontstyle = " ".join ([basefont,points]) - dark_rc_subst_dict[key] = fontstyle - light_rc_subst_dict[key] = fontstyle - ui_conf_dict[key] = points - + font_subst_dict[key] = fontstyle + # @FONT_SIZE_XXXX@ for sizename,points in iter(font_sizes.items()): key = "_".join (['FONT_SIZE',sizename]) - dark_rc_subst_dict[key] = points - light_rc_subst_dict[key] = points - ui_conf_dict[key] = points + font_subst_dict[key] = points # various font names, eg @BOLD_MONOSPACE@ for font_sym,text in iter(font_names.items()): key = font_sym - dark_rc_subst_dict[key] = text - light_rc_subst_dict[key] = text - ui_conf_dict[key] = text - - # RC files - dark_rc_subst_dict['COLOR_SCHEME'] = build_color_scheme( - 'gtk2_ardour/ui_dark.rc.in', 'ARDOUR_DARK') - dark_rc_subst_dict['COLPREFIX'] = 'ARDOUR_DARK' - light_rc_subst_dict['COLOR_SCHEME'] = build_color_scheme( - 'gtk2_ardour/ui_light.rc.in', 'ARDOUR_LIGHT') - light_rc_subst_dict['COLPREFIX'] = 'ARDOUR_LIGHT' + font_subst_dict[key] = text - obj = bld(features = 'subst') - obj.source = [ 'ui_dark.rc.in' ] - obj.target = 'ui_dark.rc.pre' - obj.install_path = None - set_subst_dict(obj, dark_rc_subst_dict) - - obj = bld(features = 'subst') - obj.source = [ 'ui_light.rc.in' ] - obj.target = 'ui_light.rc.pre' - obj.install_path = None - set_subst_dict(obj, light_rc_subst_dict) - - obj = bld(features = 'subst') - obj.source = [ 'styles.rc.in' ] - obj.target = 'dark_styles.rc' - obj.install_path = None - set_subst_dict(obj, dark_rc_subst_dict) - - obj = bld(features = 'subst') - obj.source = [ 'styles.rc.in' ] - obj.target = 'light_styles.rc' - obj.install_path = None - set_subst_dict(obj, light_rc_subst_dict) + # RC file obj = bld(features = 'subst') - obj.source = [ 'fonts.rc.in' ] - obj.target = 'dark_fonts.rc' - obj.install_path = None - set_subst_dict(obj, dark_rc_subst_dict) - - obj = bld(features = 'subst') - obj.source = [ 'fonts.rc.in' ] - obj.target = 'light_fonts.rc' - obj.install_path = None - set_subst_dict(obj, light_rc_subst_dict) - - obj = bld(rule = autowaf.copyfile) - obj.source = [ 'widget_list.rc' ] - obj.target = 'widgets.rc' - obj.install_path = None - - obj = bld (rule = include_processor) - obj.source = [ 'ui_dark.rc.pre' ] - # find and add all ##include dependencies as sources - obj.source += _doPyp (bld.path.find_resource ('ui_dark.rc.in').srcpath(), True) - obj.target = 'ui_dark.rc' - obj.install_path = bld.env['CONFDIR'] - - obj = bld (rule = include_processor) - obj.source = [ 'ui_light.rc.pre' ] - # find and add all ##include dependencies as sources - obj.source += _doPyp (bld.path.find_resource ('ui_light.rc.in').srcpath(), True) - obj.target = 'ui_light.rc' + obj.source = [ 'clearlooks.rc.in' ] + obj.target = 'clearlooks.rc' obj.install_path = bld.env['CONFDIR'] + set_subst_dict(obj, font_subst_dict) obj = bld(features = 'subst') obj.source = [ 'default_ui_config.in' ] obj.target = 'default_ui_config' - obj.install_path = None - set_subst_dict(obj, ui_conf_dict) + obj.install_path = bld.env['CONFDIR'] + set_subst_dict(obj, font_subst_dict) # Menus menus_argv = [] - if bld.is_defined('GTKOSX'): - menus_argv = [ '-E', '-P', '-DGTKOSX' ] + if sys.platform == 'darwin': + menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ] else: menus_argv = [ '-E', '-P' ] + if bld.is_defined('PTFORMAT'): + menus_argv += [ '-DPTFORMAT' ] + # always build all versions of the menu definitions # so that we can try them out with different program builds. for program in [ 'ardour', 'trx' ]: @@ -689,66 +752,146 @@ def build(bld): obj.command_is_external = True obj.no_inputs = True obj.argv = menus_argv - obj.dep_vars = ['GTKOSX'] + obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS'] obj.stdin = program + '.menus.in' obj.stdout = program + '.menus' bld.install_files (bld.env['CONFDIR'], program + '.menus') - # Keybindings + # Freedesktop + freedesktop_subst_dict = { + 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']), + 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']), + 'VERSION': str (bld.env['VERSION']), + } - # 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', - # 'SAE-us-nokeypad', 'ergonomic-us' + if bld.env['FREEDESKTOP']: + obj = bld(features = 'subst') + obj.source = 'ardour.desktop.in' + obj.target = str (bld.env['lwrcase_dirname']) + '.desktop' + obj.chmod = Utils.O644 + obj.dict = freedesktop_subst_dict + set_subst_dict(obj, freedesktop_subst_dict) - # + obj = bld(features = 'subst') + obj.source = 'ardour-mime-info.xml' + obj.target = 'ardour.xml' + obj.chmod = Utils.O644 + + # build appdata with translations + appdata_i18n_mo(bld) + appdata_i18n_xmlin(bld) + obj = bld(features = 'subst') + obj.source = 'ardour.appdata.xml.in' + obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml' + obj.chmod = Utils.O644 + obj.dict = freedesktop_subst_dict + set_subst_dict(obj, freedesktop_subst_dict) + + # Keybindings + + # NATIVE ARDOUR BINDING FILES # explicitly state the use of perl here so that it works on windows too # - a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap <${SRC} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] ) - for b in [ 'mnemonic-us' ] : + a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] ) + for b in [ 'ardour' ] : obj = bld( - target = b + '.bindings', - source = b + '.bindings.in', + target = b + '.keys', + source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ], rule = a_rule ) obj.install_path = bld.env['CONFDIR'] - - # not modified at present - bld.install_files(bld.env['CONFDIR'], 'step_editing.bindings') - bld.install_files(bld.env['CONFDIR'], 'mixer.bindings') - + # Icons/Images bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png')) - bld.install_files(os.path.join (bld.env['DATADIR'], 'pixmaps'), bld.path.ant_glob('pixmaps/*.xpm')) - bld.install_files(bld.env['DATADIR'], 'splash.png') - bld.install_files(bld.env['DATADIR'], 'small-splash.png') bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf') + # Application/Product specific resources (icon, splash) + pgmname = Options.options.program_name; + bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*')) + + if bld.env['build_target'] == 'mingw': + # These icons need to overwrite the files already installed in the icons + # directory above. Do this in the external packaging scripts for now. + #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png')) + bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots') + # Default UI configuration bld.install_files(bld.env['CONFDIR'], 'default_ui_config') + # Color Themes. Find each color file for this program, strip the program name + # and install. + for color_file in bld.path.ant_glob ('themes/*-' + Options.options.program_name.lower() + '.colors'): + shortname = os.path.basename (color_file.srcpath().replace ("-" + Options.options.program_name.lower(), "")) + bld.install_as (os.path.join(bld.env['DATADIR'], 'themes', shortname), color_file) # Default export stuff - bld.install_files(os.path.join(bld.env['CONFDIR'],' export'), bld.path.ant_glob('export/*.format')) + bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format')) # i18n if bld.is_defined('ENABLE_NLS'): mo_files = bld.path.ant_glob('po/*.mo') for mo in mo_files: lang = os.path.basename(mo.srcpath()).replace('.mo', '') - bld.install_as(os.path.join(bld.env['PREFIX'], 'share', 'locale', - lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'), - mo) + bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'), + mo) def i18n(bld): - autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + appdata_i18n_pot(bld) + appdata_i18n_po(bld) def i18n_pot(bld): - autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + appdata_i18n_pot(bld) def i18n_po(bld): - autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + appdata_i18n_po(bld) def i18n_mo(bld): - autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, - 'Paul Davis') + I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR'] + autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources, + 'Paul Davis') + +def appdata_i18n_pot(bld): + potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', + 'ardour.appdata.pot') + if bld.cmd == 'i18n_pot': + Logs.info('Generating pot file from Ardour appdata') + itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its') + adsource = os.path.join(bld.top_dir, 'gtk2_ardour', + 'ardour.appdata.xml.in.in') + Logs.info('Updating ' + potfile) + subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource)) + elif bld.cmd == 'clean' and os.path.exists(potfile): + Logs.info('Removing Ardour appdata pot file') + os.remove(potfile) + +def appdata_i18n_po(bld): + autowaf.build_i18n_po(bld, bld.top_dir, os.path.join( + 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy') + +def appdata_i18n_mo(bld): + autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join( + 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy') + +def appdata_i18n_xmlin(bld): + adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour', + 'ardour.appdata.xml.in') + if bld.cmd == 'build': + itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its') + adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour', + 'ardour.appdata.xml.in.in') + mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo') + mo_files = glob.glob(mo_glob) + Logs.info('Generating ' + adxmlinfile) + subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile, + '-j', adxmlininfile] + mo_files) + elif bld.cmd == 'clean' and os.path.exists(adxmlinfile): + Logs.info('Removing ' + adxmlinfile) + os.remove(adxmlinfile)