本文整理汇总了Python中waflib.Configure.conf.to_log函数的典型用法代码示例。如果您正苦于以下问题:Python to_log函数的具体用法?Python to_log怎么用?Python to_log使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了to_log函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: find_at
def find_at(conf, check, what, where, **kwargs):
if not exists(where):
conf.msg("Specified path for %s" % what, "doesn't exist: %s" % where, color="RED")
return False
pkgp = os.getenv("PKG_CONFIG_PATH", "")
try:
conf.env.stash()
conf.env[what + "_HOME"] = where
conf.env.append_value('PATH', pjoin(where, "bin"))
conf.env.append_value('RPATH', pjoin(where, "lib"))
pkgconf_path = pjoin(where, "lib/pkgconfig")
conf.env.append_value('PKG_CONFIG_PATH', pkgconf_path)
conf.to_log("Pkg config path: %s" % conf.env.PKG_CONFIG_PATH)
if pkgp: pkgp = pkgp + ":"
os.environ["PKG_CONFIG_PATH"] = pkgconf_path + pkgp
conf.parse_flags("-I%s/include -L%s/lib" % (where, where),
uselib=kwargs["uselib_store"])
this_kwargs = kwargs.copy()
this_kwargs['check_path'] = where
check(**this_kwargs)
return True
except conf.errors.ConfigurationError:
raise
os.environ["PKG_CONFIG_PATH"] = pkgp
conf.end_msg("failed", color="YELLOW")
conf.env.revert()
return False
示例2: find_at
def find_at(conf, check, what, where, **kwargs):
if not exists(where):
return False
pkgp = os.getenv("PKG_CONFIG_PATH", "")
try:
conf.env.stash()
conf.env[what + "_HOME"] = where
conf.env.append_value('PATH', pjoin(where, "bin"))
conf.env.append_value('RPATH', pjoin(where, "lib"))
pkgconf_path = pjoin(where, "lib/pkgconfig")
conf.env.append_value('PKG_CONFIG_PATH', pkgconf_path)
conf.to_log("Pkg config path: %s" % conf.env.PKG_CONFIG_PATH)
if pkgp: pkgp = pkgp + ":"
os.environ["PKG_CONFIG_PATH"] = pkgconf_path + pkgp
conf.parse_flags("-I{0}/include -L{0}/lib".format(where),
uselib=kwargs["uselib_store"])
check(**kwargs)
return True
except conf.errors.ConfigurationError:
os.environ["PKG_CONFIG_PATH"] = pkgp
conf.end_msg("failed", color="YELLOW")
conf.env.revert()
return False
示例3: check_with
def check_with(conf, check, what, *args, **kwargs):
"""
Perform `check`, also looking at directories specified by the --with-X
commandline option and X_HOME environment variable (X = what.upper())
The extra_args
"""
import os
from os.path import abspath
with_dir = getattr(conf.options, "with_" + what, None)
env_dir = os.environ.get(what.upper() + "_HOME", None)
paths = [with_dir, env_dir] + kwargs.pop("extra_paths", [])
WHAT = what.upper()
kwargs["uselib_store"] = kwargs.get("uselib_store", WHAT)
kwargs["use"] = kwargs.get("use", []) + [kwargs["uselib_store"]]
for path in [abspath(p) for p in paths if p]:
conf.to_log("Checking for %s in %s" % (what, path))
if conf.find_at(check, WHAT, path, **kwargs):
conf.msg("Found %s at" % what, path, color="WHITE")
return
check(**kwargs)
conf.msg("Found %s at" % what, "(local environment)", color="WHITE")
示例4: check_python_headers
def check_python_headers(conf):
"""
Check for headers and libraries necessary to extend or embed python by using the module *distutils*.
On success the environment variables xxx_PYEXT and xxx_PYEMBED are added:
* PYEXT: for compiling python extensions
* PYEMBED: for embedding a python interpreter
"""
# FIXME rewrite
if not conf.env['CC_NAME'] and not conf.env['CXX_NAME']:
conf.fatal('load a compiler first (gcc, g++, ..)')
if not conf.env['PYTHON_VERSION']:
conf.check_python_version()
env = conf.env
pybin = env.PYTHON
if not pybin:
conf.fatal('could not find the python executable')
v = 'INCLUDEPY SO LDFLAGS MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS'.split()
try:
lst = conf.get_python_variables(["get_config_var('%s') or ''" % x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals = ['%s = %r' % (x, y) for (x, y) in zip(v, lst)]
conf.to_log("Configuration returned from %r:\n%r\n" % (pybin, '\n'.join(vals)))
dct = dict(zip(v, lst))
x = 'MACOSX_DEPLOYMENT_TARGET'
if dct[x]:
conf.env[x] = conf.environ[x] = dct[x]
env['pyext_PATTERN'] = '%s' + dct['SO'] # not a mistake
if Options.options.use_distutils_flags:
all_flags = dct['LDFLAGS'] + ' ' + dct['LDSHARED'] + ' ' + dct['CFLAGS']
conf.parse_flags(all_flags, 'PYEXT')
env['INCLUDES_PYEXT'] = [dct['INCLUDEPY']]
示例5: check_with
def check_with(conf, check, what, *args, **kwargs):
"""
Perform `check`, also looking at --with-X commandline option and
and X_HOME environment variable
"""
import os
with_dir = getattr(conf.options, "with_" + what, None)
env_dir = os.environ.get(what.upper() + "_HOME", None)
paths = [with_dir, env_dir] + kwargs.pop("extra_paths", [])
what = what.upper()
kwargs["uselib_store"] = kwargs.get("uselib_store", what)
kwargs["use"] = kwargs.get("use", []) + [kwargs["uselib_store"]]
for path in [p for p in paths if p]:
conf.to_log("Checking in %s" % path)
if conf.find_at(check, what, path, **kwargs):
return
check(**kwargs)
示例6: check_python_headers
def check_python_headers(conf):
env=conf.env
if not env['CC_NAME']and not env['CXX_NAME']:
conf.fatal('load a compiler first (gcc, g++, ..)')
if not env['PYTHON_VERSION']:
conf.check_python_version()
pybin=conf.env.PYTHON
if not pybin:
conf.fatal('Could not find the python executable')
v='prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS LDVERSION'.split()
try:
lst=conf.get_python_variables(["get_config_var('%s') or ''"%x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals=['%s = %r'%(x,y)for(x,y)in zip(v,lst)]
conf.to_log("Configuration returned from %r:\n%r\n"%(pybin,'\n'.join(vals)))
dct=dict(zip(v,lst))
x='MACOSX_DEPLOYMENT_TARGET'
if dct[x]:
conf.env[x]=conf.environ[x]=dct[x]
if not env.pyext_PATTERN:
if dct['SO']:
env.pyext_PATTERN='%s'+dct['SO']
else:
env.pyext_PATTERN=(conf.env.cshlib_PATTERN or conf.env.cxxshlib_PATTERN).lstrip('lib')
num='.'.join(env['PYTHON_VERSION'].split('.')[:2])
conf.find_program([''.join(pybin)+'-config','python%s-config'%num,'python-config-%s'%num,'python%sm-config'%num],var='PYTHON_CONFIG',msg="python-config")
all_flags=[['--cflags','--libs','--ldflags']]
if sys.hexversion<0x2060000:
all_flags=[[x]for x in all_flags[0]]
xx=conf.env.CXX_NAME and'cxx'or'c'
for flags in all_flags:
conf.check_cfg(msg='Asking python-config for pyembed %r flags'%' '.join(flags),path=conf.env.PYTHON_CONFIG,package='',uselib_store='PYEMBED',args=flags)
conf.check(header_name='Python.h',define_name='HAVE_PYEMBED',msg='Getting pyembed flags from python-config',fragment=FRAG,errmsg='Could not build a python embedded interpreter',features='%s %sprogram pyembed'%(xx,xx))
for flags in all_flags:
conf.check_cfg(msg='Asking python-config for pyext %r flags'%' '.join(flags),path=conf.env.PYTHON_CONFIG,package='',uselib_store='PYEXT',args=flags)
conf.check(header_name='Python.h',define_name='HAVE_PYEXT',msg='Getting pyext flags from python-config',features='%s %sshlib pyext'%(xx,xx),fragment=FRAG,errmsg='Could not build python extensions')
conf.define('HAVE_PYTHON_H',1)
示例7: configure_3rd_party_with_autotools
def configure_3rd_party_with_autotools (conf, archive_name,
without_configure=False, without_make_install=False, conf_args = ""):
name = archive_name_without_suffix (archive_name)
Logs.pprint ("BLUE", "Starting installation of %s"%name)
conf.to_log ((" Starting installation of %s " % name).center (80, "="))
archive_path = os.path.join (conf.path.abspath (), "3rd", archive_name)
destnode = conf.bldnode.make_node ("3rd")
# Install everything in build directory, in '3rd' subdirectory (the 'lib' and
# 'include' directory can be copied in conf.env.PREFIX when ./waf install is
# called, if needed)
incdir = destnode.find_or_declare ("include").abspath()
libdir = destnode.find_or_declare ("lib").abspath()
srcdir = conf.extract_archive (archive_path, name, destnode)
conf.find_program ("make")
# Apply patches
conf.apply_all_relevant_patches (name)
# always build static library, even if ibex is built as a shared library.
conf_args += " --enable-static --disable-shared"
if conf.env.ENABLE_SHARED:
cflags = os.getenv("CFLAGS", "")
cxxflags = os.getenv("CXXFLAGS", "")
os.environ["CFLAGS"] = cflags + " ".join(conf.env.CFLAGS_cshlib)
os.environ["CXXFLAGS"] = cxxflags+" "+" ".join(conf.env.CXXFLAGS_cxxshlib)
if Utils.is_win32:
conf_args += " --prefix=%s" % convert_path_win2msys (destnode.abspath ())
conf.find_program ("sh")
cmd_conf = [conf.env.SH, "-c", "./configure %s"%conf_args]
cmd_make = conf.env.MAKE
else:
conf_args += " --prefix=%s" % destnode.abspath ()
cmd_conf = "./configure %s" % (conf_args)
cmd_make = conf.env.MAKE + ["-j%d"%conf.options.jobs]
cmd_install = conf.env.MAKE + ["install"]
stages = []
if not without_configure:
stages += [ (cmd_conf, "configure") ]
stages += [ (cmd_make, "make") ]
if not without_make_install:
stages += [ (cmd_install, "install") ]
for cmd, stage in stages:
conf.start_msg("Calling %s" % stage)
try:
out = conf.cmd_and_log (cmd, cwd=srcdir, env=os.environ)
conf.end_msg("done")
except Errors.WafError as e:
conf.end_msg("failed", color="RED")
print e
conf.fatal ("failed to %s %s (%s)" % (stage, name, cmd))
conf.to_log ((" Installation of %s: done " % name).center (80, "="))
if conf.env.ENABLE_SHARED:
os.environ["CFLAGS"] = cflags
os.environ["CXXFLAGS"] = cxxflags
return srcdir, incdir, libdir
示例8: check_python_headers
def check_python_headers(conf, features='pyembed pyext'):
"""
Check for headers and libraries necessary to extend or embed python by using the module *distutils*.
On success the environment variables xxx_PYEXT and xxx_PYEMBED are added:
* PYEXT: for compiling python extensions
* PYEMBED: for embedding a python interpreter
"""
features = Utils.to_list(features)
assert ('pyembed' in features) or ('pyext' in features), "check_python_headers features must include 'pyembed' and/or 'pyext'"
env = conf.env
if not env.CC_NAME and not env.CXX_NAME:
conf.fatal('load a compiler first (gcc, g++, ..)')
# bypass all the code below for cross-compilation
if conf.python_cross_compile(features):
return
if not env.PYTHON_VERSION:
conf.check_python_version()
pybin = env.PYTHON
if not pybin:
conf.fatal('Could not find the python executable')
# so we actually do all this for compatibility reasons and for obtaining pyext_PATTERN below
v = 'prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS LDVERSION'.split()
try:
lst = conf.get_python_variables(["get_config_var('%s') or ''" % x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals = ['%s = %r' % (x, y) for (x, y) in zip(v, lst)]
conf.to_log("Configuration returned from %r:\n%s\n" % (pybin, '\n'.join(vals)))
dct = dict(zip(v, lst))
x = 'MACOSX_DEPLOYMENT_TARGET'
if dct[x]:
env[x] = conf.environ[x] = dct[x]
env.pyext_PATTERN = '%s' + dct['SO'] # not a mistake
# Try to get pythonX.Y-config
num = '.'.join(env.PYTHON_VERSION.split('.')[:2])
conf.find_program([''.join(pybin) + '-config', 'python%s-config' % num, 'python-config-%s' % num, 'python%sm-config' % num], var='PYTHON_CONFIG', msg="python-config", mandatory=False)
if env.PYTHON_CONFIG:
# python2.6-config requires 3 runs
all_flags = [['--cflags', '--libs', '--ldflags']]
if sys.hexversion < 0x2070000:
all_flags = [[k] for k in all_flags[0]]
xx = env.CXX_NAME and 'cxx' or 'c'
if 'pyembed' in features:
for flags in all_flags:
conf.check_cfg(msg='Asking python-config for pyembed %r flags' % ' '.join(flags), path=env.PYTHON_CONFIG, package='', uselib_store='PYEMBED', args=flags)
try:
conf.test_pyembed(xx)
except conf.errors.ConfigurationError:
# python bug 7352
if dct['Py_ENABLE_SHARED'] and dct['LIBDIR']:
env.append_unique('LIBPATH_PYEMBED', [dct['LIBDIR']])
conf.test_pyembed(xx)
else:
raise
if 'pyext' in features:
for flags in all_flags:
conf.check_cfg(msg='Asking python-config for pyext %r flags' % ' '.join(flags), path=env.PYTHON_CONFIG, package='', uselib_store='PYEXT', args=flags)
try:
conf.test_pyext(xx)
except conf.errors.ConfigurationError:
# python bug 7352
if dct['Py_ENABLE_SHARED'] and dct['LIBDIR']:
env.append_unique('LIBPATH_PYEXT', [dct['LIBDIR']])
conf.test_pyext(xx)
else:
raise
conf.define('HAVE_PYTHON_H', 1)
return
# No python-config, do something else on windows systems
all_flags = dct['LDFLAGS'] + ' ' + dct['CFLAGS']
conf.parse_flags(all_flags, 'PYEMBED')
all_flags = dct['LDFLAGS'] + ' ' + dct['LDSHARED'] + ' ' + dct['CFLAGS']
conf.parse_flags(all_flags, 'PYEXT')
result = None
if not dct["LDVERSION"]:
dct["LDVERSION"] = env.PYTHON_VERSION
# further simplification will be complicated
for name in ('python' + dct['LDVERSION'], 'python' + env.PYTHON_VERSION + 'm', 'python' + env.PYTHON_VERSION.replace('.', '')):
# LIBPATH_PYEMBED is already set; see if it works.
#.........这里部分代码省略.........
示例9: check_python_headers
def check_python_headers(conf):
if not conf.env['CC_NAME']and not conf.env['CXX_NAME']:
conf.fatal('load a compiler first (gcc, g++, ..)')
if not conf.env['PYTHON_VERSION']:
conf.check_python_version()
env=conf.env
pybin=conf.env.PYTHON
if not pybin:
conf.fatal('could not find the python executable')
v='prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS'.split()
try:
lst=conf.get_python_variables(["get_config_var('%s') or ''"%x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals=['%s = %r'%(x,y)for(x,y)in zip(v,lst)]
conf.to_log("Configuration returned from %r:\n%r\n"%(pybin,'\n'.join(vals)))
dct=dict(zip(v,lst))
x='MACOSX_DEPLOYMENT_TARGET'
if dct[x]:
conf.env[x]=conf.environ[x]=dct[x]
env['pyext_PATTERN']='%s'+dct['SO']
all_flags=dct['LDFLAGS']+' '+dct['CFLAGS']
conf.parse_flags(all_flags,'PYEMBED')
all_flags=dct['LDFLAGS']+' '+dct['LDSHARED']+' '+dct['CFLAGS']
conf.parse_flags(all_flags,'PYEXT')
result=None
for name in('python'+env['PYTHON_VERSION'],'python'+env['PYTHON_VERSION'].replace('.','')):
if not result and env['LIBPATH_PYEMBED']:
path=env['LIBPATH_PYEMBED']
conf.to_log("\n\n# Trying default LIBPATH_PYEMBED: %r\n"%path)
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False,msg='Checking for library %s in LIBPATH_PYEMBED'%name)
if not result and dct['LIBDIR']:
path=[dct['LIBDIR']]
conf.to_log("\n\n# try again with -L$python_LIBDIR: %r\n"%path)
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False,msg='Checking for library %s in LIBDIR'%name)
if not result and dct['LIBPL']:
path=[dct['LIBPL']]
conf.to_log("\n\n# try again with -L$python_LIBPL (some systems don't install the python library in $prefix/lib)\n")
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False,msg='Checking for library %s in python_LIBPL'%name)
if not result:
path=[os.path.join(dct['prefix'],"libs")]
conf.to_log("\n\n# try again with -L$prefix/libs, and pythonXY name rather than pythonX.Y (win32)\n")
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False,msg='Checking for library %s in $prefix/libs'%name)
if result:
break
if result:
env['LIBPATH_PYEMBED']=path
env.append_value('LIB_PYEMBED',[name])
else:
conf.to_log("\n\n### LIB NOT FOUND\n")
if(Utils.is_win32 or sys.platform.startswith('os2')or dct['Py_ENABLE_SHARED']):
env['LIBPATH_PYEXT']=env['LIBPATH_PYEMBED']
env['LIB_PYEXT']=env['LIB_PYEMBED']
num='.'.join(env['PYTHON_VERSION'].split('.')[:2])
conf.find_program(['python%s-config'%num,'python-config-%s'%num,'python%sm-config'%num],var='PYTHON_CONFIG',mandatory=False)
includes=[]
if conf.env.PYTHON_CONFIG:
for incstr in conf.cmd_and_log([conf.env.PYTHON_CONFIG,'--includes']).strip().split():
if(incstr.startswith('-I')or incstr.startswith('/I')):
incstr=incstr[2:]
if incstr not in includes:
includes.append(incstr)
conf.to_log("Include path for Python extensions (found via python-config --includes): %r\n"%(includes,))
env['INCLUDES_PYEXT']=includes
env['INCLUDES_PYEMBED']=includes
else:
conf.to_log("Include path for Python extensions ""(found via distutils module): %r\n"%(dct['INCLUDEPY'],))
env['INCLUDES_PYEXT']=[dct['INCLUDEPY']]
env['INCLUDES_PYEMBED']=[dct['INCLUDEPY']]
if env['CC_NAME']=='gcc':
env.append_value('CFLAGS_PYEMBED',['-fno-strict-aliasing'])
env.append_value('CFLAGS_PYEXT',['-fno-strict-aliasing'])
if env['CXX_NAME']=='gcc':
env.append_value('CXXFLAGS_PYEMBED',['-fno-strict-aliasing'])
env.append_value('CXXFLAGS_PYEXT',['-fno-strict-aliasing'])
if env.CC_NAME=="msvc":
from distutils.msvccompiler import MSVCCompiler
dist_compiler=MSVCCompiler()
dist_compiler.initialize()
env.append_value('CFLAGS_PYEXT',dist_compiler.compile_options)
env.append_value('CXXFLAGS_PYEXT',dist_compiler.compile_options)
env.append_value('LINKFLAGS_PYEXT',dist_compiler.ldflags_shared)
try:
conf.check(header_name='Python.h',define_name='HAVE_PYTHON_H',uselib='PYEMBED',fragment=FRAG,errmsg='Could not find the python development headers')
except conf.errors.ConfigurationError:
conf.check_cfg(path=conf.env.PYTHON_CONFIG,package='',uselib_store='PYEMBED',args=['--cflags','--libs'])
conf.check(header_name='Python.h',define_name='HAVE_PYTHON_H',msg='Getting the python flags from python-config',uselib='PYEMBED',fragment=FRAG,errmsg='Could not find the python development headers elsewhere')
示例10: check_python_headers
def check_python_headers(conf):
env = conf.env
if not env["CC_NAME"] and not env["CXX_NAME"]:
conf.fatal("load a compiler first (gcc, g++, ..)")
if not env["PYTHON_VERSION"]:
conf.check_python_version()
pybin = conf.env.PYTHON
if not pybin:
conf.fatal("Could not find the python executable")
v = "prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS".split()
try:
lst = conf.get_python_variables(["get_config_var('%s') or ''" % x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals = ["%s = %r" % (x, y) for (x, y) in zip(v, lst)]
conf.to_log("Configuration returned from %r:\n%r\n" % (pybin, "\n".join(vals)))
dct = dict(zip(v, lst))
x = "MACOSX_DEPLOYMENT_TARGET"
if dct[x]:
conf.env[x] = conf.environ[x] = dct[x]
env["pyext_PATTERN"] = "%s" + dct["SO"]
all_flags = dct["LDFLAGS"] + " " + dct["CFLAGS"]
conf.parse_flags(all_flags, "PYEMBED")
all_flags = dct["LDFLAGS"] + " " + dct["LDSHARED"] + " " + dct["CFLAGS"]
conf.parse_flags(all_flags, "PYEXT")
result = None
for name in (
"python" + env["PYTHON_VERSION"],
"python" + env["PYTHON_VERSION"] + "m",
"python" + env["PYTHON_VERSION"].replace(".", ""),
):
if not result and env["LIBPATH_PYEMBED"]:
path = env["LIBPATH_PYEMBED"]
conf.to_log("\n\n# Trying default LIBPATH_PYEMBED: %r\n" % path)
result = conf.check(
lib=name,
uselib="PYEMBED",
libpath=path,
mandatory=False,
msg="Checking for library %s in LIBPATH_PYEMBED" % name,
)
if not result and dct["LIBDIR"]:
path = [dct["LIBDIR"]]
conf.to_log("\n\n# try again with -L$python_LIBDIR: %r\n" % path)
result = conf.check(
lib=name,
uselib="PYEMBED",
libpath=path,
mandatory=False,
msg="Checking for library %s in LIBDIR" % name,
)
if not result and dct["LIBPL"]:
path = [dct["LIBPL"]]
conf.to_log(
"\n\n# try again with -L$python_LIBPL (some systems don't install the python library in $prefix/lib)\n"
)
result = conf.check(
lib=name,
uselib="PYEMBED",
libpath=path,
mandatory=False,
msg="Checking for library %s in python_LIBPL" % name,
)
if not result:
path = [os.path.join(dct["prefix"], "libs")]
conf.to_log("\n\n# try again with -L$prefix/libs, and pythonXY name rather than pythonX.Y (win32)\n")
result = conf.check(
lib=name,
uselib="PYEMBED",
libpath=path,
mandatory=False,
msg="Checking for library %s in $prefix/libs" % name,
)
if result:
break
if result:
env["LIBPATH_PYEMBED"] = path
env.append_value("LIB_PYEMBED", [name])
else:
conf.to_log("\n\n### LIB NOT FOUND\n")
if Utils.is_win32 or sys.platform.startswith("os2") or dct["Py_ENABLE_SHARED"]:
env["LIBPATH_PYEXT"] = env["LIBPATH_PYEMBED"]
env["LIB_PYEXT"] = env["LIB_PYEMBED"]
num = ".".join(env["PYTHON_VERSION"].split(".")[:2])
conf.find_program(
["".join(pybin) + "-config", "python%s-config" % num, "python-config-%s" % num, "python%sm-config" % num],
var="PYTHON_CONFIG",
display_name="python-config",
mandatory=False,
)
includes = []
if conf.env.PYTHON_CONFIG:
for incstr in conf.cmd_and_log([conf.env.PYTHON_CONFIG, "--includes"]).strip().split():
if incstr.startswith("-I") or incstr.startswith("/I"):
incstr = incstr[2:]
if incstr not in includes:
includes.append(incstr)
conf.to_log("Include path for Python extensions (found via python-config --includes): %r\n" % (includes,))
env["INCLUDES_PYEXT"] = includes
env["INCLUDES_PYEMBED"] = includes
#.........这里部分代码省略.........
示例11: check_python_headers
def check_python_headers(conf):
if not conf.env['CC_NAME']and not conf.env['CXX_NAME']:
conf.fatal('load a compiler first (gcc, g++, ..)')
if not conf.env['PYTHON_VERSION']:
conf.check_python_version()
env=conf.env
pybin=conf.env.PYTHON
if not pybin:
conf.fatal('could not find the python executable')
v='prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS'.split()
try:
lst=conf.get_python_variables(["get_config_var('%s')"%x for x in v],['from distutils.sysconfig import get_config_var'])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals=['%s = %r'%(x,y)for(x,y)in zip(v,lst)]
conf.to_log("Configuration returned from %r:\n%r\n"%(pybin,'\n'.join(vals)))
dct=dict(zip(v,lst))
x='MACOSX_DEPLOYMENT_TARGET'
if dct[x]:
conf.env[x]=conf.environ[x]=dct[x]
env['pyext_PATTERN']='%s'+dct['SO']
all_flags=dct['LDFLAGS']+' '+dct['LDSHARED']+' '+dct['CFLAGS']
conf.parse_flags(all_flags,'PYEMBED')
conf.parse_flags(all_flags,'PYEXT')
result=None
name='python'+env['PYTHON_VERSION']
path=env['LIBPATH_PYEMBED']
conf.to_log("\n\n# Trying default LIBPATH_PYEMBED: %r\n"%path)
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False)
if not result:
conf.to_log("\n\n# try again with -L$python_LIBDIR: %r\n"%path)
path=[dct['LIBDIR']or'']
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False)
if not result:
conf.to_log("\n\n# try again with -L$python_LIBPL (some systems don't install the python library in $prefix/lib)\n")
path=[dct['LIBPL']or'']
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False)
if not result:
conf.to_log("\n\n# try again with -L$prefix/libs, and pythonXY name rather than pythonX.Y (win32)\n")
path=[os.path.join(dct['prefix'],"libs")]
name='python'+env['PYTHON_VERSION'].replace('.','')
result=conf.check(lib=name,uselib='PYEMBED',libpath=path,mandatory=False)
if result:
env['LIBPATH_PYEMBED']=path
env.append_value('LIB_PYEMBED',[name])
else:
conf.to_log("\n\n### LIB NOT FOUND\n")
if(sys.platform=='win32'or sys.platform.startswith('os2')or sys.platform=='darwin'or dct['Py_ENABLE_SHARED']):
env['LIBPATH_PYEXT']=env['LIBPATH_PYEMBED']
env['LIB_PYEXT']=env['LIB_PYEMBED']
num='.'.join(env['PYTHON_VERSION'].split('.')[:2])
try:
conf.find_program('python%s-config'%num,var='PYTHON_CONFIG')
except conf.errors.ConfigurationError:
conf.find_program('python-config-%s'%num,var='PYTHON_CONFIG',mandatory=False)
includes=[]
if conf.env.PYTHON_CONFIG:
for incstr in conf.cmd_and_log(conf.env.PYTHON_CONFIG + ' --includes').strip().split():
if(incstr.startswith('-I')or incstr.startswith('/I')):
incstr=incstr[2:]
if incstr not in includes:
includes.append(incstr)
conf.to_log("Include path for Python extensions ""(found via python-config --includes): %r\n"%(includes,))
env['INCLUDES_PYEXT']=includes
env['INCLUDES_PYEMBED']=includes
else:
conf.to_log("Include path for Python extensions ""(found via distutils module): %r\n"%(dct['INCLUDEPY'],))
env['INCLUDES_PYEXT']=[dct['INCLUDEPY']]
env['INCLUDES_PYEMBED']=[dct['INCLUDEPY']]
if env['CC_NAME']=='gcc':
env.append_value('CFLAGS_PYEMBED',['-fno-strict-aliasing'])
env.append_value('CFLAGS_PYEXT',['-fno-strict-aliasing'])
if env['CXX_NAME']=='gcc':
env.append_value('CXXFLAGS_PYEMBED',['-fno-strict-aliasing'])
env.append_value('CXXFLAGS_PYEXT',['-fno-strict-aliasing'])
示例12: check_python_headers
def check_python_headers(conf):
"""
Check for headers and libraries necessary to extend or embed python by using the module *distutils*.
On success the environment variables xxx_PYEXT and xxx_PYEMBED are added:
* PYEXT: for compiling python extensions
* PYEMBED: for embedding a python interpreter
"""
if not conf.env["CC_NAME"] and not conf.env["CXX_NAME"]:
conf.fatal("load a compiler first (gcc, g++, ..)")
if not conf.env["PYTHON_VERSION"]:
conf.check_python_version()
env = conf.env
python = env["PYTHON"]
if not python:
conf.fatal("could not find the python executable")
v = "prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS".split()
try:
lst = conf.get_python_variables(
python, ["get_config_var('%s')" % x for x in v], ["from distutils.sysconfig import get_config_var"]
)
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals = ["%s = %r" % (x, y) for (x, y) in zip(v, lst)]
conf.to_log("Configuration returned from %r:\n%r\n" % (python, "\n".join(vals)))
dct = dict(zip(v, lst))
x = "MACOSX_DEPLOYMENT_TARGET"
if dct[x]:
conf.env[x] = conf.environ[x] = dct[x]
env["pyext_PATTERN"] = "%s" + dct["SO"] # not a mistake
# Check for python libraries for embedding
all_flags = dct["LDFLAGS"] + " " + dct["LDSHARED"] + " " + dct["CFLAGS"]
conf.parse_flags(all_flags, "PYEMBED")
conf.parse_flags(all_flags, "PYEXT")
result = None
name = "python" + env["PYTHON_VERSION"]
# LIBPATH_PYEMBED is already set; see if it works.
path = env["LIBPATH_PYEMBED"]
conf.to_log("\n\n# Trying default LIBPATH_PYEMBED: %r\n" % path)
result = conf.check(lib=name, uselib="PYEMBED", libpath=path, mandatory=False)
if not result:
conf.to_log("\n\n# try again with -L$python_LIBDIR: %r\n" % path)
path = [dct["LIBDIR"] or ""]
result = conf.check(lib=name, uselib="PYEMBED", libpath=path, mandatory=False)
if not result:
conf.to_log(
"\n\n# try again with -L$python_LIBPL (some systems don't install the python library in $prefix/lib)\n"
)
path = [dct["LIBPL"] or ""]
result = conf.check(lib=name, uselib="PYEMBED", libpath=path, mandatory=False)
if not result:
conf.to_log("\n\n# try again with -L$prefix/libs, and pythonXY name rather than pythonX.Y (win32)\n")
path = [os.path.join(dct["prefix"], "libs")]
name = "python" + env["PYTHON_VERSION"].replace(".", "")
result = conf.check(lib=name, uselib="PYEMBED", libpath=path, mandatory=False)
if result:
env["LIBPATH_PYEMBED"] = path
env.append_value("LIB_PYEMBED", [name])
else:
conf.to_log("\n\n### LIB NOT FOUND\n")
# under certain conditions, python extensions must link to
# python libraries, not just python embedding programs.
if sys.platform == "win32" or sys.platform.startswith("os2") or sys.platform == "darwin" or dct["Py_ENABLE_SHARED"]:
env["LIBPATH_PYEXT"] = env["LIBPATH_PYEMBED"]
env["LIB_PYEXT"] = env["LIB_PYEMBED"]
# We check that pythonX.Y-config exists, and if it exists we
# use it to get only the includes, else fall back to distutils.
num = ".".join(env["PYTHON_VERSION"].split(".")[:2])
try:
conf.find_program("python%s-config" % num, var="PYTHON_CONFIG")
except conf.errors.ConfigurationError:
conf.find_program("python-config-%s" % num, var="PYTHON_CONFIG", mandatory=False)
includes = []
if conf.env.PYTHON_CONFIG:
for incstr in conf.cmd_and_log("%s %s --includes" % (python, conf.env.PYTHON_CONFIG)).strip().split():
# strip the -I or /I
if incstr.startswith("-I") or incstr.startswith("/I"):
incstr = incstr[2:]
# append include path, unless already given
if incstr not in includes:
includes.append(incstr)
conf.to_log("Include path for Python extensions " "(found via python-config --includes): %r\n" % (includes,))
#.........这里部分代码省略.........
示例13: check_python_headers
def check_python_headers(conf, features="pyembed pyext"):
"""
Check for headers and libraries necessary to extend or embed python by using the module *distutils*.
On success the environment variables xxx_PYEXT and xxx_PYEMBED are added:
* PYEXT: for compiling python extensions
* PYEMBED: for embedding a python interpreter
"""
features = Utils.to_list(features)
assert ("pyembed" in features) or (
"pyext" in features
), "check_python_headers features must include 'pyembed' and/or 'pyext'"
env = conf.env
if not env["CC_NAME"] and not env["CXX_NAME"]:
conf.fatal("load a compiler first (gcc, g++, ..)")
# bypass all the code below for cross-compilation
if conf.python_cross_compile(features):
return
if not env["PYTHON_VERSION"]:
conf.check_python_version()
pybin = env.PYTHON
if not pybin:
conf.fatal("Could not find the python executable")
# so we actually do all this for compatibility reasons and for obtaining pyext_PATTERN below
v = "prefix SO LDFLAGS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET LDSHARED CFLAGS LDVERSION".split()
try:
lst = conf.get_python_variables(["get_config_var('%s') or ''" % x for x in v])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
vals = ["%s = %r" % (x, y) for (x, y) in zip(v, lst)]
conf.to_log("Configuration returned from %r:\n%s\n" % (pybin, "\n".join(vals)))
dct = dict(zip(v, lst))
x = "MACOSX_DEPLOYMENT_TARGET"
if dct[x]:
env[x] = conf.environ[x] = dct[x]
env["pyext_PATTERN"] = "%s" + dct["SO"] # not a mistake
# Try to get pythonX.Y-config
num = ".".join(env["PYTHON_VERSION"].split(".")[:2])
conf.find_program(
["".join(pybin) + "-config", "python%s-config" % num, "python-config-%s" % num, "python%sm-config" % num],
var="PYTHON_CONFIG",
msg="python-config",
mandatory=False,
)
if env.PYTHON_CONFIG:
# python2.6-config requires 3 runs
all_flags = [["--cflags", "--libs", "--ldflags"]]
if sys.hexversion < 0x2070000:
all_flags = [[k] for k in all_flags[0]]
xx = env.CXX_NAME and "cxx" or "c"
if "pyembed" in features:
for flags in all_flags:
conf.check_cfg(
msg="Asking python-config for pyembed %r flags" % " ".join(flags),
path=env.PYTHON_CONFIG,
package="",
uselib_store="PYEMBED",
args=flags,
)
conf.check(
header_name="Python.h",
define_name="HAVE_PYEMBED",
msg="Getting pyembed flags from python-config",
fragment=FRAG,
errmsg="Could not build a python embedded interpreter",
features="%s %sprogram pyembed" % (xx, xx),
)
if "pyext" in features:
for flags in all_flags:
conf.check_cfg(
msg="Asking python-config for pyext %r flags" % " ".join(flags),
path=env.PYTHON_CONFIG,
package="",
uselib_store="PYEXT",
args=flags,
)
conf.check(
header_name="Python.h",
define_name="HAVE_PYEXT",
msg="Getting pyext flags from python-config",
features="%s %sshlib pyext" % (xx, xx),
fragment=FRAG,
errmsg="Could not build python extensions",
)
conf.define("HAVE_PYTHON_H", 1)
return
#.........这里部分代码省略.........
示例14: check_python_headers
def check_python_headers(conf):
"""Check for headers and libraries necessary to extend or embed python.
On success the environment variables xxx_PYEXT and xxx_PYEMBED are added for uselib
PYEXT: for compiling python extensions
PYEMBED: for embedding a python interpreter"""
if not conf.env['CC_NAME'] and not conf.env['CXX_NAME']:
conf.fatal('load a compiler first (gcc, g++, ..)')
if not conf.env['PYTHON_VERSION']:
conf.check_python_version()
env = conf.env
python = env['PYTHON']
if not python:
conf.fatal('could not find the python executable')
## On Mac OSX we need to use mac bundles for python plugins
if Options.platform == 'darwin':
conf.check_tool('osx')
try:
# Get some python configuration variables using distutils
v = 'prefix SO SYSLIBS LDFLAGS SHLIBS LIBDIR LIBPL INCLUDEPY Py_ENABLE_SHARED MACOSX_DEPLOYMENT_TARGET'.split()
(python_prefix, python_SO, python_SYSLIBS, python_LDFLAGS, python_SHLIBS,
python_LIBDIR, python_LIBPL, INCLUDEPY, Py_ENABLE_SHARED,
python_MACOSX_DEPLOYMENT_TARGET) = \
conf.get_python_variables(python, ["get_config_var('%s')" % x for x in v],
['from distutils.sysconfig import get_config_var'])
except RuntimeError:
conf.fatal("Python development headers not found (-v for details).")
conf.to_log("""Configuration returned from %r:
python_prefix = %r
python_SO = %r
python_SYSLIBS = %r
python_LDFLAGS = %r
python_SHLIBS = %r
python_LIBDIR = %r
python_LIBPL = %r
INCLUDEPY = %r
Py_ENABLE_SHARED = %r
MACOSX_DEPLOYMENT_TARGET = %r
""" % (python, python_prefix, python_SO, python_SYSLIBS, python_LDFLAGS, python_SHLIBS,
python_LIBDIR, python_LIBPL, INCLUDEPY, Py_ENABLE_SHARED, python_MACOSX_DEPLOYMENT_TARGET))
if python_MACOSX_DEPLOYMENT_TARGET:
conf.env['MACOSX_DEPLOYMENT_TARGET'] = python_MACOSX_DEPLOYMENT_TARGET
conf.environ['MACOSX_DEPLOYMENT_TARGET'] = python_MACOSX_DEPLOYMENT_TARGET
env['pyext_PATTERN'] = '%s'+python_SO
# Check for python libraries for embedding
if python_SYSLIBS is not None:
for lib in python_SYSLIBS.split():
if lib.startswith('-l'):
lib = lib[2:] # strip '-l'
env.append_value('LIB_PYEMBED', [lib])
if python_SHLIBS is not None:
for lib in python_SHLIBS.split():
if lib.startswith('-l'):
lib = lib[2:] # strip '-l'
env.append_value('LIB_PYEMBED', [lib])
if Options.platform != 'darwin' and python_LDFLAGS:
env.append_value('LINKFLAGS_PYEMBED', python_LDFLAGS.split())
result = False
name = 'python' + env['PYTHON_VERSION']
if python_LIBDIR is not None:
path = [python_LIBDIR]
conf.to_log("\n\n# Trying LIBDIR: %r\n" % path)
result = conf.check(lib=name, uselib='PYEMBED', libpath=path)
if not result and python_LIBPL is not None:
conf.to_log("\n\n# try again with -L$python_LIBPL (some systems don't install the python library in $prefix/lib)\n")
path = [python_LIBPL]
result = conf.check(lib=name, uselib='PYEMBED', libpath=path)
if not result:
conf.to_log("\n\n# try again with -L$prefix/libs, and pythonXY name rather than pythonX.Y (win32)\n")
path = [os.path.join(python_prefix, "libs")]
name = 'python' + env['PYTHON_VERSION'].replace('.', '')
result = conf.check(lib=name, uselib='PYEMBED', libpath=path)
if result:
env['LIBPATH_PYEMBED'] = path
env.append_value('LIB_PYEMBED', [name])
else:
conf.to_log("\n\n### LIB NOT FOUND\n")
# under certain conditions, python extensions must link to
# python libraries, not just python embedding programs.
if (sys.platform == 'win32' or sys.platform.startswith('os2')
or sys.platform == 'darwin' or Py_ENABLE_SHARED):
env['LIBPATH_PYEXT'] = env['LIBPATH_PYEMBED']
env['LIB_PYEXT'] = env['LIB_PYEMBED']
#.........这里部分代码省略.........
示例15: mkspec_gxx_configure
def mkspec_gxx_configure(conf, major, minor, prefix=None, minimum=False):
"""
:param major: The major version number of the compiler, e.g. 4
:param minor: The minor version number of the compiler, e.g. 6
:param prefix: Prefix to the compiler name, e.g. 'arm-linux-androideabi'
:param minimum: Only check for a minimum compiler version, if true
"""
# Where to look for the compiler
paths = conf.mkspec_get_toolchain_paths()
# If the user-defined CXX variable is set, then use that compiler
if 'CXX' in os.environ:
cxx = waflib.Utils.to_list(os.environ['CXX'])
conf.to_log('Using user defined environment variable CXX=%r' % cxx)
else:
# Find g++ first
gxx_names = conf.mkspec_get_compiler_binary_name(
'g++', major, minor, prefix)
if minimum:
gxx_names = 'g++'
cxx = conf.find_program(gxx_names, path_list=paths)
cxx = conf.cmd_to_list(cxx)
conf.env['CXX'] = cxx
conf.env['CXX_NAME'] = os.path.basename(conf.env.get_flat('CXX'))
conf.mkspec_check_gcc_version(cxx, major, minor, minimum)
# If the user-defined CC variable is set, then use that compiler
if 'CC' in os.environ:
cc = waflib.Utils.to_list(os.environ['CC'])
conf.to_log('Using user defined environment variable CC=%r' % cc)
else:
# Also find gcc
gcc_names = conf.mkspec_get_compiler_binary_name(
'gcc', major, minor, prefix)
if minimum:
gcc_names = 'gcc'
cc = conf.find_program(gcc_names, path_list=paths)
cc = conf.cmd_to_list(cc)
conf.env['CC'] = cc
conf.env['CC_NAME'] = os.path.basename(conf.env.get_flat('CC'))
conf.mkspec_check_gcc_version(cc, major, minor, minimum)
# Find the archiver
ar = conf.mkspec_get_ar_binary_name(prefix)
conf.find_program(ar, path_list=paths, var='AR')
conf.env.ARFLAGS = 'rcs'
# Set up C++ tools and flags
conf.gxx_common_flags()
conf.gxx_modifier_platform()
conf.cxx_load_tools()
conf.cxx_add_flags()
# Also set up C tools and flags
conf.gcc_common_flags()
conf.gcc_modifier_platform()
conf.cc_load_tools()
conf.cc_add_flags()
# Add linker flags
conf.link_add_flags()
# Add our own cxx flags
conf.mkspec_set_gxx_cxxflags()
# Add our own cc flags
conf.mkspec_set_gcc_ccflags()