update SCons to 2.4.1
This commit is contained in:
parent
e2cf79260f
commit
03a0926bf0
203 changed files with 1424 additions and 839 deletions
|
@ -1,94 +0,0 @@
|
|||
"""SCons.Tool.cyglink
|
||||
|
||||
Customization of gnulink for Cygwin (http://www.cygwin.com/)
|
||||
|
||||
There normally shouldn't be any need to import this module directly.
|
||||
It will usually be imported through the generic SCons.Tool.Tool()
|
||||
selection method.
|
||||
|
||||
"""
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Util
|
||||
|
||||
import gnulink
|
||||
|
||||
def shlib_generator(target, source, env, for_signature):
|
||||
cmd = SCons.Util.CLVar(['$SHLINK'])
|
||||
|
||||
dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
|
||||
if dll: cmd.extend(['-o', dll])
|
||||
|
||||
cmd.extend(['$SHLINKFLAGS', '$__RPATH'])
|
||||
|
||||
implib = env.FindIxes(target, 'IMPLIBPREFIX', 'IMPLIBSUFFIX')
|
||||
if implib:
|
||||
cmd.extend([
|
||||
'-Wl,--out-implib='+implib.get_string(for_signature),
|
||||
'-Wl,--export-all-symbols',
|
||||
'-Wl,--enable-auto-import',
|
||||
'-Wl,--whole-archive', '$SOURCES',
|
||||
'-Wl,--no-whole-archive', '$_LIBDIRFLAGS', '$_LIBFLAGS'
|
||||
])
|
||||
else:
|
||||
cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS'])
|
||||
|
||||
return [cmd]
|
||||
|
||||
def shlib_emitter(target, source, env):
|
||||
dll = env.FindIxes(target, 'SHLIBPREFIX', 'SHLIBSUFFIX')
|
||||
no_import_lib = env.get('no_import_lib', 0)
|
||||
|
||||
if not dll or len(target) > 1:
|
||||
raise SCons.Errors.UserError("A shared library should have exactly one target with the suffix: %s" % env.subst("$SHLIBSUFFIX"))
|
||||
|
||||
# Remove any "lib" after the prefix
|
||||
pre = env.subst('$SHLIBPREFIX')
|
||||
if dll.name[len(pre):len(pre)+3] == 'lib':
|
||||
dll.name = pre + dll.name[len(pre)+3:]
|
||||
|
||||
orig_target = target
|
||||
target = [env.fs.File(dll)]
|
||||
target[0].attributes.shared = 1
|
||||
|
||||
# Append an import lib target
|
||||
if not no_import_lib:
|
||||
# Create list of target libraries as strings
|
||||
target_strings = env.ReplaceIxes(orig_target[0],
|
||||
'SHLIBPREFIX', 'SHLIBSUFFIX',
|
||||
'IMPLIBPREFIX', 'IMPLIBSUFFIX')
|
||||
|
||||
implib_target = env.fs.File(target_strings)
|
||||
implib_target.attributes.shared = 1
|
||||
target.append(implib_target)
|
||||
|
||||
return (target, source)
|
||||
|
||||
|
||||
shlib_action = SCons.Action.Action(shlib_generator, generator=1)
|
||||
|
||||
def generate(env):
|
||||
"""Add Builders and construction variables for cyglink to an Environment."""
|
||||
gnulink.generate(env)
|
||||
|
||||
env['LINKFLAGS'] = SCons.Util.CLVar('-Wl,-no-undefined')
|
||||
|
||||
env['SHLINKCOM'] = shlib_action
|
||||
env['LDMODULECOM'] = shlib_action
|
||||
env.Append(SHLIBEMITTER = [shlib_emitter])
|
||||
|
||||
env['SHLIBPREFIX'] = 'cyg'
|
||||
env['SHLIBSUFFIX'] = '.dll'
|
||||
|
||||
env['IMPLIBPREFIX'] = 'lib'
|
||||
env['IMPLIBSUFFIX'] = '.dll.a'
|
||||
|
||||
def exists(env):
|
||||
return gnulink.exists(env)
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
@ -1,218 +0,0 @@
|
|||
"""SCons.Tool.link
|
||||
|
||||
Tool-specific initialization for the generic Posix linker.
|
||||
|
||||
There normally shouldn't be any need to import this module directly.
|
||||
It will usually be imported through the generic SCons.Tool.Tool()
|
||||
selection method.
|
||||
|
||||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
# "Software"), to deal in the Software without restriction, including
|
||||
# without limitation the rights to use, copy, modify, merge, publish,
|
||||
# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
# permit persons to whom the Software is furnished to do so, subject to
|
||||
# the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
|
||||
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/link.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
|
||||
import re
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
||||
import SCons.Util
|
||||
import SCons.Warnings
|
||||
|
||||
from SCons.Tool.FortranCommon import isfortran
|
||||
|
||||
from SCons.Tool.DCommon import isD
|
||||
|
||||
cplusplus = __import__('c++', globals(), locals(), [])
|
||||
|
||||
issued_mixed_link_warning = False
|
||||
|
||||
def smart_link(source, target, env, for_signature):
|
||||
has_cplusplus = cplusplus.iscplusplus(source)
|
||||
has_fortran = isfortran(env, source)
|
||||
has_d = isD(env, source)
|
||||
if has_cplusplus and has_fortran and not has_d:
|
||||
global issued_mixed_link_warning
|
||||
if not issued_mixed_link_warning:
|
||||
msg = "Using $CXX to link Fortran and C++ code together.\n\t" + \
|
||||
"This may generate a buggy executable if the '%s'\n\t" + \
|
||||
"compiler does not know how to deal with Fortran runtimes."
|
||||
SCons.Warnings.warn(SCons.Warnings.FortranCxxMixWarning,
|
||||
msg % env.subst('$CXX'))
|
||||
issued_mixed_link_warning = True
|
||||
return '$CXX'
|
||||
elif has_d:
|
||||
env['LINKCOM'] = env['DLINKCOM']
|
||||
env['SHLINKCOM'] = env['SHDLINKCOM']
|
||||
return '$DC'
|
||||
elif has_fortran:
|
||||
return '$FORTRAN'
|
||||
elif has_cplusplus:
|
||||
return '$CXX'
|
||||
return '$CC'
|
||||
|
||||
def shlib_emitter(target, source, env):
|
||||
Verbose = False
|
||||
platform = env.subst('$PLATFORM')
|
||||
for tgt in target:
|
||||
tgt.attributes.shared = 1
|
||||
try:
|
||||
# target[0] comes in as libtest.so. Add the version extensions
|
||||
version = env.subst('$SHLIBVERSION')
|
||||
if version:
|
||||
version_names = shlib_emitter_names(target, source, env)
|
||||
# mark the target with the shared libraries name, including
|
||||
# the version number
|
||||
target[0].attributes.shlibname = version_names[0]
|
||||
shlib = env.File(version_names[0], directory=target[0].get_dir())
|
||||
target[0].attributes.shlibpath = shlib.get_internal_path()
|
||||
for name in version_names[1:]:
|
||||
env.SideEffect(name, shlib)
|
||||
env.Clean(shlib, name)
|
||||
if Verbose:
|
||||
print "shlib_emitter: add side effect - ",name
|
||||
env.Clean(shlib, target[0])
|
||||
return ([shlib], source)
|
||||
except KeyError:
|
||||
version = None
|
||||
return (target, source)
|
||||
|
||||
def shlib_emitter_names(target, source, env):
|
||||
"""Return list of file names that are side effects for a versioned library build. The first name in the list is the new name for the target"""
|
||||
Verbose = False
|
||||
platform = env.subst('$PLATFORM')
|
||||
version_names = []
|
||||
try:
|
||||
# target[0] comes in as libtest.so. Add the version extensions
|
||||
version = env.subst('$SHLIBVERSION')
|
||||
if version.count(".") != 2:
|
||||
# We need a version of the form x.y.z to proceed
|
||||
raise ValueError
|
||||
if version:
|
||||
if platform == 'posix' or platform == 'sunos':
|
||||
versionparts = version.split('.')
|
||||
if hasattr(target[0].attributes, 'shlibname'):
|
||||
name = target[0].attributes.shlibname
|
||||
else:
|
||||
name = target[0].name
|
||||
# generate library name with the version number
|
||||
version_name = name + '.' + version
|
||||
if Verbose:
|
||||
print "shlib_emitter_names: target is ", version_name
|
||||
print "shlib_emitter_names: side effect: ", name
|
||||
# add version_name to list of names to be a Side effect
|
||||
version_names.append(version_name)
|
||||
if Verbose:
|
||||
print "shlib_emitter_names: versionparts ",versionparts
|
||||
for ver in versionparts[0:-1]:
|
||||
name = name + '.' + ver
|
||||
if Verbose:
|
||||
print "shlib_emitter_names: side effect: ", name
|
||||
# add name to list of names to be a Side effect
|
||||
version_names.append(name)
|
||||
elif platform == 'darwin':
|
||||
shlib_suffix = env.subst('$SHLIBSUFFIX')
|
||||
if hasattr(target[0].attributes, 'shlibname'):
|
||||
name = target[0].attributes.shlibname
|
||||
else:
|
||||
name = target[0].name
|
||||
# generate library name with the version number
|
||||
suffix_re = re.escape(shlib_suffix)
|
||||
version_name = re.sub(suffix_re, '.' + version + shlib_suffix, name)
|
||||
if Verbose:
|
||||
print "shlib_emitter_names: target is ", version_name
|
||||
print "shlib_emitter_names: side effect: ", name
|
||||
# add version_name to list of names to be a Side effect
|
||||
version_names.append(version_name)
|
||||
elif platform == 'cygwin':
|
||||
shlib_suffix = env.subst('$SHLIBSUFFIX')
|
||||
if hasattr(target[0].attributes, 'shlibname'):
|
||||
name = target[0].attributes.shlibname
|
||||
else:
|
||||
name = target[0].name
|
||||
# generate library name with the version number
|
||||
suffix_re = re.escape(shlib_suffix)
|
||||
version_name = re.sub(suffix_re, '-' + re.sub('\.', '-', version) + shlib_suffix, name)
|
||||
if Verbose:
|
||||
print "shlib_emitter_names: target is ", version_name
|
||||
print "shlib_emitter_names: side effect: ", name
|
||||
# add version_name to list of names to be a Side effect
|
||||
version_names.append(version_name)
|
||||
|
||||
except KeyError:
|
||||
version = None
|
||||
return version_names
|
||||
|
||||
def generate(env):
|
||||
"""Add Builders and construction variables for gnulink to an Environment."""
|
||||
SCons.Tool.createSharedLibBuilder(env)
|
||||
SCons.Tool.createProgBuilder(env)
|
||||
|
||||
env['SHLINK'] = '$LINK'
|
||||
env['SHLINKFLAGS'] = SCons.Util.CLVar('$LINKFLAGS -shared')
|
||||
env['SHLINKCOM'] = '$SHLINK -o $TARGET $SHLINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
|
||||
# don't set up the emitter, cause AppendUnique will generate a list
|
||||
# starting with None :-(
|
||||
env.Append(SHLIBEMITTER = [shlib_emitter])
|
||||
env['SMARTLINK'] = smart_link
|
||||
env['LINK'] = "$SMARTLINK"
|
||||
env['LINKFLAGS'] = SCons.Util.CLVar('')
|
||||
# __RPATH is only set to something ($_RPATH typically) on platforms that support it.
|
||||
env['LINKCOM'] = '$LINK -o $TARGET $LINKFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
|
||||
env['LIBDIRPREFIX']='-L'
|
||||
env['LIBDIRSUFFIX']=''
|
||||
env['_LIBFLAGS']='${_stripixes(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, LIBPREFIXES, LIBSUFFIXES, __env__)}'
|
||||
env['LIBLINKPREFIX']='-l'
|
||||
env['LIBLINKSUFFIX']=''
|
||||
|
||||
if env['PLATFORM'] == 'hpux':
|
||||
env['SHLIBSUFFIX'] = '.sl'
|
||||
elif env['PLATFORM'] == 'aix':
|
||||
env['SHLIBSUFFIX'] = '.a'
|
||||
|
||||
# For most platforms, a loadable module is the same as a shared
|
||||
# library. Platforms which are different can override these, but
|
||||
# setting them the same means that LoadableModule works everywhere.
|
||||
SCons.Tool.createLoadableModuleBuilder(env)
|
||||
env['LDMODULE'] = '$SHLINK'
|
||||
# don't set up the emitter, cause AppendUnique will generate a list
|
||||
# starting with None :-(
|
||||
env.Append(LDMODULEEMITTER='$SHLIBEMITTER')
|
||||
env['LDMODULEPREFIX'] = '$SHLIBPREFIX'
|
||||
env['LDMODULESUFFIX'] = '$SHLIBSUFFIX'
|
||||
env['LDMODULEFLAGS'] = '$SHLINKFLAGS'
|
||||
env['LDMODULECOM'] = '$LDMODULE -o $TARGET $LDMODULEFLAGS $__RPATH $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
|
||||
|
||||
|
||||
|
||||
def exists(env):
|
||||
# This module isn't really a Tool on its own, it's common logic for
|
||||
# other linkers.
|
||||
return None
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
@ -97,7 +97,7 @@ way for wrapping up the functions.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Action.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Action.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import dis
|
||||
import os
|
|
@ -97,7 +97,7 @@ There are the following methods for internal use within this module:
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Builder.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Builder.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
||||
|
@ -292,8 +292,8 @@ def _node_errors(builder, env, tlist, slist):
|
|||
if t.has_explicit_builder():
|
||||
if not t.env is None and not t.env is env:
|
||||
action = t.builder.action
|
||||
t_contents = action.get_contents(tlist, slist, t.env)
|
||||
contents = action.get_contents(tlist, slist, env)
|
||||
t_contents = t.builder.action.get_contents(tlist, slist, t.env)
|
||||
contents = builder.action.get_contents(tlist, slist, env)
|
||||
|
||||
if t_contents == contents:
|
||||
msg = "Two different environments were specified for target %s,\n\tbut they appear to have the same action: %s" % (t, action.genstring(tlist, slist, t.env))
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/CacheDir.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/CacheDir.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
CacheDir support
|
|
@ -684,6 +684,22 @@ return 0;
|
|||
|
||||
return ret
|
||||
|
||||
def CheckProg(context, prog_name):
|
||||
"""
|
||||
Configure check for a specific program.
|
||||
|
||||
Check whether program prog_name exists in path. If it is found,
|
||||
returns the path for it, otherwise returns None.
|
||||
"""
|
||||
context.Display("Checking whether %s program exists..." % prog_name)
|
||||
path = context.env.WhereIs(prog_name)
|
||||
if path:
|
||||
context.Display(path + "\n")
|
||||
else:
|
||||
context.Display("no\n")
|
||||
return path
|
||||
|
||||
|
||||
#
|
||||
# END OF PUBLIC FUNCTIONS
|
||||
#
|
|
@ -28,7 +28,7 @@ needed by most users.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Debug.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Debug.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import sys
|
|
@ -33,7 +33,7 @@ from distutils.msvccompiler.
|
|||
#
|
||||
from __future__ import division
|
||||
|
||||
__revision__ = "src/engine/SCons/Defaults.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Defaults.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
|
||||
import os
|
||||
|
@ -482,6 +482,15 @@ class Variable_Method_Caller(object):
|
|||
frame = frame.f_back
|
||||
return None
|
||||
|
||||
# if env[version_var] id defined, returns env[flags_var], otherwise returns None
|
||||
def __libversionflags(env, version_var, flags_var):
|
||||
try:
|
||||
if env[version_var]:
|
||||
return env[flags_var]
|
||||
except KeyError:
|
||||
pass
|
||||
return None
|
||||
|
||||
ConstructionEnvironment = {
|
||||
'BUILDERS' : {},
|
||||
'SCANNERS' : [],
|
||||
|
@ -499,6 +508,12 @@ ConstructionEnvironment = {
|
|||
'_LIBDIRFLAGS' : '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
||||
'_CPPINCFLAGS' : '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
||||
'_CPPDEFFLAGS' : '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
|
||||
|
||||
'__libversionflags' : __libversionflags,
|
||||
'__SHLIBVERSIONFLAGS' : '${__libversionflags(__env__,"SHLIBVERSION","_SHLIBVERSIONFLAGS")}',
|
||||
'__LDMODULEVERSIONFLAGS' : '${__libversionflags(__env__,"LDMODULEVERSION","_LDMODULEVERSIONFLAGS")}',
|
||||
'__DSHLIBVERSIONFLAGS' : '${__libversionflags(__env__,"DSHLIBVERSION","_DSHLIBVERSIONFLAGS")}',
|
||||
|
||||
'TEMPFILE' : NullCmdGenerator,
|
||||
'Dir' : Variable_Method_Caller('TARGET', 'Dir'),
|
||||
'Dirs' : Variable_Method_Caller('TARGET', 'Dirs'),
|
|
@ -31,7 +31,7 @@ Environment
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Environment.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Environment.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
|
||||
import copy
|
||||
|
@ -612,7 +612,7 @@ class SubstitutionEnvironment(object):
|
|||
|
||||
def Override(self, overrides):
|
||||
"""
|
||||
Produce a modified environment whose variables are overriden by
|
||||
Produce a modified environment whose variables are overridden by
|
||||
the overrides dictionaries. "overrides" is a dictionary that
|
||||
will override the variables of this environment.
|
||||
|
|
@ -28,7 +28,7 @@ and user errors in SCons.
|
|||
|
||||
"""
|
||||
|
||||
__revision__ = "src/engine/SCons/Errors.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Errors.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Util
|
||||
|
|
@ -27,7 +27,7 @@ Nodes.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Executor.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Executor.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
|
@ -29,7 +29,7 @@ stop, and wait on jobs.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Job.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Job.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Memoize.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Memoize.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Memoizer
|
||||
|
|
@ -30,7 +30,7 @@ This creates a hash of global Aliases (dummy targets).
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import collections
|
||||
|
|
@ -32,7 +32,7 @@ that can be used by scripts or modules looking for the canonical default.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/FS.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/FS.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
|
@ -2182,7 +2182,12 @@ class Dir(Base):
|
|||
r = [os.path.join(str(dir), x) for x in r]
|
||||
result.extend(r)
|
||||
if exclude:
|
||||
result = filter(lambda x: not any(fnmatch.fnmatch(str(x), e) for e in SCons.Util.flatten(exclude)), result)
|
||||
excludes = []
|
||||
excludeList = SCons.Util.flatten(exclude)
|
||||
for x in excludeList:
|
||||
r = self.glob(x, ondisk, source, strings)
|
||||
excludes.extend(r)
|
||||
result = filter(lambda x: not any(fnmatch.fnmatch(str(x), str(e)) for e in SCons.Util.flatten(excludes)), result)
|
||||
return sorted(result, key=lambda a: str(a))
|
||||
|
||||
def _glob1(self, pattern, ondisk=True, source=False, strings=False):
|
|
@ -27,7 +27,7 @@ Python nodes.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Python.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/Python.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node
|
||||
|
|
@ -41,7 +41,7 @@ be able to depend on any other type of "thing."
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import collections
|
||||
import copy
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/EnumOption.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/EnumOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/ListOption.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/ListOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/PackageOption.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/PackageOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/PathOption.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/PathOption.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Options/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/PathList.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/PathList.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """SCons.PathList
|
||||
|
|
@ -42,7 +42,7 @@ their own platform definition.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/aix.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/aix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import subprocess
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/cygwin.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/cygwin.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import posix
|
||||
from SCons.Platform import TempFileMunge
|
||||
|
@ -42,8 +42,8 @@ def generate(env):
|
|||
env['PROGSUFFIX'] = '.exe'
|
||||
env['SHLIBPREFIX'] = ''
|
||||
env['SHLIBSUFFIX'] = '.dll'
|
||||
env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX' ]
|
||||
env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ]
|
||||
env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX', '$IMPLIBPREFIX' ]
|
||||
env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX', '$IMPLIBSUFFIX' ]
|
||||
env['TEMPFILE'] = TempFileMunge
|
||||
env['TEMPFILEPREFIX'] = '@'
|
||||
env['MAXLINELENGTH'] = 2048
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/darwin.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/darwin.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import posix
|
||||
import os
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/hpux.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/hpux.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/irix.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/irix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/os2.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/os2.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
import win32
|
||||
|
||||
def generate(env):
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/posix.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/posix.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import errno
|
||||
import os
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/sunos.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/sunos.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import posix
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Platform/win32.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Platform/win32.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
|
@ -34,7 +34,7 @@ libraries are installed, if some command line options are supported etc.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/SConf.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/SConf.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
||||
|
@ -444,6 +444,7 @@ class SConfBase(object):
|
|||
'CheckCXXHeader' : CheckCXXHeader,
|
||||
'CheckLib' : CheckLib,
|
||||
'CheckLibWithHeader' : CheckLibWithHeader,
|
||||
'CheckProg' : CheckProg,
|
||||
}
|
||||
self.AddTests(default_tests)
|
||||
self.AddTests(custom_tests)
|
||||
|
@ -1047,6 +1048,14 @@ def CheckLibWithHeader(context, libs, header, language,
|
|||
context.did_show_result = 1
|
||||
return not res
|
||||
|
||||
def CheckProg(context, prog_name):
|
||||
"""Simple check if a program exists in the path. Returns the path
|
||||
for the application, or None if not found.
|
||||
"""
|
||||
res = SCons.Conftest.CheckProg(context, prog_name)
|
||||
context.did_show_result = 1
|
||||
return res
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
|
@ -27,7 +27,7 @@ Writing and reading information to the .sconsign file or files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/SConsign.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/SConsign.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -27,7 +27,7 @@ This module implements the depenency scanner for C/C++ code.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/C.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/C.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -30,7 +30,7 @@ Coded by Andy Friesen
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/D.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/D.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Dir.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Dir.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -26,7 +26,7 @@ This module implements the dependency scanner for Fortran code.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Fortran.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Fortran.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -28,7 +28,7 @@ Definition Language) files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/IDL.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/IDL.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -27,7 +27,7 @@ This module implements the dependency scanner for LaTeX code.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/LaTeX.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/LaTeX.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
import re
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/Prog.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/Prog.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node
|
||||
import SCons.Node.FS
|
|
@ -28,7 +28,7 @@ Definition Language) files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/RC.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/RC.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Node.FS
|
||||
import SCons.Scanner
|
|
@ -27,7 +27,7 @@ The Scanner package for the SCons software construction utility.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Scanner/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Scanner/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/Interactive.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/Interactive.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
SCons interactive mode
|
|
@ -34,7 +34,7 @@ deprecated_python_version = (2, 7, 0)
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/Main.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/Main.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.compat
|
||||
|
||||
|
@ -484,6 +484,9 @@ def GetOption(name):
|
|||
def SetOption(name, value):
|
||||
return OptionsParser.values.set_option(name, value)
|
||||
|
||||
def PrintHelp(file=None):
|
||||
OptionsParser.print_help(file=file)
|
||||
|
||||
#
|
||||
class Stats(object):
|
||||
def __init__(self):
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/SConsOptions.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/SConsOptions.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import optparse
|
||||
import re
|
||||
|
@ -268,7 +268,7 @@ class SConsOptionParser(optparse.OptionParser):
|
|||
preserve_unknown_options = False
|
||||
|
||||
def error(self, msg):
|
||||
# overriden OptionValueError exception handler
|
||||
# overridden OptionValueError exception handler
|
||||
self.print_usage(sys.stderr)
|
||||
sys.stderr.write("SCons Error: %s\n" % msg)
|
||||
sys.exit(2)
|
|
@ -28,7 +28,7 @@ files.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
from __future__ import division
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/SConscript.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/SConscript.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons
|
||||
import SCons.Action
|
||||
|
@ -499,9 +499,9 @@ class SConsEnvironment(SCons.Environment.Base):
|
|||
name = self.subst(name)
|
||||
return SCons.Script.Main.GetOption(name)
|
||||
|
||||
def Help(self, text):
|
||||
def Help(self, text, append=False):
|
||||
text = self.subst(text, raw=1)
|
||||
SCons.Script.HelpFunction(text)
|
||||
SCons.Script.HelpFunction(text, append=append)
|
||||
|
||||
def Import(self, *vars):
|
||||
try:
|
|
@ -34,13 +34,14 @@ it goes here.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Script/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Script/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import time
|
||||
start_time = time.time()
|
||||
|
||||
import collections
|
||||
import os
|
||||
import StringIO
|
||||
import sys
|
||||
|
||||
# Special chicken-and-egg handling of the "--debug=memoizer" flag:
|
||||
|
@ -107,6 +108,7 @@ QuestionTask = Main.QuestionTask
|
|||
#SConscriptSettableOptions = Main.SConscriptSettableOptions
|
||||
|
||||
AddOption = Main.AddOption
|
||||
PrintHelp = Main.PrintHelp
|
||||
GetOption = Main.GetOption
|
||||
SetOption = Main.SetOption
|
||||
Progress = Main.Progress
|
||||
|
@ -258,13 +260,26 @@ def _Set_Default_Targets(env, tlist):
|
|||
#
|
||||
help_text = None
|
||||
|
||||
def HelpFunction(text):
|
||||
def HelpFunction(text, append=False):
|
||||
global help_text
|
||||
if SCons.Script.help_text is None:
|
||||
SCons.Script.help_text = text
|
||||
if help_text is None:
|
||||
if append:
|
||||
s = StringIO.StringIO()
|
||||
PrintHelp(s)
|
||||
help_text = s.getvalue()
|
||||
s.close()
|
||||
else:
|
||||
help_text = ""
|
||||
#
|
||||
# Was in original patch but this text is arbitrary and breaks tests
|
||||
# so I removed it (Deegan)
|
||||
# help_text = help_text + "\nLocal Build Variables:\n" + text
|
||||
# else:
|
||||
# help_text = help_text + text
|
||||
|
||||
help_text= help_text + text
|
||||
|
||||
|
||||
#
|
||||
# Will be non-zero if we are reading an SConscript file.
|
||||
sconscript_reading = 0
|
||||
|
@ -318,6 +333,7 @@ GlobalDefaultEnvironmentFunctions = [
|
|||
'Ignore',
|
||||
'Install',
|
||||
'InstallAs',
|
||||
'InstallVersionedLib',
|
||||
'Literal',
|
||||
'Local',
|
||||
'ParseDepends',
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Sig.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Sig.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Sig module hierarchy
|
||||
|
|
@ -26,7 +26,7 @@ SCons string substitution.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Subst.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Subst.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import collections
|
||||
import re
|
|
@ -47,7 +47,7 @@ interface and the SCons build engine. There are two key classes here:
|
|||
target(s) that it decides need to be evaluated and/or built.
|
||||
"""
|
||||
|
||||
__revision__ = "src/engine/SCons/Taskmaster.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Taskmaster.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
from itertools import chain
|
||||
import operator
|
|
@ -32,7 +32,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/386asm.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/386asm.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
from SCons.Tool.PharLapCommon import addPharLapPaths
|
||||
import SCons.Util
|
|
@ -32,7 +32,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/BitKeeper.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/BitKeeper.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/CVS.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/CVS.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Builder
|
|
@ -28,7 +28,7 @@ Coded by Russel Winder (russel@winder.org.uk)
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/DCommon.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/DCommon.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -27,7 +27,7 @@ Stuff for processing Fortran, common to all fortran dialects.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/FortranCommon.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/FortranCommon.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import re
|
||||
import os.path
|
|
@ -24,7 +24,7 @@ Used by several tools of `gettext` toolset.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/GettextCommon.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/GettextCommon.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Warnings
|
||||
import re
|
||||
|
@ -306,23 +306,6 @@ class RPaths(object):
|
|||
- Tuple of strings, which represent paths relative to current working
|
||||
directory (for given environment).
|
||||
"""
|
||||
# os.path.relpath is available only on python >= 2.6. We use our own
|
||||
# implementation. It's taken from BareNecessities package:
|
||||
# http://jimmyg.org/work/code/barenecessities/index.html
|
||||
from posixpath import curdir
|
||||
def relpath(path, start=curdir):
|
||||
import posixpath
|
||||
"""Return a relative version of a path"""
|
||||
if not path:
|
||||
raise ValueError("no path specified")
|
||||
start_list = posixpath.abspath(start).split(posixpath.sep)
|
||||
path_list = posixpath.abspath(path).split(posixpath.sep)
|
||||
# Work out how much of the filepath is shared by start and path.
|
||||
i = len(posixpath.commonprefix([start_list, path_list]))
|
||||
rel_list = [posixpath.pardir] * (len(start_list)-i) + path_list[i:]
|
||||
if not rel_list:
|
||||
return posixpath.curdir
|
||||
return posixpath.join(*rel_list)
|
||||
import os
|
||||
import SCons.Node.FS
|
||||
rpaths = ()
|
||||
|
@ -330,7 +313,7 @@ class RPaths(object):
|
|||
for node in nodes:
|
||||
rpath = None
|
||||
if isinstance(node, SCons.Node.FS.Base):
|
||||
rpath = relpath(node.get_abspath(), cwd)
|
||||
rpath = os.path.relpath(node.get_abspath(), cwd)
|
||||
# FIXME: Other types possible here?
|
||||
if rpath is not None:
|
||||
rpaths += (rpath,)
|
|
@ -27,7 +27,7 @@ Stuff for processing Java.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/JavaCommon.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/JavaCommon.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
Common functions for Microsoft Visual Studio and Visual C/C++.
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/arch.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/arch.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Module to define supported Windows chip architectures.
|
||||
"""
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/common.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/common.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
Common helper functions for working with the Microsoft tool chain.
|
||||
|
@ -84,8 +84,8 @@ def is_win64():
|
|||
return _is_win64
|
||||
|
||||
|
||||
def read_reg(value):
|
||||
return SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, value)[0]
|
||||
def read_reg(value, hkroot=SCons.Util.HKEY_LOCAL_MACHINE):
|
||||
return SCons.Util.RegGetValue(hkroot, value)[0]
|
||||
|
||||
def has_reg(value):
|
||||
"""Return True if the given key exists in HKEY_LOCAL_MACHINE, False
|
|
@ -20,7 +20,7 @@
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """
|
||||
"""
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Module to detect the Platform/Windows SDK
|
||||
|
|
@ -30,11 +30,12 @@
|
|||
# * test on 64 bits XP + VS 2005 (and VS 6 if possible)
|
||||
# * SDK
|
||||
# * Assembly
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/vc.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/vc.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Module for Visual C/C++ detection and configuration.
|
||||
"""
|
||||
import SCons.compat
|
||||
import SCons.Util
|
||||
|
||||
import os
|
||||
import platform
|
||||
|
@ -138,35 +139,49 @@ _VCVER = ["14.0", "14.0Exp", "12.0", "12.0Exp", "11.0", "11.0Exp", "10.0", "10.0
|
|||
|
||||
_VCVER_TO_PRODUCT_DIR = {
|
||||
'14.0' : [
|
||||
r'Microsoft\VisualStudio\14.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\14.0\Setup\VC\ProductDir')],
|
||||
'14.0Exp' : [
|
||||
r'Microsoft\VCExpress\14.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\14.0\Setup\VC\ProductDir')],
|
||||
'12.0' : [
|
||||
r'Microsoft\VisualStudio\12.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\12.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'12.0Exp' : [
|
||||
r'Microsoft\VCExpress\12.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\12.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'11.0': [
|
||||
r'Microsoft\VisualStudio\11.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\11.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'11.0Exp' : [
|
||||
r'Microsoft\VCExpress\11.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\11.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'10.0': [
|
||||
r'Microsoft\VisualStudio\10.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\10.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'10.0Exp' : [
|
||||
r'Microsoft\VCExpress\10.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\10.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'9.0': [
|
||||
r'Microsoft\VisualStudio\9.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_CURRENT_USER, r'Microsoft\DevDiv\VCForPython\9.0\installdir',),
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\9.0\Setup\VC\ProductDir',),
|
||||
],
|
||||
'9.0Exp' : [
|
||||
r'Microsoft\VCExpress\9.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\9.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'8.0': [
|
||||
r'Microsoft\VisualStudio\8.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\8.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'8.0Exp': [
|
||||
r'Microsoft\VCExpress\8.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\8.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'7.1': [
|
||||
r'Microsoft\VisualStudio\7.1\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\7.1\Setup\VC\ProductDir'),
|
||||
],
|
||||
'7.0': [
|
||||
r'Microsoft\VisualStudio\7.0\Setup\VC\ProductDir'],
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\7.0\Setup\VC\ProductDir'),
|
||||
],
|
||||
'6.0': [
|
||||
r'Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++\ProductDir']
|
||||
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++\ProductDir'),
|
||||
]
|
||||
}
|
||||
|
||||
def msvc_version_to_maj_min(msvc_version):
|
||||
|
@ -216,18 +231,25 @@ def find_vc_pdir(msvc_version):
|
|||
If for some reason the requested version could not be found, an
|
||||
exception which inherits from VisualCException will be raised."""
|
||||
root = 'Software\\'
|
||||
if common.is_win64():
|
||||
root = root + 'Wow6432Node\\'
|
||||
try:
|
||||
hkeys = _VCVER_TO_PRODUCT_DIR[msvc_version]
|
||||
except KeyError:
|
||||
debug("Unknown version of MSVC: %s" % msvc_version)
|
||||
raise UnsupportedVersion("Unknown version %s" % msvc_version)
|
||||
|
||||
for key in hkeys:
|
||||
key = root + key
|
||||
for hkroot, key in hkeys:
|
||||
try:
|
||||
comps = common.read_reg(key)
|
||||
comps = None
|
||||
if common.is_win64():
|
||||
try:
|
||||
# ordinally at win64, try Wow6432Node first.
|
||||
comps = common.read_reg(root + 'Wow6432Node\\' + key, hkroot)
|
||||
except WindowsError, e:
|
||||
# at Microsoft Visual Studio for Python 2.7, value is not in Wow6432Node
|
||||
pass
|
||||
if not comps:
|
||||
# not Win64, or Microsoft Visual Studio for Python 2.7
|
||||
comps = common.read_reg(root + key, hkroot)
|
||||
except WindowsError, e:
|
||||
debug('find_vc_dir(): no VC registry key %s' % repr(key))
|
||||
else:
|
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
__doc__ = """Module to detect Visual Studio and/or Visual C/C++
|
||||
"""
|
|
@ -29,7 +29,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/Perforce.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/Perforce.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
|
|
@ -29,7 +29,7 @@ Phar Lap ETS tool chain. Right now, this is linkloc and
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/PharLapCommon.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/PharLapCommon.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
|
@ -29,7 +29,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/RCS.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/RCS.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/SCCS.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/SCCS.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/Subversion.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/Subversion.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -35,7 +35,7 @@ tool definition.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/__init__.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/__init__.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import imp
|
||||
import sys
|
||||
|
@ -236,150 +236,436 @@ def createStaticLibBuilder(env):
|
|||
|
||||
return static_lib
|
||||
|
||||
def VersionShLibLinkNames(version, libname, env):
|
||||
"""Generate names of symlinks to the versioned shared library"""
|
||||
def _call_linker_cb(env, callback, args, result = None):
|
||||
"""Returns the result of env['LINKCALLBACKS'][callback](*args)
|
||||
if env['LINKCALLBACKS'] is a dictionary and env['LINKCALLBACKS'][callback]
|
||||
is callable. If these conditions are not met, return the value provided as
|
||||
the *result* argument. This function is mainly used for generating library
|
||||
info such as versioned suffixes, symlink maps, sonames etc. by delegating
|
||||
the core job to callbacks configured by current linker tool"""
|
||||
|
||||
Verbose = False
|
||||
platform = env.subst('$PLATFORM')
|
||||
shlib_suffix = env.subst('$SHLIBSUFFIX')
|
||||
shlink_flags = SCons.Util.CLVar(env.subst('$SHLINKFLAGS'))
|
||||
|
||||
linknames = []
|
||||
if version.count(".") != 2:
|
||||
# We need a version string of the form x.y.z to proceed
|
||||
# Several changes need to be made to support versions like x.y
|
||||
raise ValueError
|
||||
if Verbose:
|
||||
print '_call_linker_cb: args=%r' % args
|
||||
print '_call_linker_cb: callback=%r' % callback
|
||||
|
||||
if platform == 'darwin':
|
||||
# For libfoo.x.y.z.dylib, linknames libfoo.so
|
||||
suffix_re = re.escape('.' + version + shlib_suffix)
|
||||
linkname = re.sub(suffix_re, shlib_suffix, libname)
|
||||
if Verbose:
|
||||
print "VersionShLibLinkNames: linkname = ",linkname
|
||||
linknames.append(linkname)
|
||||
elif platform == 'posix' or platform == 'sunos':
|
||||
if sys.platform.startswith('openbsd'):
|
||||
# OpenBSD uses x.y shared library versioning numbering convention
|
||||
# and doesn't use symlinks to backwards-compatible libraries
|
||||
return []
|
||||
# For libfoo.so.x.y.z, linknames libfoo.so libfoo.so.x.y libfoo.so.x
|
||||
suffix_re = re.escape(shlib_suffix + '.' + version)
|
||||
# First linkname has no version number
|
||||
linkname = re.sub(suffix_re, shlib_suffix, libname)
|
||||
if Verbose:
|
||||
print "VersionShLibLinkNames: linkname = ",linkname
|
||||
linknames.append(linkname)
|
||||
versionparts = version.split('.')
|
||||
major_name = linkname + "." + versionparts[0]
|
||||
minor_name = major_name + "." + versionparts[1]
|
||||
#Only add link for major_name
|
||||
#for linkname in [major_name, minor_name]:
|
||||
for linkname in [major_name, ]:
|
||||
if Verbose:
|
||||
print "VersionShLibLinkNames: linkname ",linkname, ", target ",libname
|
||||
linknames.append(linkname)
|
||||
# note: no Windows case here (win32 or cygwin);
|
||||
# MSVC doesn't support this type of versioned shared libs.
|
||||
# (could probably do something for MinGW though)
|
||||
return linknames
|
||||
|
||||
def VersionedSharedLibrary(target = None, source= None, env=None):
|
||||
"""Build a shared library. If the environment has SHLIBVERSION
|
||||
defined make a versioned shared library and create the appropriate
|
||||
symlinks for the platform we are on"""
|
||||
Verbose = False
|
||||
try:
|
||||
version = env.subst('$SHLIBVERSION')
|
||||
except KeyError:
|
||||
version = None
|
||||
|
||||
# libname includes the version number if one was given
|
||||
libname = getattr(target[0].attributes, 'shlibname', target[0].name)
|
||||
platform = env.subst('$PLATFORM')
|
||||
shlib_suffix = env.subst('$SHLIBSUFFIX')
|
||||
shlink_flags = SCons.Util.CLVar(env.subst('$SHLINKFLAGS'))
|
||||
cbfun = env['LINKCALLBACKS'][callback]
|
||||
except (KeyError, TypeError):
|
||||
if Verbose:
|
||||
print "VersionShLib: libname = ",libname
|
||||
print "VersionShLib: platform = ",platform
|
||||
print "VersionShLib: shlib_suffix = ",shlib_suffix
|
||||
print "VersionShLib: target = ",str(target[0])
|
||||
|
||||
if version:
|
||||
# set the shared library link flags
|
||||
if platform == 'posix':
|
||||
shlink_flags += [ '-Wl,-Bsymbolic' ]
|
||||
# OpenBSD doesn't usually use SONAME for libraries
|
||||
if not sys.platform.startswith('openbsd'):
|
||||
# continue setup of shlink flags for all other POSIX systems
|
||||
suffix_re = re.escape(shlib_suffix + '.' + version)
|
||||
(major, age, revision) = version.split(".")
|
||||
# soname will have only the major version number in it
|
||||
soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + major
|
||||
shlink_flags += [ '-Wl,-soname=%s' % soname ]
|
||||
if Verbose:
|
||||
print " soname ",soname,", shlink_flags ",shlink_flags
|
||||
elif platform == 'sunos':
|
||||
suffix_re = re.escape(shlib_suffix + '.' + version)
|
||||
(major, age, revision) = version.split(".")
|
||||
soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + major
|
||||
shlink_flags += [ '-h', soname ]
|
||||
elif platform == 'cygwin':
|
||||
shlink_flags += [ '-Wl,-Bsymbolic',
|
||||
'-Wl,--out-implib,${TARGET.base}.a' ]
|
||||
elif platform == 'darwin':
|
||||
shlink_flags += [ '-current_version', '%s' % version,
|
||||
'-compatibility_version', '%s' % version,
|
||||
'-undefined', 'dynamic_lookup' ]
|
||||
if Verbose:
|
||||
print "VersionShLib: shlink_flags = ",shlink_flags
|
||||
envlink = env.Clone()
|
||||
envlink['SHLINKFLAGS'] = shlink_flags
|
||||
print '_call_linker_cb: env["LINKCALLBACKS"][%r] not found or can not be used' % callback
|
||||
pass
|
||||
else:
|
||||
envlink = env
|
||||
|
||||
result = SCons.Defaults.ShLinkAction(target, source, envlink)
|
||||
|
||||
if version:
|
||||
# here we need the full pathname so the links end up in the right directory
|
||||
libname = getattr(target[0].attributes, 'shlibpath', target[0].get_internal_path())
|
||||
if Verbose:
|
||||
print "VerShLib: target lib is = ", libname
|
||||
print "VerShLib: name is = ", target[0].name
|
||||
print "VerShLib: dir is = ", target[0].dir.path
|
||||
linknames = VersionShLibLinkNames(version, libname, env)
|
||||
print '_call_linker_cb: env["LINKCALLBACKS"][%r] found' % callback
|
||||
print '_call_linker_cb: env["LINKCALLBACKS"][%r]=%r' % (callback, cbfun)
|
||||
if(callable(cbfun)):
|
||||
if Verbose:
|
||||
print "VerShLib: linknames ",linknames
|
||||
# Here we just need the file name w/o path as the target of the link
|
||||
lib_ver = getattr(target[0].attributes, 'shlibname', target[0].name)
|
||||
# make symlink of adjacent names in linknames
|
||||
for count in range(len(linknames)):
|
||||
linkname = linknames[count]
|
||||
if count > 0:
|
||||
try:
|
||||
os.remove(lastlinkname)
|
||||
except:
|
||||
pass
|
||||
os.symlink(os.path.basename(linkname),lastlinkname)
|
||||
if Verbose:
|
||||
print "VerShLib: made sym link of %s -> %s" % (lastlinkname,linkname)
|
||||
lastlinkname = linkname
|
||||
# finish chain of sym links with link to the actual library
|
||||
if len(linknames)>0:
|
||||
try:
|
||||
os.remove(lastlinkname)
|
||||
except:
|
||||
pass
|
||||
os.symlink(lib_ver,lastlinkname)
|
||||
if Verbose:
|
||||
print "VerShLib: made sym link of %s -> %s" % (linkname, lib_ver)
|
||||
print '_call_linker_cb: env["LINKCALLBACKS"][%r] is callable' % callback
|
||||
result = cbfun(env, *args)
|
||||
return result
|
||||
|
||||
# Fix http://scons.tigris.org/issues/show_bug.cgi?id=2903 :
|
||||
# Ensure we still depend on SCons.Defaults.ShLinkAction command line which is $SHLINKCOM.
|
||||
# This was tricky because we don't want changing LIBPATH to cause a rebuild, but
|
||||
# changing other link args should. LIBPATH has $( ... $) around it but until this
|
||||
# fix, when the varlist was added to the build sig those ignored parts weren't getting
|
||||
# ignored.
|
||||
ShLibAction = SCons.Action.Action(VersionedSharedLibrary, None, varlist=['SHLINKCOM'])
|
||||
def _call_env_subst(env, string, *args, **kw):
|
||||
kw2 = {}
|
||||
for k in ('raw', 'target', 'source', 'conv', 'executor'):
|
||||
try: kw2[k] = kw[k]
|
||||
except KeyError: pass
|
||||
return env.subst(string, *args, **kw2)
|
||||
|
||||
class _ShLibInfoSupport(object):
|
||||
def get_libtype(self):
|
||||
return 'ShLib'
|
||||
def get_lib_prefix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$SHLIBPREFIX', *args, **kw)
|
||||
def get_lib_suffix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$SHLIBSUFFIX', *args, **kw)
|
||||
def get_lib_version(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$SHLIBVERSION', *args, **kw)
|
||||
def get_lib_noversionsymlinks(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$SHLIBNOVERSIONSYMLINKS', *args, **kw)
|
||||
|
||||
class _LdModInfoSupport(object):
|
||||
def get_libtype(self):
|
||||
return 'LdMod'
|
||||
def get_lib_prefix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$LDMODULEPREFIX', *args, **kw)
|
||||
def get_lib_suffix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$LDMODULESUFFIX', *args, **kw)
|
||||
def get_lib_version(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$LDMODULEVERSION', *args, **kw)
|
||||
def get_lib_noversionsymlinks(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$LDMODULENOVERSIONSYMLINKS', *args, **kw)
|
||||
|
||||
class _ImpLibInfoSupport(object):
|
||||
def get_libtype(self):
|
||||
return 'ImpLib'
|
||||
def get_lib_prefix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$IMPLIBPREFIX', *args, **kw)
|
||||
def get_lib_suffix(self, env, *args, **kw):
|
||||
return _call_env_subst(env,'$IMPLIBSUFFIX', *args, **kw)
|
||||
def get_lib_version(self, env, *args, **kw):
|
||||
version = _call_env_subst(env,'$IMPLIBVERSION', *args, **kw)
|
||||
if not version:
|
||||
try: lt = kw['implib_libtype']
|
||||
except KeyError: pass
|
||||
else:
|
||||
if lt == 'ShLib':
|
||||
version = _call_env_subst(env,'$SHLIBVERSION', *args, **kw)
|
||||
elif lt == 'LdMod':
|
||||
version = _call_env_subst(env,'$LDMODULEVERSION', *args, **kw)
|
||||
return version
|
||||
def get_lib_noversionsymlinks(self, env, *args, **kw):
|
||||
disable = None
|
||||
try: env['IMPLIBNOVERSIONSYMLINKS']
|
||||
except KeyError:
|
||||
try: lt = kw['implib_libtype']
|
||||
except KeyError: pass
|
||||
else:
|
||||
if lt == 'ShLib':
|
||||
disable = _call_env_subst(env,'$SHLIBNOVERSIONSYMLINKS', *args, **kw)
|
||||
elif lt == 'LdMod':
|
||||
disable = _call_env_subst(env,'$LDMODULENOVERSIONSYMLINKS', *args, **kw)
|
||||
else:
|
||||
disable = _call_env_subst(env,'$IMPLIBNOVERSIONSYMLINKS', *args, **kw)
|
||||
return disable
|
||||
|
||||
class _LibInfoGeneratorBase(object):
|
||||
"""Generator base class for library-related info such as suffixes for
|
||||
versioned libraries, symlink maps, sonames etc. It handles commonities
|
||||
of SharedLibrary and LoadableModule
|
||||
"""
|
||||
_support_classes = { 'ShLib' : _ShLibInfoSupport,
|
||||
'LdMod' : _LdModInfoSupport,
|
||||
'ImpLib' : _ImpLibInfoSupport }
|
||||
def __init__(self, libtype, infoname):
|
||||
self.set_libtype(libtype)
|
||||
self.set_infoname(infoname)
|
||||
|
||||
def set_libtype(self, libtype):
|
||||
try:
|
||||
support_class = self._support_classes[libtype]
|
||||
except KeyError:
|
||||
raise ValueError('unsupported libtype %r' % libtype)
|
||||
self._support = support_class()
|
||||
|
||||
def get_libtype(self):
|
||||
return self._support.get_libtype()
|
||||
|
||||
def set_infoname(self, infoname):
|
||||
self.infoname = infoname
|
||||
|
||||
def get_infoname(self):
|
||||
return self.infoname
|
||||
|
||||
def get_lib_prefix(self, env, *args, **kw):
|
||||
return self._support.get_lib_prefix(env,*args,**kw)
|
||||
|
||||
def get_lib_suffix(self, env, *args, **kw):
|
||||
return self._support.get_lib_suffix(env,*args,**kw)
|
||||
|
||||
def get_lib_version(self, env, *args, **kw):
|
||||
return self._support.get_lib_version(env,*args,**kw)
|
||||
|
||||
def get_lib_noversionsymlinks(self, env, *args, **kw):
|
||||
return self._support.get_lib_noversionsymlinks(env,*args,**kw)
|
||||
|
||||
# Returns name of generator linker callback that shall be used to generate
|
||||
# our info for a versioned library. For example, if our libtype is 'ShLib'
|
||||
# and infoname is 'Prefix', it would return 'VersionedShLibPrefix'.
|
||||
def get_versioned_lib_info_generator(self, **kw):
|
||||
try: libtype = kw['generator_libtype']
|
||||
except KeyError: libtype = self.get_libtype()
|
||||
infoname = self.get_infoname()
|
||||
return 'Versioned%s%s' % (libtype, infoname)
|
||||
|
||||
def generate_versioned_lib_info(self, env, args, result = None, **kw):
|
||||
callback = self.get_versioned_lib_info_generator(**kw)
|
||||
return _call_linker_cb(env, callback, args, result)
|
||||
|
||||
class _LibPrefixGenerator(_LibInfoGeneratorBase):
|
||||
"""Library prefix generator, used as target_prefix in SharedLibrary and
|
||||
LoadableModule builders"""
|
||||
def __init__(self, libtype):
|
||||
super(_LibPrefixGenerator, self).__init__(libtype, 'Prefix')
|
||||
|
||||
def __call__(self, env, sources = None, **kw):
|
||||
Verbose = False
|
||||
|
||||
if sources and 'source' not in kw:
|
||||
kw2 = kw.copy()
|
||||
kw2['source'] = sources
|
||||
else:
|
||||
kw2 = kw
|
||||
|
||||
prefix = self.get_lib_prefix(env,**kw2)
|
||||
if Verbose:
|
||||
print "_LibPrefixGenerator: input prefix=%r" % prefix
|
||||
|
||||
version = self.get_lib_version(env, **kw2)
|
||||
if Verbose:
|
||||
print "_LibPrefixGenerator: version=%r" % version
|
||||
|
||||
if version:
|
||||
prefix = self.generate_versioned_lib_info(env, [prefix, version], prefix, **kw2)
|
||||
|
||||
if Verbose:
|
||||
print "_LibPrefixGenerator: return prefix=%r" % prefix
|
||||
return prefix
|
||||
|
||||
ShLibPrefixGenerator = _LibPrefixGenerator('ShLib')
|
||||
LdModPrefixGenerator = _LibPrefixGenerator('LdMod')
|
||||
ImpLibPrefixGenerator = _LibPrefixGenerator('ImpLib')
|
||||
|
||||
class _LibSuffixGenerator(_LibInfoGeneratorBase):
|
||||
"""Library suffix generator, used as target_suffix in SharedLibrary and
|
||||
LoadableModule builders"""
|
||||
def __init__(self, libtype):
|
||||
super(_LibSuffixGenerator, self).__init__(libtype, 'Suffix')
|
||||
|
||||
def __call__(self, env, sources = None, **kw):
|
||||
Verbose = False
|
||||
|
||||
if sources and 'source' not in kw:
|
||||
kw2 = kw.copy()
|
||||
kw2['source'] = sources
|
||||
else:
|
||||
kw2 = kw
|
||||
|
||||
suffix = self.get_lib_suffix(env, **kw2)
|
||||
if Verbose:
|
||||
print "_LibSuffixGenerator: input suffix=%r" % suffix
|
||||
|
||||
version = self.get_lib_version(env, **kw2)
|
||||
if Verbose:
|
||||
print "_LibSuffixGenerator: version=%r" % version
|
||||
|
||||
if version:
|
||||
suffix = self.generate_versioned_lib_info(env, [suffix, version], suffix, **kw2)
|
||||
|
||||
if Verbose:
|
||||
print "_LibSuffixGenerator: return suffix=%r" % suffix
|
||||
return suffix
|
||||
|
||||
ShLibSuffixGenerator = _LibSuffixGenerator('ShLib')
|
||||
LdModSuffixGenerator = _LibSuffixGenerator('LdMod')
|
||||
ImpLibSuffixGenerator = _LibSuffixGenerator('ImpLib')
|
||||
|
||||
class _LibSymlinkGenerator(_LibInfoGeneratorBase):
|
||||
"""Library symlink map generator. It generates a list of symlinks that
|
||||
should be created by SharedLibrary or LoadableModule builders"""
|
||||
def __init__(self, libtype):
|
||||
super(_LibSymlinkGenerator, self).__init__(libtype, 'Symlinks')
|
||||
|
||||
def __call__(self, env, libnode, **kw):
|
||||
Verbose = False
|
||||
|
||||
if libnode and 'target' not in kw:
|
||||
kw2 = kw.copy()
|
||||
kw2['target'] = libnode
|
||||
else:
|
||||
kw2 = kw
|
||||
|
||||
if Verbose:
|
||||
print "_LibSymLinkGenerator: libnode=%r" % libnode.get_path()
|
||||
|
||||
symlinks = None
|
||||
|
||||
version = self.get_lib_version(env, **kw2)
|
||||
disable = self.get_lib_noversionsymlinks(env, **kw2)
|
||||
if Verbose:
|
||||
print '_LibSymlinkGenerator: version=%r' % version
|
||||
print '_LibSymlinkGenerator: disable=%r' % disable
|
||||
|
||||
if version and not disable:
|
||||
prefix = self.get_lib_prefix(env,**kw2)
|
||||
suffix = self.get_lib_suffix(env,**kw2)
|
||||
symlinks = self.generate_versioned_lib_info(env, [libnode, version, prefix, suffix], **kw2)
|
||||
|
||||
if Verbose:
|
||||
print '_LibSymlinkGenerator: return symlinks=%r' % StringizeLibSymlinks(symlinks)
|
||||
return symlinks
|
||||
|
||||
ShLibSymlinkGenerator = _LibSymlinkGenerator('ShLib')
|
||||
LdModSymlinkGenerator = _LibSymlinkGenerator('LdMod')
|
||||
ImpLibSymlinkGenerator = _LibSymlinkGenerator('ImpLib')
|
||||
|
||||
class _LibNameGenerator(_LibInfoGeneratorBase):
|
||||
"""Generates "unmangled" library name from a library file node.
|
||||
|
||||
Generally, it's thought to revert modifications done by prefix/suffix
|
||||
generators (_LibPrefixGenerator/_LibSuffixGenerator) used by a library
|
||||
builder. For example, on gnulink the suffix generator used by SharedLibrary
|
||||
builder appends $SHLIBVERSION to $SHLIBSUFFIX producing node name which
|
||||
ends with "$SHLIBSUFFIX.$SHLIBVERSION". Correspondingly, the implementation
|
||||
of _LibNameGenerator replaces "$SHLIBSUFFIX.$SHLIBVERSION" with
|
||||
"$SHLIBSUFFIX" in the node's basename. So that, if $SHLIBSUFFIX is ".so",
|
||||
$SHLIBVERSION is "0.1.2" and the node path is "/foo/bar/libfoo.so.0.1.2",
|
||||
the _LibNameGenerator shall return "libfoo.so". Other link tools may
|
||||
implement it's own way of library name unmangling.
|
||||
"""
|
||||
def __init__(self, libtype):
|
||||
super(_LibNameGenerator, self).__init__(libtype, 'Name')
|
||||
|
||||
def __call__(self, env, libnode, **kw):
|
||||
"""Returns "demangled" library name"""
|
||||
Verbose = False
|
||||
|
||||
if libnode and 'target' not in kw:
|
||||
kw2 = kw.copy()
|
||||
kw2['target'] = libnode
|
||||
else:
|
||||
kw2 = kw
|
||||
|
||||
if Verbose:
|
||||
print "_LibNameGenerator: libnode=%r" % libnode.get_path()
|
||||
|
||||
version = self.get_lib_version(env, **kw2)
|
||||
if Verbose:
|
||||
print '_LibNameGenerator: version=%r' % version
|
||||
|
||||
name = None
|
||||
if version:
|
||||
prefix = self.get_lib_prefix(env,**kw2)
|
||||
suffix = self.get_lib_suffix(env,**kw2)
|
||||
name = self.generate_versioned_lib_info(env, [libnode, version, prefix, suffix], **kw2)
|
||||
|
||||
if not name:
|
||||
name = os.path.basename(libnode.get_path())
|
||||
|
||||
if Verbose:
|
||||
print '_LibNameGenerator: return name=%r' % name
|
||||
|
||||
return name
|
||||
|
||||
ShLibNameGenerator = _LibNameGenerator('ShLib')
|
||||
LdModNameGenerator = _LibNameGenerator('LdMod')
|
||||
ImpLibNameGenerator = _LibNameGenerator('ImpLib')
|
||||
|
||||
class _LibSonameGenerator(_LibInfoGeneratorBase):
|
||||
"""Library soname generator. Returns library soname (e.g. libfoo.so.0) for
|
||||
a given node (e.g. /foo/bar/libfoo.so.0.1.2)"""
|
||||
def __init__(self, libtype):
|
||||
super(_LibSonameGenerator, self).__init__(libtype, 'Soname')
|
||||
|
||||
def __call__(self, env, libnode, **kw):
|
||||
"""Returns a SONAME based on a shared library's node path"""
|
||||
Verbose = False
|
||||
|
||||
if libnode and 'target' not in kw:
|
||||
kw2 = kw.copy()
|
||||
kw2['target'] = libnode
|
||||
else:
|
||||
kw2 = kw
|
||||
|
||||
if Verbose:
|
||||
print "_LibSonameGenerator: libnode=%r" % libnode.get_path()
|
||||
|
||||
soname = _call_env_subst(env, '$SONAME', **kw2)
|
||||
if not soname:
|
||||
version = self.get_lib_version(env,**kw2)
|
||||
if Verbose:
|
||||
print "_LibSonameGenerator: version=%r" % version
|
||||
if version:
|
||||
prefix = self.get_lib_prefix(env,**kw2)
|
||||
suffix = self.get_lib_suffix(env,**kw2)
|
||||
soname = self.generate_versioned_lib_info(env, [libnode, version, prefix, suffix], **kw2)
|
||||
|
||||
if not soname:
|
||||
# fallback to library name (as returned by appropriate _LibNameGenerator)
|
||||
soname = _LibNameGenerator(self.get_libtype())(env, libnode)
|
||||
if Verbose:
|
||||
print "_LibSonameGenerator: FALLBACK: soname=%r" % soname
|
||||
|
||||
if Verbose:
|
||||
print "_LibSonameGenerator: return soname=%r" % soname
|
||||
|
||||
return soname
|
||||
|
||||
ShLibSonameGenerator = _LibSonameGenerator('ShLib')
|
||||
LdModSonameGenerator = _LibSonameGenerator('LdMod')
|
||||
|
||||
def StringizeLibSymlinks(symlinks):
|
||||
"""Converts list with pairs of nodes to list with pairs of node paths
|
||||
(strings). Used mainly for debugging."""
|
||||
if SCons.Util.is_List(symlinks):
|
||||
try:
|
||||
return [ (k.get_path(), v.get_path()) for k,v in symlinks ]
|
||||
except (TypeError, ValueError):
|
||||
return symlinks
|
||||
else:
|
||||
return symlinks
|
||||
|
||||
def EmitLibSymlinks(env, symlinks, libnode, **kw):
|
||||
"""Used by emitters to handle (shared/versioned) library symlinks"""
|
||||
Verbose = False
|
||||
|
||||
# nodes involved in process... all symlinks + library
|
||||
nodes = list(set([ x for x,y in symlinks ] + [libnode]))
|
||||
|
||||
clean_targets = kw.get('clean_targets', [])
|
||||
if not SCons.Util.is_List(clean_targets):
|
||||
clean_targets = [ clean_targets ]
|
||||
|
||||
for link, linktgt in symlinks:
|
||||
env.SideEffect(link, linktgt)
|
||||
if(Verbose):
|
||||
print "EmitLibSymlinks: SideEffect(%r,%r)" % (link.get_path(), linktgt.get_path())
|
||||
clean_list = filter(lambda x : x != linktgt, nodes)
|
||||
env.Clean(list(set([linktgt] + clean_targets)), clean_list)
|
||||
if(Verbose):
|
||||
print "EmitLibSymlinks: Clean(%r,%r)" % (linktgt.get_path(), map(lambda x : x.get_path(), clean_list))
|
||||
|
||||
def CreateLibSymlinks(env, symlinks):
|
||||
"""Physically creates symlinks. The symlinks argument must be a list in
|
||||
form [ (link, linktarget), ... ], where link and linktarget are SCons
|
||||
nodes.
|
||||
"""
|
||||
|
||||
Verbose = False
|
||||
for link, linktgt in symlinks:
|
||||
linktgt = link.get_dir().rel_path(linktgt)
|
||||
link = link.get_path()
|
||||
if(Verbose):
|
||||
print "CreateLibSymlinks: preparing to add symlink %r -> %r" % (link, linktgt)
|
||||
# Delete the (previously created) symlink if exists. Let only symlinks
|
||||
# to be deleted to prevent accidental deletion of source files...
|
||||
if env.fs.islink(link):
|
||||
env.fs.unlink(link)
|
||||
if(Verbose):
|
||||
print "CreateLibSymlinks: removed old symlink %r" % link
|
||||
# If a file or directory exists with the same name as link, an OSError
|
||||
# will be thrown, which should be enough, I think.
|
||||
env.fs.symlink(linktgt, link)
|
||||
if(Verbose):
|
||||
print "CreateLibSymlinks: add symlink %r -> %r" % (link, linktgt)
|
||||
return 0
|
||||
|
||||
def LibSymlinksActionFunction(target, source, env):
|
||||
for tgt in target:
|
||||
symlinks = getattr(getattr(tgt,'attributes', None), 'shliblinks', None)
|
||||
if symlinks:
|
||||
CreateLibSymlinks(env, symlinks)
|
||||
return 0
|
||||
|
||||
def LibSymlinksStrFun(target, source, env, *args):
|
||||
cmd = None
|
||||
for tgt in target:
|
||||
symlinks = getattr(getattr(tgt,'attributes', None), 'shliblinks', None)
|
||||
if symlinks:
|
||||
if cmd is None: cmd = ""
|
||||
if cmd: cmd += "\n"
|
||||
cmd += "Create symlinks for: %r" % tgt.get_path()
|
||||
try:
|
||||
linkstr = ', '.join([ "%r->%r" %(k,v) for k,v in StringizeLibSymlinks(symlinks)])
|
||||
except (KeyError, ValueError):
|
||||
pass
|
||||
else:
|
||||
cmd += ": %s" % linkstr
|
||||
return cmd
|
||||
|
||||
|
||||
LibSymlinksAction = SCons.Action.Action(LibSymlinksActionFunction, LibSymlinksStrFun)
|
||||
|
||||
def createSharedLibBuilder(env):
|
||||
"""This is a utility function that creates the SharedLibrary
|
||||
|
@ -393,11 +679,12 @@ def createSharedLibBuilder(env):
|
|||
except KeyError:
|
||||
import SCons.Defaults
|
||||
action_list = [ SCons.Defaults.SharedCheck,
|
||||
ShLibAction ]
|
||||
SCons.Defaults.ShLinkAction,
|
||||
LibSymlinksAction ]
|
||||
shared_lib = SCons.Builder.Builder(action = action_list,
|
||||
emitter = "$SHLIBEMITTER",
|
||||
prefix = '$SHLIBPREFIX',
|
||||
suffix = '$SHLIBSUFFIX',
|
||||
prefix = ShLibPrefixGenerator,
|
||||
suffix = ShLibSuffixGenerator,
|
||||
target_scanner = ProgramScanner,
|
||||
src_suffix = '$SHOBJSUFFIX',
|
||||
src_builder = 'SharedObject')
|
||||
|
@ -417,11 +704,12 @@ def createLoadableModuleBuilder(env):
|
|||
except KeyError:
|
||||
import SCons.Defaults
|
||||
action_list = [ SCons.Defaults.SharedCheck,
|
||||
SCons.Defaults.LdModuleLinkAction ]
|
||||
SCons.Defaults.LdModuleLinkAction,
|
||||
LibSymlinksAction ]
|
||||
ld_module = SCons.Builder.Builder(action = action_list,
|
||||
emitter = "$LDMODULEEMITTER",
|
||||
prefix = '$LDMODULEPREFIX',
|
||||
suffix = '$LDMODULESUFFIX',
|
||||
prefix = LdModPrefixGenerator,
|
||||
suffix = LdModSuffixGenerator,
|
||||
target_scanner = ProgramScanner,
|
||||
src_suffix = '$SHOBJSUFFIX',
|
||||
src_builder = 'SharedObject')
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/aixc++.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/aixc++.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/aixcc.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/aixcc.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/aixf77.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/aixf77.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/aixlink.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/aixlink.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/applelink.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/applelink.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Util
|
||||
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/ar.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/ar.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/as.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/as.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
|
@ -27,7 +27,7 @@ XXX
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/bcc32.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/bcc32.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import os.path
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/c++.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/c++.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/cc.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/cc.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Tool
|
||||
import SCons.Defaults
|
|
@ -27,7 +27,7 @@ Tool-specific initialization for the Compaq Visual Fortran compiler.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/cvf.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/cvf.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import fortran
|
||||
|
232
scons/scons-local-2.4.1/SCons/Tool/cyglink.py
Normal file
232
scons/scons-local-2.4.1/SCons/Tool/cyglink.py
Normal file
|
@ -0,0 +1,232 @@
|
|||
"""SCons.Tool.cyglink
|
||||
|
||||
Customization of gnulink for Cygwin (http://www.cygwin.com/)
|
||||
|
||||
There normally shouldn't be any need to import this module directly.
|
||||
It will usually be imported through the generic SCons.Tool.Tool()
|
||||
selection method.
|
||||
|
||||
"""
|
||||
import re
|
||||
import os
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Util
|
||||
import SCons.Tool
|
||||
|
||||
import gnulink
|
||||
import link
|
||||
|
||||
def _lib_generator(target, source, env, for_signature, **kw):
|
||||
try: cmd = kw['cmd']
|
||||
except KeyError: cmd = SCons.Util.CLVar(['$SHLINK'])
|
||||
|
||||
try: vp = kw['varprefix']
|
||||
except KeyError: vp = 'SHLIB'
|
||||
|
||||
dll = env.FindIxes(target, '%sPREFIX' % vp, '%sSUFFIX' % vp)
|
||||
if dll: cmd.extend(['-o', dll])
|
||||
|
||||
cmd.extend(['$SHLINKFLAGS', '$__%sVERSIONFLAGS' % vp, '$__RPATH'])
|
||||
|
||||
implib = env.FindIxes(target, 'IMPLIBPREFIX', 'IMPLIBSUFFIX')
|
||||
if implib:
|
||||
cmd.extend([
|
||||
'-Wl,--out-implib='+implib.get_string(for_signature),
|
||||
'-Wl,--export-all-symbols',
|
||||
'-Wl,--enable-auto-import',
|
||||
'-Wl,--whole-archive', '$SOURCES',
|
||||
'-Wl,--no-whole-archive', '$_LIBDIRFLAGS', '$_LIBFLAGS'
|
||||
])
|
||||
else:
|
||||
cmd.extend(['$SOURCES', '$_LIBDIRFLAGS', '$_LIBFLAGS'])
|
||||
|
||||
return [cmd]
|
||||
|
||||
|
||||
def shlib_generator(target, source, env, for_signature):
|
||||
return _lib_generator(target, source, env, for_signature,
|
||||
varprefix='SHLIB',
|
||||
cmd = SCons.Util.CLVar(['$SHLINK']))
|
||||
|
||||
def ldmod_generator(target, source, env, for_signature):
|
||||
return _lib_generator(target, source, env, for_signature,
|
||||
varprefix='LDMODULE',
|
||||
cmd = SCons.Util.CLVar(['$LDMODULE']))
|
||||
|
||||
def _lib_emitter(target, source, env, **kw):
|
||||
Verbose = False
|
||||
|
||||
if Verbose:
|
||||
print "_lib_emitter: target[0]=%r" % target[0].get_path()
|
||||
|
||||
try: vp = kw['varprefix']
|
||||
except KeyError: vp = 'SHLIB'
|
||||
|
||||
try: libtype = kw['libtype']
|
||||
except KeyError: libtype = 'ShLib'
|
||||
|
||||
dll = env.FindIxes(target, '%sPREFIX' % vp, '%sSUFFIX' % vp)
|
||||
no_import_lib = env.get('no_import_lib', 0)
|
||||
|
||||
if Verbose:
|
||||
print "_lib_emitter: dll=%r" % dll.get_path()
|
||||
|
||||
if not dll or len(target) > 1:
|
||||
raise SCons.Errors.UserError("A shared library should have exactly one target with the suffix: %s" % env.subst("$%sSUFFIX" % vp))
|
||||
|
||||
# Remove any "lib" after the prefix
|
||||
pre = env.subst('$%sPREFIX' % vp)
|
||||
if dll.name[len(pre):len(pre)+3] == 'lib':
|
||||
dll.name = pre + dll.name[len(pre)+3:]
|
||||
|
||||
if Verbose:
|
||||
print "_lib_emitter: dll.name=%r" % dll.name
|
||||
|
||||
orig_target = target
|
||||
target = [env.fs.File(dll)]
|
||||
target[0].attributes.shared = 1
|
||||
|
||||
if Verbose:
|
||||
print "_lib_emitter: after target=[env.fs.File(dll)]: target[0]=%r" % target[0].get_path()
|
||||
|
||||
# Append an import lib target
|
||||
if not no_import_lib:
|
||||
# Create list of target libraries as strings
|
||||
target_strings = env.ReplaceIxes(orig_target[0],
|
||||
'%sPREFIX' % vp, '%sSUFFIX' % vp,
|
||||
'IMPLIBPREFIX', 'IMPLIBSUFFIX')
|
||||
if Verbose:
|
||||
print "_lib_emitter: target_strings=%r" % target_strings
|
||||
|
||||
implib_target = env.fs.File(target_strings)
|
||||
if Verbose:
|
||||
print "_lib_emitter: implib_target=%r" % implib_target.get_path()
|
||||
implib_target.attributes.shared = 1
|
||||
target.append(implib_target)
|
||||
|
||||
symlinks = SCons.Tool.ImpLibSymlinkGenerator(env, implib_target,
|
||||
implib_libtype=libtype,
|
||||
generator_libtype=libtype+'ImpLib')
|
||||
if Verbose:
|
||||
print "_lib_emitter: implib symlinks=%r" % SCons.Tool.StringizeLibSymlinks(symlinks)
|
||||
if symlinks:
|
||||
SCons.Tool.EmitLibSymlinks(env, symlinks, implib_target, clean_targets = target[0])
|
||||
implib_target.attributes.shliblinks = symlinks
|
||||
|
||||
return (target, source)
|
||||
|
||||
def shlib_emitter(target, source, env):
|
||||
return _lib_emitter(target, source, env, varprefix='SHLIB', libtype='ShLib')
|
||||
|
||||
def ldmod_emitter(target, source, env):
|
||||
return _lib_emitter(target, source, env, varprefix='LDMODULE', libtype='LdMod')
|
||||
|
||||
def _versioned_lib_suffix(env, suffix, version):
|
||||
"""Generate versioned shared library suffix from a unversioned one.
|
||||
If suffix='.dll', and version='0.1.2', then it returns '-0-1-2.dll'"""
|
||||
Verbose = False
|
||||
if Verbose:
|
||||
print "_versioned_lib_suffix: suffix= ", suffix
|
||||
print "_versioned_lib_suffix: version= ", version
|
||||
cygversion = re.sub('\.', '-', version)
|
||||
if not suffix.startswith('-' + cygversion):
|
||||
suffix = '-' + cygversion + suffix
|
||||
if Verbose:
|
||||
print "_versioned_lib_suffix: return suffix= ", suffix
|
||||
return suffix
|
||||
|
||||
def _versioned_implib_name(env, libnode, version, prefix, suffix, **kw):
|
||||
return link._versioned_lib_name(env, libnode, version, prefix, suffix,
|
||||
SCons.Tool.ImpLibPrefixGenerator,
|
||||
SCons.Tool.ImpLibSuffixGenerator,
|
||||
implib_libtype=kw['libtype'])
|
||||
|
||||
def _versioned_implib_symlinks(env, libnode, version, prefix, suffix, **kw):
|
||||
"""Generate link names that should be created for a versioned shared lirbrary.
|
||||
Returns a list in the form [ (link, linktarget), ... ]
|
||||
"""
|
||||
Verbose = False
|
||||
|
||||
if Verbose:
|
||||
print "_versioned_implib_symlinks: libnode=%r" % libnode.get_path()
|
||||
print "_versioned_implib_symlinks: version=%r" % version
|
||||
|
||||
try: libtype = kw['libtype']
|
||||
except KeyError: libtype = 'ShLib'
|
||||
|
||||
|
||||
linkdir = os.path.dirname(libnode.get_path())
|
||||
if Verbose:
|
||||
print "_versioned_implib_symlinks: linkdir=%r" % linkdir
|
||||
|
||||
name = SCons.Tool.ImpLibNameGenerator(env, libnode,
|
||||
implib_libtype=libtype,
|
||||
generator_libtype=libtype+'ImpLib')
|
||||
if Verbose:
|
||||
print "_versioned_implib_symlinks: name=%r" % name
|
||||
|
||||
major = version.split('.')[0]
|
||||
|
||||
link0 = env.fs.File(os.path.join(linkdir, name))
|
||||
symlinks = [(link0, libnode)]
|
||||
|
||||
if Verbose:
|
||||
print "_versioned_implib_symlinks: return symlinks=%r" % SCons.Tool.StringizeLibSymlinks(symlinks)
|
||||
|
||||
return symlinks
|
||||
|
||||
shlib_action = SCons.Action.Action(shlib_generator, generator=1)
|
||||
ldmod_action = SCons.Action.Action(ldmod_generator, generator=1)
|
||||
|
||||
def generate(env):
|
||||
"""Add Builders and construction variables for cyglink to an Environment."""
|
||||
gnulink.generate(env)
|
||||
|
||||
env['LINKFLAGS'] = SCons.Util.CLVar('-Wl,-no-undefined')
|
||||
|
||||
env['SHLINKCOM'] = shlib_action
|
||||
env['LDMODULECOM'] = ldmod_action
|
||||
env.Append(SHLIBEMITTER = [shlib_emitter])
|
||||
env.Append(LDMODULEEMITTER = [ldmod_emitter])
|
||||
|
||||
env['SHLIBPREFIX'] = 'cyg'
|
||||
env['SHLIBSUFFIX'] = '.dll'
|
||||
|
||||
env['IMPLIBPREFIX'] = 'lib'
|
||||
env['IMPLIBSUFFIX'] = '.dll.a'
|
||||
|
||||
# Variables used by versioned shared libraries
|
||||
env['_SHLIBVERSIONFLAGS'] = '$SHLIBVERSIONFLAGS'
|
||||
env['_LDMODULEVERSIONFLAGS'] = '$LDMODULEVERSIONFLAGS'
|
||||
|
||||
# SHLIBVERSIONFLAGS and LDMODULEVERSIONFLAGS are same as in gnulink...
|
||||
|
||||
# LINKCALLBACKS are NOT inherited from gnulink
|
||||
env['LINKCALLBACKS'] = {
|
||||
'VersionedShLibSuffix' : _versioned_lib_suffix,
|
||||
'VersionedLdModSuffix' : _versioned_lib_suffix,
|
||||
'VersionedImpLibSuffix' : _versioned_lib_suffix,
|
||||
'VersionedShLibName' : link._versioned_shlib_name,
|
||||
'VersionedLdModName' : link._versioned_ldmod_name,
|
||||
'VersionedShLibImpLibName' : lambda *args: _versioned_implib_name(*args, libtype='ShLib'),
|
||||
'VersionedLdModImpLibName' : lambda *args: _versioned_implib_name(*args, libtype='LdMod'),
|
||||
'VersionedShLibImpLibSymlinks' : lambda *args: _versioned_implib_symlinks(*args, libtype='ShLib'),
|
||||
'VersionedLdModImpLibSymlinks' : lambda *args: _versioned_implib_symlinks(*args, libtype='LdMod'),
|
||||
}
|
||||
|
||||
# these variables were set by gnulink but are not used in cyglink
|
||||
try: del env['_SHLIBSONAME']
|
||||
except KeyError: pass
|
||||
try: del env['_LDMODULESONAME']
|
||||
except KeyError: pass
|
||||
|
||||
def exists(env):
|
||||
return gnulink.exists(env)
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width:4
|
||||
# indent-tabs-mode:nil
|
||||
# End:
|
||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/default.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/default.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Tool
|
||||
|
|
@ -58,7 +58,7 @@ Lib tool variables:
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/dmd.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/dmd.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
|
@ -114,7 +114,7 @@ def generate(env):
|
|||
|
||||
env['DSHLINK'] = '$DC'
|
||||
env['DSHLINKFLAGS'] = SCons.Util.CLVar('$DLINKFLAGS -shared -defaultlib=libphobos2.so')
|
||||
env['SHDLINKCOM'] = '$DLINK -of$TARGET $DSHLINKFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS'
|
||||
env['SHDLINKCOM'] = '$DLINK -of$TARGET $DSHLINKFLAGS $__DSHLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS'
|
||||
|
||||
env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l'
|
||||
env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
|
||||
|
@ -139,6 +139,17 @@ def generate(env):
|
|||
env['DRPATHSUFFIX'] = ''
|
||||
env['_DRPATH'] = '${_concat(DRPATHPREFIX, RPATH, DRPATHSUFFIX, __env__)}'
|
||||
|
||||
# Support for versioned libraries
|
||||
env['_DSHLIBVERSIONFLAGS'] = '$DSHLIBVERSIONFLAGS -L-soname=$_DSHLIBSONAME'
|
||||
env['_DSHLIBSONAME'] = '${DShLibSonameGenerator(__env__,TARGET)}'
|
||||
# NOTE: this is a quick hack, the soname will only work if there is
|
||||
# c/c++ linker loaded which provides callback for the ShLibSonameGenerator
|
||||
env['DShLibSonameGenerator'] = SCons.Tool.ShLibSonameGenerator
|
||||
# NOTE: this is only for further reference, currently $DSHLIBVERSION does
|
||||
# not work, the user must use $SHLIBVERSION
|
||||
env['DSHLIBVERSION'] = '$SHLIBVERSION'
|
||||
env['DSHLIBVERSIONFLAGS'] = []
|
||||
|
||||
SCons.Tool.createStaticLibBuilder(env)
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ Common DVI Builder definition for various other Tool modules that use it.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/dvi.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/dvi.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Builder
|
||||
import SCons.Tool
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/dvipdf.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/dvipdf.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Defaults
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/dvips.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/dvips.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Action
|
||||
import SCons.Builder
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/f03.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/f03.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/f77.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/f77.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Scanner.Fortran
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/f90.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/f90.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Scanner.Fortran
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/f95.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/f95.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Defaults
|
||||
import SCons.Tool
|
|
@ -30,7 +30,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/filesystem.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/filesystem.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons
|
||||
from SCons.Tool.install import copyFunc
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/fortran.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/fortran.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import re
|
||||
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/g++.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/g++.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import os.path
|
||||
import re
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/g77.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/g77.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
import SCons.Util
|
||||
from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
|
|
@ -31,7 +31,7 @@ selection method.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Tool/gas.py rel_2.4.0:3365:9259ea1c13d7 2015/09/21 14:03:43 bdbaddog"
|
||||
__revision__ = "src/engine/SCons/Tool/gas.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
||||
|
||||
as_module = __import__('as', globals(), locals(), [])
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue