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 # only 1.4.x has frontends/qt2
if os.path.isdir(os.path.join(top_src_dir, 'src', 'frontends', 'qt2')): if os.path.isdir(os.path.join(top_src_dir, 'src', 'frontends', 'qt2')):
package_version = '1.4.2svn' package_version = '1.4.2svn'
boost_version = '1_32'
else: else:
package_version = '1.5.0svn' package_version = '1.5.0svn'
boost_version = '1_33_1'
devel_version = True devel_version = True
default_build_mode = 'debug' default_build_mode = 'debug'
@ -544,17 +546,20 @@ if env.has_key('qt_dir') and env['qt_dir']:
# add path to the qt tools # add path to the qt tools
env.AppendUnique(LIBPATH = [os.path.join(env['qt_dir'], 'lib')]) 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 # 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')) env.PrependENVPath('PATH', os.path.join(env['qt_dir'], 'bin'))
elif os.path.isdir(os.environ.get('QTDIR', '/usr/lib/qt-3.3')): elif os.path.isdir(os.environ.get('QTDIR', '/usr/lib/qt-3.3')):
env['QTDIR'] = 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']: if env.has_key('qt_lib_path') and env['qt_lib_path']:
qt_lib_path = env.subst('$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')): elif env.has_key('QTDIR') and os.path.isdir(os.path.join(env.subst('$QTDIR'), 'lib')):
qt_lib_path = env.subst('$QTDIR/lib') qt_lib_path = env.subst('$QTDIR/lib')
# this is the path for cygwin. # this is the path for cygwin.
elif os.path.isdir(os.path.join('/usr/lib/', frontend, 'lib')): elif os.path.isdir(os.path.join('/usr/lib/', frontend_lib, 'lib')):
qt_lib_path = env.subst('/usr/lib/$frontend/lib') qt_lib_path = '/usr/lib/%s/lib' % frontend_lib
else: else:
print "Qt library directory is not found. Please specify it using qt_lib_path" print "Qt library directory is not found. Please specify it using qt_lib_path"
Exit(1) 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')): elif env.has_key('QTDIR') and os.path.isdir(os.path.join(env.subst('$QTDIR'), 'include')):
qt_inc_path = '$QTDIR/include' qt_inc_path = '$QTDIR/include'
# this is the path for cygwin. # this is the path for cygwin.
elif os.path.isdir('/usr/include/' + frontend): elif os.path.isdir('/usr/include/' + frontend_lib):
qt_inc_path = '/usr/include/$frontend' qt_inc_path = '/usr/include/' + frontend_lib
else: else:
print "Qt include directory not found. Please specify it using qt_inc_path" print "Qt include directory not found. Please specify it using qt_inc_path"
Exit(1) 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']: if env.has_key('extra_lib_path1') and env['extra_lib_path1']:
env.AppendUnique(LIBPATH = [env['extra_lib_path1']]) env.AppendUnique(LIBPATH = [env['extra_lib_path1']])
if env.has_key('extra_bin_path') and env['extra_bin_path']: 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'] 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 # extra_inc_paths will be used later by intlenv etc
env.AppendUnique(CPPPATH = extra_inc_paths) env.AppendUnique(CPPPATH = extra_inc_paths)
@ -711,7 +716,7 @@ if not fast_start:
included_boost = True included_boost = True
env['BOOST_INC_PATH'] = '$TOP_SRCDIR/boost' env['BOOST_INC_PATH'] = '$TOP_SRCDIR/boost'
elif boost_opt == 'auto': 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 not found, use local boost
if res[0] is None: if res[0] is None:
boost_libraries = ['included_boost_%s' % x for x in boost_libs] boost_libraries = ['included_boost_%s' % x for x in boost_libs]
@ -721,9 +726,9 @@ if not fast_start:
included_boost = False included_boost = False
(boost_libraries, boost_libpath, env['BOOST_INC_PATH']) = res (boost_libraries, boost_libpath, env['BOOST_INC_PATH']) = res
elif boost_opt == 'system': 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: 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 "Please supply a path through extra_lib_path and try again."
print "Or use boost=included to use included boost libraries." print "Or use boost=included to use included boost libraries."
Exit(2) Exit(2)

View File

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