import glob
import errno
import time
+import platform
from sets import Set
import SCons.Node.FS
SConsignFile()
EnsureSConsVersion(0, 96)
-version = '1.9beta1'
+version = '2.0alpha2'
subst_dict = { }
opts = Options('scache.conf')
opts.AddOptions(
- BoolOption('ALTIVEC', 'Compile using Altivec instructions', 0),
('ARCH', 'Set architecture-specific compilation flags by hand (all flags as 1 argument)',''),
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('DEBUG', 'Set to build with debugging information and no optimizations', 0),
PathOption('DESTDIR', 'Set the intermediate install "prefix"', '/'),
BoolOption('DEVBUILD', 'Use shared libardour (developers only)', 0),
BoolOption('NLS', 'Set to turn on i18n support', 1),
- BoolOption('NOARCH', 'Do not use architecture-specific compilation flags', 0),
PathOption('PREFIX', 'Set the install "prefix"', '/usr/local'),
BoolOption('VST', 'Compile with support for VST', 0),
BoolOption('VERSIONED', 'Add version information to ardour/gtk executable name inside the build directory', 0),
- BoolOption('USE_SSE_EVERYWHERE', 'Ask the compiler to use x86/SSE instructions and also our hand-written x86/SSE optimizations when possible (off by default)', 0),
- BoolOption('BUILD_SSE_OPTIMIZATIONS', 'Use our hand-written x86/SSE optimizations when possible (off by default)', 0),
- BoolOption('BUILD_VECLIB_OPTIMIZATIONS', 'Build with Apple Accelerate/vecLib optimizations when possible (off by default)', 0)
+ EnumOption('DIST_TARGET', 'Build target for cross compiling packagers', 'auto', allowed_values=('auto', 'i386', 'i686', 'x86_64', 'powerpc', 'tiger', 'panther', 'none' ), ignorecase=2),
+ BoolOption('FPU_OPTIMIZATION', 'Build runtime checked assembler code', 1),
+ BoolOption('FFT_ANALYSIS', 'Include FFT analysis window', 0)
)
#----------------------------------------------------------------------
self.Append (LIBPATH = other.get ('LIBPATH', []))
self.Append (CPPPATH = other.get('CPPPATH', []))
self.Append (LINKFLAGS = other.get('LINKFLAGS', []))
- self.Replace(LIBS = list(Set(self.get('LIBS', []))))
self.Replace(LIBPATH = list(Set(self.get('LIBPATH', []))))
self.Replace(CPPPATH = list(Set(self.get('CPPPATH',[]))))
#doing LINKFLAGS breaks -framework
+ #doing LIBS break link order dependency
env = LibraryInfo (options = opts,
try:
o = file (target[0].get_path(), 'w')
o.write (text)
- o.close ();
+ o.close ()
except IOError:
print "Could not open", target[0].get_path(), " for writing\n"
sys.exit (-1)
- text = "#ifndef __" + env['DOMAIN'] + "_version_h__\n";
- text += "#define __" + env['DOMAIN'] + "_version_h__\n";
+ text = "#ifndef __" + env['DOMAIN'] + "_version_h__\n"
+ text += "#define __" + env['DOMAIN'] + "_version_h__\n"
text += "extern int " + env['DOMAIN'] + "_major_version;\n"
text += "extern int " + env['DOMAIN'] + "_minor_version;\n"
text += "extern int " + env['DOMAIN'] + "_micro_version;\n"
- text += "#endif /* __" + env['DOMAIN'] + "_version_h__ */\n";
+ text += "#endif /* __" + env['DOMAIN'] + "_version_h__ */\n"
try:
o = file (target[1].get_path(), 'w')
print "No SConscript CVS update info found - versioned executable cannot be built"
return -1
- tag = time.strftime ('%Y%M%d%H%m', time.strptime (last_date));
+ tag = time.strftime ('%Y%M%d%H%m', time.strptime (last_date))
print "The current build ID is " + tag
tagged_executable = source[0].get_path() + '-' + tag
cmd += " ".join ([ "'%s'" % quoted for quoted in all_files])
cmd += ' | (cd ' + treedir + ' && tar xf -)'
p = os.popen (cmd)
- return p.close ();
+ return p.close ()
def tarballer (target, source, env):
cmd = 'tar -jcf ' + str (target[0]) + ' ' + str(source[0]) + " --exclude '*~'"
libraries = { }
-libraries['core'] = LibraryInfo (CPPPATH = [ '#libs'])
+libraries['core'] = LibraryInfo (CCFLAGS = '-Ilibs')
libraries['sndfile'] = LibraryInfo()
libraries['sndfile'].ParseConfig('pkg-config --cflags --libs sndfile')
libraries['samplerate'] = LibraryInfo()
libraries['samplerate'].ParseConfig('pkg-config --cflags --libs samplerate')
+if env['FFT_ANALYSIS']:
+ libraries['fftw3f'] = LibraryInfo()
+ libraries['fftw3f'].ParseConfig('pkg-config --cflags --libs fftw3f')
+
libraries['jack'] = LibraryInfo()
libraries['jack'].ParseConfig('pkg-config --cflags --libs jack')
libraries['glade2'] = LibraryInfo()
libraries['glade2'].ParseConfig ('pkg-config --cflags --libs libglade-2.0')
-libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas')
+#libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas')
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')
subst_dict['%MIDITYPE%'] = "alsa/sequencer"
elif conf.CheckCHeader('/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h'):
# this line is needed because scons can't handle -framework in ParseConfig() yet.
- libraries['sysmidi'] = LibraryInfo (LINKFLAGS= '-framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework CoreServices -framework AudioUnit -bind_at_load')
+ libraries['sysmidi'] = LibraryInfo (LINKFLAGS= '-framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework CoreServices -framework AudioUnit -framework AudioToolbox -bind_at_load')
env['SYSMIDI'] = 'CoreMIDI'
subst_dict['%MIDITAG%'] = "ardour"
subst_dict['%MIDITYPE%'] = "coremidi"
libraries['sigc2'] = LibraryInfo()
libraries['sigc2'].ParseConfig('pkg-config --cflags --libs sigc++-2.0')
-
+ libraries['glibmm2'] = LibraryInfo()
+ libraries['glibmm2'].ParseConfig('pkg-config --cflags --libs glibmm-2.4')
+ libraries['gdkmm2'] = LibraryInfo()
+ libraries['gdkmm2'].ParseConfig ('pkg-config --cflags --libs gdkmm-2.4')
libraries['gtkmm2'] = LibraryInfo()
- libraries['gtkmm2'].ParseConfig ('pkg-config --cflags --libs gtkmm-2.0')
-
+ libraries['gtkmm2'].ParseConfig ('pkg-config --cflags --libs gtkmm-2.4')
+ libraries['atkmm'] = LibraryInfo()
+ libraries['atkmm'].ParseConfig ('pkg-config --cflags --libs atkmm-1.6')
+ libraries['pangomm'] = LibraryInfo()
+ libraries['pangomm'].ParseConfig ('pkg-config --cflags --libs pangomm-1.4')
+ libraries['libgnomecanvasmm'] = LibraryInfo()
+ libraries['libgnomecanvasmm'].ParseConfig ('pkg-config --cflags --libs libgnomecanvasmm-2.6')
libraries['libglademm'] = LibraryInfo()
libraries['libglademm'].ParseConfig ('pkg-config --cflags --libs libglademm-2.4')
-
- libraries['soundtouch'] = LibraryInfo(LIBS='SoundTouch')
+
+# libraries['flowcanvas'] = LibraryInfo(LIBS='flowcanvas', LIBPATH='#/libs/flowcanvas', CPPPATH='#libs/flowcanvas')
+ libraries['soundtouch'] = LibraryInfo()
+ libraries['soundtouch'].ParseConfig ('pkg-config --cflags --libs soundtouch-1.0')
coredirs = [
'templates'
]
subdirs = [
-# 'libs/cassowary',
'libs/pbd3',
'libs/midi++2',
- 'libs/ardour',
- 'templates'
+ 'libs/ardour'
]
gtk_subdirs = [
+# 'libs/flowcanvas',
'libs/gtkmm2ext',
- 'gtk2_ardour',
+ 'gtk2_ardour'
]
else:
'libs/gtkmm2/atk',
'libs/gtkmm2/gdk',
'libs/gtkmm2/gtk',
- 'libs/libglademm',
+ 'libs/libglademm',
'libs/libgnomecanvasmm',
- 'libs/flowcanvas',
- 'libs/gtkmm2ext',
- 'gtk2_ardour'
+# 'libs/flowcanvas',
+ 'libs/gtkmm2ext',
+ 'gtk2_ardour'
]
opts.Save('scache.conf', env)
conf = Configure (env)
-have_cxx = conf.TryAction (Action (env['CXX'] + ' --version'));
+have_cxx = conf.TryAction (Action (env['CXX'] + ' --version'))
if have_cxx[0] != 1:
print "This system has no functional C++ compiler. You cannot build Ardour from source without one."
- exit (1);
+ exit (1)
else:
print "Congratulations, you have a functioning C++ compiler."
config_guess = os.popen("tools/config.guess").read()[:-1]
-config_cpu = 0;
-config_arch = 1;
-config_kernel = 2;
-config_os = 3;
+config_cpu = 0
+config_arch = 1
+config_kernel = 2
+config_os = 3
config = config_guess.split ("-")
-#
-# on OS X darwinports puts things in /opt/local by default
-#
-if config[config_arch] == 'apple':
- if os.path.isdir('/opt/local/lib'):
- libraries['core'].Append (LIBPATH = [ '/opt/local/lib' ])
- if os.path.isdir('/opt/local/include'):
- libraries['core'].Append (CPPPATH = [ '/opt/local/include' ])
-
- if env['BUILD_VECLIB_OPTIMIZATIONS'] == 1:
- opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
- debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
- libraries['core'].Append(LINKFLAGS= '-framework Accelerate')
-
-if config[config_cpu] == 'powerpc':
+print "system triple: " + config_guess
+
+# Autodetect
+if env['DIST_TARGET'] == 'auto':
+ if config[config_arch] == 'apple':
+ # The [.] matches to the dot after the major version, "." would match any character
+ if re.search ("darwin[0-7][.]", config[config_kernel]) != None:
+ env['DIST_TARGET'] = 'panther'
+ else:
+ env['DIST_TARGET'] = 'tiger'
+ else:
+ if re.search ("x86_64", config[config_cpu]) != None:
+ env['DIST_TARGET'] = 'x86_64'
+ elif re.search("i[0-5]86", config[config_cpu]) != None:
+ env['DIST_TARGET'] = 'i386'
+ elif re.search("powerpc", config[config_cpu]) != None:
+ env['DIST_TARGET'] = 'powerpc'
+ else:
+ env['DIST_TARGET'] = 'i686'
+ print "\n*******************************"
+ print "detected DIST_TARGET = " + env['DIST_TARGET']
+ print "*******************************\n"
+
+
+if config[config_cpu] == 'powerpc' and env['DIST_TARGET'] != 'none':
#
# Apple/PowerPC optimization options
#
# -mcpu=7450 does not reliably work with gcc 3.*
#
- if env['NOARCH'] == 0:
- if env['ALTIVEC'] == 1:
- if config[config_arch] == 'apple':
- opt_flags.extend ([ "-mcpu=7450", "-faltivec"])
- else:
- opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"])
- else:
- opt_flags.extend([ "-mcpu=750", "-mmultiple" ])
- opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"])
+ if env['DIST_TARGET'] == 'panther' or env['DIST_TARGET'] == 'tiger':
+ if config[config_arch] == 'apple':
+ opt_flags.extend ([ "-mcpu=7450", "-faltivec"])
+ else:
+ opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"])
+ else:
+ opt_flags.extend([ "-mcpu=750", "-mmultiple" ])
+ opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"])
-elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)):
+elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)) and env['DIST_TARGET'] != 'none':
build_host_supports_sse = 0
- if env['NOARCH'] == 0:
+ debug_flags.append ("-DARCH_X86")
+ opt_flags.append ("-DARCH_X86")
- debug_flags.append ("-DARCH_X86")
- opt_flags.append ("-DARCH_X86")
+ if config[config_kernel] == 'linux' :
- if config[config_kernel] == 'linux' :
+ if env['DIST_TARGET'] != 'i386':
flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1]
x86_flags = flag_line.split (": ")[1:][0].split (' ')
if "mmx" in x86_flags:
opt_flags.append ("-mmmx")
if "sse" in x86_flags:
- build_host_supports_sse = 1
+ build_host_supports_sse = 1
if "3dnow" in x86_flags:
opt_flags.append ("-m3dnow")
elif config[config_cpu] == "i686":
opt_flags.append ("-march=i686")
- if env['USE_SSE_EVERYWHERE'] == 1:
- opt_flags.extend (["-msse", "-mfpmath=sse"])
- debug_flags.extend (["-msse", "-mfpmath=sse"])
- if build_host_supports_sse != 1:
- print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
-
- if env['BUILD_SSE_OPTIMIZATIONS'] == 1:
- opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
- debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
- if build_host_supports_sse != 1:
- print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
-
+ if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) and build_host_supports_sse:
+ opt_flags.extend (["-msse", "-mfpmath=sse"])
+ debug_flags.extend (["-msse", "-mfpmath=sse"])
# end of processor-specific section
+# optimization section
+if env['FPU_OPTIMIZATION']:
+ if env['DIST_TARGET'] == 'tiger':
+ opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
+ debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
+ libraries['core'].Append(LINKFLAGS= '-framework Accelerate')
+ elif env['DIST_TARGET'] == 'i686' or env['DIST_TARGET'] == 'x86_64':
+ opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+ debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
+ if env['DIST_TARGET'] == 'x86_64':
+ opt_flags.append ("-DUSE_X86_64_ASM")
+ debug_flags.append ("-DUSE_X86_64_ASM")
+ if build_host_supports_sse != 1:
+ print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
+# end optimization section
+
#
# ARCH="..." overrides all
#
if env['VST']:
env.Append(CCFLAGS="-DVST_SUPPORT")
-
-# check endianness
-if sys.byteorder == "big":
- print "Host is big endian"
- env.Append(CCFLAGS="-DWORDS_BIGENDIAN")
-else:
- print "Host is little endian"
-
-
#
# everybody needs this
#
conf = env.Configure ()
if conf.CheckCHeader('/System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/CoreAudio.h'):
- subst_dict['%JACK_BACKEND%'] = "coreaudio:Built-in Audio:in"
+ subst_dict['%JACK_INPUT%'] = "coreaudio:Built-in Audio:in"
+ subst_dict['%JACK_OUTPUT%'] = "coreaudio:Built-in Audio:out"
else:
- subst_dict['%JACK_BACKEND%'] = "alsa_pcm:playback_"
+ subst_dict['%JACK_INPUT%'] = "alsa_pcm:playback_"
+ subst_dict['%JACK_OUTPUT%'] = "alsa_pcm:capture_"
# posix_memalign available
if not conf.CheckFunc('posix_memalign'):