Skip to content

Commit

Permalink
[SCons] Attempt auto-detection of libraries for Boost.Thread
Browse files Browse the repository at this point in the history
  • Loading branch information
speth committed Jun 12, 2015
1 parent 430c596 commit 76344ea
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ before_script:
- wget https://github.com/msabramo/cython/releases/download/0.19.1/Cython-0.19.1-cp27-none-linux_x86_64.whl
- sudo pip install Cython-0.19.1-cp27-none-linux_x86_64.whl
script:
- scons build VERBOSE=y python_package=full python3_package=n blas_lapack_libs=lapack,blas build_thread_safe=y boost_thread_lib=boost_thread optimize=n
- scons build VERBOSE=y python_package=full python3_package=n blas_lapack_libs=lapack,blas build_thread_safe=y optimize=n
- scons test
49 changes: 38 additions & 11 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -535,8 +535,9 @@ config_options = [
defaults.boostLibDir, PathVariable.PathAccept),
('boost_thread_lib',
"""A comma-separated list containing the names of the libraries needed to
link to Boost.Thread.""",
'boost_thread'),
link to Boost.Thread. Autodetection will be attempted if this is left
blank.""",
''),
('boost_windows_libs',
"""Comma-separated list containing the names of the Boost libraries
required to link Cantera programs on Windows. These libraries will be
Expand Down Expand Up @@ -817,7 +818,8 @@ else:
config_error("Couldn't find a working shared_ptr implementation.")

import SCons.Conftest, SCons.SConf
ret = SCons.Conftest.CheckLib(SCons.SConf.CheckContext(conf),
context = SCons.SConf.CheckContext(conf)
ret = SCons.Conftest.CheckLib(context,
['sundials_cvodes'],
header='#include "cvodes/cvodes.h"',
language='C++',
Expand Down Expand Up @@ -919,6 +921,39 @@ env['F77FLAGS'] = env['F90FLAGS'] = env['F95FLAGS'] = env['F03FLAGS'] = env['FOR

env['FORTRANMODDIR'] = '${TARGET.dir}'

env['boost_libs'] = []
if env['build_thread_safe']:
env['use_boost_libs'] = True

# Figure out what needs to be linked for Boost Thread support. Varies with
# OS and Boost version.
boost_ok = False
if env['boost_thread_lib']:
boost_lib_choices = [env['boost_thread_lib'].split(',')]
else:
boost_lib_choices = [[''], ['boost_system'],
['boost_thread', 'boost_system']]
for bt in boost_lib_choices:
header= "#define BOOST_ALL_NO_LIB\n#include <boost/thread/thread.hpp>"
call = "boost::mutex foo; boost::mutex::scoped_lock bar(foo);"

ans = SCons.Conftest.CheckLib(context,
[bt[0]],
header=header,
language='C++',
call=call,
extra_libs=bt[1:] if len(bt)>1 else None,
autoadd=False)
if not ans:
boost_ok = True
print 'Linking Boost.Thread with the following libraries: {0}'.format(
', '.join(bt) or '<none>')
if bt[0] and env.subst('$CXX') != 'cl':
env['boost_libs'] = bt
break
else:
env['use_boost_libs'] = False

env = conf.Finish()

if env['VERBOSE']:
Expand Down Expand Up @@ -1251,14 +1286,6 @@ config_h = env.Command('include/cantera/base/config.h',
env.AlwaysBuild(config_h)
env['config_h_target'] = config_h

env['boost_libs'] = []
if env['build_thread_safe']:
env['use_boost_libs'] = True
if env['CC'] != 'cl':
env['boost_libs'].extend(listify(env['boost_thread_lib']))
else:
env['use_boost_libs'] = False

# *********************
# *** Build Cantera ***
# *********************
Expand Down

0 comments on commit 76344ea

Please sign in to comment.