first half of the mega-by-hand-commit-by-commit merge from 2.X
[ardour.git] / SConstruct
index a56c690fdeaf474244d13d5d7694ed11d2471221..615cd9014dde7f70760b920cc37899e3a94bed51 100644 (file)
@@ -32,7 +32,7 @@ subst_dict = { }
 opts = Options('scache.conf')
 opts.AddOptions(
     ('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
-    ('WINDOWS_KEY', 'Set X Modifier (Mod1,Mod2,Mod3,Mod4,Mod5) for "Windows" key', 'Mod4'),
+    ('WINDOWS_KEY', 'Set X Modifier (Mod1,Mod2,Mod3,Mod4,Mod5) for "Windows" key', 'Mod4><Super'),
     BoolOption('AUDIOUNITS', 'Compile with Apple\'s AudioUnit library. (experimental)', 0),
     BoolOption('COREAUDIO', 'Compile with Apple\'s CoreAudio library', 0),
     BoolOption('GTKOSX', 'Compile for use with GTK-OSX, not GTK-X11', 0),
@@ -45,10 +45,10 @@ opts.AddOptions(
     BoolOption('EXTRA_WARN', 'Compile with -Wextra, -ansi, and -pedantic.  Might break compilation.  For pedants', 0),
     BoolOption('FREESOUND', 'Include Freesound database lookup', 0),
     BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1),
-    BoolOption('LIBLO', 'Compile with support for liblo library', 1),
     BoolOption('NLS', 'Set to turn on i18n support', 1),
     PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
     BoolOption('SURFACES', 'Build support for control surfaces', 1),
+    BoolOption('WIIMOTE', 'Build the wiimote control surface', 0),
     BoolOption('SYSLIBS', 'USE AT YOUR OWN RISK: CANCELS ALL SUPPORT FROM ARDOUR AUTHORS: Use existing system versions of various libraries instead of internal ones', 0),
     BoolOption('UNIVERSAL', 'Compile as universal binary.  Requires that external libraries are already universal.', 0),
     BoolOption('VERSIONED', 'Add revision information to ardour/gtk executable name inside the build directory', 0),
@@ -285,9 +285,9 @@ def create_stored_revision (target = None, source = None, env = None):
         print "Using packaged svn revision"
         return
     else:
-        print "Your source does not include revision information."
-        print "Please check out the code from a repository or use a properly packaged version!"
-        sys.exit (-1)
+        if not os.path.exists('libs/ardour/ardour/svn_revision.h'):    
+            print "This release of ardour is missing libs/ardour/ardour/svn_revision.h. Blame the packager."
+            sys.exit (-1)
 
     try:
        text  = "#include <ardour/svn_revision.h>\n"
@@ -417,28 +417,6 @@ tarball_bld = Builder (action = tarballer,
 env.Append (BUILDERS = {'Distribute' : dist_bld})
 env.Append (BUILDERS = {'Tarball' : tarball_bld})
 
-#
-# Make sure they know what they are doing
-#
-
-if env['VST']:
-    if os.path.isfile('.personal_use_only'):
-        print "Enabling VST support. Note that distributing a VST-enabled ardour\nis a violation of several different licences.\nBuild with VST=false if you intend to distribute ardour to others."
-    else:
-        sys.stdout.write ("Are you building Ardour for personal use (rather than distribution to others)? [no]: ")
-        answer = sys.stdin.readline ()
-        answer = answer.rstrip().strip()
-        if answer == "yes" or answer == "y":
-            fh = open('.personal_use_only', 'w')
-            fh.close()
-            print "OK, VST support will be enabled"
-        else:
-            print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. Build with VST=false.'
-            sys.exit (-1);
-else:
-    if os.path.isfile('.personal_use_only'):
-        os.remove('.personal_use_only')
-
 ####################
 # push environment
 ####################
@@ -446,9 +424,11 @@ else:
 def pushEnvironment(context):
     if os.environ.has_key('PATH'):
        context.Append(PATH = os.environ['PATH'])
+       context['ENV']['PATH'] = os.environ['PATH']
        
     if os.environ.has_key('PKG_CONFIG_PATH'):
        context.Append(PKG_CONFIG_PATH = os.environ['PKG_CONFIG_PATH'])
+       context['ENV']['PKG_CONFIG_PATH'] = os.environ['PKG_CONFIG_PATH']
            
     if os.environ.has_key('CC'):
        context['CC'] = os.environ['CC']
@@ -470,7 +450,7 @@ deps = \
 {
        'glib-2.0'             : '2.10.1',
        'gthread-2.0'          : '2.10.1',
-       'gtk+-2.0'             : '2.8.1',
+       'gtk+-2.0'             : '2.12.1',
        'libxml-2.0'           : '2.6.0',
        'samplerate'           : '0.1.0',
        'raptor'               : '1.4.2',
@@ -594,17 +574,20 @@ else:
 if env['LV2']:
        conf = env.Configure(custom_tests = { 'CheckPKGVersion' : CheckPKGVersion})
        
-       if conf.CheckPKGVersion('slv2', '0.6.1'):
+       if conf.CheckPKGVersion('slv2', '0.6.4'):
                libraries['slv2'] = LibraryInfo()
                libraries['slv2'].ParseConfig('pkg-config --cflags --libs slv2')
                 env.Append (CCFLAGS="-DHAVE_LV2")
        else:
-               print 'LV2 support is not enabled (SLV2 not found or older than 0.6.0)'
+               print 'LV2 support is not enabled (SLV2 not found or older than 0.6.4 (svn))'
                env['LV2'] = 0
        conf.Finish()
 else:
        print 'LV2 support is not enabled.  Build with \'scons LV2=1\' to enable.'
 
+if not env['WIIMOTE']:
+       print 'WIIMOTE not enabled. Build with \'scons WIIMOTE=1\' to enable support.'
+
 libraries['jack'] = LibraryInfo()
 libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
 
@@ -647,10 +630,11 @@ libraries['ardour_cp'] = LibraryInfo (LIBS='ardour_cp', LIBPATH='#libs/surfaces/
 
 # The Ardour backend/engine
 
-libraries['ardour'] = LibraryInfo (LIBS='ardour', LIBPATH='#libs/ardour', CPPPATH='#libs/ardour')
-libraries['midi++2'] = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPPATH='#libs/midi++2')
-libraries['evoral'] = LibraryInfo (LIBS='evoral', LIBPATH='#libs/evoral', CPPPATH='#libs/evoral')
-libraries['pbd']    = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd', CPPPATH='#libs/pbd')
+libraries['ardour']    = LibraryInfo (LIBS='ardour', LIBPATH='#libs/ardour', CPPPATH='#libs/ardour')
+libraries['midi++2']   = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPPATH='#libs/midi++2')
+libraries['smf']       = LibraryInfo (LIBS='smf', LIBPATH='#libs/evoral/src/libsmf', CPPPATH='#libs/evoral/src/libsmf/')
+libraries['evoral']    = LibraryInfo (LIBS='evoral', LIBPATH='#libs/evoral', CPPPATH='#libs/evoral')
+libraries['pbd']       = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd', CPPPATH='#libs/pbd')
 libraries['gtkmm2ext'] = LibraryInfo (LIBS='gtkmm2ext', LIBPATH='#libs/gtkmm2ext', CPPPATH='#libs/gtkmm2ext')
 
 
@@ -674,9 +658,9 @@ env = conf.Finish()
 
 opt_flags = []
 if env['GPROFILE'] == 1:
-    debug_flags = [ '-g', '-pg' ]
+    debug_flags = [ '-O0', '-g', '-pg' ]
 else:
-    debug_flags = [ '-g' ]
+    debug_flags = [ '-O0', '-g' ]
 
 # guess at the platform, used to define compiler flags
 
@@ -736,8 +720,14 @@ elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_6
     
     build_host_supports_sse = 0
     
-    debug_flags.append ("-DARCH_X86")
-    opt_flags.append ("-DARCH_X86")
+    #
+    # ARCH_X86 means anything in the x86 family from i386 to x86_64
+    # USE_X86_64_ASM is used to distingush 32 and 64 bit assembler
+    #
+
+    if (re.search ("(i[0-9]86|x86_64)", config[config_cpu]) != None):
+        debug_flags.append ("-DARCH_X86")
+        opt_flags.append ("-DARCH_X86")
     
     if config[config_kernel] == 'linux' :
         
@@ -857,10 +847,6 @@ if env['EXTRA_WARN']:
     env.Append(CXXFLAGS="-ansi")
 #    env.Append(CFLAGS="-iso")
 
-if env['LIBLO']:
-    env.Append(CCFLAGS="-DHAVE_LIBLO")
-
-
 #
 # fix scons nitpickiness on APPLE
 #
@@ -869,15 +855,15 @@ if env['LIBLO']:
 def prep_libcheck(topenv, libinfo):
     if topenv['IS_OSX']:
        #
-       # rationale: GTK-Quartz uses jhbuild and installs to $HOME/gtk/inst by default.
-       #            All libraries needed should be built against this location
+       # rationale: GTK-Quartz uses jhbuild and installs to ~/gtk/inst by default.
+       # All libraries needed should be built against this location
 
        if topenv['GTKOSX']:
-               GTKROOT = os.path.expanduser ('~/gtk/inst')
-               libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
-               libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
-               #libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
-               #libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
+            GTKROOT = os.path.expanduser ('~/gtk/inst')
+            libinfo.Append(CPPPATH= GTKROOT + "/include", LIBPATH= GTKROOT + "/lib")
+            libinfo.Append(CXXFLAGS="-I" + GTKROOT + "/include", LINKFLAGS="-L" + GTKROOT + "/lib")
+
+                
 
 prep_libcheck(env, env)
 
@@ -934,6 +920,45 @@ else:
 
 libraries['usb'] = conf.Finish ()
 
+#
+# Check for wiimote dependencies
+
+if env['WIIMOTE']:
+    wiimoteConf = env.Configure ( )
+    if not wiimoteConf.CheckHeader('cwiid.h'):
+       print 'WIIMOTE configured but you are missing libcwiid!'
+        sys.exit(1)
+    if not wiimoteConf.CheckHeader('bluetooth/bluetooth.h'):
+        print 'WIIMOTE configured but you are missing the libbluetooth headers which you need to compile wiimote support!'
+        sys.exit(1)
+    wiimoteConf.Finish()
+
+
+#
+# Check for FLAC
+
+libraries['flac'] = LibraryInfo ()
+prep_libcheck(env, libraries['flac'])
+libraries['flac'].Append(CPPPATH="/usr/local/include", LIBPATH="/usr/local/lib")
+
+#
+# june 1st 2007: look for a function that is in FLAC 1.1.2 and not in later versions
+#                since the version of libsndfile we have internally does not support
+#                the new API that libFLAC has adopted
+#
+
+conf = Configure (libraries['flac'])
+if conf.CheckLib ('FLAC', 'FLAC__seekable_stream_decoder_init', language='CXX'):
+    conf.env.Append(CCFLAGS='-DHAVE_FLAC')
+    use_flac = True
+else:
+    use_flac = False
+    
+libraries['flac'] = conf.Finish ()
+
+# or if that fails...
+#libraries['flac']    = LibraryInfo (LIBS='FLAC')
+
 # boost (we don't link against boost, just use some header files)
 
 libraries['boost'] = LibraryInfo ()
@@ -949,16 +974,17 @@ libraries['boost'] = conf.Finish ()
 #
 # Check for liblo
 
-if env['LIBLO']:
-    libraries['lo'] = LibraryInfo ()
-    prep_libcheck(env, libraries['lo'])
+libraries['lo'] = LibraryInfo ()
+prep_libcheck(env, libraries['lo'])
 
-    conf = Configure (libraries['lo'])
-    if conf.CheckLib ('lo', 'lo_server_new') == False:
-        print "liblo does not appear to be installed."
-        sys.exit (1)
-    
-    libraries['lo'] = conf.Finish ()
+conf = Configure (libraries['lo'])
+if conf.CheckLib ('lo', 'lo_server_new') == False:
+    print "liblo does not appear to be installed."
+    env['HAVE_LIBLO'] = False
+else:
+    env['HAVE_LIBLO'] = True
+
+libraries['lo'] = conf.Finish ()
 
 #
 # Check for dmalloc
@@ -1008,16 +1034,18 @@ conf = Configure(env)
 libraries['asound'] = LibraryInfo ()
 
 if conf.CheckCHeader('alsa/asoundlib.h'):
-    libraries['asound'] = LibraryInfo (LIBS='asound')
+    libraries['asound'].ParseConfig('pkg-config --cflags --libs alsa')
 
 if conf.CheckCHeader('jack/midiport.h'):
     libraries['sysmidi'] = LibraryInfo (LIBS='jack')
     env['SYSMIDI'] = 'JACK MIDI'
     subst_dict['%MIDITAG%'] = "control"
     subst_dict['%MIDITYPE%'] = "jack"
+    env.Append(CCFLAGS=" -DWITH_JACK_MIDI")
     print "Using JACK MIDI"
 elif conf.CheckCHeader('alsa/asoundlib.h'):
-    libraries['sysmidi'] = LibraryInfo (LIBS='asound')
+    libraries['sysmidi'] = LibraryInfo ()
+    libraries['sysmidi'].ParseConfig('pkg-config --cflags --libs alsa')
     env['SYSMIDI'] = 'ALSA Sequencer'
     subst_dict['%MIDITAG%'] = "seq"
     subst_dict['%MIDITYPE%'] = "alsa/sequencer"
@@ -1040,6 +1068,11 @@ else:
 
 env = conf.Finish()
 
+if env['GTKOSX']:
+    clearlooks_version = 'libs/clearlooks-newer'
+else:
+    clearlooks_version = 'libs/clearlooks-older'
+
 if env['SYSLIBS']:
 
     syslibdeps = \
@@ -1105,6 +1138,7 @@ if env['SYSLIBS']:
     subdirs = [
         'libs/pbd',
         'libs/midi++2',
+        'libs/evoral/src/libsmf',
         'libs/evoral',
         'libs/ardour',
         'libs/vamp-sdk',
@@ -1124,7 +1158,7 @@ if env['SYSLIBS']:
 #        'libs/flowcanvas',
         'libs/gtkmm2ext',
         'gtk2_ardour',
-        'libs/clearlooks'
+        clearlooks_version
         ]
 
 else:
@@ -1143,6 +1177,9 @@ else:
     libraries['pangomm'] = LibraryInfo(LIBS='pangomm',
                                     LIBPATH='#libs/gtkmm2/pango',
                                     CPPPATH='#libs/gtkmm2/pango')
+    libraries['cairomm'] = LibraryInfo(LIBS='cairomm',
+                                    LIBPATH='#libs/cairomm',
+                                    CPPPATH='#libs/cairomm')
     libraries['atkmm'] = LibraryInfo(LIBS='atkmm',
                                      LIBPATH='#libs/gtkmm2/atk',
                                      CPPPATH='#libs/gtkmm2/atk')
@@ -1164,7 +1201,7 @@ else:
                                           CPPPATH=['#libs', '#libs/soundtouch'])
     libraries['taglib'] = LibraryInfo(LIBS='libtaglib',
                                       LIBPATH='#libs/taglib',
-                                      CPPPATH=['#libs/taglib/headers','#libs/taglib/headers/taglib'])
+                                      CPPPATH=['#libs/taglib', '#libs/taglib/taglib'])
 #    libraries['libglademm'] = LibraryInfo(LIBS='libglademm',
 #                                          LIBPATH='#libs/libglademm',
 #                                          CPPPATH='#libs/libglademm')
@@ -1182,6 +1219,7 @@ else:
         'libs/taglib',
         'libs/pbd',
         'libs/midi++2',
+        'libs/evoral/src/libsmf',
         'libs/evoral',
         'libs/ardour',
         'libs/vamp-sdk',
@@ -1206,22 +1244,24 @@ else:
         'libs/libgnomecanvasmm',
         'libs/gtkmm2ext',
         'gtk2_ardour',
-        'libs/clearlooks',
-        'libs/cairomm'
+        'libs/cairomm',
+        clearlooks_version
         ]
 
 #
 # * always build the LGPL control protocol lib, since we link against it from libardour
