SConstruct:

Add checks for swig & libz, version check for swig.
Factor out version check code into function, use for mysql too.

SConstruct:
    Add checks for swig & libz, version check for swig.
    Factor out version check code into function, use for mysql too.

--HG--
extra : convert_revision : a077d961ae52011141fbf5021b167485f8638139
This commit is contained in:
Steve Reinhardt 2006-08-21 18:25:33 -04:00
parent 4ea3973387
commit a016e13a52

View file

@ -119,6 +119,22 @@ def rfind(l, elt, offs = -1):
return i
raise ValueError, "element not found"
# helper function: compare dotted version numbers.
# E.g., compare_version('1.3.25', '1.4.1')
# returns -1, 0, 1 if v1 is <, ==, > v2
def compare_versions(v1, v2):
# Convert dotted strings to lists
v1 = map(int, v1.split('.'))
v2 = map(int, v2.split('.'))
# Compare corresponding elements of lists
for n1,n2 in zip(v1, v2):
if n1 < n2: return -1
if n1 > n2: return 1
# all corresponding values are equal... see if one has extra values
if len(v1) < len(v2): return -1
if len(v1) > len(v2): return 1
return 0
# Each target must have 'build' in the interior of the path; the
# directory below this will determine the build parameters. For
# example, for target 'foo/bar/build/ALPHA_SE/arch/alpha/blah.do' we
@ -202,8 +218,26 @@ env.Append(LIBS = py_version_name)
if sys.exec_prefix != '/usr':
env.Append(LIBPATH = os.path.join(sys.exec_prefix, 'lib'))
# Set up SWIG flags & scanner
# Check for SWIG
if not env.has_key('SWIG'):
print 'Error: SWIG utility not found.'
print ' Please install (see http://www.swig.org) and retry.'
Exit(1)
# Check for appropriate SWIG version
swig_version = os.popen('swig -version').read().split()
# First 3 words should be "SWIG Version x.y.z"
if swig_version[0] != 'SWIG' or swig_version[1] != 'Version':
print 'Error determining SWIG version.'
Exit(1)
min_swig_version = '1.3.28'
if compare_versions(swig_version[2], min_swig_version) < 0:
print 'Error: SWIG version', min_swig_version, 'or newer required.'
print ' Installed version:', swig_version[2]
Exit(1)
# Set up SWIG flags & scanner
env.Append(SWIGFLAGS=Split('-c++ -python -modern $_CPPINCFLAGS'))
import SCons.Scanner
@ -215,15 +249,20 @@ swig_scanner = SCons.Scanner.ClassicCPP("SwigScan", ".i", "CPPPATH",
env.Append(SCANNERS = swig_scanner)
# Other default libraries
env.Append(LIBS=['z'])
# Platform-specific configuration. Note again that we assume that all
# builds under a given build root run on the same host platform.
conf = Configure(env,
conf_dir = os.path.join(build_root, '.scons_config'),
log_file = os.path.join(build_root, 'scons_config.log'))
# Check for zlib. If the check passes, libz will be automatically
# added to the LIBS environment variable.
if not conf.CheckLibWithHeader('z', 'zlib.h', 'C++'):
print 'Error: did not find needed zlib compression library '\
'and/or zlib.h header file.'
print ' Please install zlib and try again.'
Exit(1)
# Check for <fenv.h> (C99 FP environment control)
have_fenv = conf.CheckHeader('fenv.h', '<>')
if not have_fenv:
@ -237,13 +276,10 @@ have_mysql = mysql_config != None
# Check MySQL version.
if have_mysql:
mysql_version = os.popen(mysql_config + ' --version').read()
mysql_version = mysql_version.split('.')
mysql_major = int(mysql_version[0])
mysql_minor = int(mysql_version[1])
# This version check is probably overly conservative, but it deals
# with the versions we have installed.
if mysql_major < 4 or (mysql_major == 4 and mysql_minor < 1):
print "Warning: MySQL v4.1 or newer required."
min_mysql_version = '4.1'
if compare_versions(mysql_version, min_mysql_version) < 0:
print 'Warning: MySQL', min_mysql_version, 'or newer required.'
print ' Version', mysql_version, 'detected.'
have_mysql = False
# Set up mysql_config commands.