Scons: check system boost version, probe qt3 libs for qt2 frontend

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14354 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Bo Peng 2006-07-07 03:08:37 +00:00
parent c8c3f0ed11
commit fc42d0d4f9
2 changed files with 36 additions and 23 deletions

View File

@ -49,8 +49,10 @@ else:
# only 1.4.x has frontends/qt2
if os.path.isdir(os.path.join(top_src_dir, 'src', 'frontends', 'qt2')):
package_version = '1.4.2svn'
boost_version = '1_32'
else:
package_version = '1.5.0svn'
boost_version = '1_33_1'
devel_version = True
default_build_mode = 'debug'
@ -544,17 +546,20 @@ if env.has_key('qt_dir') and env['qt_dir']:
# add path to the qt tools
env.AppendUnique(LIBPATH = [os.path.join(env['qt_dir'], 'lib')])
# set environment so that moc etc can be found even if its path is not set properly
os.environ['PATH'] += os.pathsep + os.path.join(env['qt_dir'], 'bin')
env.PrependENVPath('PATH', os.path.join(env['qt_dir'], 'bin'))
elif os.path.isdir(os.environ.get('QTDIR', '/usr/lib/qt-3.3')):
env['QTDIR'] = os.environ.get('QTDIR', '/usr/lib/qt-3.3')
# allow qt2 frontend to locate qt3 libs.
frontend_lib = {'qt2':'qt3', 'qt3':'qt3', 'qt4':'qt4'}[frontend]
if env.has_key('qt_lib_path') and env['qt_lib_path']:
qt_lib_path = env.subst('$qt_lib_path')
elif env.has_key('QTDIR') and os.path.isdir(os.path.join(env.subst('$QTDIR'), 'lib')):
qt_lib_path = env.subst('$QTDIR/lib')
# this is the path for cygwin.
elif os.path.isdir(os.path.join('/usr/lib/', frontend, 'lib')):
qt_lib_path = env.subst('/usr/lib/$frontend/lib')
elif os.path.isdir(os.path.join('/usr/lib/', frontend_lib, 'lib')):
qt_lib_path = '/usr/lib/%s/lib' % frontend_lib
else:
print "Qt library directory is not found. Please specify it using qt_lib_path"
Exit(1)
@ -567,8 +572,8 @@ if env.has_key('qt_inc_path') and env['qt_inc_path']:
elif env.has_key('QTDIR') and os.path.isdir(os.path.join(env.subst('$QTDIR'), 'include')):
qt_inc_path = '$QTDIR/include'
# this is the path for cygwin.
elif os.path.isdir('/usr/include/' + frontend):
qt_inc_path = '/usr/include/$frontend'
elif os.path.isdir('/usr/include/' + frontend_lib):
qt_inc_path = '/usr/include/' + frontend_lib
else:
print "Qt include directory not found. Please specify it using qt_inc_path"
Exit(1)
@ -589,9 +594,9 @@ if env.has_key('extra_inc_path1') and env['extra_inc_path1']:
if env.has_key('extra_lib_path1') and env['extra_lib_path1']:
env.AppendUnique(LIBPATH = [env['extra_lib_path1']])
if env.has_key('extra_bin_path') and env['extra_bin_path']:
# maybe only one of them is needed
# only the first one is needed (a scons bug?)
os.environ['PATH'] += os.pathsep + env['extra_bin_path']
env['ENV']['PATH'] += os.pathsep + env['extra_bin_path']
env.PrependENVPath('PATH', env['extra_bin_path'])
# extra_inc_paths will be used later by intlenv etc
env.AppendUnique(CPPPATH = extra_inc_paths)
@ -711,7 +716,7 @@ if not fast_start:
included_boost = True
env['BOOST_INC_PATH'] = '$TOP_SRCDIR/boost'
elif boost_opt == 'auto':
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, mode == 'debug')
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, boost_version, mode == 'debug')
# if not found, use local boost
if res[0] is None:
boost_libraries = ['included_boost_%s' % x for x in boost_libs]
@ -721,9 +726,9 @@ if not fast_start:
included_boost = False
(boost_libraries, boost_libpath, env['BOOST_INC_PATH']) = res
elif boost_opt == 'system':
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, mode == 'debug')
res = conf.CheckBoostLibraries(boost_libs, lib_paths, inc_paths, boost_version, mode == 'debug')
if res[0] is None:
print "Can not find system boost libraries"
print "Can not find system boost libraries with version %s " % boost_version
print "Please supply a path through extra_lib_path and try again."
print "Or use boost=included to use included boost libraries."
Exit(2)

