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\\\"" # 1980 Collaborative
325 return "\\n\\\"My Life in the Bush of Ghosts\\\"" # 1981
327 return "\\n\\\"Music for Airplay\\\"" # 1981 Compilation
329 return "\\n\\\"On Land\\\"" # 1982
330 elif minor == 10: # 6.0 ??
331 return "\\n\\\"Atmospheres and Soundtracks\\\"" # 1983
333 return "\\n\\\"More Music for Films\\\"" # 1983
335 return "\\n\\\"Working Backwards\\\"" # 1984 Compilation
337 return "\\n\\\"The Pearl\\\"" # 1984 Collaborative
339 return "\\n\\\"Begegnungen\\\"" # 1984 Compilation
343 autowaf.set_options(opt)
347 conf.load('compiler_cxx')
348 autowaf.configure(conf)
350 # TODO: Insert a sanity check for on OS X to ensure CoreAudio is present
352 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW3F',
354 autowaf.check_pkg(conf, 'fftw3f', uselib_store='FFTW35F',
355 atleast_version='3.3.5', mandatory=False)
356 autowaf.check_pkg(conf, 'flac', uselib_store='FLAC',
357 atleast_version='1.2.1')
358 autowaf.check_pkg(conf, 'gthread-2.0', uselib_store='GTHREAD',
359 atleast_version='2.10.1')
360 autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK',
361 atleast_version='2.18')
362 autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM',
363 atleast_version='2.18')
364 autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
365 autowaf.check_pkg(conf, 'x11', uselib_store='X11', atleast_version='1.1', mandatory=False)
366 autowaf.check_pkg(conf, 'pangoft2', uselib_store='PANGOFT2', atleast_version='1.36.8', mandatory=False)
367 autowaf.check_pkg(conf, 'fontconfig', uselib_store='FONTCONFIG')
370 if sys.platform == 'darwin':
371 retval = conf.run_c_code (code='#include <AppKit/NSWindow.h>\n\
372 int main(void) { (void) NSWindowWillStartLiveResizeNotification; return 0; }\n',
373 env = conf.env.derive (),
376 compile_filename='test.m',
381 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'ok')
382 conf.define ('HAVE_COCOA_LIVE_RESIZING', 1)
384 autowaf.display_msg (conf, 'Checking for Cocoa live resizing constants', 'too old - AU plugin windows will be fixed size')
386 conf.write_config_header('gtk2ardour-config.h', remove=False)
388 bak = conf.env['define_key']
389 conf.define('VERSIONSTRING', str (conf.env['VERSION']))
390 conf.define('CODENAME', enoify(int(conf.env['MAJOR']), int(conf.env['MINOR'])))
391 conf.env['define_key'] = ['VERSIONSTRING', 'CODENAME' ]
392 conf.write_config_header('gtk2ardour-version.h')
393 conf.env['define_key'] = bak;
396 autowaf.check_header(conf, 'cxx', 'boost/shared_ptr.hpp')
397 autowaf.check_header(conf, 'cxx', 'boost/weak_ptr.hpp')
399 # Add a waf `feature' to allow compilation of things using winegcc
400 from waflib.TaskGen import feature
402 def set_winegcc(self):
403 self.env.LINK_CXX = self.env.LINK_CC = 'wineg++'
404 self.env.CC = 'winegcc'
406 def _doPyp(infileName, deps = False):
409 re_spaces = re.compile("\s+")
411 if infileName == '-':
414 fd = open(infileName)
415 inLines = fd.readlines()
421 bits = re_spaces.split(line)
422 if bits[0] == '##include':
427 # assume included file comes from same place as source file
428 incName = os.path.join (os.path.dirname (infileName), incName);
429 outStr += _doPyp(incName)
440 def include_processor(task):
441 infileName = task.inputs[0].srcpath()
442 outfileName = os.path.join(out, task.outputs[0].bldpath())
443 fdOut = open (outfileName, "w")
444 fdOut.write (_doPyp(infileName))
448 def build_color_scheme(path, prefix):
452 if re.search ('^#@color', line):
453 line.strip() # remove newline
455 if len(color_scheme):
457 color_scheme += prefix
459 color_scheme += words[1]
461 color_scheme += words[2]
467 VERSION = "%s.%s" % (bld.env['MAJOR'], bld.env['MINOR'])
468 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
470 # Tool to dump lua-bindings (of gtk2ardour + libs)
471 if re.search ("linux", sys.platform) != None and bld.env['LUABINDINGDOC']:
472 obj = bld (features = 'cxx c cxxprogram')
473 obj.install_path = None
474 obj.source = list(gtk2_ardour_sources)
475 obj.target = 'luadoc'
476 obj.includes = ['.', '../libs']
477 obj.ldflags = ['-no-undefined']
490 'PACKAGE="' + I18N_PACKAGE + '"',
491 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
492 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
493 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
496 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
497 obj.source += [ 'luadoc.cc', 'bundle_env_linux.cc' ]
498 if bld.is_defined('HAVE_SUIL'):
499 obj.source += [ 'lv2_plugin_ui.cc' ]
500 obj.use += [ 'SUIL' ]
501 if bld.is_defined('LXVST_SUPPORT'):
502 obj.source += [ 'vst_plugin_ui.cc' ]
503 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
504 obj.defines += [ 'LXVST_SUPPORT' ]
507 # Tool to test libcanvas
508 if re.search ("linux", sys.platform) != None and bld.env['CANVASTESTUI']:
509 obj = bld (features = 'cxx c cxxprogram')
510 obj.install_path = None
511 obj.source = list(gtk2_ardour_sources)
512 obj.source = [ 'ardour_button.cc', 'ui_config.cc', 'tooltips.cc' ]
513 obj.target = 'canvas_test'
514 obj.includes = ['.', '../libs']
515 obj.ldflags = ['-no-undefined']
528 'PACKAGE="' + I18N_PACKAGE + '"',
529 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
530 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
531 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
534 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
535 # obj.source += [ 'canvas_test.cc', ]
536 obj.source += [ 'toolbar_test.cc', 'enums.cc']
539 if bld.is_defined('WINDOWS_VST_SUPPORT') and bld.env['build_target'] != 'mingw':
540 # Windows VST support w/wine
541 # If we require VST support we build a stub main() and the FST library
542 # here using winegcc, and link it to the GTK front-end library
543 obj = bld (features = 'cxx c cxxprogram wine')
544 obj.source = ( '../libs/fst/vstwin.c', '../vst/winmain.c' )
546 # XXX do we really need to explicitly link to all of these for the wine executable?
548 obj.use = [ 'libpbd',
559 obj.target = 'ardour-' + str (bld.env['VERSION']) + '-vst.exe.so'
560 obj.includes = [ '../libs/fst', '.' ]
561 obj.linkflags = ['-mwindows', '-Wl,--export-dynamic']
562 obj.linkflags += bld.env['LDFLAGS']
563 obj.defines = ['_POSIX_SOURCE', 'USE_WS_PREFIX']
564 obj.install_path = bld.env['DLLDIR']
565 # end of the wine executable
567 # now the shared library containing the GTK GUI for ardour
568 obj = bld (features = 'cxx c cxxshlib')
569 # operate on copy to avoid adding sources twice
570 obj.source = list(gtk2_ardour_sources)
571 obj.includes = [ '../libs/fst', '.' ]
572 obj.name = 'libgtk2_ardour'
573 obj.target = 'gtk2_ardour'
574 obj.cflags = [ '-fPIC' ]
577 # just the normal executable version of the GTK GUI
578 if bld.env['build_target'] == 'mingw':
579 obj = bld (features = 'cxx c cxxprogram winres')
581 obj = bld (features = 'cxx c cxxprogram')
582 # operate on copy to avoid adding sources twice
583 obj.source = list(gtk2_ardour_sources)
584 obj.target = 'ardour-' + str (bld.env['VERSION'])
586 obj.ldflags = ['-no-undefined']
588 if bld.is_defined('WINDOWS_VST_SUPPORT'):
589 # Windows VST support mingw
590 obj.includes += [ '../libs/fst' ]
592 # at this point, "obj" refers to either the normal native executable
593 # OR the shared library built for use with wine on linux.
595 obj.use = [ 'libpbd',
606 'PACKAGE="' + I18N_PACKAGE + '"',
607 'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
608 'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
609 'LOCALEDIR="' + os.path.normpath(bld.env['LOCALEDIR']) + '"',
611 obj.install_path = bld.env['DLLDIR']
613 obj.uselib = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL GTKMM CANVAS FFTW3F LO TAGLIB XML '
615 if sys.platform == 'darwin':
616 obj.uselib += ' AUDIOUNITS OSX '
617 obj.use += ' libappleutility'
618 obj.source += [ 'cocoacarbon.mm', 'bundle_env_cocoa.cc' ]
619 elif bld.env['build_target'] == 'mingw':
620 obj.source += [ 'bundle_env_mingw.cc' ]
621 obj.source += [ 'windows_icon.rc' ]
623 obj.source += [ 'bundle_env_linux.cc' ]
625 obj.includes += ['../libs']
627 obj.use += 'libptformat'
629 if bld.env['build_target'] == 'mingw':
630 obj.linkflags += ' -mwindows'
631 obj.use += [ 'PANGOFT2' ]
633 if bld.is_defined('HAVE_SUIL'):
634 obj.source += [ 'lv2_plugin_ui.cc' ]
635 obj.use += [ 'SUIL' ]
637 if bld.is_defined('HAVE_FFTW35F') and bld.env['build_target'] != 'mingw':
638 bld.env['LIB_FFTW3F'] += ['fftw3f_threads']
640 if bld.is_defined('NEED_INTL'):
641 obj.linkflags += ' -lintl'
643 if bld.is_defined('WINDOWS_VST_SUPPORT'):
644 obj.source += [ 'windows_vst_plugin_ui.cc' ]
645 obj.defines += [ 'WINDOWS_VST_SUPPORT' ]
646 if bld.env['build_target'] != 'mingw':
649 if bld.is_defined('LXVST_SUPPORT'):
650 obj.source += [ 'linux_vst_gui_support.cc', 'lxvst_plugin_ui.cc' ]
651 obj.defines += [ 'LXVST_SUPPORT' ]
654 if bld.is_defined('MACVST_SUPPORT'):
655 obj.source += [ 'mac_vst_plugin_ui.mm' ]
656 obj.defines += [ 'MACVST_SUPPORT' ]
658 if bld.is_defined('WINDOWS_VST_SUPPORT') or bld.is_defined('LXVST_SUPPORT') or bld.is_defined ('MACVST_SUPPORT'):
659 obj.source += [ 'vst_plugin_ui.cc' ]
661 if bld.is_defined('PHONE_HOME'):
662 obj.defines += [ 'PHONE_HOME' ]
664 if bld.is_defined('HAVE_COREAUDIO'):
665 TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
666 obj.use += ' libappleutility '
668 if bld.is_defined('AUDIOUNIT_SUPPORT'):
669 obj.source += [ 'au_pluginui.mm' ]
673 wrapper_subst_dict = {
674 'INSTALL_PREFIX' : bld.env['PREFIX'],
675 'LIBDIR' : os.path.normpath(bld.env['DLLDIR']),
676 'DATADIR' : os.path.normpath(bld.env['DATADIR']),
677 'CONFDIR' : os.path.normpath(bld.env['CONFDIR']),
678 'LIBS' : 'build/libs',
679 'VERSION' : str (bld.env['VERSION']),
680 'EXECUTABLE' : 'build/gtk2_ardour/ardour-' + str (bld.env['VERSION'])
683 def set_subst_dict(obj, dict):
685 setattr(obj, i, dict[i])
687 obj = bld(features = 'subst')
688 obj.source = 'ardev_common.sh.in'
689 obj.target = 'ardev_common_waf.sh'
690 obj.chmod = Utils.O755
691 obj.dict = wrapper_subst_dict
692 set_subst_dict(obj, wrapper_subst_dict)
694 obj = bld(features = 'subst')
695 obj.source = 'ardour.sh.in'
696 obj.target = 'ardour' + str (bld.env['MAJOR'])
697 obj.chmod = Utils.O755
698 obj.dict = wrapper_subst_dict
699 obj.install_path = bld.env['BINDIR']
700 set_subst_dict(obj, wrapper_subst_dict)
702 if bld.is_defined('WINDOWS_VST_SUPPORT'):
703 obj = bld(features = 'subst')
704 obj.source = '../vst/ardourvst.in'
705 obj.target = 'ardourvst' + str (bld.env['MAJOR'])
706 obj.chmod = Utils.O755
707 obj.dict = wrapper_subst_dict
708 obj.install_path = bld.env['BINDIR']
709 set_subst_dict(obj, wrapper_subst_dict)
718 if sys.platform == 'darwin':
732 # There is no acceptable monospace font available on older versions of OS X
733 # and no API on those versions to load TTF files that will work with
734 # GTK/fontconfig/pango.
736 # In addition, the ArdourMono font gets clipped for some reason on OS X
738 # Moreover, Lucida Grande just seems to work even though it is not monospace
742 'MONOSPACE' : 'Monaco',
743 'CLOCKFONT' : 'Lucida Grande',
745 else: # Linux/X11 fonts
746 basefont = '' # unspecified - use system defaults
759 'MONOSPACE' : 'ArdourMono',
760 'CLOCKFONT' : 'ArdourMono',
763 # Set up font substitution dictionary
765 for style in ['', 'BOLD', 'ITALIC']:
766 for sizename,points in iter(font_sizes.items()):
768 key = "_".join (['FONT',style,sizename])
769 fontstyle = " ".join ([basefont,style.lower(),points])
771 key = "_".join (['FONT',sizename])
772 fontstyle = " ".join ([basefont,points])
774 font_subst_dict[key] = fontstyle
777 for sizename,points in iter(font_sizes.items()):
778 key = "_".join (['FONT_SIZE',sizename])
779 font_subst_dict[key] = points
781 # various font names, eg @BOLD_MONOSPACE@
782 for font_sym,text in iter(font_names.items()):
784 font_subst_dict[key] = text
788 obj = bld(features = 'subst')
789 obj.source = [ 'clearlooks.rc.in' ]
790 obj.target = 'clearlooks.rc'
791 obj.install_path = bld.env['CONFDIR']
792 set_subst_dict(obj, font_subst_dict)
794 obj = bld(features = 'subst')
795 obj.source = [ 'default_ui_config.in' ]
796 obj.target = 'default_ui_config'
797 obj.install_path = bld.env['CONFDIR']
798 set_subst_dict(obj, font_subst_dict)
802 if sys.platform == 'darwin':
803 menus_argv = [ '-E', '-P', '-D__APPLE__', '-' ]
805 menus_argv = [ '-E', '-P' ]
807 if bld.is_defined('PTFORMAT'):
808 menus_argv += [ '-DPTFORMAT' ]
810 # always build all versions of the menu definitions
811 # so that we can try them out with different program builds.
812 for program in [ 'ardour', 'trx' ]:
813 obj = bld(features = 'command-output')
815 obj.command_is_external = True
817 obj.argv = menus_argv
818 obj.dep_vars = ['PTFORMAT', 'GTKOSX', 'WINDOWS']
819 obj.stdin = program + '.menus.in'
820 obj.stdout = program + '.menus'
821 bld.install_files (bld.env['CONFDIR'], program + '.menus')
824 freedesktop_subst_dict = {
825 'ARDOUR_EXEC' : str (bld.env['lwrcase_dirname']),
826 'ARDOUR_ICON' : str (bld.env['lwrcase_dirname']),
827 'VERSION': str (bld.env['VERSION']),
830 if bld.env['FREEDESKTOP']:
831 obj = bld(features = 'subst')
832 obj.source = 'ardour.desktop.in'
833 obj.target = str (bld.env['lwrcase_dirname']) + '.desktop'
834 obj.chmod = Utils.O644
835 obj.dict = freedesktop_subst_dict
836 set_subst_dict(obj, freedesktop_subst_dict)
838 obj = bld(features = 'subst')
839 obj.source = 'ardour-mime-info.xml'
840 obj.target = 'ardour.xml'
841 obj.chmod = Utils.O644
843 # build appdata with translations
845 appdata_i18n_xmlin(bld)
846 obj = bld(features = 'subst')
847 obj.source = 'ardour.appdata.xml.in'
848 obj.target = str (bld.env['lwrcase_dirname']) + '.appdata.xml'
849 obj.chmod = Utils.O644
850 obj.dict = freedesktop_subst_dict
851 set_subst_dict(obj, freedesktop_subst_dict)
855 # NATIVE ARDOUR BINDING FILES
856 # explicitly state the use of perl here so that it works on windows too
858 a_rule = 'perl ../tools/fmt-bindings --platform="%s" --winkey="%s" --accelmap ${SRC[0].abspath()} >${TGT}' % (sys.platform, bld.env['WINDOWS_KEY'] )
859 for b in [ 'ardour' ] :
861 target = b + '.keys',
862 source = [ b + '.keys.in', 'mixer.bindings', 'processor_box.bindings', 'step_editing.bindings', 'monitor.bindings' ],
865 obj.install_path = bld.env['CONFDIR']
868 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/*.png'))
869 bld.install_files(bld.env['DATADIR'], 'ArdourMono.ttf')
871 # Application/Product specific resources (icon, splash)
872 pgmname = bld.env['PROGRAM_NAME']
873 bld.install_files(os.path.join(bld.env['DATADIR'], 'resources'), bld.path.ant_glob('resources/' + pgmname + '*'))
875 if bld.env['build_target'] == 'mingw':
876 # These icons need to overwrite the files already installed in the icons
877 # directory above. Do this in the external packaging scripts for now.
878 #bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), bld.path.ant_glob('icons/cursor_square/*.png'))
879 bld.install_files(os.path.join (bld.env['DATADIR'], 'icons'), 'icons/cursor_square/hotspots')
881 # Default UI configuration
882 bld.install_files(bld.env['CONFDIR'], 'default_ui_config')
883 # Color Themes. Find each color file for this program only
885 bld.install_files (os.path.join(bld.env['DATADIR'], 'themes'), bld.path.ant_glob ('themes/*-' + pgmname.lower() + '.colors'));
887 # Default export stuff
888 bld.install_files(os.path.join(bld.env['CONFDIR'], 'export'), bld.path.ant_glob('export/*.format'))
891 if bld.is_defined('ENABLE_NLS'):
892 mo_files = bld.path.ant_glob('po/*.mo')
894 lang = os.path.basename(mo.srcpath()).replace('.mo', '')
895 bld.install_as (os.path.join(os.path.normpath(bld.env['LOCALEDIR']), lang, 'LC_MESSAGES', I18N_PACKAGE + '.mo'),
899 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
900 autowaf.build_i18n(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
902 appdata_i18n_pot(bld)
906 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
907 autowaf.build_i18n_pot(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
909 appdata_i18n_pot(bld)
912 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
913 autowaf.build_i18n_po(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
918 I18N_PACKAGE = 'gtk2_ardour' + bld.env['MAJOR']
919 autowaf.build_i18n_mo(bld, top, 'gtk2_ardour', I18N_PACKAGE, gtk2_ardour_sources,
922 def appdata_i18n_pot(bld):
923 potfile = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata',
924 'ardour.appdata.pot')
925 if bld.cmd == 'i18n_pot':
926 Logs.info('Generating pot file from Ardour appdata')
927 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
928 adsource = os.path.join(bld.top_dir, 'gtk2_ardour',
929 'ardour.appdata.xml.in.in')
930 Logs.info('Updating ' + potfile)
932 subprocess.call(('itstool', '-i', itsfile, '-o', potfile, adsource))
934 print ('Error processing appdata pot file - ignored')
935 elif bld.cmd == 'clean' and os.path.exists(potfile):
936 Logs.info('Removing Ardour appdata pot file')
939 def appdata_i18n_po(bld):
940 autowaf.build_i18n_po(bld, bld.top_dir, os.path.join(
941 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
943 def appdata_i18n_mo(bld):
944 autowaf.build_i18n_mo(bld, bld.top_dir, os.path.join(
945 'gtk2_ardour', 'appdata'), 'ardour.appdata', 'dummy', 'dummy')
947 def appdata_i18n_xmlin(bld):
948 adxmlinfile = os.path.join(bld.top_dir, 'gtk2_ardour',
949 'ardour.appdata.xml.in')
950 if bld.cmd == 'build':
951 itsfile = os.path.join(bld.top_dir, 'tools', 'as-metainfo.its')
952 adxmlininfile = os.path.join(bld.top_dir, 'gtk2_ardour',
953 'ardour.appdata.xml.in.in')
954 mo_glob = os.path.join(bld.top_dir, 'gtk2_ardour', 'appdata', 'po', '*.mo')
955 mo_files = glob.glob(mo_glob)
956 Logs.info('Generating ' + adxmlinfile)
957 subprocess.call(['itstool', '-i', itsfile, '-o', adxmlinfile,
958 '-j', adxmlininfile] + mo_files)
959 elif bld.cmd == 'clean' and os.path.exists(adxmlinfile):
960 Logs.info('Removing ' + adxmlinfile)
961 os.remove(adxmlinfile)