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',
39 'ardour_ui_dependents.cc',
40 'ardour_ui_dialogs.cc',
43 'ardour_ui_options.cc',
46 'audio_region_editor.cc',
47 'audio_region_view.cc',
48 'audio_streamview.cc',
50 'automation_controller.cc',
52 'automation_region_view.cc',
53 'automation_streamview.cc',
54 'automation_time_axis.cc',
56 'big_clock_window.cc',
57 'big_transport_window.cc',
60 'color_theme_manager.cc',
63 'control_point_dialog.cc',
64 'control_slave_ui.cc',
68 'disk_space_indicator.cc',
69 'duplicate_routes_dialog.cc',
70 'dsp_load_indicator.cc',
71 'edit_note_dialog.cc',
75 'editor_audio_import.cc',
76 'editor_pt_import.cc',
77 'editor_audiotrack.cc',
79 'editor_canvas_events.cc',
80 'editor_component.cc',
83 'editor_route_groups.cc',
84 'editor_export_audio.cc',
85 'editor_group_tabs.cc',
87 'editor_locations.cc',
95 'editor_selection.cc',
96 'editor_snapshots.cc',
98 'editor_tempodisplay.cc',
102 'export_channel_selector.cc',
104 'export_file_notebook.cc',
105 'export_filename_selector.cc',
106 'export_format_dialog.cc',
107 'export_format_selector.cc',
108 'export_preset_selector.cc',
110 'export_timespan_selector.cc',
114 'floating_text_entry.cc',
115 'sfdb_freesound_mootcher.cc',
117 'generic_pluginui.cc',
119 'global_port_matrix.cc',
121 'gtk_pianokeyboard.c',
124 'insert_remove_time_dialog.cc',
125 'instrument_selector.cc',
126 'interthread_progress_window.cc',
135 'lua_script_manager.cc',
142 'midi_automation_line.cc',
143 'midi_channel_dialog.cc',
144 'midi_channel_selector.cc',
145 'midi_cut_buffer.cc',
146 'midi_export_dialog.cc',
147 'midi_list_editor.cc',
148 'midi_region_view.cc',
151 'midi_streamview.cc',
154 'midi_velocity_dialog.cc',
156 'missing_file_dialog.cc',
157 'missing_plugin_dialog.cc',
158 'mixer_group_tabs.cc',
164 'monitor_section.cc',
165 'monitor_selector.cc',
167 'mono_panner_editor.cc',
170 'new_plugin_preset_dialog.cc',
171 'normalize_dialog.cc',
175 'note_select_dialog.cc',
182 'panner_interface.cc',
185 'patch_change_widget.cc',
186 'piano_roll_header.cc',
188 'playlist_selector.cc',
191 'plugin_pin_dialog.cc',
192 'plugin_setup_dialog.cc',
193 'plugin_selector.cc',
198 'port_matrix_body.cc',
199 'port_matrix_column_labels.cc',
200 'port_matrix_component.cc',
201 'port_matrix_grid.cc',
202 'port_matrix_labels.cc',
203 'port_matrix_row_labels.cc',
205 'processor_selection.cc',
206 'patch_change_dialog.cc',
207 'progress_reporter.cc',
209 'quantize_dialog.cc',
210 'rc_option_editor.cc',
212 'region_gain_line.cc',
213 'region_layering_order_editor.cc',
214 'region_selection.cc',
218 'route_group_dialog.cc',
219 'route_group_menu.cc',
220 'route_params_ui.cc',
221 'route_processor_selection.cc',
222 'route_time_axis.cc',
226 'save_template_dialog.cc',
227 'search_path_option.cc',
228 'script_selector.cc',
230 'selection_memento.cc',
232 'session_archive_dialog.cc',
234 'session_import_dialog.cc',
235 'session_metadata_dialog.cc',
236 'session_option_editor.cc',
238 'shuttle_control.cc',
239 'soundcloud_export_selector.cc',
246 'stereo_panner_editor.cc',
248 'strip_silence_dialog.cc',
249 'stripable_colorpicker.cc',
250 'stripable_time_axis.cc',
252 'tape_region_view.cc',
253 'template_dialog.cc',
258 'time_axis_view_item.cc',
263 'track_selection.cc',
264 'track_view_list.cc',
265 'transform_dialog.cc',
266 'transport_control.cc',
267 'transport_control_ui.cc',
268 'transpose_dialog.cc',
271 'vca_master_strip.cc',
273 'visibility_group.cc',
275 # video-timeline related sources:
276 'video_image_frame.cc',
277 'add_video_dialog.cc',
278 'editor_videotimeline.cc',
282 'transcode_ffmpeg.cc',
283 'transcode_video_dialog.cc',
284 'video_server_dialog.cc',
286 'export_video_dialog.cc',
287 'export_video_infobox.cc',
288 'video_tool_paths.cc'
291 def enoify (major, minor):
292 # Code names based on
293 # https://en.wikipedia.org/wiki/Brian_Eno_discography
295 # sort Studio albums + Collaborative albums + Compilation albums by Month/Year.
296 # (no Singles, no EPs, no Video Albums, no Production)
298 return "\\n\\\"E-No\\\""
301 return "\\n\\\"No Pussyfooting\\\""
303 return "\\n\\\"Here Come the Warm Jets\\\""
305 return "\\n\\\"Taking Tiger Mountain\\\""
307 return "\\n\\\"Lady June's Linguistic Leprosy\\\""
309 return "\\n\\\"Discreet Music\\\""
311 return "\\n\\\"Another Green World\\\""
313 return "\\n\\\"Evening Star\\\""
315 return "\\n\\\"Cluster and Eno\\\""
318 return "\\n\\\"Before and After Science\\\""
320 return "\\n\\\"After the Heat\\\""
322 return "\\n\\\"Music for Airports\\\""
324 return "\\n\\\"Music for Films\\\""
326 return "\\n\\\"In a Land of Clear Colours\\\""
328 return "\\n\\\"The Plateaux of Mirror\\\""
330 return "\\n\\\"Possible Musics\\\"" # 1980 Collaborative
332 return "\\n\\\"My Life in the Bush of Ghosts\\\"" # 1981
334 return "\\n\\\"Music for Airplay\\\"" # 1981 Compilation
336 return "\\n\\\"On Land\\\"" # 1982
337 elif minor == 10: # 6.0 ??
338 return "\\n\\\"Atmospheres and Soundtracks\\\"" # 1983
340 return "\\n\\\"More Music for Films\\\"" # 1983
342 return "\\n\\\"Working Backwards\\\"" # 1984 Compilation
345 return "\\n\\\"The Pearl\\\"" # 1984 Collaborative
347 return "\\n\\\"Begegnungen\\\"" # 1984 Compilation
348 ### From now on, no more compilations, names are not suitable
350 return "\\n\\\"Thursday Afternoon\\\"" # 1985
352 return "\\n\\\"Music for Films III\\\"" # 1988 Collaborative
354 return "\\n\\\"Wrong Way Up\\\"" # 1990 Collaborative
356 return "\\n\\\"Nerve Net\\\"" # 1992
358 return "\\n\\\"The Shutov Assembly\\\"" # 1992
360 return "\\n\\\"Neroli\\\"" # 1993
362 return "\\n\\\"Headcandy\\\"" # 1994
366 autowaf.set_options(opt)
370 conf.load('compiler_cxx')
371 autowaf.configure(conf)
373 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
375 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
377 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
378 atleast_version='3.3.5', mandatory=False)
379 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
380 atleast_version='1.2.1')
381 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
382 atleast_version='2.10.1')
383 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
384 atleast_version='2.18')
385 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
386 atleast_version='2.18')
387 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
388 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
389 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
390 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
393 if sys.platform == 'darwin':
394 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
395 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
396 env = conf.env.derive (),
399 compile_filename='test.m',
404 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
405 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
407 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
409 conf.write_config_header('gtk2ardour-config.h', remove=False)
411 bak = conf.env['define_key']
412 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
413 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
414 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
415 conf.write_config_header('gtk2ardour-version.h')
416 conf.env['define_key'] = bak;
419 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
420 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
422 # Add a waf `feature' to allow compilation of things using winegcc
423 from waflib.TaskGen import feature
425 def set_winegcc(self):
426 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
427 self.env.CC = 'winegcc'
429 def _doPyp(infileName, deps = False):
432 re_spaces = re.compile("\s+")
434 if infileName == '-':
437 fd = open(infileName)
438 inLines = fd.readlines()
444 bits = re_spaces.split(line)
445 if bits[0] == '##include':
450 # assume included file comes from same place as source file
451 incName = os.path.join (os.path.dirname (infileName), incName);
452 outStr += _doPyp(incName)
463 def include_processor(task):
464 infileName = task.inputs[0].srcpath()
465 outfileName = os.path.join(out, task.outputs[0].bldpath())
466 fdOut = open (outfileName, "w")
467 fdOut.write (_doPyp(infileName))
471 def build_color_scheme(path, prefix):
475 if re.search ('^#@color', line):
476 line.strip() # remove newline
478 if len(color_scheme):
480 color_scheme += prefix
482 color_scheme += words[1]
484 color_scheme += words[2]
490 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
491 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
493 # Tool to dump lua-bindings (of gtk2ardour + libs)
494 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
495 obj = bld (features = 'cxx c cxxprogram')
496 obj.install_path = None
497 obj.source = list(gtk2_ardour_sources)
498 obj.target = 'luadoc'
499 obj.includes = ['.', '../libs']
500 obj.ldflags = ['-no-undefined']
515 'PACKAGE="' + I18N_PACKAGE + '"',
516 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
517 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
518 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
521 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
522 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
523 if bld.is_defined('HAVE_SUIL'):
524 obj.source += [ 'lv2_plugin_ui.cc' ]
525 obj.use += [ 'SUIL' ]
526 if bld.is_defined('LXVST_SUPPORT'):
527 obj.source += [ 'vst_plugin_ui.cc' ]
528 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
529 obj.defines += [ 'LXVST_SUPPORT' ]
532 # # Tool to test libcanvas
533 # if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
534 # obj = bld (features = 'cxx c cxxprogram')
535 # obj.install_path = None
536 # obj.source = list(gtk2_ardour_sources)
537 # obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
538 # obj.target = 'canvas_test'
539 # obj.includes = ['.', '../libs']
540 # obj.ldflags = ['-no-undefined']
553 # 'PACKAGE="' + I18N_PACKAGE + '"',
554 # 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
555 # 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
556 # 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
559 # obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
560 # # obj.source += [ 'canvas_test.cc', ]
561 # obj.source += [ 'toolbar_test.cc', 'enums.cc']
564 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
565 # Windows VST support w/wine
566 # If we require VST support we build a stub main() and the FST library
567 # here using winegcc, and link it to the GTK front-end library
568 obj = bld (features = 'cxx c cxxprogram wine')
569 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
571 # XXX do we really need to explicitly link to all of these for the wine executable?
573 obj.use = [ 'libpbd',
586 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
587 obj.includes = [ '../libs/fst', '.' ]
588 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
589 obj.linkflags += bld.env['LDFLAGS']
590 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
591 obj.install_path = bld.env['DLLDIR']
592 # end of the wine executable
594 # now the shared library containing the GTK GUI for ardour
595 obj = bld (features = 'cxx c cxxshlib')
596 # operate on copy to avoid adding sources twice
597 obj.source = list(gtk2_ardour_sources)
598 obj.includes = [ '../libs/fst', '.' ]
599 obj.name = 'libgtk2_ardour'
600 obj.target = 'gtk2_ardour'
601 obj.cflags = [ '-fPIC' ]
604 # just the normal executable version of the GTK GUI
605 if bld.env['build_target'] == 'mingw':
606 obj = bld (features = 'cxx c cxxprogram winres')
608 obj = bld (features = 'cxx c cxxprogram')
609 # operate on copy to avoid adding sources twice
610 obj.source = list(gtk2_ardour_sources)
611 obj.target = 'ardour-' + str (bld.env['VERSION'])
613 obj.ldflags = ['-no-undefined']
615 if bld.is_defined('WINDOWS_VST_SUPPORT'):
616 # Windows VST support mingw
617 obj.includes += [ '../libs/fst' ]
619 # at this point, "obj" refers to either the normal native executable
620 # OR the shared library built for use with wine on linux.
622 obj.use = [ 'libpbd',
635 'PACKAGE="' + I18N_PACKAGE + '"',
636 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
637 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
638 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
640 obj.install_path = bld.env['DLLDIR']
642 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
644 if sys.platform == 'darwin':
645 obj.uselib += ' AUDIOUNITS OSX '
646 obj.use += ' libappleutility'
647 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
648 elif bld.env['build_target'] == 'mingw':
649 obj.source += [ 'bundle_env_mingw.cc' ]
650 obj.source += [ 'windows_icon.rc' ]
652 obj.source += [ 'bundle_env_linux.cc' ]
654 obj.includes += ['../libs']
656 obj.use += 'libptformat'
658 if bld.env['build_target'] == 'mingw':
659 obj.linkflags += ' -mwindows'
660 obj.use += [ 'PANGOFT2' ]
662 if bld.is_defined('HAVE_SUIL'):
663 obj.source += [ 'lv2_plugin_ui.cc' ]
664 obj.use += [ 'SUIL' ]
666 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
667 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
669 if bld.is_defined('NEED_INTL'):
670 obj.linkflags += ' -lintl'
672 if bld.is_defined('WINDOWS_VST_SUPPORT'):
673 obj.source += [ 'windows_vst_plugin_ui.cc' ]
674 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
675 if bld.env['build_target'] != 'mingw':
678 if bld.is_defined('LXVST_SUPPORT'):
679 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
680 obj.defines += [ 'LXVST_SUPPORT' ]
683 if bld.is_defined('MACVST_SUPPORT'):
684 obj.source += [ 'mac_vst_plugin_ui.mm' ]
685 obj.defines += [ 'MACVST_SUPPORT' ]
687 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
688 obj.source += [ 'vst_plugin_ui.cc' ]
690 if bld.is_defined('PHONE_HOME'):
691 obj.defines += [ 'PHONE_HOME' ]
693 if bld.is_defined('HAVE_COREAUDIO'):
694 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
695 obj.use += ' libappleutility '
697 if bld.is_defined('AUDIOUNIT_SUPPORT'):
698 obj.source += [ 'au_pluginui.mm' ]
702 wrapper_subst_dict = {
703 'INSTALL_PREFIX' : bld.env['PREFIX'],
704 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
705 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
706 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
707 'LIBS' : 'build/libs',
708 'VERSION' : str (bld.env['VERSION']),
709 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
712 def set_subst_dict(obj, dict):
714 setattr(obj, i, dict[i])
716 obj = bld(features = 'subst')
717 obj.source = 'ardev_common.sh.in'
718 obj.target = 'ardev_common_waf.sh'
719 obj.chmod = Utils.O755
720 obj.dict = wrapper_subst_dict
721 set_subst_dict(obj, wrapper_subst_dict)
723 obj = bld(features = 'subst')
724 obj.source = 'ardour.sh.in'
725 obj.target = 'ardour' + str (bld.env['MAJOR'])
726 obj.chmod = Utils.O755
727 obj.dict = wrapper_subst_dict
728 obj.install_path = bld.env['BINDIR']
729 set_subst_dict(obj, wrapper_subst_dict)
731 if bld.is_defined('WINDOWS_VST_SUPPORT'):
732 obj = bld(features = 'subst')
733 obj.source = '../vst/ardourvst.in'
734 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
735 obj.chmod = Utils.O755
736 obj.dict = wrapper_subst_dict
737 obj.install_path = bld.env['BINDIR']
738 set_subst_dict(obj, wrapper_subst_dict)
747 if sys.platform == 'darwin':
760 if bld.env['build_target'] in ['panther', 'tiger', 'leopard'] or (Options.options.ppc and bld.env['build_target'] == 'snowleopard'):
761 # CTFontManagerRegisterFontsForURL for ArdourMono is 10.6 or newer
762 # "Lucida Grande" is not mono-spaced, but works for most cases, except big-clock-window
764 'MONOSPACE' : 'Monaco',
765 'CLOCKFONT' : 'Lucida Grande',
769 'MONOSPACE' : 'Monaco',
770 'CLOCKFONT' : 'ArdourMono',
772 else: # Linux/X11 & Windows fonts
773 basefont = '' # unspecified - use system defaults
786 'MONOSPACE' : 'ArdourMono',
787 'CLOCKFONT' : 'ArdourMono',
790 # Set up font substitution dictionary
792 for style in ['', 'BOLD', 'ITALIC']:
793 for sizename,points in iter(font_sizes.items()):
795 key = "_".join (['FONT',style,sizename])
796 fontstyle = " ".join ([basefont,style.lower(),points])
798 key = "_".join (['FONT',sizename])
799 fontstyle = " ".join ([basefont,points])
801 font_subst_dict[key] = fontstyle
804 for sizename,points in iter(font_sizes.items()):
805 key = "_".join (['FONT_SIZE',sizename])
806 font_subst_dict[key] = points
808 # various font names, eg @BOLD_MONOSPACE@
809 for font_sym,text in iter(font_names.items()):
811 font_subst_dict[key] = text
815 obj = bld(features = 'subst')
816 obj.source = [ 'clearlooks.rc.in' ]
817 obj.target = 'clearlooks.rc'
818 obj.install_path = bld.env['CONFDIR']
819 set_subst_dict(obj, font_subst_dict)
821 obj = bld(features = 'subst')
822 obj.source = [ 'default_ui_config.in' ]
823 obj.target = 'default_ui_config'
824 obj.install_path = bld.env['CONFDIR']
825 set_subst_dict(obj, font_subst_dict)
829 if sys.platform == 'darwin':
830 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
832 menus_argv = [ '-E', '-P' ]
834 if bld.is_defined('PTFORMAT'):
835 menus_argv += [ '-DPTFORMAT' ]
837 # always build all versions of the menu definitions
838 # so that we can try them out with different program builds.
839 for program in [ 'ardour', 'trx' ]:
840 obj = bld(features = 'command-output')
842 obj.command_is_external = True
844 obj.argv = menus_argv
845 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
846 obj.stdin = program + '.menus.in'
847 obj.stdout = program + '.menus'
848 bld.install_files (bld.env['CONFDIR'], program + '.menus')
851 freedesktop_subst_dict = {
852 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
853 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
854 'VERSION': str (bld.env['VERSION']),
857 if bld.env['FREEDESKTOP']:
858 obj = bld(features = 'subst')
859 obj.source = 'ardour.desktop.in'
860 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
861 obj.chmod = Utils.O644
862 obj.dict = freedesktop_subst_dict
863 set_subst_dict(obj, freedesktop_subst_dict)
865 obj = bld(features = 'subst')
866 obj.source = 'ardour-mime-info.xml'
867 obj.target = 'ardour.xml'
868 obj.chmod = Utils.O644
870 # build appdata with translations
872 appdata_i18n_xmlin(bld)
873 obj = bld(features = 'subst')
874 obj.source = 'ardour.appdata.xml.in'
875 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
876 obj.chmod = Utils.O644
877 obj.dict = freedesktop_subst_dict
878 set_subst_dict(obj, freedesktop_subst_dict)
882 # NATIVE ARDOUR BINDING FILES
883 # explicitly state the use of perl here so that it works on windows too
885 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
886 for b in [ 'ardour' ] :
888 target = b + '.keys',
889 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
892 obj.install_path = bld.env['CONFDIR']
895 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
896 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
898 # Application/Product specific resources (icon, splash)
899 pgmname = bld.env['PROGRAM_NAME']
900 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
902 if bld.env['build_target'] == 'mingw':
903 # These icons need to overwrite the files already installed in the icons
904 # directory above. Do this in the external packaging scripts for now.
905 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
906 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
908 # Default UI configuration
909 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
910 # Color Themes. Find each color file for this program only
912 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
914 # Default export stuff
915 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
918 if bld.is_defined('ENABLE_NLS'):
919 mo_files = bld.path.ant_glob('po/*.mo')
921 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
922 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
926 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
927 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
929 appdata_i18n_pot(bld)
933 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
934 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
936 appdata_i18n_pot(bld)
939 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
940 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
945 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
946 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
949 def appdata_i18n_pot(bld):
950 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
951 'ardour.appdata.pot')
952 if bld.cmd == 'i18n_pot':
953 Logs.info('Generating pot file from Ardour appdata')
954 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
955 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
956 'ardour.appdata.xml.in.in')
957 Logs.info('Updating ' + potfile)
959 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
961 print ('Error processing appdata pot file - ignored')
962 elif bld.cmd == 'clean' and os.path.exists(potfile):
963 Logs.info('Removing Ardour appdata pot file')
966 def appdata_i18n_po(bld):
967 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
968 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
970 def appdata_i18n_mo(bld):
971 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
972 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
974 def appdata_i18n_xmlin(bld):
975 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
976 'ardour.appdata.xml.in')
977 if bld.cmd == 'build':
978 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
979 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
980 'ardour.appdata.xml.in.in')
981 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
982 mo_files = glob.glob(mo_glob)
983 Logs.info('Generating ' + adxmlinfile)
984 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
985 '-j', adxmlininfile] + mo_files)
986 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
987 Logs.info('Removing ' + adxmlinfile)
988 os.remove(adxmlinfile)