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',
56 'big_transport_window.cc',
59 'color_theme_manager.cc',
62 'control_point_dialog.cc',
63 'control_slave_ui.cc',
67 'duplicate_routes_dialog.cc',
68 'edit_note_dialog.cc',
72 'editor_audio_import.cc',
73 'editor_pt_import.cc',
74 'editor_audiotrack.cc',
76 'editor_canvas_events.cc',
77 'editor_component.cc',
80 'editor_route_groups.cc',
81 'editor_export_audio.cc',
82 'editor_group_tabs.cc',
84 'editor_locations.cc',
92 'editor_selection.cc',
93 'editor_snapshots.cc',
95 'editor_tempodisplay.cc',
99 'export_channel_selector.cc',
101 'export_file_notebook.cc',
102 'export_filename_selector.cc',
103 'export_format_dialog.cc',
104 'export_format_selector.cc',
105 'export_preset_selector.cc',
107 'export_timespan_selector.cc',
111 'floating_text_entry.cc',
112 'sfdb_freesound_mootcher.cc',
114 'generic_pluginui.cc',
116 'global_port_matrix.cc',
118 'gtk_pianokeyboard.c',
121 'insert_remove_time_dialog.cc',
122 'instrument_selector.cc',
123 'interthread_progress_window.cc',
132 'lua_script_manager.cc',
139 'midi_automation_line.cc',
140 'midi_channel_dialog.cc',
141 'midi_channel_selector.cc',
142 'midi_cut_buffer.cc',
143 'midi_export_dialog.cc',
144 'midi_list_editor.cc',
145 'midi_region_view.cc',
148 'midi_streamview.cc',
151 'midi_velocity_dialog.cc',
153 'missing_file_dialog.cc',
154 'missing_plugin_dialog.cc',
155 'mixer_group_tabs.cc',
161 'monitor_section.cc',
162 'monitor_selector.cc',
164 'mono_panner_editor.cc',
167 'new_plugin_preset_dialog.cc',
168 'normalize_dialog.cc',
172 'note_select_dialog.cc',
179 'panner_interface.cc',
182 'patch_change_widget.cc',
183 'piano_roll_header.cc',
185 'playlist_selector.cc',
188 'plugin_pin_dialog.cc',
189 'plugin_setup_dialog.cc',
190 'plugin_selector.cc',
195 'port_matrix_body.cc',
196 'port_matrix_column_labels.cc',
197 'port_matrix_component.cc',
198 'port_matrix_grid.cc',
199 'port_matrix_labels.cc',
200 'port_matrix_row_labels.cc',
202 'processor_selection.cc',
203 'patch_change_dialog.cc',
204 'progress_reporter.cc',
206 'quantize_dialog.cc',
207 'rc_option_editor.cc',
209 'region_gain_line.cc',
210 'region_layering_order_editor.cc',
211 'region_selection.cc',
215 'route_group_dialog.cc',
216 'route_group_menu.cc',
217 'route_params_ui.cc',
218 'route_processor_selection.cc',
219 'route_time_axis.cc',
223 'save_template_dialog.cc',
224 'search_path_option.cc',
225 'script_selector.cc',
227 'selection_memento.cc',
229 'session_archive_dialog.cc',
231 'session_import_dialog.cc',
232 'session_metadata_dialog.cc',
233 'session_option_editor.cc',
235 'shuttle_control.cc',
236 'soundcloud_export_selector.cc',
243 'stereo_panner_editor.cc',
245 'strip_silence_dialog.cc',
246 'stripable_colorpicker.cc',
247 'stripable_time_axis.cc',
249 'tape_region_view.cc',
250 'template_dialog.cc',
255 'time_axis_view_item.cc',
260 'track_selection.cc',
261 'track_view_list.cc',
262 'transform_dialog.cc',
263 'transport_control.cc',
264 'transport_control_ui.cc',
265 'transpose_dialog.cc',
268 'vca_master_strip.cc',
270 'visibility_group.cc',
272 # video-timeline related sources:
273 'video_image_frame.cc',
274 'add_video_dialog.cc',
275 'editor_videotimeline.cc',
279 'transcode_ffmpeg.cc',
280 'transcode_video_dialog.cc',
281 'video_server_dialog.cc',
283 'export_video_dialog.cc',
284 'export_video_infobox.cc',
285 'video_tool_paths.cc'
288 def enoify (major, minor):
289 # Code names based on
290 # https://en.wikipedia.org/wiki/Brian_Eno_discography
292 # sort Studio albums + Collaborative albums + Compilation albums by Month/Year.
293 # (no Singles, no EPs, no Video Albums, no Production)
295 return "\\n\\\"E-No\\\""
298 return "\\n\\\"No Pussyfooting\\\""
300 return "\\n\\\"Here Come the Warm Jets\\\""
302 return "\\n\\\"Taking Tiger Mountain\\\""
304 return "\\n\\\"Lady June's Linguistic Leprosy\\\""
306 return "\\n\\\"Discreet Music\\\""
308 return "\\n\\\"Another Green World\\\""
310 return "\\n\\\"Evening Star\\\""
312 return "\\n\\\"Cluster and Eno\\\""
315 return "\\n\\\"Before and After Science\\\""
317 return "\\n\\\"After the Heat\\\""
319 return "\\n\\\"Music for Airports\\\""
321 return "\\n\\\"Music for Films\\\""
323 return "\\n\\\"In a Land of Clear Colours\\\""
325 return "\\n\\\"The Plateaux of Mirror\\\""
327 return "\\n\\\"Possible Musics\\\"" # 1980 Collaborative
329 return "\\n\\\"My Life in the Bush of Ghosts\\\"" # 1981
331 return "\\n\\\"Music for Airplay\\\"" # 1981 Compilation
333 return "\\n\\\"On Land\\\"" # 1982
334 elif minor == 10: # 6.0 ??
335 return "\\n\\\"Atmospheres and Soundtracks\\\"" # 1983
337 return "\\n\\\"More Music for Films\\\"" # 1983
339 return "\\n\\\"Working Backwards\\\"" # 1984 Compilation
342 return "\\n\\\"The Pearl\\\"" # 1984 Collaborative
344 return "\\n\\\"Begegnungen\\\"" # 1984 Compilation
345 ### From now on, no more compilations, names are not suitable
347 return "\\n\\\"Thursday Afternoon\\\"" # 1985
349 return "\\n\\\"Music for Films III\\\"" # 1988 Collaborative
351 return "\\n\\\"Wrong Way Up\\\"" # 1990 Collaborative
353 return "\\n\\\"Nerve Net\\\"" # 1992
355 return "\\n\\\"The Shutov Assembly\\\"" # 1992
357 return "\\n\\\"Neroli\\\"" # 1993
359 return "\\n\\\"Headcandy\\\"" # 1994
363 autowaf.set_options(opt)
367 conf.load('compiler_cxx')
368 autowaf.configure(conf)
370 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
372 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
374 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
375 atleast_version='3.3.5', mandatory=False)
376 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
377 atleast_version='1.2.1')
378 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
379 atleast_version='2.10.1')
380 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
381 atleast_version='2.18')
382 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
383 atleast_version='2.18')
384 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
385 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
386 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
387 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
390 if sys.platform == 'darwin':
391 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
392 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
393 env = conf.env.derive (),
396 compile_filename='test.m',
401 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
402 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
404 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
406 conf.write_config_header('gtk2ardour-config.h', remove=False)
408 bak = conf.env['define_key']
409 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
410 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
411 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
412 conf.write_config_header('gtk2ardour-version.h')
413 conf.env['define_key'] = bak;
416 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
417 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
419 # Add a waf `feature' to allow compilation of things using winegcc
420 from waflib.TaskGen import feature
422 def set_winegcc(self):
423 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
424 self.env.CC = 'winegcc'
426 def _doPyp(infileName, deps = False):
429 re_spaces = re.compile("\s+")
431 if infileName == '-':
434 fd = open(infileName)
435 inLines = fd.readlines()
441 bits = re_spaces.split(line)
442 if bits[0] == '##include':
447 # assume included file comes from same place as source file
448 incName = os.path.join (os.path.dirname (infileName), incName);
449 outStr += _doPyp(incName)
460 def include_processor(task):
461 infileName = task.inputs[0].srcpath()
462 outfileName = os.path.join(out, task.outputs[0].bldpath())
463 fdOut = open (outfileName, "w")
464 fdOut.write (_doPyp(infileName))
468 def build_color_scheme(path, prefix):
472 if re.search ('^#@color', line):
473 line.strip() # remove newline
475 if len(color_scheme):
477 color_scheme += prefix
479 color_scheme += words[1]
481 color_scheme += words[2]
487 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
488 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
490 # Tool to dump lua-bindings (of gtk2ardour + libs)
491 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
492 obj = bld (features = 'cxx c cxxprogram')
493 obj.install_path = None
494 obj.source = list(gtk2_ardour_sources)
495 obj.target = 'luadoc'
496 obj.includes = ['.', '../libs']
497 obj.ldflags = ['-no-undefined']
512 'PACKAGE="' + I18N_PACKAGE + '"',
513 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
514 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
515 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
518 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
519 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
520 if bld.is_defined('HAVE_SUIL'):
521 obj.source += [ 'lv2_plugin_ui.cc' ]
522 obj.use += [ 'SUIL' ]
523 if bld.is_defined('LXVST_SUPPORT'):
524 obj.source += [ 'vst_plugin_ui.cc' ]
525 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
526 obj.defines += [ 'LXVST_SUPPORT' ]
529 # # Tool to test libcanvas
530 # if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
531 # obj = bld (features = 'cxx c cxxprogram')
532 # obj.install_path = None
533 # obj.source = list(gtk2_ardour_sources)
534 # obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
535 # obj.target = 'canvas_test'
536 # obj.includes = ['.', '../libs']
537 # obj.ldflags = ['-no-undefined']
550 # 'PACKAGE="' + I18N_PACKAGE + '"',
551 # 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
552 # 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
553 # 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
556 # obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
557 # # obj.source += [ 'canvas_test.cc', ]
558 # obj.source += [ 'toolbar_test.cc', 'enums.cc']
561 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
562 # Windows VST support w/wine
563 # If we require VST support we build a stub main() and the FST library
564 # here using winegcc, and link it to the GTK front-end library
565 obj = bld (features = 'cxx c cxxprogram wine')
566 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
568 # XXX do we really need to explicitly link to all of these for the wine executable?
570 obj.use = [ 'libpbd',
583 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
584 obj.includes = [ '../libs/fst', '.' ]
585 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
586 obj.linkflags += bld.env['LDFLAGS']
587 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
588 obj.install_path = bld.env['DLLDIR']
589 # end of the wine executable
591 # now the shared library containing the GTK GUI for ardour
592 obj = bld (features = 'cxx c cxxshlib')
593 # operate on copy to avoid adding sources twice
594 obj.source = list(gtk2_ardour_sources)
595 obj.includes = [ '../libs/fst', '.' ]
596 obj.name = 'libgtk2_ardour'
597 obj.target = 'gtk2_ardour'
598 obj.cflags = [ '-fPIC' ]
601 # just the normal executable version of the GTK GUI
602 if bld.env['build_target'] == 'mingw':
603 obj = bld (features = 'cxx c cxxprogram winres')
605 obj = bld (features = 'cxx c cxxprogram')
606 # operate on copy to avoid adding sources twice
607 obj.source = list(gtk2_ardour_sources)
608 obj.target = 'ardour-' + str (bld.env['VERSION'])
610 obj.ldflags = ['-no-undefined']
612 if bld.is_defined('WINDOWS_VST_SUPPORT'):
613 # Windows VST support mingw
614 obj.includes += [ '../libs/fst' ]
616 # at this point, "obj" refers to either the normal native executable
617 # OR the shared library built for use with wine on linux.
619 obj.use = [ 'libpbd',
632 'PACKAGE="' + I18N_PACKAGE + '"',
633 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
634 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
635 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
637 obj.install_path = bld.env['DLLDIR']
639 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
641 if sys.platform == 'darwin':
642 obj.uselib += ' AUDIOUNITS OSX '
643 obj.use += ' libappleutility'
644 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
645 elif bld.env['build_target'] == 'mingw':
646 obj.source += [ 'bundle_env_mingw.cc' ]
647 obj.source += [ 'windows_icon.rc' ]
649 obj.source += [ 'bundle_env_linux.cc' ]
651 obj.includes += ['../libs']
653 obj.use += 'libptformat'
655 if bld.env['build_target'] == 'mingw':
656 obj.linkflags += ' -mwindows'
657 obj.use += [ 'PANGOFT2' ]
659 if bld.is_defined('HAVE_SUIL'):
660 obj.source += [ 'lv2_plugin_ui.cc' ]
661 obj.use += [ 'SUIL' ]
663 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
664 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
666 if bld.is_defined('NEED_INTL'):
667 obj.linkflags += ' -lintl'
669 if bld.is_defined('WINDOWS_VST_SUPPORT'):
670 obj.source += [ 'windows_vst_plugin_ui.cc' ]
671 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
672 if bld.env['build_target'] != 'mingw':
675 if bld.is_defined('LXVST_SUPPORT'):
676 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
677 obj.defines += [ 'LXVST_SUPPORT' ]
680 if bld.is_defined('MACVST_SUPPORT'):
681 obj.source += [ 'mac_vst_plugin_ui.mm' ]
682 obj.defines += [ 'MACVST_SUPPORT' ]
684 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
685 obj.source += [ 'vst_plugin_ui.cc' ]
687 if bld.is_defined('PHONE_HOME'):
688 obj.defines += [ 'PHONE_HOME' ]
690 if bld.is_defined('HAVE_COREAUDIO'):
691 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
692 obj.use += ' libappleutility '
694 if bld.is_defined('AUDIOUNIT_SUPPORT'):
695 obj.source += [ 'au_pluginui.mm' ]
699 wrapper_subst_dict = {
700 'INSTALL_PREFIX' : bld.env['PREFIX'],
701 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
702 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
703 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
704 'LIBS' : 'build/libs',
705 'VERSION' : str (bld.env['VERSION']),
706 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
709 def set_subst_dict(obj, dict):
711 setattr(obj, i, dict[i])
713 obj = bld(features = 'subst')
714 obj.source = 'ardev_common.sh.in'
715 obj.target = 'ardev_common_waf.sh'
716 obj.chmod = Utils.O755
717 obj.dict = wrapper_subst_dict
718 set_subst_dict(obj, wrapper_subst_dict)
720 obj = bld(features = 'subst')
721 obj.source = 'ardour.sh.in'
722 obj.target = 'ardour' + str (bld.env['MAJOR'])
723 obj.chmod = Utils.O755
724 obj.dict = wrapper_subst_dict
725 obj.install_path = bld.env['BINDIR']
726 set_subst_dict(obj, wrapper_subst_dict)
728 if bld.is_defined('WINDOWS_VST_SUPPORT'):
729 obj = bld(features = 'subst')
730 obj.source = '../vst/ardourvst.in'
731 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
732 obj.chmod = Utils.O755
733 obj.dict = wrapper_subst_dict
734 obj.install_path = bld.env['BINDIR']
735 set_subst_dict(obj, wrapper_subst_dict)
744 if sys.platform == 'darwin':
757 if bld.env['build_target'] in ['panther', 'tiger', 'leopard'] or (Options.options.ppc and bld.env['build_target'] == 'snowleopard'):
758 # CTFontManagerRegisterFontsForURL for ArdourMono is 10.6 or newer
759 # "Lucida Grande" is not mono-spaced, but works for most cases, except big-clock-window
761 'MONOSPACE' : 'Monaco',
762 'CLOCKFONT' : 'Lucida Grande',
766 'MONOSPACE' : 'Monaco',
767 'CLOCKFONT' : 'ArdourMono',
769 else: # Linux/X11 & Windows fonts
770 basefont = '' # unspecified - use system defaults
783 'MONOSPACE' : 'ArdourMono',
784 'CLOCKFONT' : 'ArdourMono',
787 # Set up font substitution dictionary
789 for style in ['', 'BOLD', 'ITALIC']:
790 for sizename,points in iter(font_sizes.items()):
792 key = "_".join (['FONT',style,sizename])
793 fontstyle = " ".join ([basefont,style.lower(),points])
795 key = "_".join (['FONT',sizename])
796 fontstyle = " ".join ([basefont,points])
798 font_subst_dict[key] = fontstyle
801 for sizename,points in iter(font_sizes.items()):
802 key = "_".join (['FONT_SIZE',sizename])
803 font_subst_dict[key] = points
805 # various font names, eg @BOLD_MONOSPACE@
806 for font_sym,text in iter(font_names.items()):
808 font_subst_dict[key] = text
812 obj = bld(features = 'subst')
813 obj.source = [ 'clearlooks.rc.in' ]
814 obj.target = 'clearlooks.rc'
815 obj.install_path = bld.env['CONFDIR']
816 set_subst_dict(obj, font_subst_dict)
818 obj = bld(features = 'subst')
819 obj.source = [ 'default_ui_config.in' ]
820 obj.target = 'default_ui_config'
821 obj.install_path = bld.env['CONFDIR']
822 set_subst_dict(obj, font_subst_dict)
826 if sys.platform == 'darwin':
827 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
829 menus_argv = [ '-E', '-P' ]
831 if bld.is_defined('PTFORMAT'):
832 menus_argv += [ '-DPTFORMAT' ]
834 # always build all versions of the menu definitions
835 # so that we can try them out with different program builds.
836 for program in [ 'ardour', 'trx' ]:
837 obj = bld(features = 'command-output')
839 obj.command_is_external = True
841 obj.argv = menus_argv
842 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
843 obj.stdin = program + '.menus.in'
844 obj.stdout = program + '.menus'
845 bld.install_files (bld.env['CONFDIR'], program + '.menus')
848 freedesktop_subst_dict = {
849 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
850 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
851 'VERSION': str (bld.env['VERSION']),
854 if bld.env['FREEDESKTOP']:
855 obj = bld(features = 'subst')
856 obj.source = 'ardour.desktop.in'
857 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
858 obj.chmod = Utils.O644
859 obj.dict = freedesktop_subst_dict
860 set_subst_dict(obj, freedesktop_subst_dict)
862 obj = bld(features = 'subst')
863 obj.source = 'ardour-mime-info.xml'
864 obj.target = 'ardour.xml'
865 obj.chmod = Utils.O644
867 # build appdata with translations
869 appdata_i18n_xmlin(bld)
870 obj = bld(features = 'subst')
871 obj.source = 'ardour.appdata.xml.in'
872 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
873 obj.chmod = Utils.O644
874 obj.dict = freedesktop_subst_dict
875 set_subst_dict(obj, freedesktop_subst_dict)
879 # NATIVE ARDOUR BINDING FILES
880 # explicitly state the use of perl here so that it works on windows too
882 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
883 for b in [ 'ardour' ] :
885 target = b + '.keys',
886 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
889 obj.install_path = bld.env['CONFDIR']
892 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
893 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
895 # Application/Product specific resources (icon, splash)
896 pgmname = bld.env['PROGRAM_NAME']
897 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
899 if bld.env['build_target'] == 'mingw':
900 # These icons need to overwrite the files already installed in the icons
901 # directory above. Do this in the external packaging scripts for now.
902 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
903 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
905 # Default UI configuration
906 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
907 # Color Themes. Find each color file for this program only
909 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
911 # Default export stuff
912 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
915 if bld.is_defined('ENABLE_NLS'):
916 mo_files = bld.path.ant_glob('po/*.mo')
918 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
919 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
923 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
924 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
926 appdata_i18n_pot(bld)
930 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
931 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
933 appdata_i18n_pot(bld)
936 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
937 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
942 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
943 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
946 def appdata_i18n_pot(bld):
947 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
948 'ardour.appdata.pot')
949 if bld.cmd == 'i18n_pot':
950 Logs.info('Generating pot file from Ardour appdata')
951 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
952 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
953 'ardour.appdata.xml.in.in')
954 Logs.info('Updating ' + potfile)
956 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
958 print ('Error processing appdata pot file - ignored')
959 elif bld.cmd == 'clean' and os.path.exists(potfile):
960 Logs.info('Removing Ardour appdata pot file')
963 def appdata_i18n_po(bld):
964 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
965 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
967 def appdata_i18n_mo(bld):
968 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
969 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
971 def appdata_i18n_xmlin(bld):
972 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
973 'ardour.appdata.xml.in')
974 if bld.cmd == 'build':
975 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
976 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
977 'ardour.appdata.xml.in.in')
978 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
979 mo_files = glob.glob(mo_glob)
980 Logs.info('Generating ' + adxmlinfile)
981 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
982 '-j', adxmlininfile] + mo_files)
983 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
984 Logs.info('Removing ' + adxmlinfile)
985 os.remove(adxmlinfile)