r$Lc$@sdZdZddkZddkZddkZddkZddkZddklZddk Z ddk Z ddk l Z ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ ddkZ defdYZeZea ea!ea"ha#hZ$e i%i&Z&e i'i(Z(dZ)e i*i*d e)d e i+i,i-i,d e i+i.i/d d de0ddZ1dZ2ddddddddgZ3gZ4dZ5dZ6dZ7dZ8dZ9dZ:d Z;d!efd"YZ<d#e<fd$YZ=d%efd&YZ>ei?d'Z@d(ZAd)efd*YZBd+ZCd,ZDd-ZEd.eBfd/YZFd0eFfd1YZGeFZHd2ZIdS(3s4SCons.Environment Base class for construction Environments. These are the primary objects used to communicate dependency and construction information to the build engine. Keyword arguments supplied when the construction Environment is created are construction variables used to initialize the Environment s>src/engine/SCons/Environment.py 5023 2010/06/14 22:05:46 sconsiN(tUserDict(tlogInstanceCreationt_NullcBseZRS((t__name__t __module__(((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR>scCsdS(N((tenvttargettsource((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt alias_builderQstactionttarget_factorytsource_factorytmultiit is_explicittnamet AliasBuildercCs|dj o||d(R@R(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt__repr__scCs |iS(N(Ra(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt__str__scCs:|djo|iS|djo|iSt|dS(NRtbuilder(RQRRtAttributeError(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt __getattr__ s   cCsE|djo ||_n(|djo ||_n||i|scCs1x*|iD]\}}|i||q WdS(N(R;Rl(RTR-RNRC((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRABs (RRR]RURiRlRoRA(((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR9%s    s [_a-zA-Z]\w*$cCs ti|S(sNReturn if the specified string is a legitimate construction variable. (t _is_valid_vartmatch(tvarstr((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytis_valid_construction_varJstSubstitutionEnvironmentcBs?eZdZeiioeiiZndZdZ dZ dZ dZ dZ ddZdZd Zd Zeed Zd Zd ZddddddZddddZddddddZdddZeZdZddZdZdZdZ dddZ!RS(sdBase class for different flavors of construction environments. This class contains a minimal set of methods that handle contruction variable expansion and conversion of strings to Nodes, which may or may not be actually useful as a stand-alone class. Which methods ended up in this class is pretty arbitrary right now. They're basically the ones which we've empirically determined are common to the different construction environment subclasses, and most of the others that use or touch the underlying dictionary of construction variables. Eventually, this class should contain all the methods that we determine are necessary for a "minimal" interface to the build engine. A full "native Python" SCons environment has gotten pretty heavyweight with all of the methods and Tools and construction variables we've jammed in there, so it would be nice to have a lighter weight alternative for interfaces that don't need all of the bells and whistles. (At some point, we'll also probably rename this class "Base," since that more reflects what we want this class to become, but because we've released comments that tell people to subclass Environment.Base to create their own flavors of construction environment, we'll save that for a future refactoring when this class actually becomes useful.) cKsit|dtiii|_tiii|_tii |_ |i |_ |i g|_dS(sGInitialization of an underlying SubstitutionEnvironment class. s#Environment.SubstitutionEnvironmentN(RRtNodetFStget_default_fstfstAliast default_anstanstarg2nodes_lookupst lookup_listtcopyR5t _init_specialt added_methods(RTR`((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRUos  cCsh|_t|idR?(RTR2R3((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRls cCs|ii||S(s*Emulates the get() method of dictionaries.(R5R(RTR2tdefault((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCs ||ijS(N(R5(RTR2((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pythas_keyscCs|ii|S(N(R5t __contains__(RTR2((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCst|iiS(N(RR5R;(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR;sc Ks|tjo|ii}n|tjo |i}n|pgStii|}g}xQ|D]I}tii|o#d}x,|D]$}||}|dj oPqqW|dj otii|o7d|d<|i ||}|o||}qntii |o|i |q|i |q|oWd|d<||i ||}tii |o|i |q|i |qqb|i |qbW|S(Nitraw( R_RytFileR~RRtflattent is_StringRtsubstRtextendRI( RTRVt node_factoryR~R`tnodesRCtnRK((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt arg2nodessD         cCs|iS(N(R5(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytgvarsscCshS(N((RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytlvarssic Cse|i}|i}||d<|o|i|intii||||||||S(sRecursively interpolates construction variables from the Environment into the specified string, returning the expanded result. Construction variables are specified by a $ prefix in the string and begin with an initial underscore or alphabetic character followed by any number of underscores or alphanumeric characters. The construction variable names may be surrounded by curly braces to separate the name from trailing characters. t__env__(RRRAt get_lvarsRtSubstt scons_subst( RTtstringRRRtconvtexecutorRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs   cCsxh}xk|iD]]\}}|i||||}tii|o|i||||}n|||d:Z?d;Z@d<ZAd=ZBd>ZCd?ZDd@ZEdAZFdBZGdCZHdDZIeJeKeKdEZLdFZMdGZNdHZOdIZPdJZQdKZRdLZSdMdYdNZTdOZUdPZVdQZWdRZXdSZYdYdTZZddUZ[dVdWZ\dXZ]RS(ZsABase class for "real" construction Environments. These are the primary objects used to communicate dependency and construction information to the build engine. Keyword arguments supplied when the construction Environment is created are construction variables used to initialize the Environment. c Kst|dh|_tiii|_tiii|_ tii |_ t ti i|_|ig|_t|_t|_t|_t|id||id<|d jo9|iidd }|d jotii}qntii|otii|}nt||id<|||iidd |id<|iidd |id<|iidd |id<|iidd |idR`R2RntdkRtxt_[2]t_[3]t_[4]((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt AppendUniques:  $  62 2 6c KsXti|}t|i|_y|id}Wntj onXt|||ids    cCs|i||S(N(tchanged_timestamp_then_content(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_changed_timestamp_then_contentFscCs|i||S(N(tchanged_timestamp_newer(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_changed_timestamp_newerIscCs|i||S(N(tchanged_timestamp_match(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_changed_timestamp_matchLscCs|ii||S(N(RyR(RTRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_copy_from_cacheOscCs|ii||S(N(Rytcopy2(RTRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_copy2_from_cacheRscCs|i}|d jo*tiiptdn|i}n|djo |i}ne|d jo|i}|i}nB|djo |i }n(t |ptdt |n||_ ||_ ||_dS( NtMD5tcontents;MD5 signatures are not available in this version of Python.s MD5-timestampstimestamp-newertmakestimestamp-matchsUnknown Decider value %s(R`Ra(stimestamp-newerRb(R_RRtmd5R?RRRXRZR]R\tcallableR@RRR(RTRt copy_function((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytDeciderUs"              cCsPtii|p |g}nx)|D]!}|i|}|o|Sq'WdS(s5Return the first available program in progs. N(RRRtWhereIsR(RTtprogstprogR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytDetectms  cGs\|p|iSg}|D]}||i|q~}t|djo|d}n|S(Nii(R5R(RTRVRRBtdlist((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt Dictionaryws (cCsQddk}|idd}|o|i|}n |i}|i|S(s Using the standard Python pretty printer, dump the contents of the scons build environment to stdout. If the key passed in is anything other than None, then that will be used as an index into the build environment dictionary and whatever is found there will be fed into the pretty printer. Note that this key is case sensitive. iNtindenti(tpprintt PrettyPrinterRltpformat(RTR2RntppR-((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytDumps  cCs|id|}|id|}x`|D]X}tiit|\}}|t| |jo|t| |jo|Sq-WdS(s Search a list of paths for something that matches the prefix and suffix. paths - the list of paths or nodes. prefix - construction variable for the prefix. suffix - construction variable for the suffix. t$N(RtosRRRR(RTtpathstprefixtsuffixRtdirR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytFindIxess /cCsn|djo|d}|}ntii|odi|}n|i|}|||i|S(s9 Use the specified function to parse the output of the command in order to modify the current environment. The 'command' can be a string or a list of strings representing a command and its arguments. 'Function' is an optional argument that takes the environment, the output of the command, and the unique flag. If no function is specified, MergeFlags, which treats the output as the result of a typical 'X-config' command (i.e. gtk-config), will merge the output into the appropriate variables. cSs|i||S(N(R(RtcmdR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt parse_confst N(RRRRRRR(RTRRRR{((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt ParseConfigs   c Cs|i|}yt|d}Wn"tj o|ondSXtii|i}g}|D]"}|ddjo ||qjqj~}g}xe|D]]} y| idd\} } Wntt fj oqX|i | i| ifqW|o_g} x|D]} | i | dqWt | djo ti id|| fqinx$|D]\} } |i| | qpWdS(s Parse a mkdep-style file for explicit dependencies. This is completely abusable, and should be unnecessary in the "normal" case of proper SCons configuration, but it may help make the transition from a Make hierarchy easier for some people to swallow. It can also be genuinely useful when using a tool that can write a .d file, but for which writing a scanner would be too complicated. RNiR5t:is2More than one dependency target found in `%s': %s(RtopentIOErrorRRt LogicalLinest readlinesRRdR3RIRRR>R?tDepends(RTtfilenamet must_existtonly_onetfptlinesRRKttdlisttlineRtdependsttargetsttd((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt ParseDependss: 6#  cCs%|i|}tii||S(N(RRR(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRsc Kst|}x|iD]\}}y|i|}Wn tj o||i|RR?((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytPrependENVPath#s $ c Kst|}xg|iD]Y\}}tii|ot|| }n||ijp|i|djo||i|R`R2RnRARRBRCRDRE((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt PrependUnique;s:  $  62 2 6cKswy|d}Wntj on%Xt|}|d=|id|t|}|it||i|dS(syReplace existing construction variables in an Environment with new construction variables and/or values. RN(R8R'RlR1R.RE(RTR`R:((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRds  cCs|id|}|id|}|id|}|id|}tiit|\}}|t| |jo|t|}n|t| |jo|t| }ntii||||S(s Replace old_prefix with new_prefix and old_suffix with new_suffix. env - Environment used to interpolate variables. path - the path that will be modified. old_prefix - construction variable for the old prefix. old_suffix - construction variable for the old suffix. new_prefix - construction variable for the new prefix. new_suffix - construction variable for the new suffix. Rs(RRtRRRRR(RTRt old_prefixt old_suffixt new_prefixt new_suffixRxR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt ReplaceIxests cKsCx/|iD]!}||ijo ||=q q W|i|dS(N(R(R5R(RTR`R/((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt SetDefaults  cCs"|ii|i|iiS(N(RyR6Rtsrcnodetabspath(RTttp((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt_find_toolpath_dirscKstii|of|i|}|djo|idg}ntt|i|}ti i |||}n||dS(NR( RRRRRRRRRR(RTRRR`((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs c Cs|djo,y|dd}Wq_tj oq_Xn'tii|o|i|}n|djo,y|dd}Wqtj oqXn'tii|o|i|}n|i|}tii||||}|o|SdS(sFind prog in the path. R8RtPATHEXTN(RR8RRRRRg(RTRiRtpathexttreject((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRgs&    cOsC|d}tt||}|i|}tii||S(NcSs*tii|o|i|}n|S(N(RRRR(taRT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt subst_strings(RRRRR(RTRVR`RRXR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs cCs|i||ii}tii|}h}x9g}|D]}||iq>~D]}d||~D]}d|| ,      $cGsUg}x-|D]%}|i|i||iiq Wx|D]}|iq=W|S(N(RRRyRtset_always_build(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt AlwaysBuilds#cOsUd}tiitii|d|jo|d|d<|d=n|i||S(NsqBuildDir() and the build_dir keyword have been deprecated; use VariantDir() and the variant_dir keyword instead.t build_dirt variant_dir(RR*R+tDeprecatedBuildDirWarningt VariantDir(RTRVR`R0((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytBuildDirs   cKs|i|}tii|S(N(RRR<(RTR`R((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR<scCs9ddk}|dj o|i|}n||_dS(Ni(tSCons.CacheDirRRR(RTRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR"s  cCsz|i||ii}|i||ii}xC|D];}yt|i|Wq7tj o|t|s cCsR|i||ii}|i||ii}x|D]}|i|q7W|S(s8Explicity specify that 'target's depend on 'dependency'.(RRyRtadd_dependency(RTRRRRkR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRNs cOss|i|}tii|o;g}x-|D]%}|i|ii|||q/W|S|ii|||S(s (RRRt is_SequenceRIRyR6(RTRRVR`RR.te((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR6Vs#cGsUg}x-|D]%}|i|i||iiq Wx|D]}|iq=W|S(s2Tags a target so that it will not be cleaned by -c(RRRyRt set_noclean(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytNoCleanas#cGsUg}x-|D]%}|i|i||iiq Wx|D]}|iq=W|S(s+Tags a target so that it will not be cached(RRRyRt set_nocache(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytNoCachejs#cOss|i|}tii|o;g}x-|D]%}|i|ii|||q/W|S|ii|||S(s (RRRRRIRyR(RTRRVR`RR.R((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRss#cKstii|i|S(N(Rt EnvironmentR(RTR`((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR~scOs|i|||}|gg|}t|tiioD|i}|io|id|}ntii d||i S|SdS(s:Directly execute an action through an Environment s: sscons: *** %s N( RRRR>t BuildErrorterrstrRRRRR(RTR RVR`R.R((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytExecutes  cOss|i|}tii|o;g}x-|D]%}|i|ii|||q/W|S|ii|||S(s (RRRRRIRyR(RTRRVR`RR.R((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs#cCsC|i|}|i||ii}tiii|t|S(N( RRRyR6RRvRwt find_fileR(RTtfiletdirsR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytFindFilescCstii|S(N(RRR(RTtsequence((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytFlattenscCsKttt|i||ii}tii|o|S|dSdS(Ni( RRRRRyRRRR(RTRR.((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt GetBuildPaths'cCs"|ii|i||||S(N(RytGlobR(RTtpatterntondiskRtstrings((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCsR|i||ii}|i||ii}x|D]}|i|q7W|S(sIgnore a dependency.(RRyRt add_ignore(RTRRRRkR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytIgnores cCstii|S(N(RRtLiteral(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscGsg}xy|D]q}t|tiio|i|i|q x7|i||iiD]}|i|i|q]Wq W|S(N(RRRvt set_localRIRRyR(RTRtretttargR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytLocals  cGsUg}x-|D]%}|i|i||iiq Wx|D]}|iq=W|S(N(RRRyRt set_precious(RTRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytPreciouss#cOs5|it||ii}|ii||dS(N(RRRyR6t Repository(RTRR`((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCsR|i||ii}|i||ii}x|D]}|i|q7W|S(sSpecify that 'prerequisite' must be built before 'target', (but 'target' does not actually depend on 'prerequisite' and need not be rebuilt if it changes).(RRyRtadd_prerequisite(RTRt prerequisiteRtplistR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytRequiress cOslg}xA|D]9}tii|o|i|}n|i|q W|i|}tii||S(N(RRRRRIRtScannerR (RTRVR`RXRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRss .sconsigncCs|dj oK|i|}tii|p%tiit|ii|}qXn|o`tii |}tii |}|o1tii | o|i t ii|qnt ii||dS(N(RRRtRtisabsRRRytSConstruct_dirtnormpathtdirnametexistsRRRtMkdirtSConsignR(RTRt dbm_modulet sconsign_dir((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt SConsignFiles )!cCs|i||ii}|i||ii}x|D]w}|io tiidt|n|i|d|_ |i |x|D]}|i i |qWq7W|S(sSTell scons that side_effects are built as side effects of building targets.s=Multiple ways to build the same target were specified for: %si( RRyRt multiple_side_effect_has_builderRR>R?Rt add_sourcet side_effectRt side_effectsRI(RTRRRR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt SideEffects     cCsYd}tiitii||i||ii}x|D]}|i|q>W|S(s7Arrange for a source code builder for (part of) a tree.s~SourceCode() has been deprecated and there is no replacement. If you need this function, please contact dev@scons.tigris.org.(RR*R+tDeprecatedSourceCodeWarningRRyRtset_src_builder(RTtentryRcR0tentries((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt SourceCodescCsto-dd}tiitii|tan|i|}||_|djo-tii pt dn|i |_ n.|djo|i |_ nt d|dS(Ns1The env.SourceSignatures() method is deprecated; s< convert your build to use the env.Decider() method instead.R`s;MD5 signatures are not available in this version of Python.t timestamps"Unknown source signature type '%s'(t"_warn_source_signatures_deprecatedRR*R+t!DeprecatedSourceSignaturesWarningRMRR/RRcR?RRRR\(RTRUR0((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytSourceSignaturess     cCsetii|ott|i|Stii|o|i|iS|i|gSdS(sQThis function converts a string or list into a list of strings or Nodes. This makes things easier for users by allowing files to be specified as a white-space separated list to be split. The input rules are: - A single string containing names separated by spaces. These will be split apart at the spaces. - A single Node instance - A list containing either strings or Node instances. Any strings in the list are not split at spaces. In all cases, the function returns a list of Nodes and strings.N(RRRRRRRR(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytSplits cCsto-dd}tiitii|tan|i|}||_|d jo-tii pt dn|i |_ nh|djo|i |_ nK|djo|i|_ n.|djo|i|_ nt d |dS( Ns1The env.TargetSignatures() method is deprecated; s< convert your build to use the env.Decider() method instead.R`Ras;MD5 signatures are not available in this version of Python.RtbuildRs"Unknown target signature type '%s'(sMD5scontent(t"_warn_target_signatures_deprecatedRR*R+t!DeprecatedTargetSignaturesWarningRMRR1RRcR?RRRR\RPRV(RTRUR0((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytTargetSignatures,s$       cCstiii||S(s (RRvtPythontValue(RTR3t built_value((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRBscCsR|i||iid}|i||iid}|ii|||dS(Ni(RRyR6R(RTRtsrc_dirt duplicate((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRGst.csT|i||iid}gfd|ittS(s- returns a list of all source files. icsx|D]}t|tiiio|iq|io|iqt|itiii oi |qqWdS(N( RRRvRwR6t all_childrent has_builderRt disambiguateRRI(tssR(Rt build_source(s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRRs (RRyRR Rtset(RTtnode((RRs4install/lib/scons-2.0.0.final.0/SCons/Environment.pytFindSourceFilesLs  cCsCddkl}|idjotii|i|_n|iS(sO returns the list of all targets of the Install and InstallAs Builder. i(tinstallN(t SCons.ToolRt_UNIQUE_INSTALLED_FILESRRRtuniquer_hashablest_INSTALLED_FILES(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pytFindInstalledFilesgsN(^RRR]tmemoizer_countersRRURR!R%RIRRt CountValueR&R-RER.R0R2RR7RttpathsepR@RFRJRNRPRRRVRXRZR\R]R_RfRjRlRrRyR}RRRRRRRRRRRgRRRRzRRR<RRRRRR6RRRRRRRRRRRMRRRRRRRRRRRRRRRRRR(((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR ps `         C  )0             (  A   )      5                       RcBseZdZhdZdZdZdZdZdZddZ dZ d Z d Z d Zd Zd ZdZdZRS(s$A proxy that overrides variables in a wrapped construction environment by returning values from an overrides dictionary in preference to values from the underlying subject environment. This is a lightweight (I hope) proxy that passes through most use of attributes to the underlying Environment.Base class, but has just enough additional methods defined to act like a real construction environment with overridden values. It can wrap either a Base construction environment, or another OverrideEnvironment, which can in turn nest arbitrary OverrideEnvironments... Note that we do *not* call the underlying base class (SubsitutionEnvironment) initialization, because we get most of those from proxying the attributes of the subject construction environment. But because we subclass SubstitutionEnvironment, this class also has inherited arg2nodes() and subst*() methods; those methods can't be proxied because they need *this* object's methods to fetch the values from the overrides dictionary. cCs+t|d||id<||idy|id|SWn$tj o|idi|SXdS(NRR(RfR8R(RTR2((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCs<t|ptiid|n||id|R?Rf(RTR2R3((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRls cCs|y|id|=Wntj o d}nXd}y|idi|}Wn'tj o|pnd}nX|S(NRiiR(RfR8RoR(RTR2tdeletedR.((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRos  cCsAy|id|SWn'tj o|idi||SXdS(s*Emulates the get() method of dictionaries.RRN(RfR8R(RTR2R((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCs?y|id|dSWn!tj o||idjSXdS(NRiR(RfR8(RTR2((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs cCs0|idi|odS|idi|S(NRiR(RfR(RTR2((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCs1|idii}|i|id|S(s,Emulates the items() method of dictionaries.RR(RfRlRRA(RTtd((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRlscCst|iiS(s,Emulates the items() method of dictionaries.(RRlR;(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR;scCs|idi|dS(s}Update an environment's values directly, bypassing the normal checks that occur when users try to set items. RN(RfRA(RTR-((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyR.scCs|idiS(NR(RfR(RT((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscCs+|idi}|i|id|S(NRR(RfRRA(RTR((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRscKs*t|}|idit|dS(NR(R1RfRAR'(RTR`((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRs N(RRR]RUReRgRRlRoRRRRRlR;R.RRR(((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyRos               cCs dtfdY}||S(Nt_NoSubstitutionProxycBsPeZdZdZdZdZdZdZdZdZ RS(cSs||idR?RR<RvRzR{RwRRRRR)RR1R4R7RDRFRGRORPR^R9tcompileRqRtRuRRRR RRR"(((s4install/lib/scons-2.0.0.final.0/SCons/Environment.pyt s                                ">#    k