Setting the scons options 'python_prefix=USER' or 'python3_prefix=USER' will pass the '--user' flag to setup.py, causing the Python module to be installed to a platform-specific directory on the user's module path.
102 lines
4 KiB
Python
102 lines
4 KiB
Python
from buildutils import *
|
|
import distutils.sysconfig
|
|
|
|
Import('env', 'build', 'install')
|
|
|
|
gcv = distutils.sysconfig.get_config_var
|
|
|
|
####################################
|
|
### Old Python Module: Raw C API ###
|
|
####################################
|
|
|
|
localenv = env.Clone()
|
|
|
|
localenv.Append(CPPPATH=[gcv('INCLUDEPY'), env['python_array_include']],
|
|
LIBPATH=(gcv('LIBDIR') or ''))
|
|
|
|
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]
|
|
|
|
make_setup = localenv.SubstFile('#interfaces/python/setup.py',
|
|
'#interfaces/python/setup.py.in')
|
|
|
|
extraArgs = ''
|
|
if localenv['python_package'] == 'full':
|
|
localenv.Prepend(CPPPATH=['#src', '#include'])
|
|
|
|
cantera_libname = 'cantera_shared' if os.name=='nt' else 'cantera'
|
|
#pylinklibs = [cantera_libname, 'cvode', 'ctmath', 'ctlapack', 'ctblas', 'ctf2c', 'execstream']
|
|
if os.name == 'nt':
|
|
pylinklibs = list(env['cantera_shared_libs'])
|
|
else:
|
|
pylinklibs = list(env['cantera_libs'])
|
|
|
|
if localenv['toolchain'] == 'mingw':
|
|
# 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.
|
|
pylinklibs.append('python%s' % gcv('VERSION'))
|
|
|
|
# Link statically so we don't have to include a copy of libstdc++
|
|
localenv.Append(LINKFLAGS=['-static-libgcc', '-static-libstdc++'])
|
|
extraArgs += '--compiler=mingw32'
|
|
|
|
# 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'])
|
|
pylinklibs.extend(localenv['blas_lapack_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))
|
|
|
|
env['python_module'] = pymodule
|
|
|
|
elif localenv['python_package'] == 'minimal':
|
|
pymodule = make_setup
|
|
|
|
moddir = pjoin('interfaces', 'python')
|
|
localenv.AddPostAction(make_setup,
|
|
'cd %s && $python_cmd setup.py build %s' % (moddir,
|
|
extraArgs))
|
|
|
|
# Install the Python module
|
|
if localenv['python_prefix'] == 'USER':
|
|
# Install to the platform-specific user site-packages directory
|
|
extra = '--user'
|
|
elif 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 localenv['PYTHON_INSTALLER'] == 'direct':
|
|
install(localenv.Command, 'dummy', pymodule,
|
|
'cd %s && $python_cmd setup.py install --record ../../build/python-installed-files.txt %s' % (moddir,extra))
|
|
elif localenv['PYTHON_INSTALLER'] == 'debian':
|
|
install(localenv.Command, 'dummy', pymodule,
|
|
'cd %s && $python_cmd setup.py install %s --install-layout=deb --no-compile' % (moddir,extra))
|
|
elif localenv['PYTHON_INSTALLER'] == 'binary':
|
|
install(localenv.Command, 'dummy', pymodule,
|
|
'cd %s && $python_cmd setup.py bdist_msi --dist-dir=../..' % moddir +
|
|
' --target-version=' + distutils.sysconfig.get_python_version())
|
|
|
|
if localenv['python_package'] == 'full':
|
|
install(localenv.RecursiveInstall, pjoin('$inst_sampledir', 'python'),
|
|
'#samples/python')
|