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',
192 'plugin_dspload_ui.cc',
193 'plugin_dspload_window.cc',
197 'port_matrix_body.cc',
198 'port_matrix_column_labels.cc',
199 'port_matrix_component.cc',
200 'port_matrix_grid.cc',
201 'port_matrix_labels.cc',
202 'port_matrix_row_labels.cc',
204 'processor_selection.cc',
205 'patch_change_dialog.cc',
206 'progress_reporter.cc',
207 'pt_import_selector.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 'transport_masters_dialog.cc',
269 'transpose_dialog.cc',
272 'vca_master_strip.cc',
274 'visibility_group.cc',
276 # video-timeline related sources:
277 'video_image_frame.cc',
278 'add_video_dialog.cc',
279 'editor_videotimeline.cc',
283 'transcode_ffmpeg.cc',
284 'transcode_video_dialog.cc',
285 'video_server_dialog.cc',
287 'export_video_dialog.cc',
288 'export_video_infobox.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 = [ bld.env['compiler_flags_dict']['pic'] ]
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']),
855 'DATE': str (bld.env['DATE']),
858 if bld.env['FREEDESKTOP']:
859 obj = bld(features = 'subst')
860 obj.source = 'ardour.desktop.in'
861 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
862 obj.chmod = Utils.O644
863 obj.dict = freedesktop_subst_dict
864 set_subst_dict(obj, freedesktop_subst_dict)
866 obj = bld(features = 'subst')
867 obj.source = 'ardour-mime-info.xml'
868 obj.target = 'ardour.xml'
869 obj.chmod = Utils.O644
871 # build appdata with translations
873 appdata_i18n_xmlin(bld)
874 obj = bld(features = 'subst')
875 obj.source = 'ardour.appdata.xml.in'
876 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
877 obj.chmod = Utils.O644
878 obj.dict = freedesktop_subst_dict
879 set_subst_dict(obj, freedesktop_subst_dict)
883 # NATIVE ARDOUR BINDING FILES
884 # explicitly state the use of perl here so that it works on windows too
886 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
887 for b in [ 'ardour' ] :
889 target = b + '.keys',
890 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
893 obj.install_path = bld.env['CONFDIR']
896 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
897 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
899 # Application/Product specific resources (icon, splash)
900 pgmname = bld.env['PROGRAM_NAME']
901 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
903 if bld.env['build_target'] == 'mingw':
904 # These icons need to overwrite the files already installed in the icons
905 # directory above. Do this in the external packaging scripts for now.
906 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
907 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
909 # Default UI configuration
910 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
911 # Color Themes. Find each color file for this program only
913 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
915 # Default export stuff
916 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
919 if bld.is_defined('ENABLE_NLS'):
920 mo_files = bld.path.ant_glob('po/*.mo')
922 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
923 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
927 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
928 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
930 appdata_i18n_pot(bld)
934 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
935 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
937 appdata_i18n_pot(bld)
940 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
941 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
946 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
947 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
950 def appdata_i18n_pot(bld):
951 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
952 'ardour.appdata.pot')
953 if bld.cmd == 'i18n_pot':
954 Logs.info('Generating pot file from Ardour appdata')
955 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
956 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
957 'ardour.appdata.xml.in.in')
958 Logs.info('Updating ' + potfile)
960 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
962 print ('Error processing appdata pot file - ignored')
963 elif bld.cmd == 'clean' and os.path.exists(potfile):
964 Logs.info('Removing Ardour appdata pot file')
967 def appdata_i18n_po(bld):
968 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
969 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
971 def appdata_i18n_mo(bld):
972 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
973 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
975 def appdata_i18n_xmlin(bld):
976 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
977 'ardour.appdata.xml.in')
978 if bld.cmd == 'build':
979 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
980 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
981 'ardour.appdata.xml.in.in')
982 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
983 mo_files = glob.glob(mo_glob)
984 Logs.info('Generating ' + adxmlinfile)
985 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
986 '-j', adxmlininfile] + mo_files)
987 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
988 Logs.info('Removing ' + adxmlinfile)
989 os.remove(adxmlinfile)