-# * ditto for generic MIDI
-# * tranzport checks whether it should build internally, but we need here so that
-#   its included in the tarball
+# * ditto for generic MIDI and OSC
+# * tranzport & wiimote check whether they should build internally, but we need them here
+#   so that they are included in the tarball
 #
 
 surface_subdirs = [ 'libs/surfaces/control_protocol',
                     'libs/surfaces/generic_midi',
                     'libs/surfaces/tranzport',
                     'libs/surfaces/mackie',
-                    'libs/surfaces/powermate'
+                    'libs/surfaces/powermate',
+                   'libs/surfaces/wiimote',
+                   'libs/surfaces/osc'
                     ]
 
 if env['SURFACES']:
@@ -1337,6 +1377,21 @@ if not conf.CheckFunc('posix_memalign'):
 
 env = conf.Finish()
 
+# Which GTK tooltips API
+
+gtktestenv = env.Clone ()
+gtktestenv.Merge ([
+        libraries['gtk2']
+        ])
+
+conf = gtktestenv.Configure ()
+
+if conf.CheckFunc('gtk_widget_set_tooltip_text'):
+    env.Append (CXXFLAGS='-DGTK_NEW_TOOLTIP_API')
+
+conf.Finish ()
+
+
 # generate the per-user and system rc files from the same source
 
 sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