View File

@ -153,11 +153,12 @@ int main()
return ('int', 'int *', 'struct timeval *')
def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
def checkBoostLibraries(conf, libs, lib_paths, inc_paths, version, isDebug):
''' look for boost libraries
libs: library names
lib_paths: try these paths for boost libraries
inc_paths: try these paths for boost headers
version: required boost version
isDebug: if true, use debug libraries
'''
conf.Message('Checking for boost library %s... ' % ', '.join(libs))
@ -180,17 +181,20 @@ def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
files = glob.glob(os.path.join(path, 'libboost_%s-*.a' % lib))
# check things like libboost_iostreams-gcc-mt-d-1_33_1.a
if len(files) > 0:
# runtime code includes s,g,y,d,p,n, where we should look for
# d,g,y for debug, s,p,n for release
if isDebug:
files = filter(lambda x: re.search('libboost_%s-\w+-mt-d-[\d-]+' % lib, x), files)
lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-[^spn]+-%s.a' % (lib, version), x), files)
else:
files = filter(lambda x: re.search('libboost_%s-\w+-mt-[\d-]+' % lib, x), files)
if len(files) == 0:
print 'Warning: %s directory seems to have the boost libraries, but ' % path
print 'I can not find one that has the form lib%s-xxx-mt[-d]-x_xx_x.a' % lib
print 'Check your boost installation, or change select criteria in scons_util.py'
if len(files) > 0:
# get xxx-gcc-1_33_1 from /usr/local/lib/libboost_xxx-gcc-1_33_1.a
lib_names.append(files[0].split(os.sep)[-1][3:-2])
lib_files = filter(lambda x: re.search('libboost_%s-\w+-mt-([^dgy]+-)*%s.a' % (lib, version), x), files)
if len(lib_files) == 0:
print 'Warning: Can not find an appropriate boost library in %s.' % path
lib_files = filter(lambda x: re.search('libboost_%s-[\w-]+%s.a' % (lib, version), x), files)
if len(lib_files) > 0:
print 'Use library ' % lib_files[0]
if len(lib_files) > 0:
# get xxx-gcc-1_33_1 from /usr/local/lib/libboost_xxx-gcc-1_33_1.a
lib_names.append(lib_files[0].split(os.sep)[-1][3:-2])
if len(lib_names) == len(libs):
found_lib = True
lib_path = path
@ -198,15 +202,19 @@ def checkBoostLibraries(conf, libs, lib_paths, inc_paths, isDebug):
if not found_lib:
conf.Result('no')
return (None, None, None)
# check version number in boost/version.hpp
def isValidBoostDir(dir):
file = os.path.join(dir, 'boost', 'version.hpp')
version_string = '#define BOOST_LIB_VERSION "%s"' % version
return os.path.isfile(file) and version_string in open(file).read()
# check for boost header file
for path in inc_paths:
# check path/boost/regex.h
if os.path.isfile(os.path.join(path, 'boost', 'regex.h')):
if isValidBoostDir(path):
inc_path = path
found_inc = True
else: # check path/boost_1_xx_x/boost
else: # check path/boost_1_xx_x/boost
dirs = glob.glob(os.path.join(path, 'boost-*'))
if len(dirs) > 0 and os.path.isfile(os.path.join(dirs[0], 'boost', 'regex.h')):
if len(dirs) > 0 and isValidBoostDir(dirs[0]):
inc_path = dirs[0]
found_inc = True
# return result