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
19 path_prefix = 'gtk2_ardour/'
21 gtk2_ardour_sources = [
24 'add_route_dialog.cc',
25 'ambiguous_file_dialog.cc',
34 'ardour_ui_dependents.cc',
35 'ardour_ui_dialogs.cc',
38 'ardour_ui_options.cc',
41 'audio_region_editor.cc',
42 'audio_region_view.cc',
43 'audio_streamview.cc',
45 'automation_controller.cc',
47 'automation_region_view.cc',
48 'automation_streamview.cc',
49 'automation_time_axis.cc',
51 'big_clock_window.cc',
57 'control_point_dialog.cc',
61 'duplicate_routes_dialog.cc',
62 'edit_note_dialog.cc',
66 'editor_audio_import.cc',
67 'editor_pt_import.cc',
68 'editor_audiotrack.cc',
70 'editor_canvas_events.cc',
71 'editor_component.cc',
74 'editor_route_groups.cc',
75 'editor_export_audio.cc',
76 'editor_group_tabs.cc',
78 'editor_locations.cc',
86 'editor_selection.cc',
87 'editor_snapshots.cc',
89 'editor_tempodisplay.cc',
93 'export_channel_selector.cc',
95 'export_file_notebook.cc',
96 'export_filename_selector.cc',
97 'export_format_dialog.cc',
98 'export_format_selector.cc',
99 'export_preset_selector.cc',
101 'export_timespan_selector.cc',
105 'floating_text_entry.cc',
106 'sfdb_freesound_mootcher.cc',
108 'generic_pluginui.cc',
110 'global_port_matrix.cc',
112 'gtk_pianokeyboard.c',
114 'insert_remove_time_dialog.cc',
115 'instrument_selector.cc',
116 'interthread_progress_window.cc',
125 'lua_script_manager.cc',
131 'midi_automation_line.cc',
132 'midi_channel_dialog.cc',
133 'midi_channel_selector.cc',
134 'midi_cut_buffer.cc',
135 'midi_export_dialog.cc',
136 'midi_list_editor.cc',
137 'midi_port_dialog.cc',
138 'midi_region_view.cc',
141 'midi_streamview.cc',
144 'midi_velocity_dialog.cc',
145 'missing_file_dialog.cc',
146 'missing_plugin_dialog.cc',
148 'mixer_group_tabs.cc',
154 'monitor_section.cc',
155 'monitor_selector.cc',
157 'mono_panner_editor.cc',
160 'new_plugin_preset_dialog.cc',
161 'normalize_dialog.cc',
165 'note_select_dialog.cc',
172 'panner_interface.cc',
175 'piano_roll_header.cc',
177 'playlist_selector.cc',
179 'plugin_pin_dialog.cc',
180 'plugin_selector.cc',
185 'port_matrix_body.cc',
186 'port_matrix_column_labels.cc',
187 'port_matrix_component.cc',
188 'port_matrix_grid.cc',
189 'port_matrix_labels.cc',
190 'port_matrix_row_labels.cc',
192 'patch_change_dialog.cc',
193 'progress_reporter.cc',
196 'quantize_dialog.cc',
197 'rc_option_editor.cc',
199 'region_gain_line.cc',
200 'region_layering_order_editor.cc',
201 'region_selection.cc',
205 'route_group_dialog.cc',
206 'route_group_menu.cc',
207 'route_params_ui.cc',
208 'route_processor_selection.cc',
209 'route_time_axis.cc',
213 'search_path_option.cc',
214 'script_selector.cc',
216 'selection_memento.cc',
219 'session_import_dialog.cc',
220 'session_metadata_dialog.cc',
221 'session_option_editor.cc',
223 'shuttle_control.cc',
224 'soundcloud_export_selector.cc',
231 'stereo_panner_editor.cc',
233 'strip_silence_dialog.cc',
235 'tape_region_view.cc',
240 'time_axis_view_item.cc',
246 'track_selection.cc',
247 'track_view_list.cc',
248 'transform_dialog.cc',
249 'transpose_dialog.cc',
253 'visibility_group.cc',
255 # video-timeline related sources:
256 'video_image_frame.cc',
257 'add_video_dialog.cc',
258 'editor_videotimeline.cc',
261 'transcode_ffmpeg.cc',
262 'transcode_video_dialog.cc',
263 'video_server_dialog.cc',
265 'export_video_dialog.cc',
266 'export_video_infobox.cc',
267 'video_tool_paths.cc'
270 def enoify (major, minor):
271 # Code names based on
272 # https://en.wikipedia.org/wiki/Brian_Eno_discography
274 # sort Studio albums + Collaborative albums + Compilation albums by Month/Year.
275 # (no Singles, no EPs, no Video Albums, no Production)
277 return "\\n\\\"E-No\\\""
280 return "\\n\\\"No Pussyfooting\\\""
282 return "\\n\\\"Here Come the Warm Jets\\\""
284 return "\\n\\\"Taking Tiger Mountain\\\""
286 return "\\n\\\"Lady June's Linguistic Leprosy\\\""
288 return "\\n\\\"Discreet Music\\\""
290 return "\\n\\\"Another Green World\\\""
292 return "\\n\\\"Evening Star\\\""
294 return "\\n\\\"Cluster and Eno\\\""
296 return "\\n\\\"Before and After Science\\\""
300 autowaf.set_options(opt)
304 conf.load('compiler_cxx')
305 autowaf.configure(conf)
307 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
309 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
311 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
312 atleast_version='3.3.5', mandatory=False)
313 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
314 atleast_version='1.2.1')
315 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
316 atleast_version='2.10.1')
317 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
318 atleast_version='2.18')
319 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
320 atleast_version='2.18')
321 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
322 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
323 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
325 conf.write_config_header('gtk2ardour-config.h', remove=False)
327 bak = conf.env['define_key']
328 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
329 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
330 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
331 conf.write_config_header('gtk2ardour-version.h')
332 conf.env['define_key'] = bak;
335 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
336 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
338 # Add a waf `feature' to allow compilation of things using winegcc
339 from waflib.TaskGen import feature
341 def set_winegcc(self):
342 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
343 self.env.CC = 'winegcc'
345 def _doPyp(infileName, deps = False):
348 re_spaces = re.compile("\s+")
350 if infileName == '-':
353 fd = open(infileName)
354 inLines = fd.readlines()
360 bits = re_spaces.split(line)
361 if bits[0] == '##include':
366 # assume included file comes from same place as source file
367 incName = os.path.join (os.path.dirname (infileName), incName);
368 outStr += _doPyp(incName)
379 def include_processor(task):
380 infileName = task.inputs[0].srcpath()
381 outfileName = os.path.join(out, task.outputs[0].bldpath())
382 fdOut = open (outfileName, "w")
383 fdOut.write (_doPyp(infileName))
387 def build_color_scheme(path, prefix):
391 if re.search ('^#@color', line):
392 line.strip() # remove newline
394 if len(color_scheme):
396 color_scheme += prefix
398 color_scheme += words[1]
400 color_scheme += words[2]
406 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
407 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
409 # Tool to dump lua-bindings (of gtk2ardour + libs)
410 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
411 obj = bld (features = 'cxx c cxxprogram')
412 obj.install_path = None
413 obj.source = list(gtk2_ardour_sources)
414 obj.target = 'luadoc'
415 obj.includes = ['.', '../libs']
416 obj.ldflags = ['-no-undefined']
429 'PACKAGE="' + I18N_PACKAGE + '"',
430 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
431 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
432 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
435 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
436 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
437 if bld.is_defined('HAVE_SUIL'):
438 obj.source += [ 'lv2_plugin_ui.cc' ]
439 obj.use += [ 'SUIL' ]
440 if bld.is_defined('LXVST_SUPPORT'):
441 obj.source += [ 'vst_plugin_ui.cc' ]
442 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
443 obj.defines += [ 'LXVST_SUPPORT' ]
447 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
448 # Windows VST support w/wine
449 # If we require VST support we build a stub main() and the FST library
450 # here using winegcc, and link it to the GTK front-end library
451 obj = bld (features = 'cxx c cxxprogram wine')
452 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
454 # XXX do we really need to explicitly link to all of these for the wine executable?
456 obj.use = [ 'libpbd',
467 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
468 obj.includes = [ '../libs/fst', '.' ]
469 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
470 obj.linkflags += bld.env['LDFLAGS']
471 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
472 obj.install_path = bld.env['DLLDIR']
473 # end of the wine executable
475 # now the shared library containing the GTK GUI for ardour
476 obj = bld (features = 'cxx c cxxshlib')
477 # operate on copy to avoid adding sources twice
478 obj.source = list(gtk2_ardour_sources)
479 obj.includes = [ '../libs/fst', '.' ]
480 obj.name = 'libgtk2_ardour'
481 obj.target = 'gtk2_ardour'
482 obj.cflags = [ '-fPIC' ]
485 # just the normal executable version of the GTK GUI
486 if bld.env['build_target'] == 'mingw':
487 obj = bld (features = 'cxx c cxxprogram winres')
489 obj = bld (features = 'cxx c cxxprogram')
490 # operate on copy to avoid adding sources twice
491 obj.source = list(gtk2_ardour_sources)
492 obj.target = 'ardour-' + str (bld.env['VERSION'])
494 obj.ldflags = ['-no-undefined']
496 if bld.is_defined('WINDOWS_VST_SUPPORT'):
497 # Windows VST support mingw
498 obj.includes += [ '../libs/fst' ]
500 # at this point, "obj" refers to either the normal native executable
501 # OR the shared library built for use with wine on linux.
503 obj.use = [ 'libpbd',
514 'PACKAGE="' + I18N_PACKAGE + '"',
515 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
516 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
517 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
519 obj.install_path = bld.env['DLLDIR']
521 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
523 if sys.platform == 'darwin':
524 obj.uselib += ' AUDIOUNITS OSX '
525 obj.use += ' libappleutility'
526 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
527 elif bld.env['build_target'] == 'mingw':
528 obj.source += [ 'bundle_env_mingw.cc' ]
529 obj.source += [ 'windows_icon.rc' ]
531 obj.source += [ 'bundle_env_linux.cc' ]
533 obj.includes += ['../libs']
535 obj.use += 'libptformat'
537 if bld.env['build_target'] == 'mingw':
538 obj.linkflags += ' -mwindows'
540 if bld.is_defined('HAVE_SUIL'):
541 obj.source += [ 'lv2_plugin_ui.cc' ]
542 obj.use += [ 'SUIL' ]
544 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
545 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
547 if bld.is_defined('NEED_INTL'):
548 obj.linkflags += ' -lintl'
550 if bld.is_defined('WINDOWS_VST_SUPPORT'):
551 obj.source += [ 'windows_vst_plugin_ui.cc' ]
552 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
553 if bld.env['build_target'] != 'mingw':
556 if bld.is_defined('LXVST_SUPPORT'):
557 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
558 obj.defines += [ 'LXVST_SUPPORT' ]
561 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT'):
562 obj.source += [ 'vst_plugin_ui.cc' ]
564 if bld.is_defined('PHONE_HOME'):
565 obj.defines += [ 'PHONE_HOME' ]
567 if bld.is_defined('HAVE_COREAUDIO'):
568 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
569 obj.use += ' libappleutility '
571 if bld.is_defined('AUDIOUNIT_SUPPORT'):
572 obj.source += [ 'au_pluginui.mm' ]
576 wrapper_subst_dict = {
577 'INSTALL_PREFIX' : bld.env['PREFIX'],
578 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
579 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
580 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
581 'LIBS' : 'build/libs',
582 'VERSION' : str (bld.env['VERSION']),
583 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
586 def set_subst_dict(obj, dict):
588 setattr(obj, i, dict[i])
590 obj = bld(features = 'subst')
591 obj.source = 'ardev_common.sh.in'
592 obj.target = 'ardev_common_waf.sh'
593 obj.chmod = Utils.O755
594 obj.dict = wrapper_subst_dict
595 set_subst_dict(obj, wrapper_subst_dict)
597 obj = bld(features = 'subst')
598 obj.source = 'ardour.sh.in'
599 obj.target = 'ardour' + str (bld.env['MAJOR'])
600 obj.chmod = Utils.O755
601 obj.dict = wrapper_subst_dict
602 obj.install_path = bld.env['BINDIR']
603 set_subst_dict(obj, wrapper_subst_dict)
605 if bld.is_defined('WINDOWS_VST_SUPPORT'):
606 obj = bld(features = 'subst')
607 obj.source = '../vst/ardourvst.in'
608 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
609 obj.chmod = Utils.O755
610 obj.dict = wrapper_subst_dict
611 obj.install_path = bld.env['BINDIR']
612 set_subst_dict(obj, wrapper_subst_dict)
621 if sys.platform == 'darwin':
635 # There is no acceptable monospace font available on older versions of OS X
636 # and no API on those versions to load TTF files that will work with
637 # GTK/fontconfig/pango.
639 # In addition, the ArdourMono font gets clipped for some reason on OS X
641 # Moreover, Lucida Grande just seems to work even though it is not monospace
645 'MONOSPACE' : 'Monaco',
646 'CLOCKFONT' : 'Lucida Grande',
648 else: # Linux/X11 fonts
649 basefont = '' # unspecified - use system defaults
662 'MONOSPACE' : 'ArdourMono',
663 'CLOCKFONT' : 'ArdourMono',
666 # Set up font substitution dictionary
668 for style in ['', 'BOLD', 'ITALIC']:
669 for sizename,points in iter(font_sizes.items()):
671 key = "_".join (['FONT',style,sizename])
672 fontstyle = " ".join ([basefont,style.lower(),points])
674 key = "_".join (['FONT',sizename])
675 fontstyle = " ".join ([basefont,points])
677 font_subst_dict[key] = fontstyle
680 for sizename,points in iter(font_sizes.items()):
681 key = "_".join (['FONT_SIZE',sizename])
682 font_subst_dict[key] = points
684 # various font names, eg @BOLD_MONOSPACE@
685 for font_sym,text in iter(font_names.items()):
687 font_subst_dict[key] = text
691 obj = bld(features = 'subst')
692 obj.source = [ 'clearlooks.rc.in' ]
693 obj.target = 'clearlooks.rc'
694 obj.install_path = bld.env['CONFDIR']
695 set_subst_dict(obj, font_subst_dict)
697 obj = bld(features = 'subst')
698 obj.source = [ 'default_ui_config.in' ]
699 obj.target = 'default_ui_config'
700 obj.install_path = bld.env['CONFDIR']
701 set_subst_dict(obj, font_subst_dict)
705 if sys.platform == 'darwin':
706 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
708 menus_argv = [ '-E', '-P' ]
710 if bld.is_defined('PTFORMAT'):
711 menus_argv += [ '-DPTFORMAT' ]
713 # always build all versions of the menu definitions
714 # so that we can try them out with different program builds.
715 for program in [ 'ardour', 'trx' ]:
716 obj = bld(features = 'command-output')
718 obj.command_is_external = True
720 obj.argv = menus_argv
721 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
722 obj.stdin = program + '.menus.in'
723 obj.stdout = program + '.menus'
724 bld.install_files (bld.env['CONFDIR'], program + '.menus')
727 freedesktop_subst_dict = {
728 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
729 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
730 'VERSION': str (bld.env['VERSION']),
733 if bld.env['FREEDESKTOP']:
734 obj = bld(features = 'subst')
735 obj.source = 'ardour.desktop.in'
736 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
737 obj.chmod = Utils.O644
738 obj.dict = freedesktop_subst_dict
739 set_subst_dict(obj, freedesktop_subst_dict)
741 obj = bld(features = 'subst')
742 obj.source = 'ardour-mime-info.xml'
743 obj.target = 'ardour.xml'
744 obj.chmod = Utils.O644
746 # build appdata with translations
748 appdata_i18n_xmlin(bld)
749 obj = bld(features = 'subst')
750 obj.source = 'ardour.appdata.xml.in'
751 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
752 obj.chmod = Utils.O644
753 obj.dict = freedesktop_subst_dict
754 set_subst_dict(obj, freedesktop_subst_dict)
758 # NATIVE ARDOUR BINDING FILES
759 # explicitly state the use of perl here so that it works on windows too
761 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
762 for b in [ 'ardour' ] :
764 target = b + '.keys',
765 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
768 obj.install_path = bld.env['CONFDIR']
771 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
772 bld.install_files(os.path.join (bld.env['DATADIR'], 'pixmaps'), bld.path.ant_glob('pixmaps/*.xpm'))
773 bld.install_files(bld.env['DATADIR'], 'splash.png')
774 bld.install_files(bld.env['DATADIR'], 'small-splash.png')
775 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
777 if bld.env['build_target'] == 'mingw':
778 # These icons need to overwrite the files already installed in the icons
779 # directory above. Do this in the external packaging scripts for now.
780 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
781 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
783 # Default UI configuration
784 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
786 bld.install_files(bld.env['CONFDIR'], 'dark.colors')
788 # Default export stuff
789 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
792 if bld.is_defined('ENABLE_NLS'):
793 mo_files = bld.path.ant_glob('po/*.mo')
795 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
796 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
800 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
801 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
803 appdata_i18n_pot(bld)
807 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
808 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
810 appdata_i18n_pot(bld)
813 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
814 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
819 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
820 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
823 def appdata_i18n_pot(bld):
824 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
825 'ardour.appdata.pot')
826 if bld.cmd == 'build':
827 Logs.info('Generating pot file from Ardour appdata')
828 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
829 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
830 'ardour.appdata.xml.in.in')
831 Logs.info('Updating ' + potfile)
832 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
833 elif bld.cmd == 'clean' and os.path.exists(potfile):
834 Logs.info('Removing Ardour appdata pot file')
837 def appdata_i18n_po(bld):
838 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
839 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
841 def appdata_i18n_mo(bld):
842 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
843 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
845 def appdata_i18n_xmlin(bld):
846 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
847 'ardour.appdata.xml.in')
848 if bld.cmd == 'build':
849 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
850 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
851 'ardour.appdata.xml.in.in')
852 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
853 mo_files = glob.glob(mo_glob)
854 Logs.info('Generating ' + adxmlinfile)
855 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
856 '-j', adxmlininfile] + mo_files)
857 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
858 Logs.info('Removing ' + adxmlinfile)
859 os.remove(adxmlinfile)