2 from waflib.extras import autowaf as autowaf
3 from waflib import Options, TaskGen
4 import waflib.Logs as Logs, waflib.Utils as Utils
10 from waflib.Task import Task
11 from waflib.Tools import winres
20 from waflib import TaskGen
21 @TaskGen.extension('.m')
22 def m_hook(self, node):
23 """Alias .m files to be compiled the same as .c files, gcc will do the right thing."""
24 return self.create_compiled_task('c', node)
26 path_prefix = 'gtk2_ardour/'
28 gtk2_ardour_sources = [
31 'add_route_dialog.cc',
32 'ambiguous_file_dialog.cc',
38 'ardour_ui_dependents.cc',
39 'ardour_ui_dialogs.cc',
42 'ardour_ui_options.cc',
45 'audio_region_editor.cc',
46 'audio_region_view.cc',
47 'audio_streamview.cc',
49 'automation_controller.cc',
51 'automation_region_view.cc',
52 'automation_streamview.cc',
53 'automation_time_axis.cc',
55 'big_clock_window.cc',
58 'color_theme_manager.cc',
61 'control_point_dialog.cc',
62 'control_slave_ui.cc',
66 'duplicate_routes_dialog.cc',
67 'edit_note_dialog.cc',
71 'editor_audio_import.cc',
72 'editor_pt_import.cc',
73 'editor_audiotrack.cc',
75 'editor_canvas_events.cc',
76 'editor_component.cc',
79 'editor_route_groups.cc',
80 'editor_export_audio.cc',
81 'editor_group_tabs.cc',
83 'editor_locations.cc',
91 'editor_selection.cc',
92 'editor_snapshots.cc',
94 'editor_tempodisplay.cc',
98 'export_channel_selector.cc',
100 'export_file_notebook.cc',
101 'export_filename_selector.cc',
102 'export_format_dialog.cc',
103 'export_format_selector.cc',
104 'export_preset_selector.cc',
106 'export_timespan_selector.cc',
110 'floating_text_entry.cc',
111 'sfdb_freesound_mootcher.cc',
113 'generic_pluginui.cc',
115 'global_port_matrix.cc',
117 'gtk_pianokeyboard.c',
120 'insert_remove_time_dialog.cc',
121 'instrument_selector.cc',
122 'interthread_progress_window.cc',
131 'lua_script_manager.cc',
138 'midi_automation_line.cc',
139 'midi_channel_dialog.cc',
140 'midi_channel_selector.cc',
141 'midi_cut_buffer.cc',
142 'midi_export_dialog.cc',
143 'midi_list_editor.cc',
144 'midi_region_view.cc',
147 'midi_streamview.cc',
150 'midi_velocity_dialog.cc',
152 'missing_file_dialog.cc',
153 'missing_plugin_dialog.cc',
154 'mixer_group_tabs.cc',
160 'monitor_section.cc',
161 'monitor_selector.cc',
163 'mono_panner_editor.cc',
166 'new_plugin_preset_dialog.cc',
167 'normalize_dialog.cc',
171 'note_select_dialog.cc',
178 'panner_interface.cc',
181 'patch_change_widget.cc',
182 'piano_roll_header.cc',
184 'playlist_selector.cc',
187 'plugin_pin_dialog.cc',
188 'plugin_setup_dialog.cc',
189 'plugin_selector.cc',
194 'port_matrix_body.cc',
195 'port_matrix_column_labels.cc',
196 'port_matrix_component.cc',
197 'port_matrix_grid.cc',
198 'port_matrix_labels.cc',
199 'port_matrix_row_labels.cc',
201 'processor_selection.cc',
202 'patch_change_dialog.cc',
203 'progress_reporter.cc',
205 'quantize_dialog.cc',
206 'rc_option_editor.cc',
208 'region_gain_line.cc',
209 'region_layering_order_editor.cc',
210 'region_selection.cc',
214 'route_group_dialog.cc',
215 'route_group_menu.cc',
216 'route_params_ui.cc',
217 'route_processor_selection.cc',
218 'route_time_axis.cc',
222 'save_template_dialog.cc',
223 'search_path_option.cc',
224 'script_selector.cc',
226 'selection_memento.cc',
228 'session_archive_dialog.cc',
230 'session_import_dialog.cc',
231 'session_metadata_dialog.cc',
232 'session_option_editor.cc',
234 'shuttle_control.cc',
235 'soundcloud_export_selector.cc',
242 'stereo_panner_editor.cc',
244 'strip_silence_dialog.cc',
245 'stripable_colorpicker.cc',
246 'stripable_time_axis.cc',
248 'tape_region_view.cc',
249 'template_dialog.cc',
254 'time_axis_view_item.cc',
259 'track_selection.cc',
260 'track_view_list.cc',
261 'transform_dialog.cc',
262 'transpose_dialog.cc',
265 'vca_master_strip.cc',
267 'visibility_group.cc',
269 # video-timeline related sources:
270 'video_image_frame.cc',
271 'add_video_dialog.cc',
272 'editor_videotimeline.cc',
276 'transcode_ffmpeg.cc',
277 'transcode_video_dialog.cc',
278 'video_server_dialog.cc',
280 'export_video_dialog.cc',
281 'export_video_infobox.cc',
282 'video_tool_paths.cc'
285 def enoify (major, minor):
286 # Code names based on
287 # https://en.wikipedia.org/wiki/Brian_Eno_discography
289 # sort Studio albums + Collaborative albums + Compilation albums by Month/Year.
290 # (no Singles, no EPs, no Video Albums, no Production)
292 return "\\n\\\"E-No\\\""
295 return "\\n\\\"No Pussyfooting\\\""
297 return "\\n\\\"Here Come the Warm Jets\\\""
299 return "\\n\\\"Taking Tiger Mountain\\\""
301 return "\\n\\\"Lady June's Linguistic Leprosy\\\""
303 return "\\n\\\"Discreet Music\\\""
305 return "\\n\\\"Another Green World\\\""
307 return "\\n\\\"Evening Star\\\""
309 return "\\n\\\"Cluster and Eno\\\""
312 return "\\n\\\"Before and After Science\\\""
314 return "\\n\\\"After the Heat\\\""
316 return "\\n\\\"Music for Airports\\\""
318 return "\\n\\\"Music for Films\\\""
320 return "\\n\\\"In a Land of Clear Colours\\\""
322 return "\\n\\\"The Plateaux of Mirror\\\""
324 return "\\n\\\"Possible Musics\\\"" # 1980 Collaborative
326 return "\\n\\\"My Life in the Bush of Ghosts\\\"" # 1981
328 return "\\n\\\"Music for Airplay\\\"" # 1981 Compilation
330 return "\\n\\\"On Land\\\"" # 1982
331 elif minor == 10: # 6.0 ??
332 return "\\n\\\"Atmospheres and Soundtracks\\\"" # 1983
334 return "\\n\\\"More Music for Films\\\"" # 1983
336 return "\\n\\\"Working Backwards\\\"" # 1984 Compilation
338 return "\\n\\\"The Pearl\\\"" # 1984 Collaborative
340 return "\\n\\\"Begegnungen\\\"" # 1984 Compilation
344 autowaf.set_options(opt)
348 conf.load('compiler_cxx')
349 autowaf.configure(conf)
351 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
353 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
355 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
356 atleast_version='3.3.5', mandatory=False)
357 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
358 atleast_version='1.2.1')
359 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
360 atleast_version='2.10.1')
361 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
362 atleast_version='2.18')
363 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
364 atleast_version='2.18')
365 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
366 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
367 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
368 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
371 if sys.platform == 'darwin':
372 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
373 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
374 env = conf.env.derive (),
377 compile_filename='test.m',
382 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
383 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
385 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
387 conf.write_config_header('gtk2ardour-config.h', remove=False)
389 bak = conf.env['define_key']
390 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
391 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
392 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
393 conf.write_config_header('gtk2ardour-version.h')
394 conf.env['define_key'] = bak;
397 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
398 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
400 # Add a waf `feature' to allow compilation of things using winegcc
401 from waflib.TaskGen import feature
403 def set_winegcc(self):
404 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
405 self.env.CC = 'winegcc'
407 def _doPyp(infileName, deps = False):
410 re_spaces = re.compile("\s+")
412 if infileName == '-':
415 fd = open(infileName)
416 inLines = fd.readlines()
422 bits = re_spaces.split(line)
423 if bits[0] == '##include':
428 # assume included file comes from same place as source file
429 incName = os.path.join (os.path.dirname (infileName), incName);
430 outStr += _doPyp(incName)
441 def include_processor(task):
442 infileName = task.inputs[0].srcpath()
443 outfileName = os.path.join(out, task.outputs[0].bldpath())
444 fdOut = open (outfileName, "w")
445 fdOut.write (_doPyp(infileName))
449 def build_color_scheme(path, prefix):
453 if re.search ('^#@color', line):
454 line.strip() # remove newline
456 if len(color_scheme):
458 color_scheme += prefix
460 color_scheme += words[1]
462 color_scheme += words[2]
468 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
469 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
471 # Tool to dump lua-bindings (of gtk2ardour + libs)
472 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
473 obj = bld (features = 'cxx c cxxprogram')
474 obj.install_path = None
475 obj.source = list(gtk2_ardour_sources)
476 obj.target = 'luadoc'
477 obj.includes = ['.', '../libs']
478 obj.ldflags = ['-no-undefined']
493 'PACKAGE="' + I18N_PACKAGE + '"',
494 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
495 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
496 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
499 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
500 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
501 if bld.is_defined('HAVE_SUIL'):
502 obj.source += [ 'lv2_plugin_ui.cc' ]
503 obj.use += [ 'SUIL' ]
504 if bld.is_defined('LXVST_SUPPORT'):
505 obj.source += [ 'vst_plugin_ui.cc' ]
506 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
507 obj.defines += [ 'LXVST_SUPPORT' ]
510 # # Tool to test libcanvas
511 # if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
512 # obj = bld (features = 'cxx c cxxprogram')
513 # obj.install_path = None
514 # obj.source = list(gtk2_ardour_sources)
515 # obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
516 # obj.target = 'canvas_test'
517 # obj.includes = ['.', '../libs']
518 # obj.ldflags = ['-no-undefined']
531 # 'PACKAGE="' + I18N_PACKAGE + '"',
532 # 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
533 # 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
534 # 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
537 # obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
538 # # obj.source += [ 'canvas_test.cc', ]
539 # obj.source += [ 'toolbar_test.cc', 'enums.cc']
542 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
543 # Windows VST support w/wine
544 # If we require VST support we build a stub main() and the FST library
545 # here using winegcc, and link it to the GTK front-end library
546 obj = bld (features = 'cxx c cxxprogram wine')
547 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
549 # XXX do we really need to explicitly link to all of these for the wine executable?
551 obj.use = [ 'libpbd',
564 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
565 obj.includes = [ '../libs/fst', '.' ]
566 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
567 obj.linkflags += bld.env['LDFLAGS']
568 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
569 obj.install_path = bld.env['DLLDIR']
570 # end of the wine executable
572 # now the shared library containing the GTK GUI for ardour
573 obj = bld (features = 'cxx c cxxshlib')
574 # operate on copy to avoid adding sources twice
575 obj.source = list(gtk2_ardour_sources)
576 obj.includes = [ '../libs/fst', '.' ]
577 obj.name = 'libgtk2_ardour'
578 obj.target = 'gtk2_ardour'
579 obj.cflags = [ '-fPIC' ]
582 # just the normal executable version of the GTK GUI
583 if bld.env['build_target'] == 'mingw':
584 obj = bld (features = 'cxx c cxxprogram winres')
586 obj = bld (features = 'cxx c cxxprogram')
587 # operate on copy to avoid adding sources twice
588 obj.source = list(gtk2_ardour_sources)
589 obj.target = 'ardour-' + str (bld.env['VERSION'])
591 obj.ldflags = ['-no-undefined']
593 if bld.is_defined('WINDOWS_VST_SUPPORT'):
594 # Windows VST support mingw
595 obj.includes += [ '../libs/fst' ]
597 # at this point, "obj" refers to either the normal native executable
598 # OR the shared library built for use with wine on linux.
600 obj.use = [ 'libpbd',
613 'PACKAGE="' + I18N_PACKAGE + '"',
614 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
615 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
616 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
618 obj.install_path = bld.env['DLLDIR']
620 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
622 if sys.platform == 'darwin':
623 obj.uselib += ' AUDIOUNITS OSX '
624 obj.use += ' libappleutility'
625 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
626 elif bld.env['build_target'] == 'mingw':
627 obj.source += [ 'bundle_env_mingw.cc' ]
628 obj.source += [ 'windows_icon.rc' ]
630 obj.source += [ 'bundle_env_linux.cc' ]
632 obj.includes += ['../libs']
634 obj.use += 'libptformat'
636 if bld.env['build_target'] == 'mingw':
637 obj.linkflags += ' -mwindows'
638 obj.use += [ 'PANGOFT2' ]
640 if bld.is_defined('HAVE_SUIL'):
641 obj.source += [ 'lv2_plugin_ui.cc' ]
642 obj.use += [ 'SUIL' ]
644 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
645 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
647 if bld.is_defined('NEED_INTL'):
648 obj.linkflags += ' -lintl'
650 if bld.is_defined('WINDOWS_VST_SUPPORT'):
651 obj.source += [ 'windows_vst_plugin_ui.cc' ]
652 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
653 if bld.env['build_target'] != 'mingw':
656 if bld.is_defined('LXVST_SUPPORT'):
657 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
658 obj.defines += [ 'LXVST_SUPPORT' ]
661 if bld.is_defined('MACVST_SUPPORT'):
662 obj.source += [ 'mac_vst_plugin_ui.mm' ]
663 obj.defines += [ 'MACVST_SUPPORT' ]
665 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
666 obj.source += [ 'vst_plugin_ui.cc' ]
668 if bld.is_defined('PHONE_HOME'):
669 obj.defines += [ 'PHONE_HOME' ]
671 if bld.is_defined('HAVE_COREAUDIO'):
672 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
673 obj.use += ' libappleutility '
675 if bld.is_defined('AUDIOUNIT_SUPPORT'):
676 obj.source += [ 'au_pluginui.mm' ]
680 wrapper_subst_dict = {
681 'INSTALL_PREFIX' : bld.env['PREFIX'],
682 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
683 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
684 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
685 'LIBS' : 'build/libs',
686 'VERSION' : str (bld.env['VERSION']),
687 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
690 def set_subst_dict(obj, dict):
692 setattr(obj, i, dict[i])
694 obj = bld(features = 'subst')
695 obj.source = 'ardev_common.sh.in'
696 obj.target = 'ardev_common_waf.sh'
697 obj.chmod = Utils.O755
698 obj.dict = wrapper_subst_dict
699 set_subst_dict(obj, wrapper_subst_dict)
701 obj = bld(features = 'subst')
702 obj.source = 'ardour.sh.in'
703 obj.target = 'ardour' + str (bld.env['MAJOR'])
704 obj.chmod = Utils.O755
705 obj.dict = wrapper_subst_dict
706 obj.install_path = bld.env['BINDIR']
707 set_subst_dict(obj, wrapper_subst_dict)
709 if bld.is_defined('WINDOWS_VST_SUPPORT'):
710 obj = bld(features = 'subst')
711 obj.source = '../vst/ardourvst.in'
712 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
713 obj.chmod = Utils.O755
714 obj.dict = wrapper_subst_dict
715 obj.install_path = bld.env['BINDIR']
716 set_subst_dict(obj, wrapper_subst_dict)
725 if sys.platform == 'darwin':
738 if bld.env['build_target'] in ['panther', 'tiger', 'leopard'] or (Options.options.ppc and bld.env['build_target'] == 'snowleopard'):
739 # CTFontManagerRegisterFontsForURL for ArdourMono is 10.6 or newer
740 # "Lucida Grande" is not mono-spaced, but works for most cases, except big-clock-window
742 'MONOSPACE' : 'Monaco',
743 'CLOCKFONT' : 'Lucida Grande',
747 'MONOSPACE' : 'Monaco',
748 'CLOCKFONT' : 'ArdourMono',
750 else: # Linux/X11 & Windows fonts
751 basefont = '' # unspecified - use system defaults
764 'MONOSPACE' : 'ArdourMono',
765 'CLOCKFONT' : 'ArdourMono',
768 # Set up font substitution dictionary
770 for style in ['', 'BOLD', 'ITALIC']:
771 for sizename,points in iter(font_sizes.items()):
773 key = "_".join (['FONT',style,sizename])
774 fontstyle = " ".join ([basefont,style.lower(),points])
776 key = "_".join (['FONT',sizename])
777 fontstyle = " ".join ([basefont,points])
779 font_subst_dict[key] = fontstyle
782 for sizename,points in iter(font_sizes.items()):
783 key = "_".join (['FONT_SIZE',sizename])
784 font_subst_dict[key] = points
786 # various font names, eg @BOLD_MONOSPACE@
787 for font_sym,text in iter(font_names.items()):
789 font_subst_dict[key] = text
793 obj = bld(features = 'subst')
794 obj.source = [ 'clearlooks.rc.in' ]
795 obj.target = 'clearlooks.rc'
796 obj.install_path = bld.env['CONFDIR']
797 set_subst_dict(obj, font_subst_dict)
799 obj = bld(features = 'subst')
800 obj.source = [ 'default_ui_config.in' ]
801 obj.target = 'default_ui_config'
802 obj.install_path = bld.env['CONFDIR']
803 set_subst_dict(obj, font_subst_dict)
807 if sys.platform == 'darwin':
808 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
810 menus_argv = [ '-E', '-P' ]
812 if bld.is_defined('PTFORMAT'):
813 menus_argv += [ '-DPTFORMAT' ]
815 # always build all versions of the menu definitions
816 # so that we can try them out with different program builds.
817 for program in [ 'ardour', 'trx' ]:
818 obj = bld(features = 'command-output')
820 obj.command_is_external = True
822 obj.argv = menus_argv
823 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
824 obj.stdin = program + '.menus.in'
825 obj.stdout = program + '.menus'
826 bld.install_files (bld.env['CONFDIR'], program + '.menus')
829 freedesktop_subst_dict = {
830 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
831 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
832 'VERSION': str (bld.env['VERSION']),
835 if bld.env['FREEDESKTOP']:
836 obj = bld(features = 'subst')
837 obj.source = 'ardour.desktop.in'
838 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
839 obj.chmod = Utils.O644
840 obj.dict = freedesktop_subst_dict
841 set_subst_dict(obj, freedesktop_subst_dict)
843 obj = bld(features = 'subst')
844 obj.source = 'ardour-mime-info.xml'
845 obj.target = 'ardour.xml'
846 obj.chmod = Utils.O644
848 # build appdata with translations
850 appdata_i18n_xmlin(bld)
851 obj = bld(features = 'subst')
852 obj.source = 'ardour.appdata.xml.in'
853 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
854 obj.chmod = Utils.O644
855 obj.dict = freedesktop_subst_dict
856 set_subst_dict(obj, freedesktop_subst_dict)
860 # NATIVE ARDOUR BINDING FILES
861 # explicitly state the use of perl here so that it works on windows too
863 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
864 for b in [ 'ardour' ] :
866 target = b + '.keys',
867 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
870 obj.install_path = bld.env['CONFDIR']
873 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
874 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
876 # Application/Product specific resources (icon, splash)
877 pgmname = bld.env['PROGRAM_NAME']
878 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
880 if bld.env['build_target'] == 'mingw':
881 # These icons need to overwrite the files already installed in the icons
882 # directory above. Do this in the external packaging scripts for now.
883 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
884 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
886 # Default UI configuration
887 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
888 # Color Themes. Find each color file for this program only
890 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
892 # Default export stuff
893 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
896 if bld.is_defined('ENABLE_NLS'):
897 mo_files = bld.path.ant_glob('po/*.mo')
899 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
900 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
904 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
905 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
907 appdata_i18n_pot(bld)
911 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
912 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
914 appdata_i18n_pot(bld)
917 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
918 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
923 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
924 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
927 def appdata_i18n_pot(bld):
928 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
929 'ardour.appdata.pot')
930 if bld.cmd == 'i18n_pot':
931 Logs.info('Generating pot file from Ardour appdata')
932 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
933 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
934 'ardour.appdata.xml.in.in')
935 Logs.info('Updating ' + potfile)
937 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
939 print ('Error processing appdata pot file - ignored')
940 elif bld.cmd == 'clean' and os.path.exists(potfile):
941 Logs.info('Removing Ardour appdata pot file')
944 def appdata_i18n_po(bld):
945 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
946 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
948 def appdata_i18n_mo(bld):
949 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
950 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
952 def appdata_i18n_xmlin(bld):
953 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
954 'ardour.appdata.xml.in')
955 if bld.cmd == 'build':
956 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
957 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
958 'ardour.appdata.xml.in.in')
959 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
960 mo_files = glob.glob(mo_glob)
961 Logs.info('Generating ' + adxmlinfile)
962 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
963 '-j', adxmlininfile] + mo_files)
964 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
965 Logs.info('Removing ' + adxmlinfile)
966 os.remove(adxmlinfile)