@@ -1369,7 +1424,7 @@ Default (sysrcbuild)
 Precious (env['DISTTREE'])
 
 env.Distribute (env['DISTTREE'],
-               [ 'SConstruct',
+               [ 'SConstruct', 
                   'COPYING', 'PACKAGER_README', 'README',
                   'ardour.rc.in',
                   'tools/config.guess',
@@ -1384,12 +1439,10 @@ env.Distribute (env['DISTTREE'],
                   'icons/icon/ardour_icon_tango_48px_blue.png',
                   'icons/icon/ardour_icon_tango_48px_red.png'
                   ] +
-                glob.glob ('DOCUMENTATION/AUTHORS*') +
-                glob.glob ('DOCUMENTATION/CONTRIBUTORS*') +
-                glob.glob ('DOCUMENTATION/TRANSLATORS*') +
-                glob.glob ('DOCUMENTATION/BUILD*') +
-                glob.glob ('DOCUMENTATION/FAQ*') +
-                glob.glob ('DOCUMENTATION/README*')
+                glob.glob ('ardour.1*') +
+                glob.glob ('libs/clearlooks-newer/*.c') +
+                glob.glob ('libs/clearlooks-newer/*.h') +
+                glob.glob ('libs/clearlooks-newer/SConscript')
                 )
 
 srcdist = env.Tarball(env['TARBALL'], [ env['DISTTREE'], the_revision ])