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