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')