Bind home button to move the playhead to marker. Also stop extra thread after the...
[ardour.git] / SConstruct
index 01a444ec34aa8e12c7d3cf427bb60a0e68a662d3..d841472956ee544964d399ff71666655b139c98c 100644 (file)
@@ -1,10 +1,11 @@
 # -*- python -*-
 
 #
-# just debugging svn bot some more and more and is it working yet?
+# and there we have it, or do we?
 #
 
 import os
+import os.path
 import sys
 import re
 import shutil
@@ -20,7 +21,7 @@ import SCons.Node.FS
 SConsignFile()
 EnsureSConsVersion(0, 96)
 
-ardour_version = '2.4'
+ardour_version = '2.6.1'
 
 subst_dict = { }
 
@@ -35,7 +36,6 @@ opts.AddOptions(
     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),
-    BoolOption('NATIVE_OSX_KEYS', 'Build key bindings file that matches OS X conventions', 0),
     BoolOption('OLDFONTS', 'Old school font sizes', 0),
     BoolOption('DEBUG', 'Set to build with debugging information and no optimizations', 0),
     BoolOption('STL_DEBUG', 'Set to build with Standard Template Library Debugging', 0),
@@ -50,14 +50,17 @@ opts.AddOptions(
     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),
     BoolOption('VST', 'Compile with support for VST', 0),
-    BoolOption('LV2', 'Compile with support for LV2 (if slv2 is available)', 0),
+    BoolOption('LV2', 'Compile with support for LV2 (if slv2 is available)', 1),
     BoolOption('GPROFILE', 'Compile with support for gprofile (Developers only)', 0),
     BoolOption('FREEDESKTOP', 'Install MIME type, icons and .desktop file as per the freedesktop.org spec (requires xdg-utils and shared-mime-info). "scons uninstall" removes associations in desktop database', 0),
-    BoolOption('TRANZPORT', 'Compile with support for Frontier Designs (if libusb is available)', 1)
+    BoolOption('TRANZPORT', 'Compile with support for Frontier Designs (if libusb is available)', 1),
+    BoolOption('AUBIO', "Use Paul Brossier's aubio library for feature detection (if available)", 1)
+    
 )
 
 #----------------------------------------------------------------------
@@ -260,21 +263,21 @@ def create_stored_revision (target = None, source = None, env = None):
     if os.path.exists('.svn'):    
         rev = fetch_svn_revision ('.');
         try:
-            text  = "#ifndef __ardour_svn_revision_h__\n"
-            text += "#define __ardour_svn_revision_h__\n"
-            text += "static const char* ardour_svn_revision = \"" + rev + "\";\n";
-            text += "#endif\n"
-            print '============> writing svn revision info to svn_revision.h\n'
-            o = file ('svn_revision.h', 'w')
+            text  = "#include <ardour/svn_revision.h>\n"
+            text += "namespace ARDOUR {\n";
+            text += "extern const char* svn_revision = \"" + rev + "\";\n";
+            text += "}\n";
+            print '============> writing svn revision info to libs/ardour/svn_revision.cc\n'
+            o = file ('libs/ardour/svn_revision.cc', 'w')
             o.write (text)
             o.close ()
         except IOError:
-            print "Could not open svn_revision.h for writing\n"
+            print "Could not open libs/ardour/svn_revision.cc for writing\n"
             sys.exit (-1)
     else:
-        print "You cannot use \"scons revision\" on without using a checked out"
-        print "copy of the Ardour source code repository"
-        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)
 
 #
 # A generic builder for version.cc files
@@ -449,8 +452,8 @@ deps = \
        'samplerate'           : '0.1.0',
        'raptor'               : '1.4.2',
        'lrdf'                 : '0.4.0',
-       'jack'                 : '0.101.1',
-       'libgnomecanvas-2.0'   : '2.0'
+       'jack'                 : '0.109.0',
+       'libgnomecanvas-2.0'   : '2.0',
 }
 
 def DependenciesRequiredMessage():
@@ -523,6 +526,13 @@ if conf.CheckPKGExists ('fftw3'):
     libraries['fftw3'] = LibraryInfo()
     libraries['fftw3'].ParseConfig('pkg-config --cflags --libs fftw3')
 
+if conf.CheckPKGExists ('aubio'):
+    libraries['aubio'] = LibraryInfo()
+    libraries['aubio'].ParseConfig('pkg-config --cflags --libs aubio')
+    env['AUBIO'] = 1
+else:
+    env['AUBIO'] = 0
+
 env = conf.Finish ()
 
 if env['FFT_ANALYSIS']:
@@ -556,22 +566,25 @@ else:
        print 'FREESOUND support is not enabled.  Build with \'scons FREESOUND=1\' to enable.'
 
 if env['LV2']:
-       conf = env.Configure(custom_tests = { 'CheckPKGExists' : CheckPKGExists })
+       conf = env.Configure(custom_tests = { 'CheckPKGVersion' : CheckPKGVersion})
        
-       if conf.CheckPKGExists ('\"slv2 >= 0.6.0\"'):
+       if conf.CheckPKGVersion('slv2', '0.6.0'):
                libraries['slv2'] = LibraryInfo()
                libraries['slv2'].ParseConfig('pkg-config --cflags --libs slv2')
                 env.Append (CCFLAGS="-DHAVE_LV2")
        else:
