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',
43 'ardour_ui_dependents.cc',
44 'ardour_ui_dialogs.cc',
47 'ardour_ui_options.cc',
50 'audio_region_editor.cc',
51 'audio_region_view.cc',
52 'audio_streamview.cc',
54 'automation_controller.cc',
56 'automation_region_view.cc',
57 'automation_streamview.cc',
58 'automation_time_axis.cc',
60 'big_clock_window.cc',
64 'color_theme_manager.cc',
67 'control_point_dialog.cc',
68 'control_slave_ui.cc',
72 'duplicate_routes_dialog.cc',
73 'edit_note_dialog.cc',
77 'editor_audio_import.cc',
78 'editor_pt_import.cc',
79 'editor_audiotrack.cc',
81 'editor_canvas_events.cc',
82 'editor_component.cc',
85 'editor_route_groups.cc',
86 'editor_export_audio.cc',
87 'editor_group_tabs.cc',
89 'editor_locations.cc',
97 'editor_selection.cc',
98 'editor_snapshots.cc',
100 'editor_tempodisplay.cc',
104 'export_channel_selector.cc',
106 'export_file_notebook.cc',
107 'export_filename_selector.cc',
108 'export_format_dialog.cc',
109 'export_format_selector.cc',
110 'export_preset_selector.cc',
112 'export_timespan_selector.cc',
116 'floating_text_entry.cc',
117 'sfdb_freesound_mootcher.cc',
119 'generic_pluginui.cc',
121 'global_port_matrix.cc',
123 'gtk_pianokeyboard.c',
125 'insert_remove_time_dialog.cc',
126 'instrument_selector.cc',
127 'interthread_progress_window.cc',
136 '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_port_dialog.cc',
149 'midi_region_view.cc',
152 'midi_streamview.cc',
155 '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 'piano_roll_header.cc',
187 'playlist_selector.cc',
189 'plugin_pin_dialog.cc',
190 'plugin_setup_dialog.cc',
191 'plugin_selector.cc',
196 'port_matrix_body.cc',
197 'port_matrix_column_labels.cc',
198 'port_matrix_component.cc',
199 'port_matrix_grid.cc',
200 'port_matrix_labels.cc',
201 'port_matrix_row_labels.cc',
203 'patch_change_dialog.cc',
204 'progress_reporter.cc',
207 'quantize_dialog.cc',
208 'rc_option_editor.cc',
210 'region_gain_line.cc',
211 'region_layering_order_editor.cc',
212 'region_selection.cc',
216 'route_group_dialog.cc',
217 'route_group_menu.cc',
218 'route_params_ui.cc',
219 'route_processor_selection.cc',
220 'route_time_axis.cc',
224 'search_path_option.cc',
225 'script_selector.cc',
227 'selection_memento.cc',
230 'session_import_dialog.cc',
231 'session_metadata_dialog.cc',
232 'session_option_editor.cc',
234 'shuttle_control.cc',
235 'soundcloud_export_selector.cc',
242 'stereo_panner_editor.cc',
244 'strip_silence_dialog.cc',
246 'tape_region_view.cc',
252 '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\\\""
317 autowaf.set_options(opt)
321 conf.load('compiler_cxx')
322 autowaf.configure(conf)
324 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
326 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
328 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
329 atleast_version='3.3.5', mandatory=False)
330 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
331 atleast_version='1.2.1')
332 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
333 atleast_version='2.10.1')
334 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
335 atleast_version='2.18')
336 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
337 atleast_version='2.18')
338 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
339 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
340 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
343 if sys.platform == 'darwin':
344 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
345 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
346 env = conf.env.derive (),
349 compile_filename='test.m',
354 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
355 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
357 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
359 conf.write_config_header('gtk2ardour-config.h', remove=False)
361 bak = conf.env['define_key']
362 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
363 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
364 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
365 conf.write_config_header('gtk2ardour-version.h')
366 conf.env['define_key'] = bak;
369 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
370 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
372 # Add a waf `feature' to allow compilation of things using winegcc
373 from waflib.TaskGen import feature
375 def set_winegcc(self):
376 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
377 self.env.CC = 'winegcc'
379 def _doPyp(infileName, deps = False):
382 re_spaces = re.compile("\s+")
384 if infileName == '-':
387 fd = open(infileName)
388 inLines = fd.readlines()
394 bits = re_spaces.split(line)
395 if bits[0] == '##include':
400 # assume included file comes from same place as source file
401 incName = os.path.join (os.path.dirname (infileName), incName);
402 outStr += _doPyp(incName)
413 def include_processor(task):
414 infileName = task.inputs[0].srcpath()
415 outfileName = os.path.join(out, task.outputs[0].bldpath())
416 fdOut = open (outfileName, "w")
417 fdOut.write (_doPyp(infileName))
421 def build_color_scheme(path, prefix):
425 if re.search ('^#@color', line):
426 line.strip() # remove newline
428 if len(color_scheme):
430 color_scheme += prefix
432 color_scheme += words[1]
434 color_scheme += words[2]
440 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
441 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
443 # Tool to dump lua-bindings (of gtk2ardour + libs)
444 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
445 obj = bld (features = 'cxx c cxxprogram')
446 obj.install_path = None
447 obj.source = list(gtk2_ardour_sources)
448 obj.target = 'luadoc'
449 obj.includes = ['.', '../libs']
450 obj.ldflags = ['-no-undefined']
463 'PACKAGE="' + I18N_PACKAGE + '"',
464 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
465 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
466 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
469 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
470 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
471 if bld.is_defined('HAVE_SUIL'):
472 obj.source += [ 'lv2_plugin_ui.cc' ]
473 obj.use += [ 'SUIL' ]
474 if bld.is_defined('LXVST_SUPPORT'):
475 obj.source += [ 'vst_plugin_ui.cc' ]
476 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
477 obj.defines += [ 'LXVST_SUPPORT' ]
481 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
482 # Windows VST support w/wine
483 # If we require VST support we build a stub main() and the FST library
484 # here using winegcc, and link it to the GTK front-end library
485 obj = bld (features = 'cxx c cxxprogram wine')
486 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
488 # XXX do we really need to explicitly link to all of these for the wine executable?
490 obj.use = [ 'libpbd',
501 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
502 obj.includes = [ '../libs/fst', '.' ]
503 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
504 obj.linkflags += bld.env['LDFLAGS']
505 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
506 obj.install_path = bld.env['DLLDIR']
507 # end of the wine executable
509 # now the shared library containing the GTK GUI for ardour
510 obj = bld (features = 'cxx c cxxshlib')
511 # operate on copy to avoid adding sources twice
512 obj.source = list(gtk2_ardour_sources)
513 obj.includes = [ '../libs/fst', '.' ]
514 obj.name = 'libgtk2_ardour'
515 obj.target = 'gtk2_ardour'
516 obj.cflags = [ '-fPIC' ]
519 # just the normal executable version of the GTK GUI
520 if bld.env['build_target'] == 'mingw':
521 obj = bld (features = 'cxx c cxxprogram winres')
523 obj = bld (features = 'cxx c cxxprogram')
524 # operate on copy to avoid adding sources twice
525 obj.source = list(gtk2_ardour_sources)
526 obj.target = 'ardour-' + str (bld.env['VERSION'])
528 obj.ldflags = ['-no-undefined']
530 if bld.is_defined('WINDOWS_VST_SUPPORT'):
531 # Windows VST support mingw
532 obj.includes += [ '../libs/fst' ]
534 # at this point, "obj" refers to either the normal native executable
535 # OR the shared library built for use with wine on linux.
537 obj.use = [ 'libpbd',
548 'PACKAGE="' + I18N_PACKAGE + '"',
549 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
550 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
551 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
553 obj.install_path = bld.env['DLLDIR']
555 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
557 if sys.platform == 'darwin':
558 obj.uselib += ' AUDIOUNITS OSX '
559 obj.use += ' libappleutility'
560 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
561 elif bld.env['build_target'] == 'mingw':
562 obj.source += [ 'bundle_env_mingw.cc' ]
563 obj.source += [ 'windows_icon.rc' ]
565 obj.source += [ 'bundle_env_linux.cc' ]
567 obj.includes += ['../libs']
569 obj.use += 'libptformat'
571 if bld.env['build_target'] == 'mingw':
572 obj.linkflags += ' -mwindows'
574 if bld.is_defined('HAVE_SUIL'):
575 obj.source += [ 'lv2_plugin_ui.cc' ]
576 obj.use += [ 'SUIL' ]
578 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
579 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
581 if bld.is_defined('NEED_INTL'):
582 obj.linkflags += ' -lintl'
584 if bld.is_defined('WINDOWS_VST_SUPPORT'):
585 obj.source += [ 'windows_vst_plugin_ui.cc' ]
586 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
587 if bld.env['build_target'] != 'mingw':
590 if bld.is_defined('LXVST_SUPPORT'):
591 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
592 obj.defines += [ 'LXVST_SUPPORT' ]
595 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT'):
596 obj.source += [ 'vst_plugin_ui.cc' ]
598 if bld.is_defined('PHONE_HOME'):
599 obj.defines += [ 'PHONE_HOME' ]
601 if bld.is_defined('HAVE_COREAUDIO'):
602 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
603 obj.use += ' libappleutility '
605 if bld.is_defined('AUDIOUNIT_SUPPORT'):
606 obj.source += [ 'au_pluginui.mm' ]
610 wrapper_subst_dict = {
611 'INSTALL_PREFIX' : bld.env['PREFIX'],
612 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
613 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
614 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
615 'LIBS' : 'build/libs',
616 'VERSION' : str (bld.env['VERSION']),
617 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
620 def set_subst_dict(obj, dict):
622 setattr(obj, i, dict[i])
624 obj = bld(features = 'subst')
625 obj.source = 'ardev_common.sh.in'
626 obj.target = 'ardev_common_waf.sh'
627 obj.chmod = Utils.O755
628 obj.dict = wrapper_subst_dict
629 set_subst_dict(obj, wrapper_subst_dict)
631 obj = bld(features = 'subst')
632 obj.source = 'ardour.sh.in'
633 obj.target = 'ardour' + str (bld.env['MAJOR'])
634 obj.chmod = Utils.O755
635 obj.dict = wrapper_subst_dict
636 obj.install_path = bld.env['BINDIR']
637 set_subst_dict(obj, wrapper_subst_dict)
639 if bld.is_defined('WINDOWS_VST_SUPPORT'):
640 obj = bld(features = 'subst')
641 obj.source = '../vst/ardourvst.in'
642 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
643 obj.chmod = Utils.O755
644 obj.dict = wrapper_subst_dict
645 obj.install_path = bld.env['BINDIR']
646 set_subst_dict(obj, wrapper_subst_dict)
655 if sys.platform == 'darwin':
669 # There is no acceptable monospace font available on older versions of OS X
670 # and no API on those versions to load TTF files that will work with
671 # GTK/fontconfig/pango.
673 # In addition, the ArdourMono font gets clipped for some reason on OS X
675 # Moreover, Lucida Grande just seems to work even though it is not monospace
679 'MONOSPACE' : 'Monaco',
680 'CLOCKFONT' : 'Lucida Grande',
682 else: # Linux/X11 fonts
683 basefont = '' # unspecified - use system defaults
696 'MONOSPACE' : 'ArdourMono',
697 'CLOCKFONT' : 'ArdourMono',
700 # Set up font substitution dictionary
702 for style in ['', 'BOLD', 'ITALIC']:
703 for sizename,points in iter(font_sizes.items()):
705 key = "_".join (['FONT',style,sizename])
706 fontstyle = " ".join ([basefont,style.lower(),points])
708 key = "_".join (['FONT',sizename])
709 fontstyle = " ".join ([basefont,points])
711 font_subst_dict[key] = fontstyle
714 for sizename,points in iter(font_sizes.items()):
715 key = "_".join (['FONT_SIZE',sizename])
716 font_subst_dict[key] = points
718 # various font names, eg @BOLD_MONOSPACE@
719 for font_sym,text in iter(font_names.items()):
721 font_subst_dict[key] = text
725 obj = bld(features = 'subst')
726 obj.source = [ 'clearlooks.rc.in' ]
727 obj.target = 'clearlooks.rc'
728 obj.install_path = bld.env['CONFDIR']
729 set_subst_dict(obj, font_subst_dict)
731 obj = bld(features = 'subst')
732 obj.source = [ 'default_ui_config.in' ]
733 obj.target = 'default_ui_config'
734 obj.install_path = bld.env['CONFDIR']
735 set_subst_dict(obj, font_subst_dict)
739 if sys.platform == 'darwin':
740 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
742 menus_argv = [ '-E', '-P' ]
744 if bld.is_defined('PTFORMAT'):
745 menus_argv += [ '-DPTFORMAT' ]
747 # always build all versions of the menu definitions
748 # so that we can try them out with different program builds.
749 for program in [ 'ardour', 'trx' ]:
750 obj = bld(features = 'command-output')
752 obj.command_is_external = True
754 obj.argv = menus_argv
755 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
756 obj.stdin = program + '.menus.in'
757 obj.stdout = program + '.menus'
758 bld.install_files (bld.env['CONFDIR'], program + '.menus')
761 freedesktop_subst_dict = {
762 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
763 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
764 'VERSION': str (bld.env['VERSION']),
767 if bld.env['FREEDESKTOP']:
768 obj = bld(features = 'subst')
769 obj.source = 'ardour.desktop.in'
770 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
771 obj.chmod = Utils.O644
772 obj.dict = freedesktop_subst_dict
773 set_subst_dict(obj, freedesktop_subst_dict)
775 obj = bld(features = 'subst')
776 obj.source = 'ardour-mime-info.xml'
777 obj.target = 'ardour.xml'
778 obj.chmod = Utils.O644
780 # build appdata with translations
782 appdata_i18n_xmlin(bld)
783 obj = bld(features = 'subst')
784 obj.source = 'ardour.appdata.xml.in'
785 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
786 obj.chmod = Utils.O644
787 obj.dict = freedesktop_subst_dict
788 set_subst_dict(obj, freedesktop_subst_dict)
792 # NATIVE ARDOUR BINDING FILES
793 # explicitly state the use of perl here so that it works on windows too
795 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
796 for b in [ 'ardour' ] :
798 target = b + '.keys',
799 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
802 obj.install_path = bld.env['CONFDIR']
805 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
806 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
808 # Application/Product specific resources (icon, splash)
809 pgmname = Options.options.program_name;
810 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
812 if bld.env['build_target'] == 'mingw':
813 # These icons need to overwrite the files already installed in the icons
814 # directory above. Do this in the external packaging scripts for now.
815 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
816 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
818 # Default UI configuration
819 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
820 # Color Themes. Find each color file for this program only
822 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + Options.options.program_name.lower() + '.colors'));
824 # Default export stuff
825 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
828 if bld.is_defined('ENABLE_NLS'):
829 mo_files = bld.path.ant_glob('po/*.mo')
831 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
832 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
836 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
837 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
839 appdata_i18n_pot(bld)
843 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
844 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
846 appdata_i18n_pot(bld)
849 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
850 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
855 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
856 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
859 def appdata_i18n_pot(bld):
860 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
861 'ardour.appdata.pot')
862 if bld.cmd == 'i18n_pot':
863 Logs.info('Generating pot file from Ardour appdata')
864 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
865 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
866 'ardour.appdata.xml.in.in')
867 Logs.info('Updating ' + potfile)
868 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
869 elif bld.cmd == 'clean' and os.path.exists(potfile):
870 Logs.info('Removing Ardour appdata pot file')
873 def appdata_i18n_po(bld):
874 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
875 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
877 def appdata_i18n_mo(bld):
878 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
879 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
881 def appdata_i18n_xmlin(bld):
882 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
883 'ardour.appdata.xml.in')
884 if bld.cmd == 'build':
885 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
886 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
887 'ardour.appdata.xml.in.in')
888 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
889 mo_files = glob.glob(mo_glob)
890 Logs.info('Generating ' + adxmlinfile)
891 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
892 '-j', adxmlininfile] + mo_files)
893 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
894 Logs.info('Removing ' + adxmlinfile)
895 os.remove(adxmlinfile)