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 'piano_roll_header.cc',
183 'playlist_selector.cc',
186 'plugin_pin_dialog.cc',
187 'plugin_setup_dialog.cc',
188 'plugin_selector.cc',
193 'port_matrix_body.cc',
194 'port_matrix_column_labels.cc',
195 'port_matrix_component.cc',
196 'port_matrix_grid.cc',
197 'port_matrix_labels.cc',
198 'port_matrix_row_labels.cc',
200 'processor_selection.cc',
201 'patch_change_dialog.cc',
202 'progress_reporter.cc',
204 'quantize_dialog.cc',
205 'rc_option_editor.cc',
207 'region_gain_line.cc',
208 'region_layering_order_editor.cc',
209 'region_selection.cc',
213 'route_group_dialog.cc',
214 'route_group_menu.cc',
215 'route_params_ui.cc',
216 'route_processor_selection.cc',
217 'route_time_axis.cc',
221 'save_template_dialog.cc',
222 'search_path_option.cc',
223 'script_selector.cc',
225 'selection_memento.cc',
227 'session_archive_dialog.cc',
229 'session_import_dialog.cc',
230 'session_metadata_dialog.cc',
231 'session_option_editor.cc',
233 'shuttle_control.cc',
234 'soundcloud_export_selector.cc',
241 'stereo_panner_editor.cc',
243 'strip_silence_dialog.cc',
244 'stripable_colorpicker.cc',
245 'stripable_time_axis.cc',
247 'tape_region_view.cc',
248 'template_dialog.cc',
253 'time_axis_view_item.cc',
258 'track_selection.cc',
259 'track_view_list.cc',
260 'transform_dialog.cc',
261 'transpose_dialog.cc',
264 'vca_master_strip.cc',
266 'visibility_group.cc',
268 # video-timeline related sources:
269 'video_image_frame.cc',
270 'add_video_dialog.cc',
271 'editor_videotimeline.cc',
275 'transcode_ffmpeg.cc',
276 'transcode_video_dialog.cc',
277 'video_server_dialog.cc',
279 'export_video_dialog.cc',
280 'export_video_infobox.cc',
281 'video_tool_paths.cc'
284 def enoify (major, minor):
285 # Code names based on
286 # https://en.wikipedia.org/wiki/Brian_Eno_discography
288 # sort Studio albums + Collaborative albums + Compilation albums by Month/Year.
289 # (no Singles, no EPs, no Video Albums, no Production)
291 return "\\n\\\"E-No\\\""
294 return "\\n\\\"No Pussyfooting\\\""
296 return "\\n\\\"Here Come the Warm Jets\\\""
298 return "\\n\\\"Taking Tiger Mountain\\\""
300 return "\\n\\\"Lady June's Linguistic Leprosy\\\""
302 return "\\n\\\"Discreet Music\\\""
304 return "\\n\\\"Another Green World\\\""
306 return "\\n\\\"Evening Star\\\""
308 return "\\n\\\"Cluster and Eno\\\""
311 return "\\n\\\"Before and After Science\\\""
313 return "\\n\\\"After the Heat\\\""
315 return "\\n\\\"Music for Airports\\\""
317 return "\\n\\\"Music for Films\\\""
319 return "\\n\\\"In a Land of Clear Colours\\\""
321 return "\\n\\\"The Plateaux of Mirror\\\""
323 return "\\n\\\"Possible Musics\\\"" # 1980 Collaborative
325 return "\\n\\\"My Life in the Bush of Ghosts\\\"" # 1981
327 return "\\n\\\"Music for Airplay\\\"" # 1981 Compilation
329 return "\\n\\\"On Land\\\"" # 1982
330 elif minor == 10: # 6.0 ??
331 return "\\n\\\"Atmospheres and Soundtracks\\\"" # 1983
333 return "\\n\\\"More Music for Films\\\"" # 1983
335 return "\\n\\\"Working Backwards\\\"" # 1984 Compilation
337 return "\\n\\\"The Pearl\\\"" # 1984 Collaborative
339 return "\\n\\\"Begegnungen\\\"" # 1984 Compilation
343 autowaf.set_options(opt)
347 conf.load('compiler_cxx')
348 autowaf.configure(conf)
350 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
352 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
354 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
355 atleast_version='3.3.5', mandatory=False)
356 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
357 atleast_version='1.2.1')
358 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
359 atleast_version='2.10.1')
360 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
361 atleast_version='2.18')
362 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
363 atleast_version='2.18')
364 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
365 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
366 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
367 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
370 if sys.platform == 'darwin':
371 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
372 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
373 env = conf.env.derive (),
376 compile_filename='test.m',
381 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
382 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
384 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
386 conf.write_config_header('gtk2ardour-config.h', remove=False)
388 bak = conf.env['define_key']
389 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
390 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
391 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
392 conf.write_config_header('gtk2ardour-version.h')
393 conf.env['define_key'] = bak;
396 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
397 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
399 # Add a waf `feature' to allow compilation of things using winegcc
400 from waflib.TaskGen import feature
402 def set_winegcc(self):
403 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
404 self.env.CC = 'winegcc'
406 def _doPyp(infileName, deps = False):
409 re_spaces = re.compile("\s+")
411 if infileName == '-':
414 fd = open(infileName)
415 inLines = fd.readlines()
421 bits = re_spaces.split(line)
422 if bits[0] == '##include':
427 # assume included file comes from same place as source file
428 incName = os.path.join (os.path.dirname (infileName), incName);
429 outStr += _doPyp(incName)
440 def include_processor(task):
441 infileName = task.inputs[0].srcpath()
442 outfileName = os.path.join(out, task.outputs[0].bldpath())
443 fdOut = open (outfileName, "w")
444 fdOut.write (_doPyp(infileName))
448 def build_color_scheme(path, prefix):
452 if re.search ('^#@color', line):
453 line.strip() # remove newline
455 if len(color_scheme):
457 color_scheme += prefix
459 color_scheme += words[1]
461 color_scheme += words[2]
467 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
468 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
470 # Tool to dump lua-bindings (of gtk2ardour + libs)
471 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
472 obj = bld (features = 'cxx c cxxprogram')
473 obj.install_path = None
474 obj.source = list(gtk2_ardour_sources)
475 obj.target = 'luadoc'
476 obj.includes = ['.', '../libs']
477 obj.ldflags = ['-no-undefined']
492 'PACKAGE="' + I18N_PACKAGE + '"',
493 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
494 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
495 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
498 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
499 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
500 if bld.is_defined('HAVE_SUIL'):
501 obj.source += [ 'lv2_plugin_ui.cc' ]
502 obj.use += [ 'SUIL' ]
503 if bld.is_defined('LXVST_SUPPORT'):
504 obj.source += [ 'vst_plugin_ui.cc' ]
505 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
506 obj.defines += [ 'LXVST_SUPPORT' ]
509 # # Tool to test libcanvas
510 # if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
511 # obj = bld (features = 'cxx c cxxprogram')
512 # obj.install_path = None
513 # obj.source = list(gtk2_ardour_sources)
514 # obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
515 # obj.target = 'canvas_test'
516 # obj.includes = ['.', '../libs']
517 # obj.ldflags = ['-no-undefined']
530 # 'PACKAGE="' + I18N_PACKAGE + '"',
531 # 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
532 # 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
533 # 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
536 # obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
537 # # obj.source += [ 'canvas_test.cc', ]
538 # obj.source += [ 'toolbar_test.cc', 'enums.cc']
541 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
542 # Windows VST support w/wine
543 # If we require VST support we build a stub main() and the FST library
544 # here using winegcc, and link it to the GTK front-end library
545 obj = bld (features = 'cxx c cxxprogram wine')
546 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
548 # XXX do we really need to explicitly link to all of these for the wine executable?
550 obj.use = [ 'libpbd',
563 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
564 obj.includes = [ '../libs/fst', '.' ]
565 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
566 obj.linkflags += bld.env['LDFLAGS']
567 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
568 obj.install_path = bld.env['DLLDIR']
569 # end of the wine executable
571 # now the shared library containing the GTK GUI for ardour
572 obj = bld (features = 'cxx c cxxshlib')
573 # operate on copy to avoid adding sources twice
574 obj.source = list(gtk2_ardour_sources)
575 obj.includes = [ '../libs/fst', '.' ]
576 obj.name = 'libgtk2_ardour'
577 obj.target = 'gtk2_ardour'
578 obj.cflags = [ '-fPIC' ]
581 # just the normal executable version of the GTK GUI
582 if bld.env['build_target'] == 'mingw':
583 obj = bld (features = 'cxx c cxxprogram winres')
585 obj = bld (features = 'cxx c cxxprogram')
586 # operate on copy to avoid adding sources twice
587 obj.source = list(gtk2_ardour_sources)
588 obj.target = 'ardour-' + str (bld.env['VERSION'])
590 obj.ldflags = ['-no-undefined']
592 if bld.is_defined('WINDOWS_VST_SUPPORT'):
593 # Windows VST support mingw
594 obj.includes += [ '../libs/fst' ]
596 # at this point, "obj" refers to either the normal native executable
597 # OR the shared library built for use with wine on linux.
599 obj.use = [ 'libpbd',
612 'PACKAGE="' + I18N_PACKAGE + '"',
613 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
614 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
615 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
617 obj.install_path = bld.env['DLLDIR']
619 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
621 if sys.platform == 'darwin':
622 obj.uselib += ' AUDIOUNITS OSX '
623 obj.use += ' libappleutility'
624 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
625 elif bld.env['build_target'] == 'mingw':
626 obj.source += [ 'bundle_env_mingw.cc' ]
627 obj.source += [ 'windows_icon.rc' ]
629 obj.source += [ 'bundle_env_linux.cc' ]
631 obj.includes += ['../libs']
633 obj.use += 'libptformat'
635 if bld.env['build_target'] == 'mingw':
636 obj.linkflags += ' -mwindows'
637 obj.use += [ 'PANGOFT2' ]
639 if bld.is_defined('HAVE_SUIL'):
640 obj.source += [ 'lv2_plugin_ui.cc' ]
641 obj.use += [ 'SUIL' ]
643 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
644 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
646 if bld.is_defined('NEED_INTL'):
647 obj.linkflags += ' -lintl'
649 if bld.is_defined('WINDOWS_VST_SUPPORT'):
650 obj.source += [ 'windows_vst_plugin_ui.cc' ]
651 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
652 if bld.env['build_target'] != 'mingw':
655 if bld.is_defined('LXVST_SUPPORT'):
656 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
657 obj.defines += [ 'LXVST_SUPPORT' ]
660 if bld.is_defined('MACVST_SUPPORT'):
661 obj.source += [ 'mac_vst_plugin_ui.mm' ]
662 obj.defines += [ 'MACVST_SUPPORT' ]
664 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
665 obj.source += [ 'vst_plugin_ui.cc' ]
667 if bld.is_defined('PHONE_HOME'):
668 obj.defines += [ 'PHONE_HOME' ]
670 if bld.is_defined('HAVE_COREAUDIO'):
671 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
672 obj.use += ' libappleutility '
674 if bld.is_defined('AUDIOUNIT_SUPPORT'):
675 obj.source += [ 'au_pluginui.mm' ]
679 wrapper_subst_dict = {
680 'INSTALL_PREFIX' : bld.env['PREFIX'],
681 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
682 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
683 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
684 'LIBS' : 'build/libs',
685 'VERSION' : str (bld.env['VERSION']),
686 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
689 def set_subst_dict(obj, dict):
691 setattr(obj, i, dict[i])
693 obj = bld(features = 'subst')
694 obj.source = 'ardev_common.sh.in'
695 obj.target = 'ardev_common_waf.sh'
696 obj.chmod = Utils.O755
697 obj.dict = wrapper_subst_dict
698 set_subst_dict(obj, wrapper_subst_dict)
700 obj = bld(features = 'subst')
701 obj.source = 'ardour.sh.in'
702 obj.target = 'ardour' + str (bld.env['MAJOR'])
703 obj.chmod = Utils.O755
704 obj.dict = wrapper_subst_dict
705 obj.install_path = bld.env['BINDIR']
706 set_subst_dict(obj, wrapper_subst_dict)
708 if bld.is_defined('WINDOWS_VST_SUPPORT'):
709 obj = bld(features = 'subst')
710 obj.source = '../vst/ardourvst.in'
711 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
712 obj.chmod = Utils.O755
713 obj.dict = wrapper_subst_dict
714 obj.install_path = bld.env['BINDIR']
715 set_subst_dict(obj, wrapper_subst_dict)
724 if sys.platform == 'darwin':
737 if bld.env['build_target'] in ['panther', 'tiger', 'leopard'] or (Options.options.ppc and bld.env['build_target'] == 'snowleopard'):
738 # CTFontManagerRegisterFontsForURL for ArdourMono is 10.6 or newer
739 # "Lucida Grande" is not mono-spaced, but works for most cases, except big-clock-window
741 'MONOSPACE' : 'Monaco',
742 'CLOCKFONT' : 'Lucida Grande',
746 'MONOSPACE' : 'Monaco',
747 'CLOCKFONT' : 'ArdourMono',
749 else: # Linux/X11 & Windows fonts
750 basefont = '' # unspecified - use system defaults
763 'MONOSPACE' : 'ArdourMono',
764 'CLOCKFONT' : 'ArdourMono',
767 # Set up font substitution dictionary
769 for style in ['', 'BOLD', 'ITALIC']:
770 for sizename,points in iter(font_sizes.items()):
772 key = "_".join (['FONT',style,sizename])
773 fontstyle = " ".join ([basefont,style.lower(),points])
775 key = "_".join (['FONT',sizename])
776 fontstyle = " ".join ([basefont,points])
778 font_subst_dict[key] = fontstyle
781 for sizename,points in iter(font_sizes.items()):
782 key = "_".join (['FONT_SIZE',sizename])
783 font_subst_dict[key] = points
785 # various font names, eg @BOLD_MONOSPACE@
786 for font_sym,text in iter(font_names.items()):
788 font_subst_dict[key] = text
792 obj = bld(features = 'subst')
793 obj.source = [ 'clearlooks.rc.in' ]
794 obj.target = 'clearlooks.rc'
795 obj.install_path = bld.env['CONFDIR']
796 set_subst_dict(obj, font_subst_dict)
798 obj = bld(features = 'subst')
799 obj.source = [ 'default_ui_config.in' ]
800 obj.target = 'default_ui_config'
801 obj.install_path = bld.env['CONFDIR']
802 set_subst_dict(obj, font_subst_dict)
806 if sys.platform == 'darwin':
807 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
809 menus_argv = [ '-E', '-P' ]
811 if bld.is_defined('PTFORMAT'):
812 menus_argv += [ '-DPTFORMAT' ]
814 # always build all versions of the menu definitions
815 # so that we can try them out with different program builds.
816 for program in [ 'ardour', 'trx' ]:
817 obj = bld(features = 'command-output')
819 obj.command_is_external = True
821 obj.argv = menus_argv
822 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
823 obj.stdin = program + '.menus.in'
824 obj.stdout = program + '.menus'
825 bld.install_files (bld.env['CONFDIR'], program + '.menus')
828 freedesktop_subst_dict = {
829 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
830 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
831 'VERSION': str (bld.env['VERSION']),
834 if bld.env['FREEDESKTOP']:
835 obj = bld(features = 'subst')
836 obj.source = 'ardour.desktop.in'
837 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
838 obj.chmod = Utils.O644
839 obj.dict = freedesktop_subst_dict
840 set_subst_dict(obj, freedesktop_subst_dict)
842 obj = bld(features = 'subst')
843 obj.source = 'ardour-mime-info.xml'
844 obj.target = 'ardour.xml'
845 obj.chmod = Utils.O644
847 # build appdata with translations
849 appdata_i18n_xmlin(bld)
850 obj = bld(features = 'subst')
851 obj.source = 'ardour.appdata.xml.in'
852 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
853 obj.chmod = Utils.O644
854 obj.dict = freedesktop_subst_dict
855 set_subst_dict(obj, freedesktop_subst_dict)
859 # NATIVE ARDOUR BINDING FILES
860 # explicitly state the use of perl here so that it works on windows too
862 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
863 for b in [ 'ardour' ] :
865 target = b + '.keys',
866 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
869 obj.install_path = bld.env['CONFDIR']
872 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
873 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
875 # Application/Product specific resources (icon, splash)
876 pgmname = bld.env['PROGRAM_NAME']
877 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
879 if bld.env['build_target'] == 'mingw':
880 # These icons need to overwrite the files already installed in the icons
881 # directory above. Do this in the external packaging scripts for now.
882 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
883 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
885 # Default UI configuration
886 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
887 # Color Themes. Find each color file for this program only
889 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
891 # Default export stuff
892 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
895 if bld.is_defined('ENABLE_NLS'):
896 mo_files = bld.path.ant_glob('po/*.mo')
898 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
899 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
903 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
904 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
906 appdata_i18n_pot(bld)
910 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
911 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
913 appdata_i18n_pot(bld)
916 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
917 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
922 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
923 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
926 def appdata_i18n_pot(bld):
927 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
928 'ardour.appdata.pot')
929 if bld.cmd == 'i18n_pot':
930 Logs.info('Generating pot file from Ardour appdata')
931 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
932 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
933 'ardour.appdata.xml.in.in')
934 Logs.info('Updating ' + potfile)
936 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
938 print ('Error processing appdata pot file - ignored')
939 elif bld.cmd == 'clean' and os.path.exists(potfile):
940 Logs.info('Removing Ardour appdata pot file')
943 def appdata_i18n_po(bld):
944 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
945 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
947 def appdata_i18n_mo(bld):
948 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
949 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
951 def appdata_i18n_xmlin(bld):
952 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
953 'ardour.appdata.xml.in')
954 if bld.cmd == 'build':
955 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
956 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
957 'ardour.appdata.xml.in.in')
958 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
959 mo_files = glob.glob(mo_glob)
960 Logs.info('Generating ' + adxmlinfile)
961 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
962 '-j', adxmlininfile] + mo_files)
963 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
964 Logs.info('Removing ' + adxmlinfile)
965 os.remove(adxmlinfile)