;ς όšBc@sYdkZdkZdkZdkTdkTdkTdfd„ƒYZd„Zd„ZdS(N(s*sDependcBs)tZeed„Zd„Zd„ZRS(Nc Cs°||_||_||_||_||_|tjoti ƒ|_n ||_||_ d|_ t|_ d|_d|_d|_|i|iƒ|i|iƒdS(Nis(s targetlistsselfs build_attrs sourcelistsrpstackscommandssbuilddirsNonesossgetcwdsrecdicts buildrecdictskeep_current_scopes use_recdictsmatchstrsstartupsin_usesworksdictlist_nodes( sselfs targetlists build_attrs sourcelistsworksrpstackscommandssbuilddirsrecdict((s+/mnt/gmirror/ports/devel/aap/work/Depend.pys__init__!s              cCsMdkl}l}||iƒd||iƒ||iƒd|iSdS(N(s dictlist2strsdictlistattr2strs : s (sDictlists dictlist2strsdictlistattr2strsselfs targetlists build_attrs sourcelistscommands(sselfsdictlistattr2strs dictlist2str((s+/mnt/gmirror/ports/devel/aap/work/Depend.pys__str__;scCs²|iidƒ}|o |g}ng}x{|iD]p}|idƒo|i|dƒq6|i |dƒ}|o|i idƒo|i|i dƒq6q6W|SdS(sΆ Get the list of scope names to be used for build commands. First the one specified as build attribute. A scope specified for a source is appended. sscopesnameN( sselfs build_attrsgetsxscopesrets sourcelistsssappendsworks find_nodesnodes attributes(sselfsworksnodesxscopesretss((s+/mnt/gmirror/ports/devel/aap/work/Depend.pysget_scope_namesDs  (s__name__s __module__sNones__init__s__str__sget_scope_names(((s+/mnt/gmirror/ports/devel/aap/work/Depend.pysDepend s cCsŒ|didƒdjp,|iidƒdjp|idƒdjog|_dSn|idƒ}| o|i|ƒ}n| o1t|t dƒ|i ƒ|ƒg|_dSn|djog|_dSnd k l }|||||||ƒ}| og|_dSntii|iƒ o+t|t d ƒ|iƒg|_dSn|i ot|||iƒƒ|_ndS( sK Find the implied dependencies for "node". "node_dict" contains attributes specified for the node specifically for the current dependency. They overrule attributes from the node itself. The dependencies are returned in node.autodep_dictlist. If "node" changed since last time, regenerate the dependencies. s_nos AUTODEPENDsoffs autodependNsfiletypes2Unknown type of file, no dependency check for "%s"signore(sbuild_autodepends%Dependency file was not created: "%s"(srecdictsgetsnodes attributess node_dictsautodep_dictlistsftypes get_ftypes msg_depends_s short_nameslevelsDoBuildsbuild_autodependsworksrecipesosspathsexistssnames msg_warningsautodep_recursivesread_auto_dependsget_name(sworksrecdictsnodes node_dictslevelsrecipesftypesbuild_autodepend((s+/mnt/gmirror/ports/devel/aap/work/Depend.pys depend_auto]s:I         cCs‘yt|iƒ} Wn%t|tdƒ|iƒgSnXdkl}dkl}||iƒg} || d| ƒ} | i ƒ| i t jo"t|tdƒ|iƒgSnti| i dƒ} tidjo | djoti| i dd ƒ} n| d jo"t|td ƒ|iƒgSng} | d| ijo d }| d} d }d }d }t| i ƒ}xhno`| |jpt| i | ƒos|oD|o|d }n|djo|t|ƒ}qσ||}n| |joPnd }d }d }nΏ| i | djo.| d|jot| i | dƒo| o%| d} d}|| i | }nU| i | djp| i | djod}|| i | }n|| i | }| d} q‡Wdkl}|| |ƒ} xO| D]B}tii |dƒ|d<|d|jo| i"|ƒq q Wn| i ƒ| i t j ot#|tdƒ|iƒn| i$ƒ| SdS(s: Read a generated recipe file from node "recipe". We only want the part after the ":", the item before it may be wrong (gcc generates foo.o: foo.c foo.h). Ignore "skipname". Don't read the recipe as a normal recipe, that would cause trouble with things we don't want to find in there. sCannot open "%s" for reading.(sParsePos(sRecPossfilesNothing to read from "%s".s:sposixiiisNo colon found in "%s".ss s\s"s'(s str2dictlistsnamesFound trailing text in "%s"N(%sopensrecipesnamesfds msg_errorsrecdicts_sParsePossRecPossrpstacksfpsnextlineslinesNones msg_dependsstringsfindsisossautodep_dictlistsline_lensnlsitemshad_bslshad_qslensis_whitesenquotesDictlists str2dictlistskspathsabspathsskipnamesremovesmsg_notesclose(srecdictsrecipesskipnameshad_bsls str2dictlistshad_qsnlsRecPossParsePossfpsautodep_dictlistsrpstacksfdsisksitemsline_len((s+/mnt/gmirror/ports/devel/aap/work/Depend.pysread_auto_depend—s~     !   E (   ( sossos.pathsstringsErrorsUtilsMessagesDepends depend_autosread_auto_depend(sDependsread_auto_depends depend_autosossstring((s+/mnt/gmirror/ports/devel/aap/work/Depend.pys?s   = :