,9Mc'@sdZdZddklZddkZddkZddkZddkZddkZddk Z ddk Z ddk Z ddk Z ddk Z yddkZWnej onXy eiWnej ode_nXyeieiWn%ej ode_de_nXy diWnOej oCyeid iWnej od Zn Xd Zn Xd ZddkZdd klZddkZddkZddkZddkZddkZddk Zddk!Zddkl"Z"e#Z$defdYZ%ddddZ&e'a(dZ)e'a*dZ+e+e'a,dZ-e-e.edo dZ/ne'Z/e.edo dZ0ne'Z0dZ1ddddd gZ2ga3d!Z4d"Z5ei6i6e5e'Z7d#Z8ei6i6e5e8Z9d$Z:ei6i6e:e'Z;d%Z<ei6i6e<e'd&e'Z=e'a>d'Z?d(fd)YZ@e@ZAe'aBe'aCd*ZDd+ZEe iFd,jZGeiHiId-eiHiJd-joeG o d.ZKn d/ZKd0fd1YZLd2ZMd3ZNd4ZOd5ZPd6ZQd7ZReLd8eMeNZSeLd9eOePZTeLd:eQeRZUeSeTeUgZVd;ZWd<ZXd=eiYiZfd>YZ[d?ei\i\fd@YZ]dAe]fdBYZ^e^Z_dCfdDYZ`dEe`fdFYZadGei\ibfdHYZcdIei\idfdJYZeeifdKZgdLZhdMe]fdNYZidOeifdPYZjdQei\ibfdRYZkdSei\idfdTYZldUe]fdVYZme'andWZodXfdYYZpepiqZqdZZrdS([s?scons.Node.FS File system nodes. These Nodes represent the canonical external objects that people think of when they think of building software: files and directories. This holds a "default_fs" variable that should be initialized with an FS that can be used by scripts or modules looking for the canonical default. s:src/engine/SCons/Node/FS.py 4629 2010/01/17 22:23:21 sconsi(tizipNsssttasciicCsti|d|dS(Nii(tcodecstlookup(tcontentstencoding((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt my_decodeZscCsti|i|S(N(RRtdecode(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR_scCs |i|S(N(R(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRcs(tlogInstanceCreation(tTracetEntryProxyAttributeErrorcBs eZdZdZdZRS(s An AttributeError subclass for recording and displaying the name of the underlying Entry involved in an AttributeError exception. cCs#ti|||_||_dS(N(tAttributeErrort__init__t entry_proxyt attribute(tselfRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR zs  cCs>|ii}d}||iit|it|ifS(Ns"%s instance %s has no attribute %s(Rtgett __class__t__name__treprtnameR(Rtentrytfmt((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt__str__~s   (Rt __module__t__doc__R R(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR us iii<cCs |adS(N(t Save_Strings(tval((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt save_stringsscCs$tiid\}}| adS(NsX:/foo(tostpatht splitdrivet do_splitdrive(tdriveR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytinitialize_do_splitdrivescCsCtidjo d}ndtiti}ti|adS(s Initialize the normpath_check regular expression. This function is used by the unit tests to re-initialize the pattern when testing for behavior with different values of os.sep. t/s .*/|\.$|\.\.$s.*[/%s]|\.$|\.\.$N(Rtseptretescapetcompiletneeds_normpath_check(tpattern((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytinitialize_normpath_checks tlinkcCsyxb|i|oQ|i|}tii|p |}qtiitii||}qW|i||dS(N(tislinktreadlinkRRtisabstjointdirnameR,(tfstsrctdstR,((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt_hardlink_funcs &tsymlinkcCs|i||dS(N(R6(R2R3R4((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt_softlink_funcscCsJti|||i|}|i|ti|titiBdS(N(tshutiltcopy2tstattchmodtS_IMODEtST_MODEtS_IWRITE(R2R3tdesttst((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt _copy_funcsshard-soft-copyssoft-hard-copys hard-copys soft-copytcopycCshtd<td<td<}|tjotiidngax:ti |dD]&}||oti ||qZqZWdS(NthardtsoftRBs;The argument of set_duplicate should be in Valid_Duplicatest-( R5R7RAtValid_DuplicatestSConstErrorst InternalErrort Link_Funcststringtsplittappend(t duplicatet link_dicttfunc((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt set_duplicates     c Cs|di}|di}tii|\}}|o)|dii| oti|ntptdn|di}xWtD]O}y||||PWqt t fj o|tdjoqqXqWdS(Nishard-soft-copyi( tabspathRRRLR2tisdirtmakedirsRJRQtIOErrortOSError( ttargettsourcetenvR3R?tdirtfileR2RP((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytLinkFunc s"   cCsd|d|dfS(NsLocal copy of %s from %si((RWRXRY((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt LocalString,scCs!|d}|ii|idS(Ni(R2tunlinkRR(RWRXRYtt((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt UnlinkFunc1s cCs2|d}|ip|ii|indS(Ni(texistsR2tmkdirRR(RWRXRYR_((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt MkdirFunc8s  tpresubcCsftdjoUddk}ddk}|iidtddddddd|iiddantS( NitactionRYtexplaint is_explicitttarget_scannerRt MkdirBuilder(RitNonet SCons.BuildertSCons.DefaultstBuildertMkdirtDefaultstDirEntryScanner(RG((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_MkdirBuilderBs     t_NullcBseZRS((RR(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRrQscCsWtdjoFddk}|iidd}|iid|ddddantS(Nis$SCCSCOMs $SCCSCOMSTRReRYRtDefaultSCCSBuilder(RsRjRktActionRm(RGtact((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_DefaultSCCSBuilderYs   cCsWtdjoFddk}|iidd}|iid|ddddantS(Nis $RCS_COCOMs $RCS_COCOMSTRReRYRtDefaultRCSBuilder(RwRjRkRtRm(RGRu((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_DefaultRCSBuilderes   tcygwintTeStcCs|S(N((tx((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt _my_normcasetscCs ti|S(N(RKtupper(R{((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR|wst DiskCheckercBs,eZdZdZdZdZRS(cCs)||_||_||_|idS(N(ttypetdotignoretset_do(RRRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR }s   cCs|i|_dS(N(Rt__call__(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCs|i|_dS(N(RR(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt set_ignorescCs,|i|jo|in |idS(N(RRR(Rtlist((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytsets(RRR RRR(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR~|s   cCsj|}y&|iddjo|id=nWnttfj onX|ot||indS(NR:(t_memoRjR tKeyErrort TypeErrorRR(tnodet predicateterrorfmttresult((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytdo_diskcheck_matchs cCsdS(N((RRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytignore_diskcheck_matchscCsuy |i}WnEtj o9|ido|id}nd}||_nX|o|i|dSndS(NtRCSs,v(trcs_dirR tentry_exists_on_disktDirRj(RRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytdo_diskcheck_rcss cCsdS(N(Rj(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytignore_diskcheck_rcsscCsuy |i}WnEtj o9|ido|id}nd}||_nX|o|id|SndS(NtSCCSss.(tsccs_dirR RRRj(RRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytdo_diskcheck_sccss cCsdS(N(Rj(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytignore_diskcheck_sccsstmatchtrcstsccscCs"xtD]}|i|qWdS(N(t diskcheckersR(Rtdc((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt set_diskcheckscCstdtS(NcSs|iS((R(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyts(tmapR(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytdiskcheck_typesst EntryProxycBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z hed <ed <ed<ed<e d<e d<e d<ed<ed<ed<ed<e d<e dy |iSWn,tj o t|}||_|SnXdS(N(t_proxyR R(Rtret((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_subst_proxys    cCs%|ii|||id|S(s1 Generates a target entry that corresponds to this entry (usually a source file) with the specified prefix and suffix. Note that this method can be overridden dynamically for generated files that need different behavior. See Tool/swig.py for an example. i(RZRR(RtprefixRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyttarget_from_sources cCs|S(N((Rtpathlist((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt_Rfindalldirs_key)st Rfindalldirsc Csy|id}Wn&tj oh}||idscCs|ii||S(N(R7tchanged_since_last_build(RRWtprev_ni((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR?scCs|ii||||S(N(R7R'(RR*R%RXR&((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR'scCs|iiS(N(R7R(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRsN(RRRR0RjR7RR8R9R:RRaR;R>R?R.R/R'R(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRks  #         tLocalFScBseZeiioeiiZndZdZdZ dZ dZ dZ dZ dZdZd Zd Zd Zd Zd ZdZdZdZdZeedo dZn dZeedo dZn dZRS(cCsti||S(N(RR;(RRtmode((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR; scCsti||S(N(R8RB(RR3R4((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRB scCsti||S(N(R8R9(RR3R4((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR9scCstii|S(N(RRRa(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRascCstii|S(N(RRR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCstii|S(N(RRR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCstii|S(N(RRRS(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRSscCstii|S(N(RRR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCsti||S(N(RR,(RR3R4((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR,scCs ti|S(N(RR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCs ti|S(N(Rtlistdir(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRCscCs ti|S(N(RRT(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRT scCs ti|S(N(RRb(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRb"scCsti||S(N(Rtrename(Rtoldtnew((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRD$scCs ti|S(N(RR:(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR:&scCsti||S(N(RR6(RR3R4((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR6(scCs t|S(N(topen(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRG*scCs ti|S(N(RR^(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR^,sR6cCstii|S(N(RRR-(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR-0scCsdS(Ni((RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR-3sR.cCs ti|S(N(RR.(RR[((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR.7scCsdS(NR((RR[((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR.:s(RRRGR)t use_memoizertMemoized_Metaclasst __metaclass__R;RBR9RaRRRSRR,RRCRTRbRDR:R6RGR^R,RR-R.(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRAs4                      tFScBseZgZddZdZdZdZdZddZ dZ dd Z ddd Z ddd Z ded Zdd ZdZdZeeeddZRS(cCst|dh|_h|_d|_t|_d|_|djoti |_ n ||_ t ti i |i d|_|i|i |_d|i_ d|i_|i|_|t_|t_dS(sInitialize the Node.FS subsystem. The supplied path is the top of the source tree, where we expect to find the top-level build file. If no path is supplied, the current directory is the default. The path argument must be a valid absolute path. sNode.FSiRN(R RtRootRjtSConstruct_dirtdefault_max_driftt max_drifttTopRRtpathTopR|RR t defaultDriveRRR t DirNodeInfoR2t FileNodeInfo(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR Ks        "    cCs ||_dS(N(RM(RRZ((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytset_SConstruct_dirkscCs|iS(N(RO(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt get_max_driftnscCs ||_dS(N(RO(RRO((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt set_max_driftqscCs|iS(N(R (R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRtsicCsh|i}y9|dj o(||_|oti|iqAnWntj o||_nXdS(sChange the current working directory for lookups. If change_os_dir is true, we will also change the "real" cwd to match. N(R RjRtchdirRRRV(RRZt change_os_dirtcurr((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRXws    cCst|}y|i|SWnotj oct||}||i|<|p||i|id3Z?ee@e@d4ZAee@e@d5ZBRS(7s.A class for directories in a file system. cCs1t|dti|||||idS(Ns Node.FS.Dir(R RR R1(RRRR2((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR fs cCsg|_d|_h|_||id<|i|id<||_d|_d|_g|_|ii |_ t |_ |i i |i idS(sWTurn a file system Node (either a freshly initialized directory object or a separate Entry object) into a proper directory object. Set up this directory's entries and hook it into the file system tree. Specify that directories (this Node) don't use signatures for calculating whether they're current. Rs..iN(t repositoriesRjRR#RZRtsearchedt _sconsignRoR\RqRt get_executortset_action_listRe(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR1ks         cCst||iddS(Ns'File %s found where directory expected.(R0R(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR0s cCsx|iiD]}||ijov||jo!t|to|i|q|iy |`Wntj onX|dj o ||_ qqqWdS(sCalled when we change the repository(ies) for a directory. This clears any cached information that is invalidated by changing the repository.N( R#tvaluesRZRRt_Dir__clearRepositoryCacheR3t_srcrepsR RjRN(RRNR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt__clearRepositoryCaches   cCs'||jo|ii|_ndS(N(RRN(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt__resetDuplicates cCs|ii||S(sd Looks up or creates an entry node named 'name' relative to this directory. (R2R(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCs|ii|||S(sg Looks up or creates a directory node named 'name' relative to this directory. (R2R(RRRd((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCs|ii||S(sb Looks up or creates a file node named 'name' relative to this directory. (R2R2(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR2sicCs%|i|}|ii|||S(s( Looks up a *normalized* relative path name, relative to this directory. This method is intended for use by internal lookups with already-normalized path data. For general-purpose lookups, use the Entry(), Dir() and File() methods above. This method does *no* input checking and will die or give incorrect results if it's passed a non-normalized path name (e.g., a path containing '..'), an absolute path name, a top-relative ('#foo') path name, or any kind of object. (RR\Ra(RRRRd((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt _lookup_relscCs3||_||_|i||ii|dS(sVSet this directory as the variant directory for the supplied source directory.N(RRNRRoRM(RRRN((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR,s   cCs4|io#|i o|ii|iSn|iS(s;Returns a list of repositories for this directory. (RRNRR(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytgetRepositoriessRcCsyt|idSWntj onX|g}d}|}xs|okx*|iD]}|i|i|qWW|djo |i}n|iti|}|i }qCWt||id<|S(NRR( RRRRRMRRRR%Rq(RRtfnameRZtrep((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRs$    cCsH||jo7||ijo'|ii|d|_|indS(NR(RRMRR(RRZ((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRls cCs |idS(Ns..(R#(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRqscCs t|S(N(R_(RR<((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt _rel_path_keysR;c Cszy|id}Wn&tj oh}||idd=Z?eieiid>d?Z@d@ZAdAZBdBZCRS(Cs(A class for files in a file system. i@cCst||iddS(Ns'Directory %s found where file expected.(R0RS(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR0s cCs1t|dti|||||idS(Ns Node.FS.File(R RR R1(RRRR2((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR s cCs|ii|S(sQCreate an entry node named 'name' relative to the directory of this file.(RZR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCs|ii|d|S(sTCreate a directory node named 'name' relative to the directory of this file.Rd(RZR(RRRd((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRscCst|d|S(sWCreate a list of directories relative to the SConscript directory of this file.cSs |i|S((R(RbR|((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRs(R(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytDirsscCs|ii|S(sOCreate a file node named 'name' relative to the directory of this file.(RZR2(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR2scCsGh|_t|dp d|_n|io|i|_ndS(s+Turn a file system node into a File object.RiN(t scanner_pathsR,RR t decide_targetR?(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR1 s   cCs |iS(N(R(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR8 scCss|ipdSn|ii}yt|di}Wn/tj o#}|ip ||_nnX|S(NRtrb(RRRRRGtreadtEnvironmentErrorR(RRRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR9 s   iNcCs|i}|itio&|tti}t|d}ns|itio&|tti}t|d}n:|itio&|tti}t|d}n|S(Nsutf-8s utf-16-les utf-16-be(R9t startswithRtBOM_UTF8RRt BOM_UTF16_LEt BOM_UTF16_BE(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR:+ s cCs|iptiidSn|ii}y,tii|dtiii i d}Wn/t j o#}|i p ||_ nnX|S(s@ Compute and return the MD5 hash for this file. Rt chunksizei( RRGRRRRRtMD5filesignatureRRKR2t md5_chunksizeRR(RRtcsR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_content_hashD s   tget_sizecCs_y|idSWntj onX|io|ii}nd}||id<|S(NRi(RRRRR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRW s  RcCs_y|idSWntj onX|io|ii}nd}||id<|S(NRi(RRRRR(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRh s  cCs+to |iii|i|ndS(N(t do_store_infoRZRt store_infoR(R((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRw sRRRRRtninfoRRRc CsJddk}|ii}|i|_|i}xZ|iD]O}yt||}Wntj o q=nXt|||t ||q=Wx|i D]}yt||}Wntj o qnXg}xP|D]H}|i } t |djo || _ n || _|i| qWt|||t ||qW|S(Nii (RRt SConsignEntryt new_binfotbinfotconvert_copy_attrsRR Rtdelattrtconvert_sig_attrsR>RRRRM( Rt old_entryRGt new_entryRRtvaluetsig_listtsigR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytconvert_old_entry s:D       tget_stored_infoc Csy|idSWntj onXy|iii|i}WnRttfj o@ddk}|ii }|i |_ |i |_ nOXt|to|i|}nyt|i dWntj onX||id<|S(NRitbsig(RRRZRt get_entryRRRRRRRR>RRRRRR (Rtsconsign_entryRG((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR s&  cCsB|ii}|iy |iSWntj o dSnXdS(N(RRRRR Rj(RR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytget_stored_implicit s   cCs|ii|S(N(RZR;(RR<((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR; scCst|t||fS(N(tid(RRYRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyt_get_found_includes_key sRc Cst|t||f}y|id}Wn&tj oh}||id [nodes] filename - a filename to find paths - a list of directory path *nodes* to search in. Can be represented as a list, a tuple, or a callable that is called with no arguments and returns the list or tuple. returns - the node created from the found file. Find a node corresponding to either a derived file or a file that exists already. Only the first file found is returned, and none is returned if no file is found. Res %s: cSstii||S((Rtstdouttwrite(R|tv((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR1 sslooking for '%s' in '%s' ... s... FOUND '%s' in '%s' N(RdRRtcallableRGRt is_StringRRRLR_RRjRR`R( RRRbRcR'RtfiledirRRZRR=((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyRe s@      N(RRRRGR)RHRIRJR(R RjR`RdRMR-Re(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pyR^ s   # c Csddkl}x@|D]1}|ddjo|dddjoPqqWdStii|p |g}nxY|D]Q}y|iWqztj o.ti|}|o|iqqzXqzWdS( s Invalidate the memoized values of all Nodes (files or directories) that are associated with the given entries. Has been added to clear the cache of nodes affected by a direct execution of an action (e.g. Delete/Copy/Chmod). Existing Node caches become inconsistent if the action is run through Execute(). The argument `targets` can be a single Node object or filename, or a sequence of Nodes/filenames. i(t extract_stackitExecuteiisEnvironment.pyN( t tracebackRlRGRtis_ListR*R R]R(RtRltfRR((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pytinvalidate_node_memosh s  &  (sRt __revision__t itertoolsRt cStringIORRtos.pathR&R8R:RKRRCRR[RR RR RRRt SCons.ActionRGt SCons.DebugR t SCons.Errorst SCons.Memoizet SCons.NodetSCons.Node.Aliast SCons.Substt SCons.UtiltSCons.WarningsR R.RR RNRjRRR!R#R)R+R,R5R7RARFRJRQR\RtR@R]RNR`R:RcRnRiRqRrRRsRwRvRxRt _is_cygwinRtnormcaseR`R|R~RRRRRRR0RRRRRRRRRRRt _classEntryRARKt NodeInfoBaseRSt BuildInfoBaseRR(RRRR[RTRR2R\R]R^ReRq(((s2install/lib/scons-1.2.0.d20100117/SCons/Node/FS.pys s                                     -         b8R yI