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_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 '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',
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',
247 '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\\\""
315 return "\\n\\\"Music for Airports\\\""
317 return "\\n\\\"Music for Films\\\""
319 return "\\n\\\"In a Land of Clear Colours\\\""
321 return "\\n\\\"The Plateaux of Mirror\\\""
323 return "\\n\\\"Possible Musics\\\""
325 return "\\n\\\"My Life in the Bush of Ghosts\\\""
329 autowaf.set_options(opt)
333 conf.load('compiler_cxx')
334 autowaf.configure(conf)
336 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
338 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
340 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
341 atleast_version='3.3.5', mandatory=False)
342 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
343 atleast_version='1.2.1')
344 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
345 atleast_version='2.10.1')
346 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
347 atleast_version='2.18')
348 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
349 atleast_version='2.18')
350 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
351 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
352 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
353 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
356 if sys.platform == 'darwin':
357 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
358 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
359 env = conf.env.derive (),
362 compile_filename='test.m',
367 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
368 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
370 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
372 conf.write_config_header('gtk2ardour-config.h', remove=False)
374 bak = conf.env['define_key']
375 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
376 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
377 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
378 conf.write_config_header('gtk2ardour-version.h')
379 conf.env['define_key'] = bak;
382 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
383 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
385 # Add a waf `feature' to allow compilation of things using winegcc
386 from waflib.TaskGen import feature
388 def set_winegcc(self):
389 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
390 self.env.CC = 'winegcc'
392 def _doPyp(infileName, deps = False):
395 re_spaces = re.compile("\s+")
397 if infileName == '-':
400 fd = open(infileName)
401 inLines = fd.readlines()
407 bits = re_spaces.split(line)
408 if bits[0] == '##include':
413 # assume included file comes from same place as source file
414 incName = os.path.join (os.path.dirname (infileName), incName);
415 outStr += _doPyp(incName)
426 def include_processor(task):
427 infileName = task.inputs[0].srcpath()
428 outfileName = os.path.join(out, task.outputs[0].bldpath())
429 fdOut = open (outfileName, "w")
430 fdOut.write (_doPyp(infileName))
434 def build_color_scheme(path, prefix):
438 if re.search ('^#@color', line):
439 line.strip() # remove newline
441 if len(color_scheme):
443 color_scheme += prefix
445 color_scheme += words[1]
447 color_scheme += words[2]
453 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
454 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
456 # Tool to dump lua-bindings (of gtk2ardour + libs)
457 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
458 obj = bld (features = 'cxx c cxxprogram')
459 obj.install_path = None
460 obj.source = list(gtk2_ardour_sources)
461 obj.target = 'luadoc'
462 obj.includes = ['.', '../libs']
463 obj.ldflags = ['-no-undefined']
476 'PACKAGE="' + I18N_PACKAGE + '"',
477 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
478 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
479 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
482 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
483 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
484 if bld.is_defined('HAVE_SUIL'):
485 obj.source += [ 'lv2_plugin_ui.cc' ]
486 obj.use += [ 'SUIL' ]
487 if bld.is_defined('LXVST_SUPPORT'):
488 obj.source += [ 'vst_plugin_ui.cc' ]
489 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
490 obj.defines += [ 'LXVST_SUPPORT' ]
493 # Tool to test libcanvas
494 if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
495 obj = bld (features = 'cxx c cxxprogram')
496 obj.install_path = None
497 obj.source = list(gtk2_ardour_sources)
498 obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
499 obj.target = 'canvas_test'
500 obj.includes = ['.', '../libs']
501 obj.ldflags = ['-no-undefined']
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']) + '"',
520 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
521 obj.source += [ 'canvas_test.cc', ]
524 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
525 # Windows VST support w/wine
526 # If we require VST support we build a stub main() and the FST library
527 # here using winegcc, and link it to the GTK front-end library
528 obj = bld (features = 'cxx c cxxprogram wine')
529 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
531 # XXX do we really need to explicitly link to all of these for the wine executable?
533 obj.use = [ 'libpbd',
544 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
545 obj.includes = [ '../libs/fst', '.' ]
546 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
547 obj.linkflags += bld.env['LDFLAGS']
548 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
549 obj.install_path = bld.env['DLLDIR']
550 # end of the wine executable
552 # now the shared library containing the GTK GUI for ardour
553 obj = bld (features = 'cxx c cxxshlib')
554 # operate on copy to avoid adding sources twice
555 obj.source = list(gtk2_ardour_sources)
556 obj.includes = [ '../libs/fst', '.' ]
557 obj.name = 'libgtk2_ardour'
558 obj.target = 'gtk2_ardour'
559 obj.cflags = [ '-fPIC' ]
562 # just the normal executable version of the GTK GUI
563 if bld.env['build_target'] == 'mingw':
564 obj = bld (features = 'cxx c cxxprogram winres')
566 obj = bld (features = 'cxx c cxxprogram')
567 # operate on copy to avoid adding sources twice
568 obj.source = list(gtk2_ardour_sources)
569 obj.target = 'ardour-' + str (bld.env['VERSION'])
571 obj.ldflags = ['-no-undefined']
573 if bld.is_defined('WINDOWS_VST_SUPPORT'):
574 # Windows VST support mingw
575 obj.includes += [ '../libs/fst' ]
577 # at this point, "obj" refers to either the normal native executable
578 # OR the shared library built for use with wine on linux.
580 obj.use = [ 'libpbd',
591 'PACKAGE="' + I18N_PACKAGE + '"',
592 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
593 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
594 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
596 obj.install_path = bld.env['DLLDIR']
598 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
600 if sys.platform == 'darwin':
601 obj.uselib += ' AUDIOUNITS OSX '
602 obj.use += ' libappleutility'
603 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
604 elif bld.env['build_target'] == 'mingw':
605 obj.source += [ 'bundle_env_mingw.cc' ]
606 obj.source += [ 'windows_icon.rc' ]
608 obj.source += [ 'bundle_env_linux.cc' ]
610 obj.includes += ['../libs']
612 obj.use += 'libptformat'
614 if bld.env['build_target'] == 'mingw':
615 obj.linkflags += ' -mwindows'
616 obj.use += [ 'PANGOFT2' ]
618 if bld.is_defined('HAVE_SUIL'):
619 obj.source += [ 'lv2_plugin_ui.cc' ]
620 obj.use += [ 'SUIL' ]
622 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
623 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
625 if bld.is_defined('NEED_INTL'):
626 obj.linkflags += ' -lintl'
628 if bld.is_defined('WINDOWS_VST_SUPPORT'):
629 obj.source += [ 'windows_vst_plugin_ui.cc' ]
630 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
631 if bld.env['build_target'] != 'mingw':
634 if bld.is_defined('LXVST_SUPPORT'):
635 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
636 obj.defines += [ 'LXVST_SUPPORT' ]
639 if bld.is_defined('MACVST_SUPPORT'):
640 obj.source += [ 'mac_vst_plugin_ui.mm' ]
641 obj.defines += [ 'MACVST_SUPPORT' ]
643 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
644 obj.source += [ 'vst_plugin_ui.cc' ]
646 if bld.is_defined('PHONE_HOME'):
647 obj.defines += [ 'PHONE_HOME' ]
649 if bld.is_defined('HAVE_COREAUDIO'):
650 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
651 obj.use += ' libappleutility '
653 if bld.is_defined('AUDIOUNIT_SUPPORT'):
654 obj.source += [ 'au_pluginui.mm' ]
658 wrapper_subst_dict = {
659 'INSTALL_PREFIX' : bld.env['PREFIX'],
660 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
661 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
662 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
663 'LIBS' : 'build/libs',
664 'VERSION' : str (bld.env['VERSION']),
665 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
668 def set_subst_dict(obj, dict):
670 setattr(obj, i, dict[i])
672 obj = bld(features = 'subst')
673 obj.source = 'ardev_common.sh.in'
674 obj.target = 'ardev_common_waf.sh'
675 obj.chmod = Utils.O755
676 obj.dict = wrapper_subst_dict
677 set_subst_dict(obj, wrapper_subst_dict)
679 obj = bld(features = 'subst')
680 obj.source = 'ardour.sh.in'
681 obj.target = 'ardour' + str (bld.env['MAJOR'])
682 obj.chmod = Utils.O755
683 obj.dict = wrapper_subst_dict
684 obj.install_path = bld.env['BINDIR']
685 set_subst_dict(obj, wrapper_subst_dict)
687 if bld.is_defined('WINDOWS_VST_SUPPORT'):
688 obj = bld(features = 'subst')
689 obj.source = '../vst/ardourvst.in'
690 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
691 obj.chmod = Utils.O755
692 obj.dict = wrapper_subst_dict
693 obj.install_path = bld.env['BINDIR']
694 set_subst_dict(obj, wrapper_subst_dict)
703 if sys.platform == 'darwin':
717 # There is no acceptable monospace font available on older versions of OS X
718 # and no API on those versions to load TTF files that will work with
719 # GTK/fontconfig/pango.
721 # In addition, the ArdourMono font gets clipped for some reason on OS X
723 # Moreover, Lucida Grande just seems to work even though it is not monospace
727 'MONOSPACE' : 'Monaco',
728 'CLOCKFONT' : 'Lucida Grande',
730 else: # Linux/X11 fonts
731 basefont = '' # unspecified - use system defaults
744 'MONOSPACE' : 'ArdourMono',
745 'CLOCKFONT' : 'ArdourMono',
748 # Set up font substitution dictionary
750 for style in ['', 'BOLD', 'ITALIC']:
751 for sizename,points in iter(font_sizes.items()):
753 key = "_".join (['FONT',style,sizename])
754 fontstyle = " ".join ([basefont,style.lower(),points])
756 key = "_".join (['FONT',sizename])
757 fontstyle = " ".join ([basefont,points])
759 font_subst_dict[key] = fontstyle
762 for sizename,points in iter(font_sizes.items()):
763 key = "_".join (['FONT_SIZE',sizename])
764 font_subst_dict[key] = points
766 # various font names, eg @BOLD_MONOSPACE@
767 for font_sym,text in iter(font_names.items()):
769 font_subst_dict[key] = text
773 obj = bld(features = 'subst')
774 obj.source = [ 'clearlooks.rc.in' ]
775 obj.target = 'clearlooks.rc'
776 obj.install_path = bld.env['CONFDIR']
777 set_subst_dict(obj, font_subst_dict)
779 obj = bld(features = 'subst')
780 obj.source = [ 'default_ui_config.in' ]
781 obj.target = 'default_ui_config'
782 obj.install_path = bld.env['CONFDIR']
783 set_subst_dict(obj, font_subst_dict)
787 if sys.platform == 'darwin':
788 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
790 menus_argv = [ '-E', '-P' ]
792 if bld.is_defined('PTFORMAT'):
793 menus_argv += [ '-DPTFORMAT' ]
795 # always build all versions of the menu definitions
796 # so that we can try them out with different program builds.
797 for program in [ 'ardour', 'trx' ]:
798 obj = bld(features = 'command-output')
800 obj.command_is_external = True
802 obj.argv = menus_argv
803 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
804 obj.stdin = program + '.menus.in'
805 obj.stdout = program + '.menus'
806 bld.install_files (bld.env['CONFDIR'], program + '.menus')
809 freedesktop_subst_dict = {
810 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
811 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
812 'VERSION': str (bld.env['VERSION']),
815 if bld.env['FREEDESKTOP']:
816 obj = bld(features = 'subst')
817 obj.source = 'ardour.desktop.in'
818 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
819 obj.chmod = Utils.O644
820 obj.dict = freedesktop_subst_dict
821 set_subst_dict(obj, freedesktop_subst_dict)
823 obj = bld(features = 'subst')
824 obj.source = 'ardour-mime-info.xml'
825 obj.target = 'ardour.xml'
826 obj.chmod = Utils.O644
828 # build appdata with translations
830 appdata_i18n_xmlin(bld)
831 obj = bld(features = 'subst')
832 obj.source = 'ardour.appdata.xml.in'
833 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
834 obj.chmod = Utils.O644
835 obj.dict = freedesktop_subst_dict
836 set_subst_dict(obj, freedesktop_subst_dict)
840 # NATIVE ARDOUR BINDING FILES
841 # explicitly state the use of perl here so that it works on windows too
843 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
844 for b in [ 'ardour' ] :
846 target = b + '.keys',
847 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
850 obj.install_path = bld.env['CONFDIR']
853 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
854 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
856 # Application/Product specific resources (icon, splash)
857 pgmname = bld.env['PROGRAM_NAME']
858 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
860 if bld.env['build_target'] == 'mingw':
861 # These icons need to overwrite the files already installed in the icons
862 # directory above. Do this in the external packaging scripts for now.
863 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
864 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
866 # Default UI configuration
867 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
868 # Color Themes. Find each color file for this program only
870 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
872 # Default export stuff
873 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
876 if bld.is_defined('ENABLE_NLS'):
877 mo_files = bld.path.ant_glob('po/*.mo')
879 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
880 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
884 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
885 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
887 appdata_i18n_pot(bld)
891 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
892 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
894 appdata_i18n_pot(bld)
897 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
898 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
903 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
904 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
907 def appdata_i18n_pot(bld):
908 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
909 'ardour.appdata.pot')
910 if bld.cmd == 'i18n_pot':
911 Logs.info('Generating pot file from Ardour appdata')
912 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
913 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
914 'ardour.appdata.xml.in.in')
915 Logs.info('Updating ' + potfile)
917 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
919 print ('Error processing appdata pot file - ignored')
920 elif bld.cmd == 'clean' and os.path.exists(potfile):
921 Logs.info('Removing Ardour appdata pot file')
924 def appdata_i18n_po(bld):
925 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
926 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
928 def appdata_i18n_mo(bld):
929 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
930 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
932 def appdata_i18n_xmlin(bld):
933 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
934 'ardour.appdata.xml.in')
935 if bld.cmd == 'build':
936 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
937 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
938 'ardour.appdata.xml.in.in')
939 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
940 mo_files = glob.glob(mo_glob)
941 Logs.info('Generating ' + adxmlinfile)
942 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
943 '-j', adxmlininfile] + mo_files)
944 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
945 Logs.info('Removing ' + adxmlinfile)
946 os.remove(adxmlinfile)