From fc42d0d4f9fbb0c2e168e7c0339774e6d44ef852 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Fri, 7 Jul 2006 03:08:37 +0000 Subject: [PATCH] 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 --- development/scons/SConstruct | 23 ++++++++++++-------- development/scons/scons_utils.py | 36 +++++++++++++++++++------------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/development/scons/SConstruct b/development/scons/SConstruct index 19fbfd3f8b..88a89eba95 100644 --- a/development/scons/SConstruct +++ b/development/scons/SConstruct @@ -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) diff --git a/development/scons/scons_utils.py b/development/scons/scons_utils.py index 5030f07221..25e355e95d 100644 --- a/development/scons/scons_utils.py +++ b/development/scons/scons_utils.py @@ -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 -- 2.39.5