massive changes to waf build scripts so that nearly everything "should" be working...
[ardour.git] / gtk2_ardour / wscript
1 #!/usr/bin/env python
2 import autowaf
3 import os
4 import glob
5
6 # Version of this package (even if built as a child)
7 MAJOR = '1'
8 MINOR = '0'
9 MICRO = '2'
10 GTK2_ARDOUR_VERSION = "%s.%s.%s" % (MAJOR, MINOR, MICRO)
11
12 # Variables for 'waf dist'
13 APPNAME = 'gtk2_ardour'
14 VERSION = GTK2_ARDOUR_VERSION
15
16 # Mandatory variables
17 srcdir = '.'
18 blddir = 'build'
19
20 path_prefix = 'gtk2_ardour/'
21
22 def set_options(opt):
23         autowaf.set_options(opt)
24
25 def configure(conf):
26         autowaf.build_version_files(path_prefix+'version.h', path_prefix+'version.cc',
27                         'gtk2_ardour', MAJOR, MINOR, MICRO)
28         autowaf.configure(conf)
29         autowaf.check_tool(conf, 'compiler_cxx')
30
31         autowaf.check_pkg(conf, 'alsa', uselib_store='ALSA')
32         autowaf.check_pkg(conf, 'flac', uselib_store='FLAC', atleast_version='1.2.1')
33         autowaf.check_pkg(conf, 'gthread', uselib_store='GTHREAD', atleast_version='2.10.1')
34         autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK', atleast_version='2.12.1')
35         autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM', atleast_version='2.8')
36         autowaf.check_pkg(conf, 'libgnomecanvas-2.0', uselib_store='GNOMECANVAS', atleast_version='2.0')
37         autowaf.check_pkg(conf, 'libgnomecanvasmm-2.6', uselib_store='GNOMECANVASMM', atleast_version='2.12.0')
38         autowaf.check_pkg(conf, 'ogg', uselib_store='OGG', atleast_version='1.1.2')
39
40         conf.check_tool('misc') # subst tool
41
42         conf.write_config_header('gtk2ardour-config.h')
43
44         # TODO
45         conf.define('WINDOWS_KEY', 'Mod4')
46
47         # Boost headers
48         autowaf.check_header(conf, 'boost/shared_ptr.hpp')
49         autowaf.check_header(conf, 'boost/weak_ptr.hpp')
50
51 def build(bld):
52         # Program
53         obj = bld.new_task_gen(features = 'cxx cc cprogram')
54         obj.source = '''
55                 about.cc
56                 actions.cc
57                 add_midi_cc_track_dialog.cc
58                 add_route_dialog.cc
59                 analysis_window.cc
60                 ardour_dialog.cc
61                 ardour_ui.cc
62                 ardour_ui2.cc
63                 ardour_ui_dependents.cc
64                 ardour_ui_dialogs.cc
65                 ardour_ui_ed.cc
66                 ardour_ui_mixer.cc
67                 ardour_ui_options.cc
68                 audio_clock.cc
69                 audio_region_editor.cc
70                 audio_region_view.cc
71                 audio_streamview.cc
72                 audio_time_axis.cc
73                 automation_controller.cc
74                 automation_line.cc
75                 automation_region_view.cc
76                 automation_streamview.cc
77                 automation_time_axis.cc
78                 axis_view.cc
79                 bundle_manager.cc
80                 cairo_widget.cc
81                 canvas-flag.cc
82                 canvas-note-event.cc
83                 canvas-note.cc
84                 canvas-program-change.cc
85                 canvas-simpleline.c
86                 canvas-simplerect.c
87                 canvas-sysex.cc
88                 canvas-waveview.c
89                 control_point.cc
90                 control_point_dialog.cc
91                 crossfade_edit.cc
92                 crossfade_view.cc
93                 curvetest.cc
94                 diamond.cc
95                 editing.cc
96                 editor.cc
97                 editor_actions.cc
98                 editor_audio_import.cc
99                 editor_audiotrack.cc
100                 editor_canvas.cc
101                 editor_canvas_events.cc
102                 editor_component.cc
103                 editor_cursors.cc
104                 editor_drag.cc
105                 editor_route_groups.cc
106                 editor_export_audio.cc
107                 editor_group_tabs.cc
108                 editor_hscroller.cc
109                 editor_keyboard.cc
110                 editor_keys.cc
111                 editor_markers.cc
112                 editor_mixer.cc
113                 editor_mouse.cc
114                 editor_nudge.cc
115                 editor_ops.cc
116                 editor_regions.cc
117                 editor_routes.cc
118                 editor_rulers.cc
119                 editor_scrub.cc
120                 editor_selection.cc
121                 editor_selection_list.cc
122                 editor_snapshots.cc
123                 editor_summary.cc
124                 editor_tempodisplay.cc
125                 editor_timefx.cc
126                 engine_dialog.cc
127                 enums.cc
128                 export_channel_selector.cc
129                 export_dialog.cc
130                 export_file_notebook.cc
131                 export_filename_selector.cc
132                 export_format_dialog.cc
133                 export_format_selector.cc
134                 export_preset_selector.cc
135                 export_timespan_selector.cc
136                 fft.cc
137                 fft_graph.cc
138                 fft_result.cc
139                 gain_meter.cc
140                 generic_pluginui.cc
141                 ghostregion.cc
142                 global_port_matrix.cc
143                 group_tabs.cc
144                 gtk-custom-hruler.c
145                 gtk-custom-ruler.c
146                 io_selector.cc
147                 keyboard.cc
148                 keyeditor.cc
149                 latency_gui.cc
150                 level_meter.cc
151                 lineset.cc
152                 location_ui.cc
153                 main.cc
154                 marker.cc
155                 midi_channel_selector.cc
156                 midi_port_dialog.cc
157                 midi_region_view.cc
158                 midi_scroomer.cc
159                 midi_streamview.cc
160                 midi_time_axis.cc
161                 mixer_group_tabs.cc
162                 mixer_strip.cc
163                 mixer_ui.cc
164                 nag.cc
165                 option_editor.cc
166                 opts.cc
167                 panner.cc
168                 panner2d.cc
169                 panner_ui.cc
170                 piano_roll_header.cc
171                 playlist_selector.cc
172                 plugin_eq_gui.cc
173                 plugin_selector.cc
174                 plugin_ui.cc
175                 port_group.cc
176                 port_matrix.cc
177                 port_matrix_body.cc
178                 port_matrix_column_labels.cc
179                 port_matrix_component.cc
180                 port_matrix_grid.cc
181                 port_matrix_labels.cc
182                 port_matrix_row_labels.cc
183                 processor_box.cc
184                 prompter.cc
185                 public_editor.cc
186                 rc_option_editor.cc
187                 region_gain_line.cc
188                 region_selection.cc
189                 region_view.cc
190                 return_ui.cc
191                 rhythm_ferret.cc
192                 route_group_dialog.cc
193                 route_group_menu.cc
194                 route_params_ui.cc
195                 route_processor_selection.cc
196                 route_time_axis.cc
197                 route_ui.cc
198                 selection.cc
199                 send_ui.cc
200                 session_import_dialog.cc
201                 session_metadata_dialog.cc
202                 session_option_editor.cc
203                 sfdb_ui.cc
204                 simpleline.cc
205                 simplerect.cc
206                 splash.cc
207                 startup.cc
208                 streamview.cc
209                 strip_silence_dialog.cc
210                 tape_region_view.cc
211                 tempo_dialog.cc
212                 tempo_lines.cc
213                 theme_manager.cc
214                 time_axis_view.cc
215                 time_axis_view_item.cc
216                 time_fx_dialog.cc
217                 time_selection.cc
218                 track_selection.cc
219                 ui_config.cc
220                 utils.cc
221                 version.cc
222                 waveview.cc
223         '''
224         obj.includes     = ['.']
225         obj.name         = 'gtk2_ardour'
226         obj.target       = 'ardour-3.0'
227         obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
228         obj.uselib       = 'UUID FLAC GLIBMM GTHREAD GTK GNOMECANVAS OGG ALSA'
229         obj.uselib       += ' GTKMM GNOMECANVASMM'
230         obj.uselib_local = '''libpbd libmidipp libtaglib libardour libardour_cp
231                               libgtkmm2ext libtaglib'''
232         obj.cflags       = ['-DPACKAGE="gtk2_ardour"']
233         obj.cxxflags     = ['-DPACKAGE="gtk2_ardour"']
234         obj.cxxflags     += ['-DVERSIONSTRING="' + GTK2_ARDOUR_VERSION + '"']
235         obj.cxxflags     += ['-DDATA_DIR="' + os.path.normpath(bld.env['DATADIRNAME']) + '"']
236         obj.cxxflags     += ['-DCONFIG_DIR="' + os.path.normpath(bld.env['CONFIGDIRNAME']) + '"']
237         obj.cxxflags     += ['-DMODULE_DIR="' + os.path.normpath(bld.env['LIBDIRNAME']) + '"']
238         obj.cxxflags     += ['-DLOCALEDIR="' + os.path.join(
239                         os.path.normpath(bld.env['DATADIRNAME']), 'locale') + '"']
240         if bld.env['HAVE_SLV2']:
241                 obj.source += ' lv2_plugin_ui.cc '
242                 obj.uselib += ' SLV2 '
243
244         if bld.env['FREESOUND']:
245                 obj.source += 'sfdb_freesound_mootcher.cc '
246
247         if bld.env['VST']:
248                 obj.source += ' vst_pluginui.cc '
249                 obj.cxxflags += [ '-DVST_SUPPORT' ]
250
251         if bld.env['GTKOSX']:
252                 obj.features += ' objc '
253                 obj.source += ' cocoacarbon.mm '
254                 obj.cxxflags += [ '-DTOP_MENUBAR', '-DGTKOSX' ]
255                 obj.linkflags += [ '-framework', 'AppKit', '-framework', 'CoreAudioKit' ]
256                 
257                 if bld.env['AUDIOUNITS']:
258                         obj.source += ' au_pluginui.mm '
259                         obj.cxxflags += [ '-DHAVE_AUDIOUNITS' ]
260                         obj.uselib_local += ' libappleutility '
261                         
262         else:
263                 obj.source += ' x11.cc '
264
265         # Wrappers
266
267         wrapper_subst_dict = {
268                 'INSTALL_PREFIX' : bld.env['PREFIX'],
269                 'LIBDIR'         : os.path.normpath(bld.env['LIBDIRNAME']),
270                 'LIBS'           : 'build/default/libs',
271                 'VERSION'        : '3.0',
272                 'EXECUTABLE'     : 'build/default/gtk2_ardour/ardour-3.0'
273         }
274
275         obj              = bld.new_task_gen('subst')
276         obj.source       = 'ardev_common.sh.in'
277         obj.target       = 'ardev_common_waf.sh'
278         obj.chmod        = 0755
279         obj.dict         = wrapper_subst_dict
280
281         obj              = bld.new_task_gen('subst')
282         obj.source       = 'ardour.sh.in'
283         obj.target       = 'ardour3'
284         obj.chmod        = 0755
285         obj.dict         = wrapper_subst_dict
286         obj.install_path = bld.env['BINDIR']
287
288         # Font configuration
289
290         font_subst_dict = {}
291         font_sizes      = {}
292         base_font       = ""
293
294         # Set up font substitution dictionary
295         for style in ['', 'BOLD', 'ITALIC']:
296                 for sizename,points in font_sizes.iteritems():
297                         if (len (style)):
298                                 key = "_".join (['FONT',style,sizename])
299                                 fontstyle = " ".join ([basefont,style.lower(),points])
300                         else:
301                                 key = "_".join (['FONT',sizename])
302                                 fontstyle = " ".join ([basefont,points])
303                         key = '%' + key + '%'
304                         font_subst_dict[key] = fontstyle
305
306         # Set up font sizes
307         if bld.env['IS_OSX']: # OS X fonts
308                 basefont = "Lucida Grande"
309                 font_sizes = {
310                         'TINY' : '7',
311                         'SMALLER' : '9',
312                         'SMALL' : '10',
313                         'NORMAL' : '11',
314                         'BIG' : '12',
315                         'BIGGER' : '14',
316                         'LARGE' : '18',
317                         'LARGER' : '28',
318                         'HUGER' : '36',
319                         'MASSIVE' : '60'
320                 }
321         else: # Linux/X11 fonts
322                 basefont = "sans"
323                 font_sizes = {
324                         'TINY' : '6',
325                         'SMALLER' : '8',
326                         'SMALL' : '9',
327                         'NORMAL' : '10',
328                         'BIG' : '14',
329                         'BIGGER' : '16',
330                         'LARGE' : '18',
331                         'LARGER' : '24',
332                         'HUGER' : '34',
333                         'MASSIVE' : '60'
334                 }
335
336         # RC files
337
338         obj              = bld.new_task_gen('subst')
339         obj.source       = 'ardour3_ui_dark.rc.in'
340         obj.target       = 'ardour3_ui_dark.rc'
341         obj.dict         = font_subst_dict
342         obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
343
344         obj              = bld.new_task_gen('subst')
345         obj.source       = 'ardour3_ui_light.rc.in'
346         obj.target       = 'ardour3_ui_light.rc'
347         obj.dict         = font_subst_dict
348         obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
349
350         obj              = bld.new_task_gen('subst')
351         obj.source       = 'ardour3_ui_dark_sae.rc.in'
352         obj.target       = 'ardour3_ui_dark_sae.rc'
353         obj.dict         = font_subst_dict
354         obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
355
356         obj              = bld.new_task_gen('subst')
357         obj.source       = 'ardour3_ui_light_sae.rc.in'
358         obj.target       = 'ardour3_ui_light_sae.rc'
359         obj.dict         = font_subst_dict
360         obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
361
362         # Menus
363         menus_argv = []
364         if bld.env['GTKOSX']:
365                 menus_argv = [ '-E', '-P', '-DGTKOSX', '-DTOP_MENUBAR' ]
366         else:
367                 menus_argv = [ '-E', '-P' ]
368         obj = bld.new_task_gen('command-output')
369         obj.command = 'cpp'
370         obj.command_is_external = True
371         obj.no_inputs = True
372         obj.argv = menus_argv
373         obj.stdin = 'ardour.menus.in'
374         obj.stdout = 'ardour.menus'
375         obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
376
377         # Keybindings
378         keybindings_dict = {}
379         if bld.env['GTKOSX']:
380                 keybindings_dict['PRIMARY']   = 'Meta'
381                 keybindings_dict['SECONDARY'] = 'Mod1'
382                 keybindings_dict['TERTIARY']  = 'Shift'
383                 keybindings_dict['LEVEL4']    = 'Ctrl'
384                 keybindings_dict['WINDOW']    = 'Mod1'
385         else:
386                 keybindings_dict['PRIMARY']   = 'Ctrl'
387                 keybindings_dict['SECONDARY'] = 'Alt'
388                 keybindings_dict['TERTIARY']  = 'Shift'
389                 keybindings_dict['LEVEL4']    = bld.env['WINDOWS_KEY']
390                 keybindings_dict['WINDOW']    = 'Alt'
391
392         for b in [ 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', 'SAE-us-nokeypad',
393                    'mnemonic-us', 'ergonomic-us' ]:
394                 obj = bld.new_task_gen('subst')
395                 obj.target = b + '.bindings'
396                 obj.source = obj.target + '.in'
397                 obj.dict   = keybindings_dict
398
399         # Icons/Images
400         bld.install_files('${DATADIR}/ardour3/icons', 'icons/*.png')
401         bld.install_files('${DATADIR}/ardour3/pixmaps', 'pixmaps/*.xpm')
402         bld.install_files('${DATADIR}/ardour3', 'splash.png')
403
404 def shutdown():
405         autowaf.shutdown()
406