cantera/src/python/SConscript

89 lines
3.3 KiB
Python

from buildutils import *
import distutils.sysconfig
Import('env', 'build', 'install')
localenv = env.Clone()
gcv = distutils.sysconfig.get_config_var
localenv.Append(CPPPATH=[gcv('INCLUDEPY'), env['python_array_include']],
SHLINKFLAGS=gcv('LDFLAGS'),
CPPFLAGS=((gcv('BASECFLAGS') or '').split() +
(gcv('OPT') or '').split()))
if '-Wstrict-prototypes' in localenv['CPPFLAGS']:
localenv['CPPFLAGS'].remove('-Wstrict-prototypes')
if localenv['OS'] == 'Windows':
localenv.Append(LIBPATH=pjoin(gcv('prefix'), 'libs'))
for var in ('VS80COMNTOOLS', 'VS90COMNTOOLS', 'VS100COMNTOOLS'):
if var in os.environ:
localenv['ENV'][var] = os.environ[var]
localenv['spam_source'] = repr(File('#src/python/spam.c').abspath)
make_setup = localenv.SubstFile('#interfaces/python/setup.py',
'#interfaces/python/setup.py.in')
if localenv['python_package'] == 'full':
localenv.Append(CPPPATH=['#src', '#include'])
cantera_libname = 'cantera_shared' if os.name=='nt' else 'cantera'
pylinklibs = [cantera_libname]
# On Windows, we need to link against the Python "import" library.
# With MSVC, this is automatically handled by a "#pragma comment
# directive in the Python headers, but for MinGW we need to do
# it manually.
if localenv['toolchain'] == 'mingw':
pylinklibs.append('python%s' % gcv('VERSION'))
# OS X requires library dependencies to be specified at link time
if localenv['OS'] == 'Darwin':
pylinklibs.append('python%s' % gcv('VERSION'))
pylinklibs.extend(localenv['sundials_libs'])
pymodule = localenv.SharedLibrary('#interfaces/python/Cantera/_cantera',
['pycantera.cpp'],
LIBS=pylinklibs,
SHLIBPREFIX='',
SHLIBSUFFIX=gcv('SO'))
build(pymodule)
localenv.Depends(pymodule, make_setup)
if localenv['OS'] == 'Windows':
for file in localenv['cantera_shlib']:
dest = pjoin('interfaces', 'python', 'Cantera', file.name)
localenv.AddPreAction(pymodule,Copy(dest, file))
elif localenv['python_package'] == 'minimal':
pymodule = make_setup
moddir = pjoin('interfaces', 'python')
localenv.AddPostAction(make_setup,
'cd %s && $python_cmd setup.py build' % moddir)
# Install the Python module
if localenv['python_prefix']:
# A specific location for the Cantera python module has been specified
extra = '--prefix="%s"' % localenv['python_prefix']
else:
# Install Python module in the default location
extra = ''
if 'MSSdk' in os.environ:
localenv['ENV']['DISTUTILS_USE_SDK'] = '1'
localenv['ENV']['MSSdk'] = os.environ['MSSdk']
if localenv['PYTHON_INSTALLER'] == 'direct':
install(localenv.Command, 'dummy', pymodule,
'cd %s && $python_cmd setup.py install %s' % (moddir,extra))
elif localenv['PYTHON_INSTALLER'] == 'binary':
install(localenv.Command, 'dummy', pymodule,
'cd %s && $python_cmd setup.py bdist_msi --dist-dir=../..' % moddir)
if localenv['python_package'] == 'full':
install(localenv.RecursiveInstall, pjoin('$inst_sampledir', 'python'),
'#samples/python')