update SCons to 2.5.0
This commit is contained in:
parent
4e66c69cf2
commit
922f4c4e1b
204 changed files with 928 additions and 3110 deletions
Binary file not shown.
|
@ -3,7 +3,7 @@
|
||||||
This copyright and license do not apply to any other software
|
This copyright and license do not apply to any other software
|
||||||
with which this software may have been included.
|
with which this software may have been included.
|
||||||
|
|
||||||
Copyright (c) 2001 - 2015 The SCons Foundation
|
Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
|
|
||||||
SCons - a software construction tool
|
SCons - a software construction tool
|
||||||
|
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
__doc__ = """
|
|
||||||
collections compatibility module for older (pre-2.4) Python versions
|
|
||||||
|
|
||||||
This does not not NOT (repeat, *NOT*) provide complete collections
|
|
||||||
functionality. It only wraps the portions of collections functionality
|
|
||||||
used by SCons, in an interface that looks enough like collections for
|
|
||||||
our purposes.
|
|
||||||
"""
|
|
||||||
|
|
||||||
__revision__ = "src/engine/SCons/compat/_scons_collections.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
|
||||||
|
|
||||||
# Use exec to hide old names from fixers.
|
|
||||||
exec("""if True:
|
|
||||||
from UserDict import UserDict
|
|
||||||
from UserList import UserList
|
|
||||||
from UserString import UserString""")
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# tab-width:4
|
|
||||||
# indent-tabs-mode:nil
|
|
||||||
# End:
|
|
||||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
|
@ -1,563 +0,0 @@
|
||||||
"""Classes to represent arbitrary sets (including sets of sets).
|
|
||||||
|
|
||||||
This module implements sets using dictionaries whose values are
|
|
||||||
ignored. The usual operations (union, intersection, deletion, etc.)
|
|
||||||
are provided as both methods and operators.
|
|
||||||
|
|
||||||
Important: sets are not sequences! While they support 'x in s',
|
|
||||||
'len(s)', and 'for x in s', none of those operations are unique for
|
|
||||||
sequences; for example, mappings support all three as well. The
|
|
||||||
characteristic operation for sequences is subscripting with small
|
|
||||||
integers: s[i], for i in range(len(s)). Sets don't support
|
|
||||||
subscripting at all. Also, sequences allow multiple occurrences and
|
|
||||||
their elements have a definite order; sets on the other hand don't
|
|
||||||
record multiple occurrences and don't remember the order of element
|
|
||||||
insertion (which is why they don't support s[i]).
|
|
||||||
|
|
||||||
The following classes are provided:
|
|
||||||
|
|
||||||
BaseSet -- All the operations common to both mutable and immutable
|
|
||||||
sets. This is an abstract class, not meant to be directly
|
|
||||||
instantiated.
|
|
||||||
|
|
||||||
Set -- Mutable sets, subclass of BaseSet; not hashable.
|
|
||||||
|
|
||||||
ImmutableSet -- Immutable sets, subclass of BaseSet; hashable.
|
|
||||||
An iterable argument is mandatory to create an ImmutableSet.
|
|
||||||
|
|
||||||
_TemporarilyImmutableSet -- A wrapper around a Set, hashable,
|
|
||||||
giving the same hash value as the immutable set equivalent
|
|
||||||
would have. Do not use this class directly.
|
|
||||||
|
|
||||||
Only hashable objects can be added to a Set. In particular, you cannot
|
|
||||||
really add a Set as an element to another Set; if you try, what is
|
|
||||||
actually added is an ImmutableSet built from it (it compares equal to
|
|
||||||
the one you tried adding).
|
|
||||||
|
|
||||||
When you ask if `x in y' where x is a Set and y is a Set or
|
|
||||||
ImmutableSet, x is wrapped into a _TemporarilyImmutableSet z, and
|
|
||||||
what's tested is actually `z in y'.
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Code history:
|
|
||||||
#
|
|
||||||
# - Greg V. Wilson wrote the first version, using a different approach
|
|
||||||
# to the mutable/immutable problem, and inheriting from dict.
|
|
||||||
#
|
|
||||||
# - Alex Martelli modified Greg's version to implement the current
|
|
||||||
# Set/ImmutableSet approach, and make the data an attribute.
|
|
||||||
#
|
|
||||||
# - Guido van Rossum rewrote much of the code, made some API changes,
|
|
||||||
# and cleaned up the docstrings.
|
|
||||||
#
|
|
||||||
# - Raymond Hettinger added a number of speedups and other
|
|
||||||
# improvements.
|
|
||||||
|
|
||||||
# protect this import from the fixers...
|
|
||||||
exec('from itertools import ifilterfalse as filterfalse')
|
|
||||||
|
|
||||||
__all__ = ['BaseSet', 'Set', 'ImmutableSet']
|
|
||||||
|
|
||||||
class BaseSet(object):
|
|
||||||
"""Common base class for mutable and immutable sets."""
|
|
||||||
|
|
||||||
__slots__ = ['_data']
|
|
||||||
|
|
||||||
# Constructor
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
"""This is an abstract class."""
|
|
||||||
# Don't call this from a concrete subclass!
|
|
||||||
if self.__class__ is BaseSet:
|
|
||||||
raise TypeError("BaseSet is an abstract class. "
|
|
||||||
"Use Set or ImmutableSet.")
|
|
||||||
|
|
||||||
# Standard protocols: __len__, __repr__, __str__, __iter__
|
|
||||||
|
|
||||||
def __len__(self):
|
|
||||||
"""Return the number of elements of a set."""
|
|
||||||
return len(self._data)
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
"""Return string representation of a set.
|
|
||||||
|
|
||||||
This looks like 'Set([<list of elements>])'.
|
|
||||||
"""
|
|
||||||
return self._repr()
|
|
||||||
|
|
||||||
# __str__ is the same as __repr__
|
|
||||||
__str__ = __repr__
|
|
||||||
|
|
||||||
def _repr(self, sort_them=False):
|
|
||||||
elements = list(self._data.keys())
|
|
||||||
if sort_them:
|
|
||||||
elements.sort()
|
|
||||||
return '%s(%r)' % (self.__class__.__name__, elements)
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
"""Return an iterator over the elements or a set.
|
|
||||||
|
|
||||||
This is the keys iterator for the underlying dict.
|
|
||||||
"""
|
|
||||||
# Wrapping name in () prevents fixer from "fixing" this
|
|
||||||
return (self._data.iterkeys)()
|
|
||||||
|
|
||||||
# Three-way comparison is not supported. However, because __eq__ is
|
|
||||||
# tried before __cmp__, if Set x == Set y, x.__eq__(y) returns True and
|
|
||||||
# then cmp(x, y) returns 0 (Python doesn't actually call __cmp__ in this
|
|
||||||
# case).
|
|
||||||
|
|
||||||
def __cmp__(self, other):
|
|
||||||
raise TypeError("can't compare sets using cmp()")
|
|
||||||
|
|
||||||
# Equality comparisons using the underlying dicts. Mixed-type comparisons
|
|
||||||
# are allowed here, where Set == z for non-Set z always returns False,
|
|
||||||
# and Set != z always True. This allows expressions like "x in y" to
|
|
||||||
# give the expected result when y is a sequence of mixed types, not
|
|
||||||
# raising a pointless TypeError just because y contains a Set, or x is
|
|
||||||
# a Set and y contain's a non-set ("in" invokes only __eq__).
|
|
||||||
# Subtle: it would be nicer if __eq__ and __ne__ could return
|
|
||||||
# NotImplemented instead of True or False. Then the other comparand
|
|
||||||
# would get a chance to determine the result, and if the other comparand
|
|
||||||
# also returned NotImplemented then it would fall back to object address
|
|
||||||
# comparison (which would always return False for __eq__ and always
|
|
||||||
# True for __ne__). However, that doesn't work, because this type
|
|
||||||
# *also* implements __cmp__: if, e.g., __eq__ returns NotImplemented,
|
|
||||||
# Python tries __cmp__ next, and the __cmp__ here then raises TypeError.
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if isinstance(other, BaseSet):
|
|
||||||
return self._data == other._data
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
if isinstance(other, BaseSet):
|
|
||||||
return self._data != other._data
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Copying operations
|
|
||||||
|
|
||||||
def copy(self):
|
|
||||||
"""Return a shallow copy of a set."""
|
|
||||||
result = self.__class__()
|
|
||||||
result._data.update(self._data)
|
|
||||||
return result
|
|
||||||
|
|
||||||
__copy__ = copy # For the copy module
|
|
||||||
|
|
||||||
def __deepcopy__(self, memo):
|
|
||||||
"""Return a deep copy of a set; used by copy module."""
|
|
||||||
# This pre-creates the result and inserts it in the memo
|
|
||||||
# early, in case the deep copy recurses into another reference
|
|
||||||
# to this same set. A set can't be an element of itself, but
|
|
||||||
# it can certainly contain an object that has a reference to
|
|
||||||
# itself.
|
|
||||||
from copy import deepcopy
|
|
||||||
result = self.__class__()
|
|
||||||
memo[id(self)] = result
|
|
||||||
data = result._data
|
|
||||||
value = True
|
|
||||||
for elt in self:
|
|
||||||
data[deepcopy(elt, memo)] = value
|
|
||||||
return result
|
|
||||||
|
|
||||||
# Standard set operations: union, intersection, both differences.
|
|
||||||
# Each has an operator version (e.g. __or__, invoked with |) and a
|
|
||||||
# method version (e.g. union).
|
|
||||||
# Subtle: Each pair requires distinct code so that the outcome is
|
|
||||||
# correct when the type of other isn't suitable. For example, if
|
|
||||||
# we did "union = __or__" instead, then Set().union(3) would return
|
|
||||||
# NotImplemented instead of raising TypeError (albeit that *why* it
|
|
||||||
# raises TypeError as-is is also a bit subtle).
|
|
||||||
|
|
||||||
def __or__(self, other):
|
|
||||||
"""Return the union of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in either set.)
|
|
||||||
"""
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
return NotImplemented
|
|
||||||
return self.union(other)
|
|
||||||
|
|
||||||
def union(self, other):
|
|
||||||
"""Return the union of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in either set.)
|
|
||||||
"""
|
|
||||||
result = self.__class__(self)
|
|
||||||
result._update(other)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def __and__(self, other):
|
|
||||||
"""Return the intersection of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in both sets.)
|
|
||||||
"""
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
return NotImplemented
|
|
||||||
return self.intersection(other)
|
|
||||||
|
|
||||||
def intersection(self, other):
|
|
||||||
"""Return the intersection of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in both sets.)
|
|
||||||
"""
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
other = Set(other)
|
|
||||||
if len(self) <= len(other):
|
|
||||||
little, big = self, other
|
|
||||||
else:
|
|
||||||
little, big = other, self
|
|
||||||
common = iter(filter(big._data.has_key, little))
|
|
||||||
return self.__class__(common)
|
|
||||||
|
|
||||||
def __xor__(self, other):
|
|
||||||
"""Return the symmetric difference of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in exactly one of the sets.)
|
|
||||||
"""
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
return NotImplemented
|
|
||||||
return self.symmetric_difference(other)
|
|
||||||
|
|
||||||
def symmetric_difference(self, other):
|
|
||||||
"""Return the symmetric difference of two sets as a new set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in exactly one of the sets.)
|
|
||||||
"""
|
|
||||||
result = self.__class__()
|
|
||||||
data = result._data
|
|
||||||
value = True
|
|
||||||
selfdata = self._data
|
|
||||||
try:
|
|
||||||
otherdata = other._data
|
|
||||||
except AttributeError:
|
|
||||||
otherdata = Set(other)._data
|
|
||||||
for elt in filterfalse(otherdata.has_key, selfdata):
|
|
||||||
data[elt] = value
|
|
||||||
for elt in filterfalse(selfdata.has_key, otherdata):
|
|
||||||
data[elt] = value
|
|
||||||
return result
|
|
||||||
|
|
||||||
def __sub__(self, other):
|
|
||||||
"""Return the difference of two sets as a new Set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in this set and not in the other.)
|
|
||||||
"""
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
return NotImplemented
|
|
||||||
return self.difference(other)
|
|
||||||
|
|
||||||
def difference(self, other):
|
|
||||||
"""Return the difference of two sets as a new Set.
|
|
||||||
|
|
||||||
(I.e. all elements that are in this set and not in the other.)
|
|
||||||
"""
|
|
||||||
result = self.__class__()
|
|
||||||
data = result._data
|
|
||||||
try:
|
|
||||||
otherdata = other._data
|
|
||||||
except AttributeError:
|
|
||||||
otherdata = Set(other)._data
|
|
||||||
value = True
|
|
||||||
for elt in filterfalse(otherdata.has_key, self):
|
|
||||||
data[elt] = value
|
|
||||||
return result
|
|
||||||
|
|
||||||
# Membership test
|
|
||||||
|
|
||||||
def __contains__(self, element):
|
|
||||||
"""Report whether an element is a member of a set.
|
|
||||||
|
|
||||||
(Called in response to the expression `element in self'.)
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
return element in self._data
|
|
||||||
except TypeError:
|
|
||||||
transform = getattr(element, "__as_temporarily_immutable__", None)
|
|
||||||
if transform is None:
|
|
||||||
raise # re-raise the TypeError exception we caught
|
|
||||||
return transform() in self._data
|
|
||||||
|
|
||||||
# Subset and superset test
|
|
||||||
|
|
||||||
def issubset(self, other):
|
|
||||||
"""Report whether another set contains this set."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
if len(self) > len(other): # Fast check for obvious cases
|
|
||||||
return False
|
|
||||||
for elt in filterfalse(other._data.has_key, self):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def issuperset(self, other):
|
|
||||||
"""Report whether this set contains another set."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
if len(self) < len(other): # Fast check for obvious cases
|
|
||||||
return False
|
|
||||||
for elt in filterfalse(self._data.has_key, other):
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Inequality comparisons using the is-subset relation.
|
|
||||||
__le__ = issubset
|
|
||||||
__ge__ = issuperset
|
|
||||||
|
|
||||||
def __lt__(self, other):
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
return len(self) < len(other) and self.issubset(other)
|
|
||||||
|
|
||||||
def __gt__(self, other):
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
return len(self) > len(other) and self.issuperset(other)
|
|
||||||
|
|
||||||
# Assorted helpers
|
|
||||||
|
|
||||||
def _binary_sanity_check(self, other):
|
|
||||||
# Check that the other argument to a binary operation is also
|
|
||||||
# a set, raising a TypeError otherwise.
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
raise TypeError("Binary operation only permitted between sets")
|
|
||||||
|
|
||||||
def _compute_hash(self):
|
|
||||||
# Calculate hash code for a set by xor'ing the hash codes of
|
|
||||||
# the elements. This ensures that the hash code does not depend
|
|
||||||
# on the order in which elements are added to the set. This is
|
|
||||||
# not called __hash__ because a BaseSet should not be hashable;
|
|
||||||
# only an ImmutableSet is hashable.
|
|
||||||
result = 0
|
|
||||||
for elt in self:
|
|
||||||
result ^= hash(elt)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def _update(self, iterable):
|
|
||||||
# The main loop for update() and the subclass __init__() methods.
|
|
||||||
data = self._data
|
|
||||||
|
|
||||||
# Use the fast update() method when a dictionary is available.
|
|
||||||
if isinstance(iterable, BaseSet):
|
|
||||||
data.update(iterable._data)
|
|
||||||
return
|
|
||||||
|
|
||||||
value = True
|
|
||||||
|
|
||||||
if type(iterable) in (list, tuple, xrange):
|
|
||||||
# Optimized: we know that __iter__() and next() can't
|
|
||||||
# raise TypeError, so we can move 'try:' out of the loop.
|
|
||||||
it = iter(iterable)
|
|
||||||
while True:
|
|
||||||
try:
|
|
||||||
for element in it:
|
|
||||||
data[element] = value
|
|
||||||
return
|
|
||||||
except TypeError:
|
|
||||||
transform = getattr(element, "__as_immutable__", None)
|
|
||||||
if transform is None:
|
|
||||||
raise # re-raise the TypeError exception we caught
|
|
||||||
data[transform()] = value
|
|
||||||
else:
|
|
||||||
# Safe: only catch TypeError where intended
|
|
||||||
for element in iterable:
|
|
||||||
try:
|
|
||||||
data[element] = value
|
|
||||||
except TypeError:
|
|
||||||
transform = getattr(element, "__as_immutable__", None)
|
|
||||||
if transform is None:
|
|
||||||
raise # re-raise the TypeError exception we caught
|
|
||||||
data[transform()] = value
|
|
||||||
|
|
||||||
|
|
||||||
class ImmutableSet(BaseSet):
|
|
||||||
"""Immutable set class."""
|
|
||||||
|
|
||||||
__slots__ = ['_hashcode']
|
|
||||||
|
|
||||||
# BaseSet + hashing
|
|
||||||
|
|
||||||
def __init__(self, iterable=None):
|
|
||||||
"""Construct an immutable set from an optional iterable."""
|
|
||||||
self._hashcode = None
|
|
||||||
self._data = {}
|
|
||||||
if iterable is not None:
|
|
||||||
self._update(iterable)
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
if self._hashcode is None:
|
|
||||||
self._hashcode = self._compute_hash()
|
|
||||||
return self._hashcode
|
|
||||||
|
|
||||||
def __getstate__(self):
|
|
||||||
return self._data, self._hashcode
|
|
||||||
|
|
||||||
def __setstate__(self, state):
|
|
||||||
self._data, self._hashcode = state
|
|
||||||
|
|
||||||
class Set(BaseSet):
|
|
||||||
""" Mutable set class."""
|
|
||||||
|
|
||||||
__slots__ = []
|
|
||||||
|
|
||||||
# BaseSet + operations requiring mutability; no hashing
|
|
||||||
|
|
||||||
def __init__(self, iterable=None):
|
|
||||||
"""Construct a set from an optional iterable."""
|
|
||||||
self._data = {}
|
|
||||||
if iterable is not None:
|
|
||||||
self._update(iterable)
|
|
||||||
|
|
||||||
def __getstate__(self):
|
|
||||||
# getstate's results are ignored if it is not
|
|
||||||
return self._data,
|
|
||||||
|
|
||||||
def __setstate__(self, data):
|
|
||||||
self._data, = data
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
"""A Set cannot be hashed."""
|
|
||||||
# We inherit object.__hash__, so we must deny this explicitly
|
|
||||||
raise TypeError("Can't hash a Set, only an ImmutableSet.")
|
|
||||||
|
|
||||||
# In-place union, intersection, differences.
|
|
||||||
# Subtle: The xyz_update() functions deliberately return None,
|
|
||||||
# as do all mutating operations on built-in container types.
|
|
||||||
# The __xyz__ spellings have to return self, though.
|
|
||||||
|
|
||||||
def __ior__(self, other):
|
|
||||||
"""Update a set with the union of itself and another."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
self._data.update(other._data)
|
|
||||||
return self
|
|
||||||
|
|
||||||
def union_update(self, other):
|
|
||||||
"""Update a set with the union of itself and another."""
|
|
||||||
self._update(other)
|
|
||||||
|
|
||||||
def __iand__(self, other):
|
|
||||||
"""Update a set with the intersection of itself and another."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
self._data = (self & other)._data
|
|
||||||
return self
|
|
||||||
|
|
||||||
def intersection_update(self, other):
|
|
||||||
"""Update a set with the intersection of itself and another."""
|
|
||||||
if isinstance(other, BaseSet):
|
|
||||||
self &= other
|
|
||||||
else:
|
|
||||||
self._data = (self.intersection(other))._data
|
|
||||||
|
|
||||||
def __ixor__(self, other):
|
|
||||||
"""Update a set with the symmetric difference of itself and another."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
self.symmetric_difference_update(other)
|
|
||||||
return self
|
|
||||||
|
|
||||||
def symmetric_difference_update(self, other):
|
|
||||||
"""Update a set with the symmetric difference of itself and another."""
|
|
||||||
data = self._data
|
|
||||||
value = True
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
other = Set(other)
|
|
||||||
if self is other:
|
|
||||||
self.clear()
|
|
||||||
for elt in other:
|
|
||||||
if elt in data:
|
|
||||||
del data[elt]
|
|
||||||
else:
|
|
||||||
data[elt] = value
|
|
||||||
|
|
||||||
def __isub__(self, other):
|
|
||||||
"""Remove all elements of another set from this set."""
|
|
||||||
self._binary_sanity_check(other)
|
|
||||||
self.difference_update(other)
|
|
||||||
return self
|
|
||||||
|
|
||||||
def difference_update(self, other):
|
|
||||||
"""Remove all elements of another set from this set."""
|
|
||||||
data = self._data
|
|
||||||
if not isinstance(other, BaseSet):
|
|
||||||
other = Set(other)
|
|
||||||
if self is other:
|
|
||||||
self.clear()
|
|
||||||
for elt in filter(data.has_key, other):
|
|
||||||
del data[elt]
|
|
||||||
|
|
||||||
# Python dict-like mass mutations: update, clear
|
|
||||||
|
|
||||||
def update(self, iterable):
|
|
||||||
"""Add all values from an iterable (such as a list or file)."""
|
|
||||||
self._update(iterable)
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
"""Remove all elements from this set."""
|
|
||||||
self._data.clear()
|
|
||||||
|
|
||||||
# Single-element mutations: add, remove, discard
|
|
||||||
|
|
||||||
def add(self, element):
|
|
||||||
"""Add an element to a set.
|
|
||||||
|
|
||||||
This has no effect if the element is already present.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
self._data[element] = True
|
|
||||||
except TypeError:
|
|
||||||
transform = getattr(element, "__as_immutable__", None)
|
|
||||||
if transform is None:
|
|
||||||
raise # re-raise the TypeError exception we caught
|
|
||||||
self._data[transform()] = True
|
|
||||||
|
|
||||||
def remove(self, element):
|
|
||||||
"""Remove an element from a set; it must be a member.
|
|
||||||
|
|
||||||
If the element is not a member, raise a KeyError.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
del self._data[element]
|
|
||||||
except TypeError:
|
|
||||||
transform = getattr(element, "__as_temporarily_immutable__", None)
|
|
||||||
if transform is None:
|
|
||||||
raise # re-raise the TypeError exception we caught
|
|
||||||
del self._data[transform()]
|
|
||||||
|
|
||||||
def discard(self, element):
|
|
||||||
"""Remove an element from a set if it is a member.
|
|
||||||
|
|
||||||
If the element is not a member, do nothing.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
self.remove(element)
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def pop(self):
|
|
||||||
"""Remove and return an arbitrary set element."""
|
|
||||||
return self._data.popitem()[0]
|
|
||||||
|
|
||||||
def __as_immutable__(self):
|
|
||||||
# Return a copy of self as an immutable set
|
|
||||||
return ImmutableSet(self)
|
|
||||||
|
|
||||||
def __as_temporarily_immutable__(self):
|
|
||||||
# Return self wrapped in a temporarily immutable set
|
|
||||||
return _TemporarilyImmutableSet(self)
|
|
||||||
|
|
||||||
|
|
||||||
class _TemporarilyImmutableSet(BaseSet):
|
|
||||||
# Wrap a mutable set as if it was temporarily immutable.
|
|
||||||
# This only supplies hashing and equality comparisons.
|
|
||||||
|
|
||||||
def __init__(self, set):
|
|
||||||
self._set = set
|
|
||||||
self._data = set._data # Needed by ImmutableSet.__eq__()
|
|
||||||
|
|
||||||
def __hash__(self):
|
|
||||||
return self._set._compute_hash()
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# tab-width:4
|
|
||||||
# indent-tabs-mode:nil
|
|
||||||
# End:
|
|
||||||
# vim: set expandtab tabstop=4 shiftwidth=4:
|
|
File diff suppressed because it is too large
Load diff
|
@ -76,7 +76,7 @@ way for wrapping up the functions.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Action.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import dis
|
import dis
|
||||||
import os
|
import os
|
||||||
|
@ -235,11 +235,7 @@ def _code_contents(code):
|
||||||
# The code contents depends on the number of local variables
|
# The code contents depends on the number of local variables
|
||||||
# but not their actual names.
|
# but not their actual names.
|
||||||
contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
|
contents.append("%s,%s" % (code.co_argcount, len(code.co_varnames)))
|
||||||
try:
|
contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
|
||||||
contents.append(",%s,%s" % (len(code.co_cellvars), len(code.co_freevars)))
|
|
||||||
except AttributeError:
|
|
||||||
# Older versions of Python do not support closures.
|
|
||||||
contents.append(",0,0")
|
|
||||||
|
|
||||||
# The code contents depends on any constants accessed by the
|
# The code contents depends on any constants accessed by the
|
||||||
# function. Note that we have to call _object_contents on each
|
# function. Note that we have to call _object_contents on each
|
||||||
|
@ -276,11 +272,7 @@ def _function_contents(func):
|
||||||
contents.append(',()')
|
contents.append(',()')
|
||||||
|
|
||||||
# The function contents depends on the closure captured cell values.
|
# The function contents depends on the closure captured cell values.
|
||||||
try:
|
closure = func.func_closure or []
|
||||||
closure = func.func_closure or []
|
|
||||||
except AttributeError:
|
|
||||||
# Older versions of Python do not support closures.
|
|
||||||
closure = []
|
|
||||||
|
|
||||||
#xxx = [_object_contents(x.cell_contents) for x in closure]
|
#xxx = [_object_contents(x.cell_contents) for x in closure]
|
||||||
try:
|
try:
|
||||||
|
@ -946,7 +938,6 @@ class LazyAction(CommandGeneratorAction, CommandAction):
|
||||||
|
|
||||||
def __init__(self, var, kw):
|
def __init__(self, var, kw):
|
||||||
if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.LazyAction')
|
if SCons.Debug.track_instances: logInstanceCreation(self, 'Action.LazyAction')
|
||||||
#FUTURE CommandAction.__init__(self, '${'+var+'}', **kw)
|
|
||||||
CommandAction.__init__(self, '${'+var+'}', **kw)
|
CommandAction.__init__(self, '${'+var+'}', **kw)
|
||||||
self.var = SCons.Util.to_String(var)
|
self.var = SCons.Util.to_String(var)
|
||||||
self.gen_kw = kw
|
self.gen_kw = kw
|
|
@ -76,7 +76,7 @@ There are the following methods for internal use within this module:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Builder.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ def _node_errors(builder, env, tlist, slist):
|
||||||
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))
|
||||||
SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg)
|
SCons.Warnings.warn(SCons.Warnings.DuplicateEnvironmentWarning, msg)
|
||||||
else:
|
else:
|
||||||
msg = "Two environments with different actions were specified for the same target: %s" % t
|
msg = "Two environments with different actions were specified for the same target: %s\n(action 1: %s)\n(action 2: %s)" % (t,t_contents,contents)
|
||||||
raise UserError(msg)
|
raise UserError(msg)
|
||||||
if builder.multi:
|
if builder.multi:
|
||||||
if t.builder != builder:
|
if t.builder != builder:
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -21,17 +21,19 @@
|
||||||
# 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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/CacheDir.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
CacheDir support
|
CacheDir support
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os.path
|
import json
|
||||||
|
import os
|
||||||
import stat
|
import stat
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
|
import SCons.Warnings
|
||||||
|
|
||||||
cache_enabled = True
|
cache_enabled = True
|
||||||
cache_debug = False
|
cache_debug = False
|
||||||
|
@ -71,7 +73,8 @@ CacheRetrieve = SCons.Action.Action(CacheRetrieveFunc, CacheRetrieveString)
|
||||||
CacheRetrieveSilent = SCons.Action.Action(CacheRetrieveFunc, None)
|
CacheRetrieveSilent = SCons.Action.Action(CacheRetrieveFunc, None)
|
||||||
|
|
||||||
def CachePushFunc(target, source, env):
|
def CachePushFunc(target, source, env):
|
||||||
if cache_readonly: return
|
if cache_readonly:
|
||||||
|
return
|
||||||
|
|
||||||
t = target[0]
|
t = target[0]
|
||||||
if t.nocache:
|
if t.nocache:
|
||||||
|
@ -124,6 +127,10 @@ def CachePushFunc(target, source, env):
|
||||||
|
|
||||||
CachePush = SCons.Action.Action(CachePushFunc, None)
|
CachePush = SCons.Action.Action(CachePushFunc, None)
|
||||||
|
|
||||||
|
# Nasty hack to cut down to one warning for each cachedir path that needs
|
||||||
|
# upgrading.
|
||||||
|
warned = dict()
|
||||||
|
|
||||||
class CacheDir(object):
|
class CacheDir(object):
|
||||||
|
|
||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
|
@ -132,11 +139,63 @@ class CacheDir(object):
|
||||||
except ImportError:
|
except ImportError:
|
||||||
msg = "No hashlib or MD5 module available, CacheDir() not supported"
|
msg = "No hashlib or MD5 module available, CacheDir() not supported"
|
||||||
SCons.Warnings.warn(SCons.Warnings.NoMD5ModuleWarning, msg)
|
SCons.Warnings.warn(SCons.Warnings.NoMD5ModuleWarning, msg)
|
||||||
self.path = None
|
path = None
|
||||||
else:
|
self.path = path
|
||||||
self.path = path
|
|
||||||
self.current_cache_debug = None
|
self.current_cache_debug = None
|
||||||
self.debugFP = None
|
self.debugFP = None
|
||||||
|
self.config = dict()
|
||||||
|
if path is None:
|
||||||
|
return
|
||||||
|
# See if there's a config file in the cache directory. If there is,
|
||||||
|
# use it. If there isn't, and the directory exists and isn't empty,
|
||||||
|
# produce a warning. If the directory doesn't exist or is empty,
|
||||||
|
# write a config file.
|
||||||
|
config_file = os.path.join(path, 'config')
|
||||||
|
if not os.path.exists(config_file):
|
||||||
|
# A note: There is a race hazard here, if two processes start and
|
||||||
|
# attempt to create the cache directory at the same time. However,
|
||||||
|
# python doesn't really give you the option to do exclusive file
|
||||||
|
# creation (it doesn't even give you the option to error on opening
|
||||||
|
# an existing file for writing...). The ordering of events here
|
||||||
|
# as an attempt to alleviate this, on the basis that it's a pretty
|
||||||
|
# unlikely occurence (it'd require two builds with a brand new cache
|
||||||
|
# directory)
|
||||||
|
if os.path.isdir(path) and len(os.listdir(path)) != 0:
|
||||||
|
self.config['prefix_len'] = 1
|
||||||
|
# When building the project I was testing this on, the warning
|
||||||
|
# was output over 20 times. That seems excessive
|
||||||
|
global warned
|
||||||
|
if self.path not in warned:
|
||||||
|
msg = "Please upgrade your cache by running " +\
|
||||||
|
" scons-configure-cache.py " + self.path
|
||||||
|
SCons.Warnings.warn(SCons.Warnings.CacheVersionWarning, msg)
|
||||||
|
warned[self.path] = True
|
||||||
|
else:
|
||||||
|
if not os.path.isdir(path):
|
||||||
|
try:
|
||||||
|
os.makedirs(path)
|
||||||
|
except OSError:
|
||||||
|
# If someone else is trying to create the directory at
|
||||||
|
# the same time as me, bad things will happen
|
||||||
|
msg = "Failed to create cache directory " + path
|
||||||
|
raise SCons.Errors.EnvironmentError(msg)
|
||||||
|
|
||||||
|
self.config['prefix_len'] = 2
|
||||||
|
if not os.path.exists(config_file):
|
||||||
|
try:
|
||||||
|
with open(config_file, 'w') as config:
|
||||||
|
json.dump(self.config, config)
|
||||||
|
except:
|
||||||
|
msg = "Failed to write cache configuration for " + path
|
||||||
|
raise SCons.Errors.EnvironmentError(msg)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
with open(config_file) as config:
|
||||||
|
self.config = json.load(config)
|
||||||
|
except ValueError:
|
||||||
|
msg = "Failed to read cache configuration for " + path
|
||||||
|
raise SCons.Errors.EnvironmentError(msg)
|
||||||
|
|
||||||
|
|
||||||
def CacheDebug(self, fmt, target, cachefile):
|
def CacheDebug(self, fmt, target, cachefile):
|
||||||
if cache_debug != self.current_cache_debug:
|
if cache_debug != self.current_cache_debug:
|
||||||
|
@ -151,7 +210,7 @@ class CacheDir(object):
|
||||||
self.debugFP.write(fmt % (target, os.path.split(cachefile)[1]))
|
self.debugFP.write(fmt % (target, os.path.split(cachefile)[1]))
|
||||||
|
|
||||||
def is_enabled(self):
|
def is_enabled(self):
|
||||||
return (cache_enabled and not self.path is None)
|
return cache_enabled and not self.path is None
|
||||||
|
|
||||||
def is_readonly(self):
|
def is_readonly(self):
|
||||||
return cache_readonly
|
return cache_readonly
|
||||||
|
@ -163,7 +222,7 @@ class CacheDir(object):
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
sig = node.get_cachedir_bsig()
|
sig = node.get_cachedir_bsig()
|
||||||
subdir = sig[0].upper()
|
subdir = sig[:self.config['prefix_len']].upper()
|
||||||
dir = os.path.join(self.path, subdir)
|
dir = os.path.join(self.path, subdir)
|
||||||
return dir, os.path.join(dir, sig)
|
return dir, os.path.join(dir, sig)
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
"""SCons.Debug
|
"""SCons.Debug
|
||||||
|
|
||||||
Code for debugging SCons internal things. Shouldn't be
|
Code for debugging SCons internal things. Shouldn't be
|
||||||
needed by most users.
|
needed by most users. Quick shortcuts:
|
||||||
|
|
||||||
|
from SCons.Debug import caller_trace
|
||||||
|
caller_trace()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -28,7 +31,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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Debug.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
@ -137,8 +140,12 @@ def caller_stack():
|
||||||
caller_bases = {}
|
caller_bases = {}
|
||||||
caller_dicts = {}
|
caller_dicts = {}
|
||||||
|
|
||||||
# trace a caller's stack
|
|
||||||
def caller_trace(back=0):
|
def caller_trace(back=0):
|
||||||
|
"""
|
||||||
|
Trace caller stack and save info into global dicts, which
|
||||||
|
are printed automatically at the end of SCons execution.
|
||||||
|
"""
|
||||||
|
global caller_bases, caller_dicts
|
||||||
import traceback
|
import traceback
|
||||||
tb = traceback.extract_stack(limit=3+back)
|
tb = traceback.extract_stack(limit=3+back)
|
||||||
tb.reverse()
|
tb.reverse()
|
|
@ -10,7 +10,7 @@ from distutils.msvccompiler.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -33,7 +33,7 @@ from distutils.msvccompiler.
|
||||||
#
|
#
|
||||||
from __future__ import division
|
from __future__ import division
|
||||||
|
|
||||||
__revision__ = "src/engine/SCons/Defaults.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Defaults.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -169,15 +169,73 @@ def get_paths_str(dest):
|
||||||
else:
|
else:
|
||||||
return '"' + str(dest) + '"'
|
return '"' + str(dest) + '"'
|
||||||
|
|
||||||
|
permission_dic = {
|
||||||
|
'u':{
|
||||||
|
'r':stat.S_IRUSR,
|
||||||
|
'w':stat.S_IWUSR,
|
||||||
|
'x':stat.S_IXUSR
|
||||||
|
},
|
||||||
|
'g':{
|
||||||
|
'r':stat.S_IRGRP,
|
||||||
|
'w':stat.S_IWGRP,
|
||||||
|
'x':stat.S_IXGRP
|
||||||
|
},
|
||||||
|
'o':{
|
||||||
|
'r':stat.S_IROTH,
|
||||||
|
'w':stat.S_IWOTH,
|
||||||
|
'x':stat.S_IXOTH
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def chmod_func(dest, mode):
|
def chmod_func(dest, mode):
|
||||||
|
import SCons.Util
|
||||||
|
from string import digits
|
||||||
SCons.Node.FS.invalidate_node_memos(dest)
|
SCons.Node.FS.invalidate_node_memos(dest)
|
||||||
if not SCons.Util.is_List(dest):
|
if not SCons.Util.is_List(dest):
|
||||||
dest = [dest]
|
dest = [dest]
|
||||||
for element in dest:
|
if SCons.Util.is_String(mode) and not 0 in [i in digits for i in mode]:
|
||||||
os.chmod(str(element), mode)
|
mode = int(mode, 8)
|
||||||
|
if not SCons.Util.is_String(mode):
|
||||||
|
for element in dest:
|
||||||
|
os.chmod(str(element), mode)
|
||||||
|
else:
|
||||||
|
mode = str(mode)
|
||||||
|
for operation in mode.split(","):
|
||||||
|
if "=" in operation:
|
||||||
|
operator = "="
|
||||||
|
elif "+" in operation:
|
||||||
|
operator = "+"
|
||||||
|
elif "-" in operation:
|
||||||
|
operator = "-"
|
||||||
|
else:
|
||||||
|
raise SyntaxError("Could not find +, - or =")
|
||||||
|
operation_list = operation.split(operator)
|
||||||
|
if len(operation_list) is not 2:
|
||||||
|
raise SyntaxError("More than one operator found")
|
||||||
|
user = operation_list[0].strip().replace("a", "ugo")
|
||||||
|
permission = operation_list[1].strip()
|
||||||
|
new_perm = 0
|
||||||
|
for u in user:
|
||||||
|
for p in permission:
|
||||||
|
try:
|
||||||
|
new_perm = new_perm | permission_dic[u][p]
|
||||||
|
except KeyError:
|
||||||
|
raise SyntaxError("Unrecognized user or permission format")
|
||||||
|
for element in dest:
|
||||||
|
curr_perm = os.stat(str(element)).st_mode
|
||||||
|
if operator == "=":
|
||||||
|
os.chmod(str(element), new_perm)
|
||||||
|
elif operator == "+":
|
||||||
|
os.chmod(str(element), curr_perm | new_perm)
|
||||||
|
elif operator == "-":
|
||||||
|
os.chmod(str(element), curr_perm & ~new_perm)
|
||||||
|
|
||||||
def chmod_strfunc(dest, mode):
|
def chmod_strfunc(dest, mode):
|
||||||
return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode)
|
import SCons.Util
|
||||||
|
if not SCons.Util.is_String(mode):
|
||||||
|
return 'Chmod(%s, 0%o)' % (get_paths_str(dest), mode)
|
||||||
|
else:
|
||||||
|
return 'Chmod(%s, "%s")' % (get_paths_str(dest), str(mode))
|
||||||
|
|
||||||
Chmod = ActionFactory(chmod_func, chmod_strfunc)
|
Chmod = ActionFactory(chmod_func, chmod_strfunc)
|
||||||
|
|
||||||
|
@ -493,7 +551,7 @@ def __libversionflags(env, version_var, flags_var):
|
||||||
|
|
||||||
ConstructionEnvironment = {
|
ConstructionEnvironment = {
|
||||||
'BUILDERS' : {},
|
'BUILDERS' : {},
|
||||||
'SCANNERS' : [],
|
'SCANNERS' : [ SCons.Tool.SourceFileScanner ],
|
||||||
'CONFIGUREDIR' : '#/.sconf_temp',
|
'CONFIGUREDIR' : '#/.sconf_temp',
|
||||||
'CONFIGURELOG' : '#/config.log',
|
'CONFIGURELOG' : '#/config.log',
|
||||||
'CPPSUFFIXES' : SCons.Tool.CSuffixes,
|
'CPPSUFFIXES' : SCons.Tool.CSuffixes,
|
|
@ -10,7 +10,7 @@ Environment
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Environment.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
@ -857,25 +857,6 @@ class SubstitutionEnvironment(object):
|
||||||
self[key] = t
|
self[key] = t
|
||||||
return self
|
return self
|
||||||
|
|
||||||
# def MergeShellPaths(self, args, prepend=1):
|
|
||||||
# """
|
|
||||||
# Merge the dict in args into the shell environment in env['ENV'].
|
|
||||||
# Shell path elements are appended or prepended according to prepend.
|
|
||||||
|
|
||||||
# Uses Pre/AppendENVPath, so it always appends or prepends uniquely.
|
|
||||||
|
|
||||||
# Example: env.MergeShellPaths({'LIBPATH': '/usr/local/lib'})
|
|
||||||
# prepends /usr/local/lib to env['ENV']['LIBPATH'].
|
|
||||||
# """
|
|
||||||
|
|
||||||
# for pathname, pathval in args.items():
|
|
||||||
# if not pathval:
|
|
||||||
# continue
|
|
||||||
# if prepend:
|
|
||||||
# self.PrependENVPath(pathname, pathval)
|
|
||||||
# else:
|
|
||||||
# self.AppendENVPath(pathname, pathval)
|
|
||||||
|
|
||||||
|
|
||||||
def default_decide_source(dependency, target, prev_ni):
|
def default_decide_source(dependency, target, prev_ni):
|
||||||
f = SCons.Defaults.DefaultEnvironment().decide_source
|
f = SCons.Defaults.DefaultEnvironment().decide_source
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -28,7 +28,7 @@ and user errors in SCons.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__revision__ = "src/engine/SCons/Errors.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Errors.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Util
|
import SCons.Util
|
||||||
|
|
|
@ -6,7 +6,7 @@ Nodes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Executor.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
|
|
||||||
|
@ -122,7 +122,6 @@ def execute_action_list(obj, target, kw):
|
||||||
kw = obj.get_kw(kw)
|
kw = obj.get_kw(kw)
|
||||||
status = 0
|
status = 0
|
||||||
for act in obj.get_action_list():
|
for act in obj.get_action_list():
|
||||||
#args = (self.get_all_targets(), self.get_all_sources(), env)
|
|
||||||
args = ([], [], env)
|
args = ([], [], env)
|
||||||
status = act(*args, **kw)
|
status = act(*args, **kw)
|
||||||
if isinstance(status, SCons.Errors.BuildError):
|
if isinstance(status, SCons.Errors.BuildError):
|
||||||
|
@ -218,7 +217,9 @@ class Executor(object):
|
||||||
us = []
|
us = []
|
||||||
ut = []
|
ut = []
|
||||||
for b in self.batches:
|
for b in self.batches:
|
||||||
if b.targets[0].is_up_to_date():
|
# don't add targets marked always build to unchanged lists
|
||||||
|
# add to changed list as they always need to build
|
||||||
|
if not b.targets[0].always_build and b.targets[0].is_up_to_date():
|
||||||
us.extend(list(map(rfile, b.sources)))
|
us.extend(list(map(rfile, b.sources)))
|
||||||
ut.extend(b.targets)
|
ut.extend(b.targets)
|
||||||
else:
|
else:
|
||||||
|
@ -244,14 +245,12 @@ class Executor(object):
|
||||||
return self._changed_targets_list
|
return self._changed_targets_list
|
||||||
|
|
||||||
def _get_source(self, *args, **kw):
|
def _get_source(self, *args, **kw):
|
||||||
#return SCons.Util.NodeList([rfile(self.batches[0].sources[0]).get_subst_proxy()])
|
|
||||||
return rfile(self.batches[0].sources[0]).get_subst_proxy()
|
return rfile(self.batches[0].sources[0]).get_subst_proxy()
|
||||||
|
|
||||||
def _get_sources(self, *args, **kw):
|
def _get_sources(self, *args, **kw):
|
||||||
return SCons.Util.NodeList([rfile(n).get_subst_proxy() for n in self.get_all_sources()])
|
return SCons.Util.NodeList([rfile(n).get_subst_proxy() for n in self.get_all_sources()])
|
||||||
|
|
||||||
def _get_target(self, *args, **kw):
|
def _get_target(self, *args, **kw):
|
||||||
#return SCons.Util.NodeList([self.batches[0].targets[0].get_subst_proxy()])
|
|
||||||
return self.batches[0].targets[0].get_subst_proxy()
|
return self.batches[0].targets[0].get_subst_proxy()
|
||||||
|
|
||||||
def _get_targets(self, *args, **kw):
|
def _get_targets(self, *args, **kw):
|
||||||
|
@ -486,29 +485,15 @@ class Executor(object):
|
||||||
each individual target, which is a hell of a lot more efficient.
|
each individual target, which is a hell of a lot more efficient.
|
||||||
"""
|
"""
|
||||||
env = self.get_build_env()
|
env = self.get_build_env()
|
||||||
|
path = self.get_build_scanner_path
|
||||||
|
kw = self.get_kw()
|
||||||
|
|
||||||
# TODO(batch): scan by batches)
|
# TODO(batch): scan by batches)
|
||||||
deps = []
|
deps = []
|
||||||
if scanner:
|
|
||||||
for node in node_list:
|
for node in node_list:
|
||||||
node.disambiguate()
|
node.disambiguate()
|
||||||
s = scanner.select(node)
|
deps.extend(node.get_implicit_deps(env, scanner, path, kw))
|
||||||
if not s:
|
|
||||||
continue
|
|
||||||
path = self.get_build_scanner_path(s)
|
|
||||||
deps.extend(node.get_implicit_deps(env, s, path))
|
|
||||||
else:
|
|
||||||
kw = self.get_kw()
|
|
||||||
for node in node_list:
|
|
||||||
node.disambiguate()
|
|
||||||
scanner = node.get_env_scanner(env, kw)
|
|
||||||
if not scanner:
|
|
||||||
continue
|
|
||||||
scanner = scanner.select(node)
|
|
||||||
if not scanner:
|
|
||||||
continue
|
|
||||||
path = self.get_build_scanner_path(scanner)
|
|
||||||
deps.extend(node.get_implicit_deps(env, scanner, path))
|
|
||||||
|
|
||||||
deps.extend(self.get_implicit_deps())
|
deps.extend(self.get_implicit_deps())
|
||||||
|
|
|
@ -7,7 +7,7 @@ stop, and wait on jobs.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Job.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ class Jobs(object):
|
||||||
|
|
||||||
def __init__(self, num, taskmaster):
|
def __init__(self, num, taskmaster):
|
||||||
"""
|
"""
|
||||||
create 'num' jobs using the given taskmaster.
|
Create 'num' jobs using the given taskmaster.
|
||||||
|
|
||||||
If 'num' is 1 or less, then a serial job will be used,
|
If 'num' is 1 or less, then a serial job will be used,
|
||||||
otherwise a parallel job with 'num' worker threads will
|
otherwise a parallel job with 'num' worker threads will
|
||||||
|
@ -126,10 +126,10 @@ class Jobs(object):
|
||||||
c) SIGHUP: Controlling shell exiting
|
c) SIGHUP: Controlling shell exiting
|
||||||
|
|
||||||
We handle all of these cases by stopping the taskmaster. It
|
We handle all of these cases by stopping the taskmaster. It
|
||||||
turns out that it very difficult to stop the build process
|
turns out that it's very difficult to stop the build process
|
||||||
by throwing asynchronously an exception such as
|
by throwing asynchronously an exception such as
|
||||||
KeyboardInterrupt. For example, the python Condition
|
KeyboardInterrupt. For example, the python Condition
|
||||||
variables (threading.Condition) and queue's do not seem to
|
variables (threading.Condition) and queues do not seem to be
|
||||||
asynchronous-exception-safe. It would require adding a whole
|
asynchronous-exception-safe. It would require adding a whole
|
||||||
bunch of try/finally block and except KeyboardInterrupt all
|
bunch of try/finally block and except KeyboardInterrupt all
|
||||||
over the place.
|
over the place.
|
||||||
|
@ -177,7 +177,7 @@ class Serial(object):
|
||||||
The taskmaster's next_task() method should return the next task
|
The taskmaster's next_task() method should return the next task
|
||||||
that needs to be executed, or None if there are no more tasks. The
|
that needs to be executed, or None if there are no more tasks. The
|
||||||
taskmaster's executed() method will be called for each task when it
|
taskmaster's executed() method will be called for each task when it
|
||||||
is successfully executed or failed() will be called if it failed to
|
is successfully executed, or failed() will be called if it failed to
|
||||||
execute (e.g. execute() raised an exception)."""
|
execute (e.g. execute() raised an exception)."""
|
||||||
|
|
||||||
self.taskmaster = taskmaster
|
self.taskmaster = taskmaster
|
||||||
|
@ -351,7 +351,7 @@ else:
|
||||||
The taskmaster's next_task() method should return the next
|
The taskmaster's next_task() method should return the next
|
||||||
task that needs to be executed, or None if there are no more
|
task that needs to be executed, or None if there are no more
|
||||||
tasks. The taskmaster's executed() method will be called
|
tasks. The taskmaster's executed() method will be called
|
||||||
for each task when it is successfully executed or failed()
|
for each task when it is successfully executed, or failed()
|
||||||
will be called if the task failed to execute (i.e. execute()
|
will be called if the task failed to execute (i.e. execute()
|
||||||
raised an exception).
|
raised an exception).
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Memoize.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Memoizer
|
__doc__ = """Memoizer
|
||||||
|
|
|
@ -8,7 +8,7 @@ This creates a hash of global Aliases (dummy targets).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Node/Alias.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
|
|
|
@ -11,7 +11,7 @@ that can be used by scripts or modules looking for the canonical default.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Node/FS.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import fnmatch
|
import fnmatch
|
||||||
import os
|
import os
|
||||||
|
@ -186,7 +186,7 @@ needs_normpath_check = re.compile(
|
||||||
# We need to renormalize the path if it contains a '.'
|
# We need to renormalize the path if it contains a '.'
|
||||||
# directory, but NOT if it is a single '.' '/' characters. We
|
# directory, but NOT if it is a single '.' '/' characters. We
|
||||||
# do not want to match a single '.' because this case is checked
|
# do not want to match a single '.' because this case is checked
|
||||||
# for explicitely since this is common enough case.
|
# for explicitly since this is common enough case.
|
||||||
#
|
#
|
||||||
# Note that we check for all the following cases:
|
# Note that we check for all the following cases:
|
||||||
#
|
#
|
||||||
|
@ -1165,15 +1165,6 @@ class LocalFS(object):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
#class RemoteFS:
|
|
||||||
# # Skeleton for the obvious methods we might need from the
|
|
||||||
# # abstraction layer for a remote filesystem.
|
|
||||||
# def upload(self, local_src, remote_dst):
|
|
||||||
# pass
|
|
||||||
# def download(self, remote_src, local_dst):
|
|
||||||
# pass
|
|
||||||
|
|
||||||
|
|
||||||
class FS(LocalFS):
|
class FS(LocalFS):
|
||||||
|
|
||||||
def __init__(self, path = None):
|
def __init__(self, path = None):
|
||||||
|
@ -2234,7 +2225,6 @@ class Dir(Base):
|
||||||
# the overall list will also be filtered later,
|
# the overall list will also be filtered later,
|
||||||
# after we exit this loop.
|
# after we exit this loop.
|
||||||
if pattern[0] != '.':
|
if pattern[0] != '.':
|
||||||
#disk_names = [ d for d in disk_names if d[0] != '.' ]
|
|
||||||
disk_names = [x for x in disk_names if x[0] != '.']
|
disk_names = [x for x in disk_names if x[0] != '.']
|
||||||
disk_names = fnmatch.filter(disk_names, pattern)
|
disk_names = fnmatch.filter(disk_names, pattern)
|
||||||
dirEntry = dir.Entry
|
dirEntry = dir.Entry
|
||||||
|
@ -2627,13 +2617,6 @@ class File(Base):
|
||||||
the directory of this file."""
|
the directory of this file."""
|
||||||
return self.dir.File(name)
|
return self.dir.File(name)
|
||||||
|
|
||||||
#def generate_build_dict(self):
|
|
||||||
# """Return an appropriate dictionary of values for building
|
|
||||||
# this File."""
|
|
||||||
# return {'Dir' : self.Dir,
|
|
||||||
# 'File' : self.File,
|
|
||||||
# 'RDirs' : self.RDirs}
|
|
||||||
|
|
||||||
def _morph(self):
|
def _morph(self):
|
||||||
"""Turn a file system node into a File object."""
|
"""Turn a file system node into a File object."""
|
||||||
self.scanner_paths = {}
|
self.scanner_paths = {}
|
||||||
|
@ -2907,9 +2890,7 @@ class File(Base):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if scanner:
|
if scanner:
|
||||||
# result = [n.disambiguate() for n in scanner(self, env, path)]
|
result = [n.disambiguate() for n in scanner(self, env, path)]
|
||||||
result = scanner(self, env, path)
|
|
||||||
result = [N.disambiguate() for N in result]
|
|
||||||
else:
|
else:
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
|
@ -3519,36 +3500,6 @@ class FileFinder(object):
|
||||||
|
|
||||||
filedir, filename = os.path.split(filename)
|
filedir, filename = os.path.split(filename)
|
||||||
if filedir:
|
if filedir:
|
||||||
# More compact code that we can't use until we drop
|
|
||||||
# support for Python 1.5.2:
|
|
||||||
#
|
|
||||||
#def filedir_lookup(p, fd=filedir):
|
|
||||||
# """
|
|
||||||
# A helper function that looks up a directory for a file
|
|
||||||
# we're trying to find. This only creates the Dir Node
|
|
||||||
# if it exists on-disk, since if the directory doesn't
|
|
||||||
# exist we know we won't find any files in it... :-)
|
|
||||||
# """
|
|
||||||
# dir, name = os.path.split(fd)
|
|
||||||
# if dir:
|
|
||||||
# p = filedir_lookup(p, dir)
|
|
||||||
# if not p:
|
|
||||||
# return None
|
|
||||||
# norm_name = _my_normcase(name)
|
|
||||||
# try:
|
|
||||||
# node = p.entries[norm_name]
|
|
||||||
# except KeyError:
|
|
||||||
# return p.dir_on_disk(name)
|
|
||||||
# if isinstance(node, Dir):
|
|
||||||
# return node
|
|
||||||
# if isinstance(node, Entry):
|
|
||||||
# node.must_be_same(Dir)
|
|
||||||
# return node
|
|
||||||
# if isinstance(node, Dir) or isinstance(node, Entry):
|
|
||||||
# return node
|
|
||||||
# return None
|
|
||||||
#paths = [_f for _f in map(filedir_lookup, paths) if _f]
|
|
||||||
|
|
||||||
self.default_filedir = filedir
|
self.default_filedir = filedir
|
||||||
paths = [_f for _f in map(self.filedir_lookup, paths) if _f]
|
paths = [_f for _f in map(self.filedir_lookup, paths) if _f]
|
||||||
|
|
|
@ -5,7 +5,7 @@ Python nodes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Node/Python.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node
|
import SCons.Node
|
||||||
|
|
|
@ -20,7 +20,7 @@ be able to depend on any other type of "thing."
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Node/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import copy
|
import copy
|
||||||
|
@ -916,34 +916,55 @@ class Node(object):
|
||||||
"""
|
"""
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def get_implicit_deps(self, env, scanner, path):
|
def get_implicit_deps(self, env, initial_scanner, path_func, kw = {}):
|
||||||
"""Return a list of implicit dependencies for this node.
|
"""Return a list of implicit dependencies for this node.
|
||||||
|
|
||||||
This method exists to handle recursive invocation of the scanner
|
This method exists to handle recursive invocation of the scanner
|
||||||
on the implicit dependencies returned by the scanner, if the
|
on the implicit dependencies returned by the scanner, if the
|
||||||
scanner's recursive flag says that we should.
|
scanner's recursive flag says that we should.
|
||||||
"""
|
"""
|
||||||
if not scanner:
|
|
||||||
return []
|
|
||||||
|
|
||||||
# Give the scanner a chance to select a more specific scanner
|
|
||||||
# for this Node.
|
|
||||||
#scanner = scanner.select(self)
|
|
||||||
|
|
||||||
nodes = [self]
|
nodes = [self]
|
||||||
seen = {}
|
seen = {}
|
||||||
seen[self] = 1
|
seen[self] = 1
|
||||||
deps = []
|
dependencies = []
|
||||||
while nodes:
|
|
||||||
n = nodes.pop(0)
|
|
||||||
d = [x for x in n.get_found_includes(env, scanner, path) if x not in seen]
|
|
||||||
if d:
|
|
||||||
deps.extend(d)
|
|
||||||
for n in d:
|
|
||||||
seen[n] = 1
|
|
||||||
nodes.extend(scanner.recurse_nodes(d))
|
|
||||||
|
|
||||||
return deps
|
root_node_scanner = self._get_scanner(env, initial_scanner, None, kw)
|
||||||
|
|
||||||
|
while nodes:
|
||||||
|
node = nodes.pop(0)
|
||||||
|
|
||||||
|
scanner = node._get_scanner(env, initial_scanner, root_node_scanner, kw)
|
||||||
|
|
||||||
|
if not scanner:
|
||||||
|
continue
|
||||||
|
|
||||||
|
path = path_func(scanner)
|
||||||
|
|
||||||
|
included_deps = [x for x in node.get_found_includes(env, scanner, path) if x not in seen]
|
||||||
|
if included_deps:
|
||||||
|
dependencies.extend(included_deps)
|
||||||
|
for dep in included_deps:
|
||||||
|
seen[dep] = 1
|
||||||
|
nodes.extend(scanner.recurse_nodes(included_deps))
|
||||||
|
|
||||||
|
return dependencies
|
||||||
|
|
||||||
|
def _get_scanner(self, env, initial_scanner, root_node_scanner, kw):
|
||||||
|
if not initial_scanner:
|
||||||
|
# handle implicit scanner case
|
||||||
|
scanner = self.get_env_scanner(env, kw)
|
||||||
|
if scanner:
|
||||||
|
scanner = scanner.select(self)
|
||||||
|
else:
|
||||||
|
# handle explicit scanner case
|
||||||
|
scanner = initial_scanner.select(self)
|
||||||
|
|
||||||
|
if not scanner:
|
||||||
|
# no scanner could be found for the given node's scanner key;
|
||||||
|
# thus, make an attempt at using a default.
|
||||||
|
scanner = root_node_scanner
|
||||||
|
|
||||||
|
return scanner
|
||||||
|
|
||||||
def get_env_scanner(self, env, kw={}):
|
def get_env_scanner(self, env, kw={}):
|
||||||
return env.get_scanner(self.scanner_key())
|
return env.get_scanner(self.scanner_key())
|
||||||
|
@ -1260,11 +1281,6 @@ class Node(object):
|
||||||
def _add_child(self, collection, set, child):
|
def _add_child(self, collection, set, child):
|
||||||
"""Adds 'child' to 'collection', first checking 'set' to see if it's
|
"""Adds 'child' to 'collection', first checking 'set' to see if it's
|
||||||
already present."""
|
already present."""
|
||||||
#if type(child) is not type([]):
|
|
||||||
# child = [child]
|
|
||||||
#for c in child:
|
|
||||||
# if not isinstance(c, Node):
|
|
||||||
# raise TypeError, c
|
|
||||||
added = None
|
added = None
|
||||||
for c in child:
|
for c in child:
|
||||||
if c not in set:
|
if c not in set:
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/BoolOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/EnumOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/ListOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/PackageOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/PathOption.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Options/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -21,13 +21,13 @@
|
||||||
# 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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/PathList.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """SCons.PathList
|
__doc__ = """SCons.PathList
|
||||||
|
|
||||||
A module for handling lists of directory paths (the sort of things
|
A module for handling lists of directory paths (the sort of things
|
||||||
that get set as CPPPATH, LIBPATH, etc.) with as much caching of data and
|
that get set as CPPPATH, LIBPATH, etc.) with as much caching of data and
|
||||||
efficiency as we can while still keeping the evaluation delayed so that we
|
efficiency as we can, while still keeping the evaluation delayed so that we
|
||||||
Do the Right Thing (almost) regardless of how the variable is specified.
|
Do the Right Thing (almost) regardless of how the variable is specified.
|
||||||
|
|
||||||
"""
|
"""
|
|
@ -12,7 +12,7 @@ environment. Consequently, we'll examine both sys.platform and os.name
|
||||||
(and anything else that might come in to play) in order to return some
|
(and anything else that might come in to play) in order to return some
|
||||||
specification which is unique enough for our purposes.
|
specification which is unique enough for our purposes.
|
||||||
|
|
||||||
Note that because this subsysem just *selects* a callable that can
|
Note that because this subsystem just *selects* a callable that can
|
||||||
modify a construction environment, it's possible for people to define
|
modify a construction environment, it's possible for people to define
|
||||||
their own "platform specification" in an arbitrary callable function.
|
their own "platform specification" in an arbitrary callable function.
|
||||||
No one needs to use or tie in to this subsystem in order to roll
|
No one needs to use or tie in to this subsystem in order to roll
|
||||||
|
@ -20,7 +20,7 @@ their own platform definition.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/aix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/cygwin.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import posix
|
import posix
|
||||||
from SCons.Platform import TempFileMunge
|
from SCons.Platform import TempFileMunge
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/darwin.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import posix
|
import posix
|
||||||
import os
|
import os
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/hpux.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import posix
|
import posix
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/irix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import posix
|
import posix
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/os2.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
import win32
|
import win32
|
||||||
|
|
||||||
def generate(env):
|
def generate(env):
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/posix.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
import os
|
import os
|
||||||
|
@ -50,14 +50,16 @@ exitvalmap = {
|
||||||
def escape(arg):
|
def escape(arg):
|
||||||
"escape shell special characters"
|
"escape shell special characters"
|
||||||
slash = '\\'
|
slash = '\\'
|
||||||
special = '"$()'
|
special = '"$'
|
||||||
|
|
||||||
arg = arg.replace(slash, slash+slash)
|
arg = arg.replace(slash, slash+slash)
|
||||||
for c in special:
|
for c in special:
|
||||||
arg = arg.replace(c, slash+c)
|
arg = arg.replace(c, slash+c)
|
||||||
|
|
||||||
|
# print "ESCAPE RESULT: %s"%arg
|
||||||
return '"' + arg + '"'
|
return '"' + arg + '"'
|
||||||
|
|
||||||
|
|
||||||
def exec_subprocess(l, env):
|
def exec_subprocess(l, env):
|
||||||
proc = subprocess.Popen(l, env = env, close_fds = True)
|
proc = subprocess.Popen(l, env = env, close_fds = True)
|
||||||
return proc.wait()
|
return proc.wait()
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/sunos.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import posix
|
import posix
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Platform/win32.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -60,10 +60,8 @@ except AttributeError:
|
||||||
else:
|
else:
|
||||||
parallel_msg = None
|
parallel_msg = None
|
||||||
|
|
||||||
import builtins
|
_builtin_file = file
|
||||||
|
_builtin_open = open
|
||||||
_builtin_file = builtins.file
|
|
||||||
_builtin_open = builtins.open
|
|
||||||
|
|
||||||
class _scons_file(_builtin_file):
|
class _scons_file(_builtin_file):
|
||||||
def __init__(self, *args, **kw):
|
def __init__(self, *args, **kw):
|
||||||
|
@ -78,8 +76,8 @@ else:
|
||||||
0)
|
0)
|
||||||
return fp
|
return fp
|
||||||
|
|
||||||
builtins.file = _scons_file
|
file = _scons_file
|
||||||
builtins.open = _scons_open
|
open = _scons_open
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import threading
|
import threading
|
|
@ -12,7 +12,7 @@ libraries are installed, if some command line options are supported etc.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/SConf.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
|
||||||
|
@ -254,14 +254,7 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
||||||
else:
|
else:
|
||||||
self.display('Caught exception while building "%s":\n' %
|
self.display('Caught exception while building "%s":\n' %
|
||||||
self.targets[0])
|
self.targets[0])
|
||||||
try:
|
sys.excepthook(*self.exc_info())
|
||||||
excepthook = sys.excepthook
|
|
||||||
except AttributeError:
|
|
||||||
# Earlier versions of Python don't have sys.excepthook...
|
|
||||||
def excepthook(type, value, tb):
|
|
||||||
traceback.print_tb(tb)
|
|
||||||
print type, value
|
|
||||||
excepthook(*self.exc_info())
|
|
||||||
return SCons.Taskmaster.Task.failed(self)
|
return SCons.Taskmaster.Task.failed(self)
|
||||||
|
|
||||||
def collect_node_states(self):
|
def collect_node_states(self):
|
||||||
|
@ -355,8 +348,6 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
||||||
raise SCons.Errors.ExplicitExit(self.targets[0],exc_value.code)
|
raise SCons.Errors.ExplicitExit(self.targets[0],exc_value.code)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
for t in self.targets:
|
for t in self.targets:
|
||||||
#binfo = t.get_binfo()
|
|
||||||
#binfo.__class__ = SConfBuildInfo
|
|
||||||
binfo = SConfBuildInfo()
|
binfo = SConfBuildInfo()
|
||||||
binfo.merge(t.get_binfo())
|
binfo.merge(t.get_binfo())
|
||||||
binfo.set_build_result(1, s.getvalue())
|
binfo.set_build_result(1, s.getvalue())
|
||||||
|
@ -375,8 +366,6 @@ class SConfBuildTask(SCons.Taskmaster.AlwaysTask):
|
||||||
raise e
|
raise e
|
||||||
else:
|
else:
|
||||||
for t in self.targets:
|
for t in self.targets:
|
||||||
#binfo = t.get_binfo()
|
|
||||||
#binfo.__class__ = SConfBuildInfo
|
|
||||||
binfo = SConfBuildInfo()
|
binfo = SConfBuildInfo()
|
||||||
binfo.merge(t.get_binfo())
|
binfo.merge(t.get_binfo())
|
||||||
binfo.set_build_result(0, s.getvalue())
|
binfo.set_build_result(0, s.getvalue())
|
||||||
|
@ -399,16 +388,16 @@ class SConfBase(object):
|
||||||
tests, be sure to call the Finish() method, which returns the modified
|
tests, be sure to call the Finish() method, which returns the modified
|
||||||
environment.
|
environment.
|
||||||
Some words about caching: In most cases, it is not necessary to cache
|
Some words about caching: In most cases, it is not necessary to cache
|
||||||
Test results explicitely. Instead, we use the scons dependency checking
|
Test results explicitly. Instead, we use the scons dependency checking
|
||||||
mechanism. For example, if one wants to compile a test program
|
mechanism. For example, if one wants to compile a test program
|
||||||
(SConf.TryLink), the compiler is only called, if the program dependencies
|
(SConf.TryLink), the compiler is only called, if the program dependencies
|
||||||
have changed. However, if the program could not be compiled in a former
|
have changed. However, if the program could not be compiled in a former
|
||||||
SConf run, we need to explicitely cache this error.
|
SConf run, we need to explicitly cache this error.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, env, custom_tests = {}, conf_dir='$CONFIGUREDIR',
|
def __init__(self, env, custom_tests = {}, conf_dir='$CONFIGUREDIR',
|
||||||
log_file='$CONFIGURELOG', config_h = None, _depth = 0):
|
log_file='$CONFIGURELOG', config_h = None, _depth = 0):
|
||||||
"""Constructor. Pass additional tests in the custom_tests-dictinary,
|
"""Constructor. Pass additional tests in the custom_tests-dictionary,
|
||||||
e.g. custom_tests={'CheckPrivate':MyPrivateTest}, where MyPrivateTest
|
e.g. custom_tests={'CheckPrivate':MyPrivateTest}, where MyPrivateTest
|
||||||
defines a custom test.
|
defines a custom test.
|
||||||
Note also the conf_dir and log_file arguments (you may want to
|
Note also the conf_dir and log_file arguments (you may want to
|
||||||
|
@ -766,10 +755,10 @@ class CheckContext(object):
|
||||||
A typical test is just a callable with an instance of CheckContext as
|
A typical test is just a callable with an instance of CheckContext as
|
||||||
first argument:
|
first argument:
|
||||||
|
|
||||||
def CheckCustom(context, ...)
|
def CheckCustom(context, ...):
|
||||||
context.Message('Checking my weird test ... ')
|
context.Message('Checking my weird test ... ')
|
||||||
ret = myWeirdTestFunction(...)
|
ret = myWeirdTestFunction(...)
|
||||||
context.Result(ret)
|
context.Result(ret)
|
||||||
|
|
||||||
Often, myWeirdTestFunction will be one of
|
Often, myWeirdTestFunction will be one of
|
||||||
context.TryCompile/context.TryLink/context.TryRun. The results of
|
context.TryCompile/context.TryLink/context.TryRun. The results of
|
|
@ -5,7 +5,7 @@ Writing and reading information to the .sconsign file or files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/SConsign.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
"""SCons.Scanner.C
|
"""SCons.Scanner.C
|
||||||
|
|
||||||
This module implements the depenency scanner for C/C++ code.
|
This module implements the dependency scanner for C/C++ code.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/C.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
import SCons.Scanner
|
import SCons.Scanner
|
|
@ -8,7 +8,7 @@ Coded by Andy Friesen
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/D.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/Dir.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
import SCons.Scanner
|
import SCons.Scanner
|
|
@ -5,7 +5,7 @@ This module implements the dependency scanner for Fortran code.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/Fortran.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
"""SCons.Scanner.IDL
|
"""SCons.Scanner.IDL
|
||||||
|
|
||||||
This module implements the depenency scanner for IDL (Interface
|
This module implements the dependency scanner for IDL (Interface
|
||||||
Definition Language) files.
|
Definition Language) files.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/IDL.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
import SCons.Scanner
|
import SCons.Scanner
|
|
@ -5,7 +5,7 @@ This module implements the dependency scanner for LaTeX code.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/LaTeX.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
import re
|
import re
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/Prog.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node
|
import SCons.Node
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
|
@ -1,12 +1,12 @@
|
||||||
"""SCons.Scanner.RC
|
"""SCons.Scanner.RC
|
||||||
|
|
||||||
This module implements the depenency scanner for RC (Interface
|
This module implements the dependency scanner for RC (Interface
|
||||||
Definition Language) files.
|
Definition Language) files.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/RC.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
import SCons.Scanner
|
import SCons.Scanner
|
|
@ -1,5 +1,11 @@
|
||||||
|
"""SCons.Scanner.SWIG
|
||||||
|
|
||||||
|
This module implements the dependency scanner for SWIG code.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -21,22 +27,16 @@
|
||||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
#
|
#
|
||||||
|
|
||||||
__doc__ = """
|
__revision__ = "src/engine/SCons/Scanner/SWIG.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
io compatibility module for older (pre-2.6) Python versions
|
|
||||||
|
|
||||||
This does not not NOT (repeat, *NOT*) provide complete io
|
import SCons.Scanner
|
||||||
functionality. It only wraps the portions of io functionality used
|
|
||||||
by SCons, in an interface that looks enough like io for our purposes.
|
|
||||||
"""
|
|
||||||
|
|
||||||
__revision__ = "src/engine/SCons/compat/_scons_io.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
SWIGSuffixes = [ '.i' ]
|
||||||
|
|
||||||
# Use the "imp" module to protect the imports below from fixers.
|
def SWIGScanner():
|
||||||
import imp
|
expr = '^[ \t]*%[ \t]*(?:include|import|extern)[ \t]*(<|"?)([^>\s"]+)(?:>|"?)'
|
||||||
|
scanner = SCons.Scanner.ClassicCPP("SWIGScanner", ".i", "SWIGPATH", expr)
|
||||||
_cStringIO = imp.load_module('cStringIO', *imp.find_module('cStringIO'))
|
return scanner
|
||||||
StringIO = _cStringIO.StringIO
|
|
||||||
del _cStringIO
|
|
||||||
|
|
||||||
# Local Variables:
|
# Local Variables:
|
||||||
# tab-width:4
|
# tab-width:4
|
|
@ -5,7 +5,7 @@ The Scanner package for the SCons software construction utility.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Scanner/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Script/Interactive.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
SCons interactive mode
|
SCons interactive mode
|
||||||
|
@ -304,14 +304,8 @@ class SConsInteractiveCmd(cmd.Cmd):
|
||||||
return self._strip_initial_spaces(doc)
|
return self._strip_initial_spaces(doc)
|
||||||
|
|
||||||
def _strip_initial_spaces(self, s):
|
def _strip_initial_spaces(self, s):
|
||||||
#lines = s.split('\n')
|
|
||||||
lines = s.split('\n')
|
lines = s.split('\n')
|
||||||
spaces = re.match(' *', lines[0]).group(0)
|
spaces = re.match(' *', lines[0]).group(0)
|
||||||
#def strip_spaces(l):
|
|
||||||
# if l.startswith(spaces):
|
|
||||||
# l = l[len(spaces):]
|
|
||||||
# return l
|
|
||||||
#return '\n'.join([ strip_spaces(l) for l in lines ])
|
|
||||||
def strip_spaces(l, spaces=spaces):
|
def strip_spaces(l, spaces=spaces):
|
||||||
if l[:len(spaces)] == spaces:
|
if l[:len(spaces)] == spaces:
|
||||||
l = l[len(spaces):]
|
l = l[len(spaces):]
|
|
@ -10,10 +10,10 @@ some other module. If it's specific to the "scons" script invocation,
|
||||||
it goes here.
|
it goes here.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
unsupported_python_version = (2, 3, 0)
|
unsupported_python_version = (2, 6, 0)
|
||||||
deprecated_python_version = (2, 7, 0)
|
deprecated_python_version = (2, 7, 0)
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Script/Main.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.compat
|
import SCons.compat
|
||||||
|
|
||||||
|
@ -43,15 +43,6 @@ import sys
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
# Strip the script directory from sys.path() so on case-insensitive
|
|
||||||
# (Windows) systems Python doesn't think that the "scons" script is the
|
|
||||||
# "SCons" package. Replace it with our own version directory so, if
|
|
||||||
# if they're there, we pick up the right version of the build engine
|
|
||||||
# modules.
|
|
||||||
#sys.path = [os.path.join(sys.prefix,
|
|
||||||
# 'lib',
|
|
||||||
# 'scons-%d' % SCons.__version__)] + sys.path[1:]
|
|
||||||
|
|
||||||
import SCons.CacheDir
|
import SCons.CacheDir
|
||||||
import SCons.Debug
|
import SCons.Debug
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
|
@ -74,7 +65,7 @@ def fetch_win32_parallel_msg():
|
||||||
# so we don't have to pull it in on all platforms, and so that an
|
# so we don't have to pull it in on all platforms, and so that an
|
||||||
# in-line "import" statement in the _main() function below doesn't
|
# in-line "import" statement in the _main() function below doesn't
|
||||||
# cause warnings about local names shadowing use of the 'SCons'
|
# cause warnings about local names shadowing use of the 'SCons'
|
||||||
# globl in nest scopes and UnboundLocalErrors and the like in some
|
# global in nest scopes and UnboundLocalErrors and the like in some
|
||||||
# versions (2.1) of Python.
|
# versions (2.1) of Python.
|
||||||
import SCons.Platform.win32
|
import SCons.Platform.win32
|
||||||
return SCons.Platform.win32.parallel_msg
|
return SCons.Platform.win32.parallel_msg
|
||||||
|
@ -368,7 +359,7 @@ class CleanTask(SCons.Taskmaster.AlwaysTask):
|
||||||
# issue, an IOError would indicate something like
|
# issue, an IOError would indicate something like
|
||||||
# the file not existing. In either case, print a
|
# the file not existing. In either case, print a
|
||||||
# message and keep going to try to remove as many
|
# message and keep going to try to remove as many
|
||||||
# targets aa possible.
|
# targets as possible.
|
||||||
print "scons: Could not remove '%s':" % str(t), e.strerror
|
print "scons: Could not remove '%s':" % str(t), e.strerror
|
||||||
else:
|
else:
|
||||||
if removed:
|
if removed:
|
||||||
|
@ -383,7 +374,7 @@ class CleanTask(SCons.Taskmaster.AlwaysTask):
|
||||||
# we don't want, like store .sconsign information.
|
# we don't want, like store .sconsign information.
|
||||||
executed = SCons.Taskmaster.Task.executed_without_callbacks
|
executed = SCons.Taskmaster.Task.executed_without_callbacks
|
||||||
|
|
||||||
# Have the taskmaster arrange to "execute" all of the targets, because
|
# Have the Taskmaster arrange to "execute" all of the targets, because
|
||||||
# we'll figure out ourselves (in remove() or show() above) whether
|
# we'll figure out ourselves (in remove() or show() above) whether
|
||||||
# anything really needs to be done.
|
# anything really needs to be done.
|
||||||
make_ready = SCons.Taskmaster.Task.make_ready_all
|
make_ready = SCons.Taskmaster.Task.make_ready_all
|
||||||
|
@ -487,7 +478,6 @@ def SetOption(name, value):
|
||||||
def PrintHelp(file=None):
|
def PrintHelp(file=None):
|
||||||
OptionsParser.print_help(file=file)
|
OptionsParser.print_help(file=file)
|
||||||
|
|
||||||
#
|
|
||||||
class Stats(object):
|
class Stats(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.stats = []
|
self.stats = []
|
||||||
|
@ -711,7 +701,6 @@ def _load_site_scons_dir(topdir, site_dir_name=None):
|
||||||
site_tools_dir = os.path.join(site_dir, site_tools_dirname)
|
site_tools_dir = os.path.join(site_dir, site_tools_dirname)
|
||||||
if os.path.exists(site_init_file):
|
if os.path.exists(site_init_file):
|
||||||
import imp, re
|
import imp, re
|
||||||
# TODO(2.4): turn this into try:-except:-finally:
|
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
fp, pathname, description = imp.find_module(site_init_modname,
|
fp, pathname, description = imp.find_module(site_init_modname,
|
||||||
|
@ -1024,7 +1013,7 @@ def _main(parser):
|
||||||
# the SConscript file.
|
# the SConscript file.
|
||||||
#
|
#
|
||||||
# We delay enabling the PythonVersionWarning class until here so that,
|
# We delay enabling the PythonVersionWarning class until here so that,
|
||||||
# if they explicity disabled it in either in the command line or in
|
# if they explicitly disabled it in either in the command line or in
|
||||||
# $SCONSFLAGS, or in the SConscript file, then the search through
|
# $SCONSFLAGS, or in the SConscript file, then the search through
|
||||||
# the list of deprecated warning classes will find that disabling
|
# the list of deprecated warning classes will find that disabling
|
||||||
# first and not issue the warning.
|
# first and not issue the warning.
|
||||||
|
@ -1232,13 +1221,8 @@ def _build_targets(fs, options, targets, target_top):
|
||||||
def order(dependencies):
|
def order(dependencies):
|
||||||
"""Randomize the dependencies."""
|
"""Randomize the dependencies."""
|
||||||
import random
|
import random
|
||||||
# This is cribbed from the implementation of
|
random.shuffle(dependencies)
|
||||||
# random.shuffle() in Python 2.X.
|
return dependencies
|
||||||
d = dependencies
|
|
||||||
for i in range(len(d)-1, 0, -1):
|
|
||||||
j = int(random.random() * (i+1))
|
|
||||||
d[i], d[j] = d[j], d[i]
|
|
||||||
return d
|
|
||||||
else:
|
else:
|
||||||
def order(dependencies):
|
def order(dependencies):
|
||||||
"""Leave the order of dependencies alone."""
|
"""Leave the order of dependencies alone."""
|
||||||
|
@ -1316,18 +1300,6 @@ def _exec_main(parser, values):
|
||||||
# compat layer imports "cProfile" for us if it's available.
|
# compat layer imports "cProfile" for us if it's available.
|
||||||
from profile import Profile
|
from profile import Profile
|
||||||
|
|
||||||
# Some versions of Python 2.4 shipped a profiler that had the
|
|
||||||
# wrong 'c_exception' entry in its dispatch table. Make sure
|
|
||||||
# we have the right one. (This may put an unnecessary entry
|
|
||||||
# in the table in earlier versions of Python, but its presence
|
|
||||||
# shouldn't hurt anything).
|
|
||||||
try:
|
|
||||||
dispatch = Profile.dispatch
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
dispatch['c_exception'] = Profile.trace_dispatch_return
|
|
||||||
|
|
||||||
prof = Profile()
|
prof = Profile()
|
||||||
try:
|
try:
|
||||||
prof.runcall(_main, parser)
|
prof.runcall(_main, parser)
|
||||||
|
@ -1360,7 +1332,7 @@ def main():
|
||||||
pass
|
pass
|
||||||
parts.append(version_string("engine", SCons))
|
parts.append(version_string("engine", SCons))
|
||||||
parts.append(path_string("engine", SCons))
|
parts.append(path_string("engine", SCons))
|
||||||
parts.append("Copyright (c) 2001 - 2015 The SCons Foundation")
|
parts.append("Copyright (c) 2001 - 2016 The SCons Foundation")
|
||||||
version = ''.join(parts)
|
version = ''.join(parts)
|
||||||
|
|
||||||
import SConsOptions
|
import SConsOptions
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Script/SConsOptions.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import optparse
|
import optparse
|
||||||
import re
|
import re
|
||||||
|
@ -426,7 +426,7 @@ class SConsOptionParser(optparse.OptionParser):
|
||||||
result = group.add_option(*args, **kw)
|
result = group.add_option(*args, **kw)
|
||||||
|
|
||||||
if result:
|
if result:
|
||||||
# The option was added succesfully. We now have to add the
|
# The option was added successfully. We now have to add the
|
||||||
# default value to our object that holds the default values
|
# default value to our object that holds the default values
|
||||||
# (so that an attempt to fetch the option's attribute will
|
# (so that an attempt to fetch the option's attribute will
|
||||||
# yield the default value when not overridden) and then
|
# yield the default value when not overridden) and then
|
||||||
|
@ -449,11 +449,6 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
"SCons Options." Unfortunately, we have to do this here,
|
"SCons Options." Unfortunately, we have to do this here,
|
||||||
because those titles are hard-coded in the optparse calls.
|
because those titles are hard-coded in the optparse calls.
|
||||||
"""
|
"""
|
||||||
if heading == 'options':
|
|
||||||
# The versions of optparse.py shipped with Pythons 2.3 and
|
|
||||||
# 2.4 pass this in uncapitalized; override that so we get
|
|
||||||
# consistent output on all versions.
|
|
||||||
heading = "Options"
|
|
||||||
if heading == 'Options':
|
if heading == 'Options':
|
||||||
heading = "SCons Options"
|
heading = "SCons Options"
|
||||||
return optparse.IndentedHelpFormatter.format_heading(self, heading)
|
return optparse.IndentedHelpFormatter.format_heading(self, heading)
|
||||||
|
@ -488,13 +483,7 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
# read data from FILENAME
|
# read data from FILENAME
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
try:
|
opts = self.option_strings[option]
|
||||||
opts = self.option_strings[option]
|
|
||||||
except AttributeError:
|
|
||||||
# The Python 2.3 version of optparse attaches this to
|
|
||||||
# to the option argument, not to this object.
|
|
||||||
opts = option.option_strings
|
|
||||||
|
|
||||||
opt_width = self.help_position - self.current_indent - 2
|
opt_width = self.help_position - self.current_indent - 2
|
||||||
if len(opts) > opt_width:
|
if len(opts) > opt_width:
|
||||||
wrapper = textwrap.TextWrapper(width=self.width,
|
wrapper = textwrap.TextWrapper(width=self.width,
|
||||||
|
@ -509,14 +498,7 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
result.append(opts)
|
result.append(opts)
|
||||||
if option.help:
|
if option.help:
|
||||||
|
|
||||||
try:
|
help_text = self.expand_default(option)
|
||||||
expand_default = self.expand_default
|
|
||||||
except AttributeError:
|
|
||||||
# The HelpFormatter base class in the Python 2.3 version
|
|
||||||
# of optparse has no expand_default() method.
|
|
||||||
help_text = option.help
|
|
||||||
else:
|
|
||||||
help_text = expand_default(option)
|
|
||||||
|
|
||||||
# SCons: indent every line of the help text but the first.
|
# SCons: indent every line of the help text but the first.
|
||||||
wrapper = textwrap.TextWrapper(width=self.help_width,
|
wrapper = textwrap.TextWrapper(width=self.help_width,
|
||||||
|
@ -530,34 +512,6 @@ class SConsIndentedHelpFormatter(optparse.IndentedHelpFormatter):
|
||||||
result.append("\n")
|
result.append("\n")
|
||||||
return "".join(result)
|
return "".join(result)
|
||||||
|
|
||||||
# For consistent help output across Python versions, we provide a
|
|
||||||
# subclass copy of format_option_strings() and these two variables.
|
|
||||||
# This is necessary (?) for Python2.3, which otherwise concatenates
|
|
||||||
# a short option with its metavar.
|
|
||||||
_short_opt_fmt = "%s %s"
|
|
||||||
_long_opt_fmt = "%s=%s"
|
|
||||||
|
|
||||||
def format_option_strings(self, option):
|
|
||||||
"""Return a comma-separated list of option strings & metavariables."""
|
|
||||||
if option.takes_value():
|
|
||||||
metavar = option.metavar or option.dest.upper()
|
|
||||||
short_opts = []
|
|
||||||
for sopt in option._short_opts:
|
|
||||||
short_opts.append(self._short_opt_fmt % (sopt, metavar))
|
|
||||||
long_opts = []
|
|
||||||
for lopt in option._long_opts:
|
|
||||||
long_opts.append(self._long_opt_fmt % (lopt, metavar))
|
|
||||||
else:
|
|
||||||
short_opts = option._short_opts
|
|
||||||
long_opts = option._long_opts
|
|
||||||
|
|
||||||
if self.short_first:
|
|
||||||
opts = short_opts + long_opts
|
|
||||||
else:
|
|
||||||
opts = long_opts + short_opts
|
|
||||||
|
|
||||||
return ", ".join(opts)
|
|
||||||
|
|
||||||
def Parser(version):
|
def Parser(version):
|
||||||
"""
|
"""
|
||||||
Returns an options parser object initialized with the standard
|
Returns an options parser object initialized with the standard
|
|
@ -6,7 +6,7 @@ files.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Script/SConscript.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons
|
import SCons
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
|
@ -52,16 +52,6 @@ import re
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
# The following variables used to live in this module. Some
|
|
||||||
# SConscript files out there may have referred to them directly as
|
|
||||||
# SCons.Script.SConscript.*. This is now supported by some special
|
|
||||||
# handling towards the bottom of the SConscript.__init__.py module.
|
|
||||||
#Arguments = {}
|
|
||||||
#ArgList = []
|
|
||||||
#BuildTargets = TargetList()
|
|
||||||
#CommandLineTargets = []
|
|
||||||
#DefaultTargets = []
|
|
||||||
|
|
||||||
class SConscriptReturn(Exception):
|
class SConscriptReturn(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -446,7 +436,7 @@ class SConsEnvironment(SCons.Environment.Base):
|
||||||
|
|
||||||
#
|
#
|
||||||
# Public methods of an SConsEnvironment. These get
|
# Public methods of an SConsEnvironment. These get
|
||||||
# entry points in the global name space so they can be called
|
# entry points in the global namespace so they can be called
|
||||||
# as global functions.
|
# as global functions.
|
||||||
#
|
#
|
||||||
|
|
|
@ -12,7 +12,7 @@ it goes here.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -34,7 +34,7 @@ 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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Script/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import time
|
import time
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
@ -270,12 +270,6 @@ def HelpFunction(text, append=False):
|
||||||
s.close()
|
s.close()
|
||||||
else:
|
else:
|
||||||
help_text = ""
|
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
|
help_text= help_text + text
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Sig.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Place-holder for the old SCons.Sig module hierarchy
|
__doc__ = """Place-holder for the old SCons.Sig module hierarchy
|
||||||
|
|
|
@ -5,7 +5,7 @@ SCons string substitution.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Subst.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import re
|
import re
|
||||||
|
@ -344,7 +344,6 @@ _remove = re.compile(r'\$\([^\$]*(\$[^\)][^\$]*)*\$\)')
|
||||||
_regex_remove = [ _rm, None, _remove ]
|
_regex_remove = [ _rm, None, _remove ]
|
||||||
|
|
||||||
def _rm_list(list):
|
def _rm_list(list):
|
||||||
#return [ l for l in list if not l in ('$(', '$)') ]
|
|
||||||
return [l for l in list if not l in ('$(', '$)')]
|
return [l for l in list if not l in ('$(', '$)')]
|
||||||
|
|
||||||
def _remove_list(list):
|
def _remove_list(list):
|
||||||
|
@ -580,8 +579,6 @@ def scons_subst(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
#Subst_List_Strings = {}
|
|
||||||
|
|
||||||
def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={}, lvars={}, conv=None):
|
def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={}, lvars={}, conv=None):
|
||||||
"""Substitute construction variables in a string (or list or other
|
"""Substitute construction variables in a string (or list or other
|
||||||
object) and separate the arguments into a command list.
|
object) and separate the arguments into a command list.
|
||||||
|
@ -590,12 +587,6 @@ def scons_subst_list(strSubst, env, mode=SUBST_RAW, target=None, source=None, gv
|
||||||
substitutions within strings, so see that function instead
|
substitutions within strings, so see that function instead
|
||||||
if that's what you're looking for.
|
if that's what you're looking for.
|
||||||
"""
|
"""
|
||||||
# try:
|
|
||||||
# Subst_List_Strings[strSubst] = Subst_List_Strings[strSubst] + 1
|
|
||||||
# except KeyError:
|
|
||||||
# Subst_List_Strings[strSubst] = 1
|
|
||||||
# import SCons.Debug
|
|
||||||
# SCons.Debug.caller_trace(1)
|
|
||||||
class ListSubber(collections.UserList):
|
class ListSubber(collections.UserList):
|
||||||
"""A class to construct the results of a scons_subst_list() call.
|
"""A class to construct the results of a scons_subst_list() call.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Taskmaster.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
import operator
|
import operator
|
||||||
|
@ -107,7 +107,7 @@ fmt = "%(considered)3d "\
|
||||||
|
|
||||||
def dump_stats():
|
def dump_stats():
|
||||||
for n in sorted(StatsNodes, key=lambda a: str(a)):
|
for n in sorted(StatsNodes, key=lambda a: str(a)):
|
||||||
print (fmt % n.stats.__dict__) + str(n)
|
print (fmt % n.attributes.stats.__dict__) + str(n)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ class Task(object):
|
||||||
aspects of controlling a build, so any given application
|
aspects of controlling a build, so any given application
|
||||||
*should* be able to do what it wants by sub-classing this
|
*should* be able to do what it wants by sub-classing this
|
||||||
class and overriding methods as appropriate. If an application
|
class and overriding methods as appropriate. If an application
|
||||||
needs to customze something by sub-classing Taskmaster (or
|
needs to customize something by sub-classing Taskmaster (or
|
||||||
some other build engine class), we should first try to migrate
|
some other build engine class), we should first try to migrate
|
||||||
that functionality into this class.
|
that functionality into this class.
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ class Task(object):
|
||||||
|
|
||||||
This hook gets called as part of preparing a task for execution
|
This hook gets called as part of preparing a task for execution
|
||||||
(that is, a Node to be built). As part of figuring out what Node
|
(that is, a Node to be built). As part of figuring out what Node
|
||||||
should be built next, the actually target list may be altered,
|
should be built next, the actual target list may be altered,
|
||||||
along with a message describing the alteration. The calling
|
along with a message describing the alteration. The calling
|
||||||
interface can subclass Task and provide a concrete implementation
|
interface can subclass Task and provide a concrete implementation
|
||||||
of this method to see those messages.
|
of this method to see those messages.
|
||||||
|
@ -664,9 +664,9 @@ class Taskmaster(object):
|
||||||
its parent node.
|
its parent node.
|
||||||
|
|
||||||
A pending child can occur when the Taskmaster completes a loop
|
A pending child can occur when the Taskmaster completes a loop
|
||||||
through a cycle. For example, lets imagine a graph made of
|
through a cycle. For example, let's imagine a graph made of
|
||||||
three node (A, B and C) making a cycle. The evaluation starts
|
three nodes (A, B and C) making a cycle. The evaluation starts
|
||||||
at node A. The taskmaster first consider whether node A's
|
at node A. The Taskmaster first considers whether node A's
|
||||||
child B is up-to-date. Then, recursively, node B needs to
|
child B is up-to-date. Then, recursively, node B needs to
|
||||||
check whether node C is up-to-date. This leaves us with a
|
check whether node C is up-to-date. This leaves us with a
|
||||||
dependency graph looking like:
|
dependency graph looking like:
|
||||||
|
@ -781,10 +781,10 @@ class Taskmaster(object):
|
||||||
# return node
|
# return node
|
||||||
|
|
||||||
if CollectStats:
|
if CollectStats:
|
||||||
if not hasattr(node, 'stats'):
|
if not hasattr(node.attributes, 'stats'):
|
||||||
node.stats = Stats()
|
node.attributes.stats = Stats()
|
||||||
StatsNodes.append(node)
|
StatsNodes.append(node)
|
||||||
S = node.stats
|
S = node.attributes.stats
|
||||||
S.considered = S.considered + 1
|
S.considered = S.considered + 1
|
||||||
else:
|
else:
|
||||||
S = None
|
S = None
|
||||||
|
@ -951,7 +951,7 @@ class Taskmaster(object):
|
||||||
task.make_ready()
|
task.make_ready()
|
||||||
except:
|
except:
|
||||||
# We had a problem just trying to get this task ready (like
|
# We had a problem just trying to get this task ready (like
|
||||||
# a child couldn't be linked in to a VariantDir when deciding
|
# a child couldn't be linked to a VariantDir when deciding
|
||||||
# whether this node is current). Arrange to raise the
|
# whether this node is current). Arrange to raise the
|
||||||
# exception when the Task is "executed."
|
# exception when the Task is "executed."
|
||||||
self.ready_exc = sys.exc_info()
|
self.ready_exc = sys.exc_info()
|
|
@ -10,7 +10,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/386asm.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
from SCons.Tool.PharLapCommon import addPharLapPaths
|
from SCons.Tool.PharLapCommon import addPharLapPaths
|
||||||
import SCons.Util
|
import SCons.Util
|
|
@ -10,7 +10,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/BitKeeper.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
||||||
|
@ -49,7 +49,6 @@ def generate(env):
|
||||||
act = SCons.Action.Action("$BITKEEPERCOM", "$BITKEEPERCOMSTR")
|
act = SCons.Action.Action("$BITKEEPERCOM", "$BITKEEPERCOMSTR")
|
||||||
return SCons.Builder.Builder(action = act, env = env)
|
return SCons.Builder.Builder(action = act, env = env)
|
||||||
|
|
||||||
#setattr(env, 'BitKeeper', BitKeeperFactory)
|
|
||||||
env.BitKeeper = BitKeeperFactory
|
env.BitKeeper = BitKeeperFactory
|
||||||
|
|
||||||
env['BITKEEPER'] = 'bk'
|
env['BITKEEPER'] = 'bk'
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/CVS.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
||||||
|
@ -55,7 +55,6 @@ def generate(env):
|
||||||
CVSREPOSITORY = repos,
|
CVSREPOSITORY = repos,
|
||||||
CVSMODULE = module)
|
CVSMODULE = module)
|
||||||
|
|
||||||
#setattr(env, 'CVS', CVSFactory)
|
|
||||||
env.CVS = CVSFactory
|
env.CVS = CVSFactory
|
||||||
|
|
||||||
env['CVS'] = 'cvs'
|
env['CVS'] = 'cvs'
|
|
@ -6,7 +6,7 @@ Coded by Russel Winder (russel@winder.org.uk)
|
||||||
2012-09-06
|
2012-09-06
|
||||||
"""
|
"""
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/DCommon.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
|
@ -5,7 +5,7 @@ Stuff for processing Fortran, common to all fortran dialects.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/FortranCommon.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import os.path
|
import os.path
|
|
@ -3,7 +3,7 @@
|
||||||
Used by several tools of `gettext` toolset.
|
Used by several tools of `gettext` toolset.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/GettextCommon.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Warnings
|
import SCons.Warnings
|
||||||
import re
|
import re
|
||||||
|
@ -251,7 +251,7 @@ class RPaths(object):
|
||||||
recently re-created. For such reason, we need a function, which always
|
recently re-created. For such reason, we need a function, which always
|
||||||
returns relative paths. This is the purpose of `RPaths` callable object.
|
returns relative paths. This is the purpose of `RPaths` callable object.
|
||||||
|
|
||||||
The `__call__` method returns paths relative to current woking directory, but
|
The `__call__` method returns paths relative to current working directory, but
|
||||||
we assume, that *xgettext(1)* is run from the directory, where target file is
|
we assume, that *xgettext(1)* is run from the directory, where target file is
|
||||||
going to be created.
|
going to be created.
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ def _init_po_files(target, source, env):
|
||||||
autoinit = False
|
autoinit = False
|
||||||
# Well, if everything outside works well, this loop should do single
|
# Well, if everything outside works well, this loop should do single
|
||||||
# iteration. Otherwise we are rebuilding all the targets even, if just
|
# iteration. Otherwise we are rebuilding all the targets even, if just
|
||||||
# one has changed (but is this out fault?).
|
# one has changed (but is this our fault?).
|
||||||
for tgt in target:
|
for tgt in target:
|
||||||
if not tgt.exists():
|
if not tgt.exists():
|
||||||
if autoinit:
|
if autoinit:
|
|
@ -5,7 +5,7 @@ Stuff for processing Java.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/JavaCommon.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
Common functions for Microsoft Visual Studio and Visual C/C++.
|
Common functions for Microsoft Visual Studio and Visual C/C++.
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/arch.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Module to define supported Windows chip architectures.
|
__doc__ = """Module to define supported Windows chip architectures.
|
||||||
"""
|
"""
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/common.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
Common helper functions for working with the Microsoft tool chain.
|
Common helper functions for working with the Microsoft tool chain.
|
||||||
|
@ -93,7 +93,7 @@ def has_reg(value):
|
||||||
try:
|
try:
|
||||||
SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, value)
|
SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, value)
|
||||||
ret = True
|
ret = True
|
||||||
except WindowsError:
|
except SCons.Util.WinError:
|
||||||
ret = False
|
ret = False
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ def get_output(vcbat, args = None, env = None):
|
||||||
stdout = popen.stdout.read()
|
stdout = popen.stdout.read()
|
||||||
stderr = popen.stderr.read()
|
stderr = popen.stderr.read()
|
||||||
|
|
||||||
# Extra debug logic, uncomment if necessar
|
# Extra debug logic, uncomment if necessary
|
||||||
# debug('get_output():stdout:%s'%stdout)
|
# debug('get_output():stdout:%s'%stdout)
|
||||||
# debug('get_output():stderr:%s'%stderr)
|
# debug('get_output():stderr:%s'%stderr)
|
||||||
|
|
||||||
|
@ -226,33 +226,6 @@ def parse_output(output, keep = ("INCLUDE", "LIB", "LIBPATH", "PATH")):
|
||||||
|
|
||||||
return dkeep
|
return dkeep
|
||||||
|
|
||||||
# TODO(sgk): unused
|
|
||||||
def output_to_dict(output):
|
|
||||||
"""Given an output string, parse it to find env variables.
|
|
||||||
|
|
||||||
Return a dict where keys are variables names, and values their content"""
|
|
||||||
envlinem = re.compile(r'^([a-zA-z0-9]+)=([\S\s]*)$')
|
|
||||||
parsedenv = {}
|
|
||||||
for line in output.splitlines():
|
|
||||||
m = envlinem.match(line)
|
|
||||||
if m:
|
|
||||||
parsedenv[m.group(1)] = m.group(2)
|
|
||||||
return parsedenv
|
|
||||||
|
|
||||||
# TODO(sgk): unused
|
|
||||||
def get_new(l1, l2):
|
|
||||||
"""Given two list l1 and l2, return the items in l2 which are not in l1.
|
|
||||||
Order is maintained."""
|
|
||||||
|
|
||||||
# We don't try to be smart: lists are small, and this is not the bottleneck
|
|
||||||
# is any case
|
|
||||||
new = []
|
|
||||||
for i in l2:
|
|
||||||
if i not in l1:
|
|
||||||
new.append(i)
|
|
||||||
|
|
||||||
return new
|
|
||||||
|
|
||||||
# Local Variables:
|
# Local Variables:
|
||||||
# tab-width:4
|
# tab-width:4
|
||||||
# indent-tabs-mode:nil
|
# indent-tabs-mode:nil
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -20,13 +20,14 @@
|
||||||
# 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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """
|
__doc__ = """
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import SCons.Util
|
||||||
|
|
||||||
from common import read_reg, debug
|
from common import read_reg, debug
|
||||||
|
|
||||||
|
@ -40,7 +41,7 @@ def find_framework_root():
|
||||||
try:
|
try:
|
||||||
froot = read_reg(_FRAMEWORKDIR_HKEY_ROOT)
|
froot = read_reg(_FRAMEWORKDIR_HKEY_ROOT)
|
||||||
debug("Found framework install root in registry: %s" % froot)
|
debug("Found framework install root in registry: %s" % froot)
|
||||||
except WindowsError, e:
|
except SCons.Util.WinError, e:
|
||||||
debug("Could not read reg key %s" % _FRAMEWORKDIR_HKEY_ROOT)
|
debug("Could not read reg key %s" % _FRAMEWORKDIR_HKEY_ROOT)
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Module to detect the Platform/Windows SDK
|
__doc__ = """Module to detect the Platform/Windows SDK
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ class SDKDefinition(object):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
sdk_dir = common.read_reg(hkey)
|
sdk_dir = common.read_reg(hkey)
|
||||||
except WindowsError, e:
|
except SCons.Util.WinError, e:
|
||||||
debug('find_sdk_dir(): no SDK registry key %s' % repr(hkey))
|
debug('find_sdk_dir(): no SDK registry key %s' % repr(hkey))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ SDK70VCSetupScripts = { 'x86' : r'bin\vcvars32.bat',
|
||||||
#
|
#
|
||||||
# The first SDK found in the list is the one used by default if there
|
# The first SDK found in the list is the one used by default if there
|
||||||
# are multiple SDKs installed. Barring good reasons to the contrary,
|
# are multiple SDKs installed. Barring good reasons to the contrary,
|
||||||
# this means we should list SDKs with from most recent to oldest.
|
# this means we should list SDKs from most recent to oldest.
|
||||||
#
|
#
|
||||||
# If you update this list, update the documentation in Tool/mssdk.xml.
|
# If you update this list, update the documentation in Tool/mssdk.xml.
|
||||||
SupportedSDKList = [
|
SupportedSDKList = [
|
||||||
|
@ -306,29 +306,6 @@ def set_sdk_by_directory(env, sdk_dir):
|
||||||
for variable, directory in env_tuple_list:
|
for variable, directory in env_tuple_list:
|
||||||
env.PrependENVPath(variable, directory)
|
env.PrependENVPath(variable, directory)
|
||||||
|
|
||||||
|
|
||||||
# TODO(sgk): currently unused; remove?
|
|
||||||
def get_cur_sdk_dir_from_reg():
|
|
||||||
"""Try to find the platform sdk directory from the registry.
|
|
||||||
|
|
||||||
Return None if failed or the directory does not exist"""
|
|
||||||
if not SCons.Util.can_read_reg:
|
|
||||||
debug('SCons cannot read registry')
|
|
||||||
return None
|
|
||||||
|
|
||||||
try:
|
|
||||||
val = common.read_reg(_CURINSTALLED_SDK_HKEY_ROOT)
|
|
||||||
debug("Found current sdk dir in registry: %s" % val)
|
|
||||||
except WindowsError, e:
|
|
||||||
debug("Did not find current sdk in registry")
|
|
||||||
return None
|
|
||||||
|
|
||||||
if not os.path.exists(val):
|
|
||||||
debug("Current sdk dir %s not on fs" % val)
|
|
||||||
return None
|
|
||||||
|
|
||||||
return val
|
|
||||||
|
|
||||||
def get_sdk_by_version(mssdk):
|
def get_sdk_by_version(mssdk):
|
||||||
if mssdk not in SupportedSDKMap:
|
if mssdk not in SupportedSDKMap:
|
||||||
msg = "SDK version %s is not supported" % repr(mssdk)
|
msg = "SDK version %s is not supported" % repr(mssdk)
|
||||||
|
@ -343,9 +320,6 @@ def get_default_sdk():
|
||||||
return None
|
return None
|
||||||
return InstalledSDKList[0]
|
return InstalledSDKList[0]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def mssdk_setup_env(env):
|
def mssdk_setup_env(env):
|
||||||
debug('sdk.py:mssdk_setup_env()')
|
debug('sdk.py:mssdk_setup_env()')
|
||||||
if 'MSSDK_DIR' in env:
|
if 'MSSDK_DIR' in env:
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
# * 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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/vc.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Module for Visual C/C++ detection and configuration.
|
__doc__ = """Module for Visual C/C++ detection and configuration.
|
||||||
"""
|
"""
|
||||||
|
@ -244,13 +244,13 @@ def find_vc_pdir(msvc_version):
|
||||||
try:
|
try:
|
||||||
# ordinally at win64, try Wow6432Node first.
|
# ordinally at win64, try Wow6432Node first.
|
||||||
comps = common.read_reg(root + 'Wow6432Node\\' + key, hkroot)
|
comps = common.read_reg(root + 'Wow6432Node\\' + key, hkroot)
|
||||||
except WindowsError, e:
|
except SCons.Util.WinError, e:
|
||||||
# at Microsoft Visual Studio for Python 2.7, value is not in Wow6432Node
|
# at Microsoft Visual Studio for Python 2.7, value is not in Wow6432Node
|
||||||
pass
|
pass
|
||||||
if not comps:
|
if not comps:
|
||||||
# not Win64, or Microsoft Visual Studio for Python 2.7
|
# not Win64, or Microsoft Visual Studio for Python 2.7
|
||||||
comps = common.read_reg(root + key, hkroot)
|
comps = common.read_reg(root + key, hkroot)
|
||||||
except WindowsError, e:
|
except SCons.Util.WinError, 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:
|
||||||
debug('find_vc_dir(): found VC in registry: %s' % comps)
|
debug('find_vc_dir(): found VC in registry: %s' % comps)
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
__doc__ = """Module to detect Visual Studio and/or Visual C/C++
|
__doc__ = """Module to detect Visual Studio and/or Visual C/C++
|
||||||
"""
|
"""
|
||||||
|
@ -52,8 +52,6 @@ class VisualStudio(object):
|
||||||
self.__dict__.update(kw)
|
self.__dict__.update(kw)
|
||||||
self._cache = {}
|
self._cache = {}
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
def find_batch_file(self):
|
def find_batch_file(self):
|
||||||
vs_dir = self.get_vs_dir()
|
vs_dir = self.get_vs_dir()
|
||||||
if not vs_dir:
|
if not vs_dir:
|
||||||
|
@ -85,7 +83,7 @@ class VisualStudio(object):
|
||||||
key = root + key
|
key = root + key
|
||||||
try:
|
try:
|
||||||
comps = read_reg(key)
|
comps = read_reg(key)
|
||||||
except WindowsError, e:
|
except SCons.Util.WinError, e:
|
||||||
debug('find_vs_dir_by_reg(): no VS registry key %s' % repr(key))
|
debug('find_vs_dir_by_reg(): no VS registry key %s' % repr(key))
|
||||||
else:
|
else:
|
||||||
debug('find_vs_dir_by_reg(): found VS in registry: %s' % comps)
|
debug('find_vs_dir_by_reg(): found VS in registry: %s' % comps)
|
||||||
|
@ -116,8 +114,6 @@ class VisualStudio(object):
|
||||||
return None
|
return None
|
||||||
return executable
|
return executable
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
def get_batch_file(self):
|
def get_batch_file(self):
|
||||||
try:
|
try:
|
||||||
return self._cache['batch_file']
|
return self._cache['batch_file']
|
||||||
|
@ -471,7 +467,7 @@ def get_default_version(env):
|
||||||
"""Returns the default version string to use for MSVS.
|
"""Returns the default version string to use for MSVS.
|
||||||
|
|
||||||
If no version was requested by the user through the MSVS environment
|
If no version was requested by the user through the MSVS environment
|
||||||
variable, query all the available the visual studios through
|
variable, query all the available visual studios through
|
||||||
get_installed_visual_studios, and take the highest one.
|
get_installed_visual_studios, and take the highest one.
|
||||||
|
|
||||||
Return
|
Return
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/Perforce.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
@ -38,9 +38,6 @@ import SCons.Builder
|
||||||
import SCons.Node.FS
|
import SCons.Node.FS
|
||||||
import SCons.Util
|
import SCons.Util
|
||||||
|
|
||||||
# This function should maybe be moved to SCons.Util?
|
|
||||||
from SCons.Tool.PharLapCommon import addPathIfNotExists
|
|
||||||
|
|
||||||
|
|
||||||
# Variables that we want to import from the base OS environment.
|
# Variables that we want to import from the base OS environment.
|
||||||
_import_env = [ 'P4PORT', 'P4CLIENT', 'P4USER', 'USER', 'USERNAME', 'P4PASSWD',
|
_import_env = [ 'P4PORT', 'P4CLIENT', 'P4USER', 'USER', 'USERNAME', 'P4PASSWD',
|
||||||
|
@ -58,7 +55,6 @@ def generate(env):
|
||||||
W.warn(W.DeprecatedSourceCodeWarning, """The Perforce() factory is deprecated and there is no replacement.""")
|
W.warn(W.DeprecatedSourceCodeWarning, """The Perforce() factory is deprecated and there is no replacement.""")
|
||||||
return SCons.Builder.Builder(action = PerforceAction, env = env)
|
return SCons.Builder.Builder(action = PerforceAction, env = env)
|
||||||
|
|
||||||
#setattr(env, 'Perforce', PerforceFactory)
|
|
||||||
env.Perforce = PerforceFactory
|
env.Perforce = PerforceFactory
|
||||||
|
|
||||||
env['P4'] = 'p4'
|
env['P4'] = 'p4'
|
||||||
|
@ -87,7 +83,7 @@ def generate(env):
|
||||||
k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
|
k=SCons.Util.RegOpenKeyEx(SCons.Util.hkey_mod.HKEY_LOCAL_MACHINE,
|
||||||
'Software\\Perforce\\environment')
|
'Software\\Perforce\\environment')
|
||||||
val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT')
|
val, tok = SCons.Util.RegQueryValueEx(k, 'P4INSTROOT')
|
||||||
addPathIfNotExists(environ, 'PATH', val)
|
SCons.Util.AddPathIfNotExists(environ, 'PATH', val)
|
||||||
except SCons.Util.RegError:
|
except SCons.Util.RegError:
|
||||||
# Can't detect where Perforce is, hope the user has it set in the
|
# Can't detect where Perforce is, hope the user has it set in the
|
||||||
# PATH.
|
# PATH.
|
|
@ -7,7 +7,7 @@ Phar Lap ETS tool chain. Right now, this is linkloc and
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/PharLapCommon.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -85,28 +85,6 @@ def getPharLapVersion():
|
||||||
# Default return for Phar Lap 9.1
|
# Default return for Phar Lap 9.1
|
||||||
return 910
|
return 910
|
||||||
|
|
||||||
def addPathIfNotExists(env_dict, key, path, sep=os.pathsep):
|
|
||||||
"""This function will take 'key' out of the dictionary
|
|
||||||
'env_dict', then add the path 'path' to that key if it is not
|
|
||||||
already there. This treats the value of env_dict[key] as if it
|
|
||||||
has a similar format to the PATH variable...a list of paths
|
|
||||||
separated by tokens. The 'path' will get added to the list if it
|
|
||||||
is not already there."""
|
|
||||||
try:
|
|
||||||
is_list = 1
|
|
||||||
paths = env_dict[key]
|
|
||||||
if not SCons.Util.is_List(env_dict[key]):
|
|
||||||
paths = paths.split(sep)
|
|
||||||
is_list = 0
|
|
||||||
if os.path.normcase(path) not in list(map(os.path.normcase, paths)):
|
|
||||||
paths = [ path ] + paths
|
|
||||||
if is_list:
|
|
||||||
env_dict[key] = paths
|
|
||||||
else:
|
|
||||||
env_dict[key] = sep.join(paths)
|
|
||||||
except KeyError:
|
|
||||||
env_dict[key] = path
|
|
||||||
|
|
||||||
def addPharLapPaths(env):
|
def addPharLapPaths(env):
|
||||||
"""This function adds the path to the Phar Lap binaries, includes,
|
"""This function adds the path to the Phar Lap binaries, includes,
|
||||||
and libraries, if they are not already there."""
|
and libraries, if they are not already there."""
|
||||||
|
@ -117,14 +95,14 @@ def addPharLapPaths(env):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
env_dict = {}
|
env_dict = {}
|
||||||
env['ENV'] = env_dict
|
env['ENV'] = env_dict
|
||||||
addPathIfNotExists(env_dict, 'PATH',
|
SCons.Util.AddPathIfNotExists(env_dict, 'PATH',
|
||||||
os.path.join(ph_path, 'bin'))
|
os.path.join(ph_path, 'bin'))
|
||||||
addPathIfNotExists(env_dict, 'INCLUDE',
|
SCons.Util.AddPathIfNotExists(env_dict, 'INCLUDE',
|
||||||
os.path.join(ph_path, 'include'))
|
os.path.join(ph_path, 'include'))
|
||||||
addPathIfNotExists(env_dict, 'LIB',
|
SCons.Util.AddPathIfNotExists(env_dict, 'LIB',
|
||||||
os.path.join(ph_path, 'lib'))
|
os.path.join(ph_path, 'lib'))
|
||||||
addPathIfNotExists(env_dict, 'LIB',
|
SCons.Util.AddPathIfNotExists(env_dict, 'LIB',
|
||||||
os.path.join(ph_path, os.path.normpath('lib/vclib')))
|
os.path.join(ph_path, os.path.normpath('lib/vclib')))
|
||||||
|
|
||||||
env['PHARLAP_PATH'] = getPharLapPath()
|
env['PHARLAP_PATH'] = getPharLapPath()
|
||||||
env['PHARLAP_VERSION'] = str(getPharLapVersion())
|
env['PHARLAP_VERSION'] = str(getPharLapVersion())
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/RCS.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
||||||
|
@ -46,7 +46,6 @@ def generate(env):
|
||||||
act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
|
act = SCons.Action.Action('$RCS_COCOM', '$RCS_COCOMSTR')
|
||||||
return SCons.Builder.Builder(action = act, env = env)
|
return SCons.Builder.Builder(action = act, env = env)
|
||||||
|
|
||||||
#setattr(env, 'RCS', RCSFactory)
|
|
||||||
env.RCS = RCSFactory
|
env.RCS = RCSFactory
|
||||||
|
|
||||||
env['RCS'] = 'rcs'
|
env['RCS'] = 'rcs'
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/SCCS.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
||||||
|
@ -46,7 +46,6 @@ def generate(env):
|
||||||
act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
|
act = SCons.Action.Action('$SCCSCOM', '$SCCSCOMSTR')
|
||||||
return SCons.Builder.Builder(action = act, env = env)
|
return SCons.Builder.Builder(action = act, env = env)
|
||||||
|
|
||||||
#setattr(env, 'SCCS', SCCSFactory)
|
|
||||||
env.SCCS = SCCSFactory
|
env.SCCS = SCCSFactory
|
||||||
|
|
||||||
env['SCCS'] = 'sccs'
|
env['SCCS'] = 'sccs'
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/Subversion.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
|
@ -54,7 +54,6 @@ def generate(env):
|
||||||
SVNREPOSITORY = repos,
|
SVNREPOSITORY = repos,
|
||||||
SVNMODULE = module)
|
SVNMODULE = module)
|
||||||
|
|
||||||
#setattr(env, 'Subversion', SubversionFactory)
|
|
||||||
env.Subversion = SubversionFactory
|
env.Subversion = SubversionFactory
|
||||||
|
|
||||||
env['SVN'] = 'svn'
|
env['SVN'] = 'svn'
|
|
@ -14,7 +14,7 @@ tool definition.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/__init__.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import imp
|
import imp
|
||||||
import sys
|
import sys
|
||||||
|
@ -51,6 +51,7 @@ import SCons.Scanner.C
|
||||||
import SCons.Scanner.D
|
import SCons.Scanner.D
|
||||||
import SCons.Scanner.LaTeX
|
import SCons.Scanner.LaTeX
|
||||||
import SCons.Scanner.Prog
|
import SCons.Scanner.Prog
|
||||||
|
import SCons.Scanner.SWIG
|
||||||
|
|
||||||
DefaultToolpath=[]
|
DefaultToolpath=[]
|
||||||
|
|
||||||
|
@ -60,6 +61,7 @@ LaTeXScanner = SCons.Scanner.LaTeX.LaTeXScanner()
|
||||||
PDFLaTeXScanner = SCons.Scanner.LaTeX.PDFLaTeXScanner()
|
PDFLaTeXScanner = SCons.Scanner.LaTeX.PDFLaTeXScanner()
|
||||||
ProgramScanner = SCons.Scanner.Prog.ProgramScanner()
|
ProgramScanner = SCons.Scanner.Prog.ProgramScanner()
|
||||||
SourceFileScanner = SCons.Scanner.Base({}, name='SourceFileScanner')
|
SourceFileScanner = SCons.Scanner.Base({}, name='SourceFileScanner')
|
||||||
|
SWIGScanner = SCons.Scanner.SWIG.SWIGScanner()
|
||||||
|
|
||||||
CSuffixes = [".c", ".C", ".cxx", ".cpp", ".c++", ".cc",
|
CSuffixes = [".c", ".C", ".cxx", ".cpp", ".c++", ".cc",
|
||||||
".h", ".H", ".hxx", ".hpp", ".hh",
|
".h", ".H", ".hxx", ".hpp", ".hh",
|
||||||
|
@ -73,12 +75,17 @@ IDLSuffixes = [".idl", ".IDL"]
|
||||||
|
|
||||||
LaTeXSuffixes = [".tex", ".ltx", ".latex"]
|
LaTeXSuffixes = [".tex", ".ltx", ".latex"]
|
||||||
|
|
||||||
|
SWIGSuffixes = ['.i']
|
||||||
|
|
||||||
for suffix in CSuffixes:
|
for suffix in CSuffixes:
|
||||||
SourceFileScanner.add_scanner(suffix, CScanner)
|
SourceFileScanner.add_scanner(suffix, CScanner)
|
||||||
|
|
||||||
for suffix in DSuffixes:
|
for suffix in DSuffixes:
|
||||||
SourceFileScanner.add_scanner(suffix, DScanner)
|
SourceFileScanner.add_scanner(suffix, DScanner)
|
||||||
|
|
||||||
|
for suffix in SWIGSuffixes:
|
||||||
|
SourceFileScanner.add_scanner(suffix, SWIGScanner)
|
||||||
|
|
||||||
# FIXME: what should be done here? Two scanners scan the same extensions,
|
# FIXME: what should be done here? Two scanners scan the same extensions,
|
||||||
# but look for different files, e.g., "picture.eps" vs. "picture.pdf".
|
# but look for different files, e.g., "picture.eps" vs. "picture.pdf".
|
||||||
# The builders for DVI and PDF explicitly reference their scanners
|
# The builders for DVI and PDF explicitly reference their scanners
|
||||||
|
@ -101,7 +108,7 @@ class Tool(object):
|
||||||
self.options = module.options
|
self.options = module.options
|
||||||
|
|
||||||
def _tool_module(self):
|
def _tool_module(self):
|
||||||
# TODO: Interchange zipimport with normal initilization for better error reporting
|
# TODO: Interchange zipimport with normal initialization for better error reporting
|
||||||
oldpythonpath = sys.path
|
oldpythonpath = sys.path
|
||||||
sys.path = self.toolpath + sys.path
|
sys.path = self.toolpath + sys.path
|
||||||
|
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/aixc++.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/aixcc.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/aixf77.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ import f77
|
||||||
# It would be good to look for the AIX F77 package the same way we're now
|
# It would be good to look for the AIX F77 package the same way we're now
|
||||||
# looking for the C and C++ packages. This should be as easy as supplying
|
# looking for the C and C++ packages. This should be as easy as supplying
|
||||||
# the correct package names in the following list and uncommenting the
|
# the correct package names in the following list and uncommenting the
|
||||||
# SCons.Platform.aix_get_xlc() call the in the function below.
|
# SCons.Platform.aix_get_xlc() call in the function below.
|
||||||
packages = []
|
packages = []
|
||||||
|
|
||||||
def get_xlf77(env):
|
def get_xlf77(env):
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/aixlink.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/applelink.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Util
|
import SCons.Util
|
||||||
|
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/ar.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/as.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -5,7 +5,7 @@ XXX
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/bcc32.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import os.path
|
import os.path
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/c++.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os.path
|
import os.path
|
||||||
|
|
|
@ -8,7 +8,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/cc.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Tool
|
import SCons.Tool
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
|
@ -5,7 +5,7 @@ Tool-specific initialization for the Compaq Visual Fortran compiler.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/cvf.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import fortran
|
import fortran
|
||||||
|
|
|
@ -143,7 +143,7 @@ def _versioned_implib_name(env, libnode, version, prefix, suffix, **kw):
|
||||||
implib_libtype=kw['libtype'])
|
implib_libtype=kw['libtype'])
|
||||||
|
|
||||||
def _versioned_implib_symlinks(env, libnode, version, prefix, suffix, **kw):
|
def _versioned_implib_symlinks(env, libnode, version, prefix, suffix, **kw):
|
||||||
"""Generate link names that should be created for a versioned shared lirbrary.
|
"""Generate link names that should be created for a versioned shared library.
|
||||||
Returns a list in the form [ (link, linktarget), ... ]
|
Returns a list in the form [ (link, linktarget), ... ]
|
||||||
"""
|
"""
|
||||||
Verbose = False
|
Verbose = False
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/default.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Tool
|
import SCons.Tool
|
||||||
|
|
|
@ -36,7 +36,7 @@ Lib tool variables:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/dmd.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
|
@ -10,7 +10,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001-7,2010 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -852,30 +852,16 @@ def generate(env):
|
||||||
)
|
)
|
||||||
_detect(env)
|
_detect(env)
|
||||||
|
|
||||||
try:
|
env.AddMethod(DocbookEpub, "DocbookEpub")
|
||||||
env.AddMethod(DocbookEpub, "DocbookEpub")
|
env.AddMethod(DocbookHtml, "DocbookHtml")
|
||||||
env.AddMethod(DocbookHtml, "DocbookHtml")
|
env.AddMethod(DocbookHtmlChunked, "DocbookHtmlChunked")
|
||||||
env.AddMethod(DocbookHtmlChunked, "DocbookHtmlChunked")
|
env.AddMethod(DocbookHtmlhelp, "DocbookHtmlhelp")
|
||||||
env.AddMethod(DocbookHtmlhelp, "DocbookHtmlhelp")
|
env.AddMethod(DocbookPdf, "DocbookPdf")
|
||||||
env.AddMethod(DocbookPdf, "DocbookPdf")
|
env.AddMethod(DocbookMan, "DocbookMan")
|
||||||
env.AddMethod(DocbookMan, "DocbookMan")
|
env.AddMethod(DocbookSlidesPdf, "DocbookSlidesPdf")
|
||||||
env.AddMethod(DocbookSlidesPdf, "DocbookSlidesPdf")
|
env.AddMethod(DocbookSlidesHtml, "DocbookSlidesHtml")
|
||||||
env.AddMethod(DocbookSlidesHtml, "DocbookSlidesHtml")
|
env.AddMethod(DocbookXInclude, "DocbookXInclude")
|
||||||
env.AddMethod(DocbookXInclude, "DocbookXInclude")
|
env.AddMethod(DocbookXslt, "DocbookXslt")
|
||||||
env.AddMethod(DocbookXslt, "DocbookXslt")
|
|
||||||
except AttributeError:
|
|
||||||
# Looks like we use a pre-0.98 version of SCons...
|
|
||||||
from SCons.Script.SConscript import SConsEnvironment
|
|
||||||
SConsEnvironment.DocbookEpub = DocbookEpub
|
|
||||||
SConsEnvironment.DocbookHtml = DocbookHtml
|
|
||||||
SConsEnvironment.DocbookHtmlChunked = DocbookHtmlChunked
|
|
||||||
SConsEnvironment.DocbookHtmlhelp = DocbookHtmlhelp
|
|
||||||
SConsEnvironment.DocbookPdf = DocbookPdf
|
|
||||||
SConsEnvironment.DocbookMan = DocbookMan
|
|
||||||
SConsEnvironment.DocbookSlidesPdf = DocbookSlidesPdf
|
|
||||||
SConsEnvironment.DocbookSlidesHtml = DocbookSlidesHtml
|
|
||||||
SConsEnvironment.DocbookXInclude = DocbookXInclude
|
|
||||||
SConsEnvironment.DocbookXslt = DocbookXslt
|
|
||||||
|
|
||||||
|
|
||||||
def exists(env):
|
def exists(env):
|
|
@ -5,7 +5,7 @@ Common DVI Builder definition for various other Tool modules that use it.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/dvi.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Builder
|
import SCons.Builder
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/dvipdf.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/dvips.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Action
|
import SCons.Action
|
||||||
import SCons.Builder
|
import SCons.Builder
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/f03.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/f77.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Scanner.Fortran
|
import SCons.Scanner.Fortran
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/f90.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Scanner.Fortran
|
import SCons.Scanner.Fortran
|
|
@ -9,7 +9,7 @@ selection method.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#
|
#
|
||||||
# Copyright (c) 2001 - 2015 The SCons Foundation
|
# Copyright (c) 2001 - 2016 The SCons Foundation
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining
|
# Permission is hereby granted, free of charge, to any person obtaining
|
||||||
# a copy of this software and associated documentation files (the
|
# a copy of this software and associated documentation files (the
|
||||||
|
@ -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.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
|
__revision__ = "src/engine/SCons/Tool/f95.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
|
||||||
|
|
||||||
import SCons.Defaults
|
import SCons.Defaults
|
||||||
import SCons.Tool
|
import SCons.Tool
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue