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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 dis
|
||||||
import os
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import collections
|
||||||
|
|
||||||
|
@ -292,8 +292,8 @@ def _node_errors(builder, env, tlist, slist):
|
||||||
if t.has_explicit_builder():
|
if t.has_explicit_builder():
|
||||||
if not t.env is None and not t.env is env:
|
if not t.env is None and not t.env is env:
|
||||||
action = t.builder.action
|
action = t.builder.action
|
||||||
t_contents = action.get_contents(tlist, slist, t.env)
|
t_contents = t.builder.action.get_contents(tlist, slist, t.env)
|
||||||
contents = action.get_contents(tlist, slist, env)
|
contents = builder.action.get_contents(tlist, slist, env)
|
||||||
|
|
||||||
if t_contents == contents:
|
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))
|
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.
|
# 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__ = """
|
__doc__ = """
|
||||||
CacheDir support
|
CacheDir support
|
|
@ -684,6 +684,22 @@ return 0;
|
||||||
|
|
||||||
return ret
|
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
|
# END OF PUBLIC FUNCTIONS
|
||||||
#
|
#
|
|
@ -28,7 +28,7 @@ needed by most users.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 os
|
||||||
import sys
|
import sys
|
|
@ -33,7 +33,7 @@ from distutils.msvccompiler.
|
||||||
#
|
#
|
||||||
from __future__ import division
|
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
|
import os
|
||||||
|
@ -482,6 +482,15 @@ class Variable_Method_Caller(object):
|
||||||
frame = frame.f_back
|
frame = frame.f_back
|
||||||
return None
|
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 = {
|
ConstructionEnvironment = {
|
||||||
'BUILDERS' : {},
|
'BUILDERS' : {},
|
||||||
'SCANNERS' : [],
|
'SCANNERS' : [],
|
||||||
|
@ -499,6 +508,12 @@ ConstructionEnvironment = {
|
||||||
'_LIBDIRFLAGS' : '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
'_LIBDIRFLAGS' : '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
||||||
'_CPPINCFLAGS' : '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
'_CPPINCFLAGS' : '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
|
||||||
'_CPPDEFFLAGS' : '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
|
'_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,
|
'TEMPFILE' : NullCmdGenerator,
|
||||||
'Dir' : Variable_Method_Caller('TARGET', 'Dir'),
|
'Dir' : Variable_Method_Caller('TARGET', 'Dir'),
|
||||||
'Dirs' : Variable_Method_Caller('TARGET', 'Dirs'),
|
'Dirs' : Variable_Method_Caller('TARGET', 'Dirs'),
|
|
@ -31,7 +31,7 @@ Environment
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import copy
|
||||||
|
@ -612,7 +612,7 @@ class SubstitutionEnvironment(object):
|
||||||
|
|
||||||
def Override(self, overrides):
|
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
|
the overrides dictionaries. "overrides" is a dictionary that
|
||||||
will override the variables of this environment.
|
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
|
import SCons.Util
|
||||||
|
|
|
@ -27,7 +27,7 @@ Nodes.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import collections
|
||||||
|
|
|
@ -29,7 +29,7 @@ stop, and wait on jobs.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons.compat
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
__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.
|
# 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
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 fnmatch
|
||||||
import os
|
import os
|
||||||
|
@ -2182,7 +2182,12 @@ class Dir(Base):
|
||||||
r = [os.path.join(str(dir), x) for x in r]
|
r = [os.path.join(str(dir), x) for x in r]
|
||||||
result.extend(r)
|
result.extend(r)
|
||||||
if exclude:
|
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))
|
return sorted(result, key=lambda a: str(a))
|
||||||
|
|
||||||
def _glob1(self, pattern, ondisk=True, source=False, strings=False):
|
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.
|
# 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
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 collections
|
||||||
import copy
|
import copy
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
__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.
|
# 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
|
__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.
|
# 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
|
__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.
|
# 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
|
__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.
|
# 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
|
__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.
|
# 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
|
__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.
|
# 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
|
__doc__ = """SCons.PathList
|
||||||
|
|
|
@ -42,7 +42,7 @@ their own platform definition.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons.compat
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 os
|
||||||
import subprocess
|
import subprocess
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import posix
|
||||||
from SCons.Platform import TempFileMunge
|
from SCons.Platform import TempFileMunge
|
||||||
|
@ -42,8 +42,8 @@ def generate(env):
|
||||||
env['PROGSUFFIX'] = '.exe'
|
env['PROGSUFFIX'] = '.exe'
|
||||||
env['SHLIBPREFIX'] = ''
|
env['SHLIBPREFIX'] = ''
|
||||||
env['SHLIBSUFFIX'] = '.dll'
|
env['SHLIBSUFFIX'] = '.dll'
|
||||||
env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX' ]
|
env['LIBPREFIXES'] = [ '$LIBPREFIX', '$SHLIBPREFIX', '$IMPLIBPREFIX' ]
|
||||||
env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX' ]
|
env['LIBSUFFIXES'] = [ '$LIBSUFFIX', '$SHLIBSUFFIX', '$IMPLIBSUFFIX' ]
|
||||||
env['TEMPFILE'] = TempFileMunge
|
env['TEMPFILE'] = TempFileMunge
|
||||||
env['TEMPFILEPREFIX'] = '@'
|
env['TEMPFILEPREFIX'] = '@'
|
||||||
env['MAXLINELENGTH'] = 2048
|
env['MAXLINELENGTH'] = 2048
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 posix
|
||||||
import os
|
import os
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import posix
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import posix
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import win32
|
||||||
|
|
||||||
def generate(env):
|
def generate(env):
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 errno
|
||||||
import os
|
import os
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import posix
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
||||||
import os.path
|
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.
|
# 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
|
import SCons.compat
|
||||||
|
|
||||||
|
@ -444,6 +444,7 @@ class SConfBase(object):
|
||||||
'CheckCXXHeader' : CheckCXXHeader,
|
'CheckCXXHeader' : CheckCXXHeader,
|
||||||
'CheckLib' : CheckLib,
|
'CheckLib' : CheckLib,
|
||||||
'CheckLibWithHeader' : CheckLibWithHeader,
|
'CheckLibWithHeader' : CheckLibWithHeader,
|
||||||
|
'CheckProg' : CheckProg,
|
||||||
}
|
}
|
||||||
self.AddTests(default_tests)
|
self.AddTests(default_tests)
|
||||||
self.AddTests(custom_tests)
|
self.AddTests(custom_tests)
|
||||||
|
@ -1047,6 +1048,14 @@ def CheckLibWithHeader(context, libs, header, language,
|
||||||
context.did_show_result = 1
|
context.did_show_result = 1
|
||||||
return not res
|
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:
|
# Local Variables:
|
||||||
# tab-width:4
|
# tab-width:4
|
||||||
# indent-tabs-mode:nil
|
# 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.
|
# 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
|
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.
|
# 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.Node.FS
|
||||||
import SCons.Scanner
|
import SCons.Scanner
|
|
@ -30,7 +30,7 @@ Coded by Andy Friesen
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import re
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Node.FS
|
||||||
import SCons.Scanner
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import re
|
||||||
|
|
|
@ -28,7 +28,7 @@ Definition Language) files.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Node.FS
|
||||||
import SCons.Scanner
|
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.
|
# 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 os.path
|
||||||
import re
|
import re
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
|
@ -28,7 +28,7 @@ Definition Language) files.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Node.FS
|
||||||
import SCons.Scanner
|
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.
|
# 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
|
import re
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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__ = """
|
__doc__ = """
|
||||||
SCons interactive mode
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons.compat
|
||||||
|
|
||||||
|
@ -484,6 +484,9 @@ def GetOption(name):
|
||||||
def SetOption(name, value):
|
def SetOption(name, value):
|
||||||
return OptionsParser.values.set_option(name, value)
|
return OptionsParser.values.set_option(name, value)
|
||||||
|
|
||||||
|
def PrintHelp(file=None):
|
||||||
|
OptionsParser.print_help(file=file)
|
||||||
|
|
||||||
#
|
#
|
||||||
class Stats(object):
|
class Stats(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 optparse
|
||||||
import re
|
import re
|
||||||
|
@ -268,7 +268,7 @@ class SConsOptionParser(optparse.OptionParser):
|
||||||
preserve_unknown_options = False
|
preserve_unknown_options = False
|
||||||
|
|
||||||
def error(self, msg):
|
def error(self, msg):
|
||||||
# overriden OptionValueError exception handler
|
# overridden OptionValueError exception handler
|
||||||
self.print_usage(sys.stderr)
|
self.print_usage(sys.stderr)
|
||||||
sys.stderr.write("SCons Error: %s\n" % msg)
|
sys.stderr.write("SCons Error: %s\n" % msg)
|
||||||
sys.exit(2)
|
sys.exit(2)
|
|
@ -28,7 +28,7 @@ files.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
from __future__ import division
|
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
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
|
@ -499,9 +499,9 @@ class SConsEnvironment(SCons.Environment.Base):
|
||||||
name = self.subst(name)
|
name = self.subst(name)
|
||||||
return SCons.Script.Main.GetOption(name)
|
return SCons.Script.Main.GetOption(name)
|
||||||
|
|
||||||
def Help(self, text):
|
def Help(self, text, append=False):
|
||||||
text = self.subst(text, raw=1)
|
text = self.subst(text, raw=1)
|
||||||
SCons.Script.HelpFunction(text)
|
SCons.Script.HelpFunction(text, append=append)
|
||||||
|
|
||||||
def Import(self, *vars):
|
def Import(self, *vars):
|
||||||
try:
|
try:
|
|
@ -34,13 +34,14 @@ it goes here.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import time
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import os
|
import os
|
||||||
|
import StringIO
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Special chicken-and-egg handling of the "--debug=memoizer" flag:
|
# Special chicken-and-egg handling of the "--debug=memoizer" flag:
|
||||||
|
@ -107,6 +108,7 @@ QuestionTask = Main.QuestionTask
|
||||||
#SConscriptSettableOptions = Main.SConscriptSettableOptions
|
#SConscriptSettableOptions = Main.SConscriptSettableOptions
|
||||||
|
|
||||||
AddOption = Main.AddOption
|
AddOption = Main.AddOption
|
||||||
|
PrintHelp = Main.PrintHelp
|
||||||
GetOption = Main.GetOption
|
GetOption = Main.GetOption
|
||||||
SetOption = Main.SetOption
|
SetOption = Main.SetOption
|
||||||
Progress = Main.Progress
|
Progress = Main.Progress
|
||||||
|
@ -258,12 +260,25 @@ def _Set_Default_Targets(env, tlist):
|
||||||
#
|
#
|
||||||
help_text = None
|
help_text = None
|
||||||
|
|
||||||
def HelpFunction(text):
|
def HelpFunction(text, append=False):
|
||||||
global help_text
|
global help_text
|
||||||
if SCons.Script.help_text is None:
|
if help_text is None:
|
||||||
SCons.Script.help_text = text
|
if append:
|
||||||
else:
|
s = StringIO.StringIO()
|
||||||
help_text = help_text + text
|
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.
|
# Will be non-zero if we are reading an SConscript file.
|
||||||
|
@ -318,6 +333,7 @@ GlobalDefaultEnvironmentFunctions = [
|
||||||
'Ignore',
|
'Ignore',
|
||||||
'Install',
|
'Install',
|
||||||
'InstallAs',
|
'InstallAs',
|
||||||
|
'InstallVersionedLib',
|
||||||
'Literal',
|
'Literal',
|
||||||
'Local',
|
'Local',
|
||||||
'ParseDepends',
|
'ParseDepends',
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
__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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 collections
|
||||||
import re
|
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.
|
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
|
from itertools import chain
|
||||||
import operator
|
import operator
|
|
@ -32,7 +32,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
from SCons.Tool.PharLapCommon import addPharLapPaths
|
||||||
import SCons.Util
|
import SCons.Util
|
|
@ -32,7 +32,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Builder
|
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.
|
# 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
|
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.
|
# 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 re
|
||||||
import os.path
|
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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 SCons.Warnings
|
||||||
import re
|
import re
|
||||||
|
@ -306,23 +306,6 @@ class RPaths(object):
|
||||||
- Tuple of strings, which represent paths relative to current working
|
- Tuple of strings, which represent paths relative to current working
|
||||||
directory (for given environment).
|
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 os
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
rpaths = ()
|
rpaths = ()
|
||||||
|
@ -330,7 +313,7 @@ class RPaths(object):
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
rpath = None
|
rpath = None
|
||||||
if isinstance(node, SCons.Node.FS.Base):
|
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?
|
# FIXME: Other types possible here?
|
||||||
if rpath is not None:
|
if rpath is not None:
|
||||||
rpaths += (rpath,)
|
rpaths += (rpath,)
|
|
@ -27,7 +27,7 @@ Stuff for processing Java.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
||||||
import os.path
|
import os.path
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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__ = """
|
__doc__ = """
|
||||||
Common functions for Microsoft Visual Studio and Visual C/C++.
|
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.
|
# 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.
|
__doc__ = """Module to define supported Windows chip architectures.
|
||||||
"""
|
"""
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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__ = """
|
__doc__ = """
|
||||||
Common helper functions for working with the Microsoft tool chain.
|
Common helper functions for working with the Microsoft tool chain.
|
||||||
|
@ -84,8 +84,8 @@ def is_win64():
|
||||||
return _is_win64
|
return _is_win64
|
||||||
|
|
||||||
|
|
||||||
def read_reg(value):
|
def read_reg(value, hkroot=SCons.Util.HKEY_LOCAL_MACHINE):
|
||||||
return SCons.Util.RegGetValue(SCons.Util.HKEY_LOCAL_MACHINE, value)[0]
|
return SCons.Util.RegGetValue(hkroot, value)[0]
|
||||||
|
|
||||||
def has_reg(value):
|
def has_reg(value):
|
||||||
"""Return True if the given key exists in HKEY_LOCAL_MACHINE, False
|
"""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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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__ = """
|
__doc__ = """
|
||||||
"""
|
"""
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
__doc__ = """Module to detect the Platform/Windows SDK
|
||||||
|
|
|
@ -30,11 +30,12 @@
|
||||||
# * test on 64 bits XP + VS 2005 (and VS 6 if possible)
|
# * test on 64 bits XP + VS 2005 (and VS 6 if possible)
|
||||||
# * SDK
|
# * SDK
|
||||||
# * Assembly
|
# * 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.
|
__doc__ = """Module for Visual C/C++ detection and configuration.
|
||||||
"""
|
"""
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
|
@ -137,36 +138,50 @@ def get_host_target(env):
|
||||||
_VCVER = ["14.0", "14.0Exp", "12.0", "12.0Exp", "11.0", "11.0Exp", "10.0", "10.0Exp", "9.0", "9.0Exp","8.0", "8.0Exp","7.1", "7.0", "6.0"]
|
_VCVER = ["14.0", "14.0Exp", "12.0", "12.0Exp", "11.0", "11.0Exp", "10.0", "10.0Exp", "9.0", "9.0Exp","8.0", "8.0Exp","7.1", "7.0", "6.0"]
|
||||||
|
|
||||||
_VCVER_TO_PRODUCT_DIR = {
|
_VCVER_TO_PRODUCT_DIR = {
|
||||||
'14.0' : [
|
'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' : [
|
'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' : [
|
'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'],
|
'12.0Exp' : [
|
||||||
'11.0': [
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\12.0\Setup\VC\ProductDir'),
|
||||||
r'Microsoft\VisualStudio\11.0\Setup\VC\ProductDir'],
|
],
|
||||||
'11.0Exp' : [
|
'11.0': [
|
||||||
r'Microsoft\VCExpress\11.0\Setup\VC\ProductDir'],
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\11.0\Setup\VC\ProductDir'),
|
||||||
'10.0': [
|
],
|
||||||
r'Microsoft\VisualStudio\10.0\Setup\VC\ProductDir'],
|
'11.0Exp' : [
|
||||||
'10.0Exp' : [
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\11.0\Setup\VC\ProductDir'),
|
||||||
r'Microsoft\VCExpress\10.0\Setup\VC\ProductDir'],
|
],
|
||||||
'9.0': [
|
'10.0': [
|
||||||
r'Microsoft\VisualStudio\9.0\Setup\VC\ProductDir'],
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\10.0\Setup\VC\ProductDir'),
|
||||||
'9.0Exp' : [
|
],
|
||||||
r'Microsoft\VCExpress\9.0\Setup\VC\ProductDir'],
|
'10.0Exp' : [
|
||||||
'8.0': [
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\10.0\Setup\VC\ProductDir'),
|
||||||
r'Microsoft\VisualStudio\8.0\Setup\VC\ProductDir'],
|
],
|
||||||
'8.0Exp': [
|
'9.0': [
|
||||||
r'Microsoft\VCExpress\8.0\Setup\VC\ProductDir'],
|
(SCons.Util.HKEY_CURRENT_USER, r'Microsoft\DevDiv\VCForPython\9.0\installdir',),
|
||||||
'7.1': [
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\9.0\Setup\VC\ProductDir',),
|
||||||
r'Microsoft\VisualStudio\7.1\Setup\VC\ProductDir'],
|
],
|
||||||
'7.0': [
|
'9.0Exp' : [
|
||||||
r'Microsoft\VisualStudio\7.0\Setup\VC\ProductDir'],
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\9.0\Setup\VC\ProductDir'),
|
||||||
'6.0': [
|
],
|
||||||
r'Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++\ProductDir']
|
'8.0': [
|
||||||
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\8.0\Setup\VC\ProductDir'),
|
||||||
|
],
|
||||||
|
'8.0Exp': [
|
||||||
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VCExpress\8.0\Setup\VC\ProductDir'),
|
||||||
|
],
|
||||||
|
'7.1': [
|
||||||
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\7.1\Setup\VC\ProductDir'),
|
||||||
|
],
|
||||||
|
'7.0': [
|
||||||
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\7.0\Setup\VC\ProductDir'),
|
||||||
|
],
|
||||||
|
'6.0': [
|
||||||
|
(SCons.Util.HKEY_LOCAL_MACHINE, r'Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++\ProductDir'),
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
def msvc_version_to_maj_min(msvc_version):
|
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
|
If for some reason the requested version could not be found, an
|
||||||
exception which inherits from VisualCException will be raised."""
|
exception which inherits from VisualCException will be raised."""
|
||||||
root = 'Software\\'
|
root = 'Software\\'
|
||||||
if common.is_win64():
|
|
||||||
root = root + 'Wow6432Node\\'
|
|
||||||
try:
|
try:
|
||||||
hkeys = _VCVER_TO_PRODUCT_DIR[msvc_version]
|
hkeys = _VCVER_TO_PRODUCT_DIR[msvc_version]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
debug("Unknown version of MSVC: %s" % msvc_version)
|
debug("Unknown version of MSVC: %s" % msvc_version)
|
||||||
raise UnsupportedVersion("Unknown version %s" % msvc_version)
|
raise UnsupportedVersion("Unknown version %s" % msvc_version)
|
||||||
|
|
||||||
for key in hkeys:
|
for hkroot, key in hkeys:
|
||||||
key = root + key
|
|
||||||
try:
|
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:
|
except WindowsError, e:
|
||||||
debug('find_vc_dir(): no VC registry key %s' % repr(key))
|
debug('find_vc_dir(): no VC registry key %s' % repr(key))
|
||||||
else:
|
else:
|
|
@ -21,7 +21,7 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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++
|
__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
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
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.
|
# 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
|
||||||
import os.path
|
import os.path
|
|
@ -29,7 +29,7 @@ selection method.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
|
@ -29,7 +29,7 @@ selection method.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import os.path
|
||||||
|
|
|
@ -35,7 +35,7 @@ tool definition.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 imp
|
||||||
import sys
|
import sys
|
||||||
|
@ -236,150 +236,436 @@ def createStaticLibBuilder(env):
|
||||||
|
|
||||||
return static_lib
|
return static_lib
|
||||||
|
|
||||||
def VersionShLibLinkNames(version, libname, env):
|
def _call_linker_cb(env, callback, args, result = None):
|
||||||
"""Generate names of symlinks to the versioned shared library"""
|
"""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
|
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 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'))
|
|
||||||
if Verbose:
|
if Verbose:
|
||||||
print "VersionShLib: libname = ",libname
|
print '_call_linker_cb: args=%r' % args
|
||||||
print "VersionShLib: platform = ",platform
|
print '_call_linker_cb: callback=%r' % callback
|
||||||
print "VersionShLib: shlib_suffix = ",shlib_suffix
|
|
||||||
print "VersionShLib: target = ",str(target[0])
|
|
||||||
|
|
||||||
if version:
|
try:
|
||||||
# set the shared library link flags
|
cbfun = env['LINKCALLBACKS'][callback]
|
||||||
if platform == 'posix':
|
except (KeyError, TypeError):
|
||||||
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:
|
if Verbose:
|
||||||
print "VersionShLib: shlink_flags = ",shlink_flags
|
print '_call_linker_cb: env["LINKCALLBACKS"][%r] not found or can not be used' % callback
|
||||||
envlink = env.Clone()
|
pass
|
||||||
envlink['SHLINKFLAGS'] = shlink_flags
|
|
||||||
else:
|
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:
|
if Verbose:
|
||||||
print "VerShLib: target lib is = ", libname
|
print '_call_linker_cb: env["LINKCALLBACKS"][%r] found' % callback
|
||||||
print "VerShLib: name is = ", target[0].name
|
print '_call_linker_cb: env["LINKCALLBACKS"][%r]=%r' % (callback, cbfun)
|
||||||
print "VerShLib: dir is = ", target[0].dir.path
|
if(callable(cbfun)):
|
||||||
linknames = VersionShLibLinkNames(version, libname, env)
|
|
||||||
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:
|
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
|
return result
|
||||||
|
|
||||||
# Fix http://scons.tigris.org/issues/show_bug.cgi?id=2903 :
|
def _call_env_subst(env, string, *args, **kw):
|
||||||
# Ensure we still depend on SCons.Defaults.ShLinkAction command line which is $SHLINKCOM.
|
kw2 = {}
|
||||||
# This was tricky because we don't want changing LIBPATH to cause a rebuild, but
|
for k in ('raw', 'target', 'source', 'conv', 'executor'):
|
||||||
# changing other link args should. LIBPATH has $( ... $) around it but until this
|
try: kw2[k] = kw[k]
|
||||||
# fix, when the varlist was added to the build sig those ignored parts weren't getting
|
except KeyError: pass
|
||||||
# ignored.
|
return env.subst(string, *args, **kw2)
|
||||||
ShLibAction = SCons.Action.Action(VersionedSharedLibrary, None, varlist=['SHLINKCOM'])
|
|
||||||
|
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):
|
def createSharedLibBuilder(env):
|
||||||
"""This is a utility function that creates the SharedLibrary
|
"""This is a utility function that creates the SharedLibrary
|
||||||
|
@ -393,11 +679,12 @@ def createSharedLibBuilder(env):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
action_list = [ SCons.Defaults.SharedCheck,
|
action_list = [ SCons.Defaults.SharedCheck,
|
||||||
ShLibAction ]
|
SCons.Defaults.ShLinkAction,
|
||||||
|
LibSymlinksAction ]
|
||||||
shared_lib = SCons.Builder.Builder(action = action_list,
|
shared_lib = SCons.Builder.Builder(action = action_list,
|
||||||
emitter = "$SHLIBEMITTER",
|
emitter = "$SHLIBEMITTER",
|
||||||
prefix = '$SHLIBPREFIX',
|
prefix = ShLibPrefixGenerator,
|
||||||
suffix = '$SHLIBSUFFIX',
|
suffix = ShLibSuffixGenerator,
|
||||||
target_scanner = ProgramScanner,
|
target_scanner = ProgramScanner,
|
||||||
src_suffix = '$SHOBJSUFFIX',
|
src_suffix = '$SHOBJSUFFIX',
|
||||||
src_builder = 'SharedObject')
|
src_builder = 'SharedObject')
|
||||||
|
@ -417,11 +704,12 @@ def createLoadableModuleBuilder(env):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
action_list = [ SCons.Defaults.SharedCheck,
|
action_list = [ SCons.Defaults.SharedCheck,
|
||||||
SCons.Defaults.LdModuleLinkAction ]
|
SCons.Defaults.LdModuleLinkAction,
|
||||||
|
LibSymlinksAction ]
|
||||||
ld_module = SCons.Builder.Builder(action = action_list,
|
ld_module = SCons.Builder.Builder(action = action_list,
|
||||||
emitter = "$LDMODULEEMITTER",
|
emitter = "$LDMODULEEMITTER",
|
||||||
prefix = '$LDMODULEPREFIX',
|
prefix = LdModPrefixGenerator,
|
||||||
suffix = '$LDMODULESUFFIX',
|
suffix = LdModSuffixGenerator,
|
||||||
target_scanner = ProgramScanner,
|
target_scanner = ProgramScanner,
|
||||||
src_suffix = '$SHOBJSUFFIX',
|
src_suffix = '$SHOBJSUFFIX',
|
||||||
src_builder = 'SharedObject')
|
src_builder = 'SharedObject')
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import os.path
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import os.path
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import os.path
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
||||||
import os.path
|
import os.path
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons.Util
|
||||||
|
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -27,7 +27,7 @@ XXX
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
||||||
import os.path
|
import os.path
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import os.path
|
||||||
|
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Tool
|
||||||
import SCons.Defaults
|
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.
|
# 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
|
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.
|
# 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
|
import SCons.Tool
|
||||||
|
|
|
@ -58,7 +58,7 @@ Lib tool variables:
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
@ -114,7 +114,7 @@ def generate(env):
|
||||||
|
|
||||||
env['DSHLINK'] = '$DC'
|
env['DSHLINK'] = '$DC'
|
||||||
env['DSHLINKFLAGS'] = SCons.Util.CLVar('$DLINKFLAGS -shared -defaultlib=libphobos2.so')
|
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['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l'
|
||||||
env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
|
env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
|
||||||
|
@ -139,6 +139,17 @@ def generate(env):
|
||||||
env['DRPATHSUFFIX'] = ''
|
env['DRPATHSUFFIX'] = ''
|
||||||
env['_DRPATH'] = '${_concat(DRPATHPREFIX, RPATH, DRPATHSUFFIX, __env__)}'
|
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)
|
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.
|
# 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.Builder
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Scanner.Fortran
|
import SCons.Scanner.Fortran
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Scanner.Fortran
|
import SCons.Scanner.Fortran
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -30,7 +30,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons
|
||||||
from SCons.Tool.install import copyFunc
|
from SCons.Tool.install import copyFunc
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import re
|
||||||
|
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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 os.path
|
||||||
import re
|
import re
|
|
@ -31,7 +31,7 @@ selection method.
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# 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
|
import SCons.Util
|
||||||
from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
|
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.
|
# 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(), [])
|
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