-               print 'Building Ardour with LV2 support requires SLV2 >= 0.6.0'
-               print 'WARNING: SLV2 not found, or too old.  Ardour will be built without LV2 support.'
-               print 'Until the 2.4 release, Ardour requires SLV2 out of SVN.'
-               print 'Testing would be very much appreciated!  svn co http://svn.drobilla.net/lad/slv2'
+               print 'LV2 support is not enabled (SLV2 not found or older than 0.6.0)'
                env['LV2'] = 0
        conf.Finish()
 else:
        print 'LV2 support is not enabled.  Build with \'scons LV2=1\' to enable.'
 
+if env['WIIMOTE']:
+       wiimote_surface = [ 'libs/surfaces/wiimote' ]
+else:
+       wiimote_surface = [ ]
+       print 'WIIMOTE support not enabled. Build with \'scons WIIMOTE=1\' to enale.'
+
 libraries['jack'] = LibraryInfo()
 libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
 
@@ -696,8 +709,9 @@ 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")
+    if (re.search ("i[0-9]86", config[config_cpu]) != None):
+        debug_flags.append ("-DARCH_X86")
+        opt_flags.append ("-DARCH_X86")
     
     if config[config_kernel] == 'linux' :
         
@@ -755,6 +769,13 @@ if env['DIST_TARGET'] in ['panther', 'tiger', 'leopard' ]:
     # force tiger or later, to avoid issues on PPC which defaults
     # back to 10.1 if we don't tell it otherwise.
     env.Append (CCFLAGS="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040")
+
+    if env['DIST_TARGET'] == 'leopard':
+        # need this to really build against the 10.4 SDK when building on leopard
+        # ideally this would be configurable, but lets just do that later when we need it
+        env.Append(CCFLAGS="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+        env.Append(LINKFLAGS="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+
 else:
     env['IS_OSX'] = 0
 
@@ -824,11 +845,13 @@ def prep_libcheck(topenv, libinfo):
        #
        # rationale: GTK-Quartz uses jhbuild and installs to /opt/gtk by default.
        #            All libraries needed should be built against this location
+       # However.. now jhbuild installs to ~/gtk/inst by default.. changed to accomodate this
        if topenv['GTKOSX']:
-               libinfo.Append(CPPPATH="/opt/gtk/include", LIBPATH="/opt/gtk/lib")
-               libinfo.Append(CXXFLAGS="-I/opt/gtk/include", LINKFLAGS="-L/opt/gtk/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")
+       #libinfo.Append(CPPPATH="/opt/local/include", LIBPATH="/opt/local/lib")
+       #libinfo.Append(CXXFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
 
 prep_libcheck(env, env)
 
@@ -884,6 +907,12 @@ if conf.CheckHeader('linux/input.h'):
 else:
     have_linux_input = False
 
+# let's continue checking, check for libcwiid
+if not conf.CheckHeader('cwiid.h'):
+    if env['WIIMOTE']:
+       print 'WIIIMOTE configured but you are missing libcwiid!'
+        sys.exit(1)
+
 libraries['usb'] = conf.Finish ()
 
 #
@@ -918,7 +947,7 @@ prep_libcheck(env, libraries['boost'])
 libraries['boost'].Append(CPPPATH="/usr/local/include", LIBPATH="/usr/local/lib")
 conf = Configure (libraries['boost'])
 if conf.CheckHeader ('boost/shared_ptr.hpp', language='CXX') == False:
-        print "Boost header files do not appear to be installed."
+        print "Boost header files do not appear to be installed. You also might be running a buggy version of scons. Try scons 0.97 if you can."
         sys.exit (1)
     
 libraries['boost'] = conf.Finish ()
@@ -1054,16 +1083,17 @@ if env['SYSLIBS']:
 
 #    libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas')
     libraries['soundtouch'] = LibraryInfo()
-    #libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs soundtouch-1.0')
-    # Comment the previous line and uncomment this for Debian:
-    libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs libSoundTouch')
+    libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs soundtouch-1.0')
+    # Comment the previous line and uncomment this for old versions of Debian:
+    #libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs libSoundTouch')
 
     libraries['appleutility'] = LibraryInfo(LIBS='libappleutility',
                                             LIBPATH='#libs/appleutility',
                                             CPPPATH='#libs/appleutility')
     
     coredirs = [
-        'templates'
+        'templates',
+        'manual'
     ]
     
     subdirs = [
@@ -1101,6 +1131,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')
@@ -1128,7 +1161,8 @@ else:
                                             CPPPATH='#libs/appleutility')
 
     coredirs = [
-        'templates'
+        'templates',
+       'manual'
     ]
     
     subdirs = [
@@ -1175,6 +1209,7 @@ surface_subdirs = [ 'libs/surfaces/control_protocol',
                     'libs/surfaces/mackie',
                     'libs/surfaces/powermate'
                     ]
+surface_subdirs += wiimote_surface
 
 if env['SURFACES']:
     if have_libusb:
@@ -1289,6 +1324,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)
@@ -1321,7 +1371,7 @@ Default (sysrcbuild)
 Precious (env['DISTTREE'])
 
 env.Distribute (env['DISTTREE'],
-               [ 'SConstruct', 'svn_revision.h',
+               [ 'SConstruct', 
                   'COPYING', 'PACKAGER_README', 'README',
                   'ardour.rc.in',
                   'tools/config.guess',
@@ -1354,6 +1404,12 @@ env.Alias ('srctar', srcdist)
 env.AddPreAction (env['DISTTREE'], Action ('rm -rf ' + str (File (env['DISTTREE']))))
 env.AddPostAction (srcdist, Action ('rm -rf ' + str (File (env['DISTTREE']))))
 
+#
+# Update revision info before going into subdirs
+#
+
+create_stored_revision()
+
 #
 # the subdirs
 #