Ë +€Û]ÉL~³ãó”—dZddlmZddlZddlmZddlZddlZddl Z ddl Z dZ dZ dZ dZdZd Zd Zd Zej&j)«ZdZiZd D]Zd ee<Œ dD]Zdee<Œ d„Zd„Zd„Zd„Zd„Zd„ZGd„de «Z!Gd„de «Z"d„Z#d„Z$d„Z%d„Z&d„Z'd„Z(d „Z)d!„Z*d"„Z+d#„Z,d$„Z-d%„Z.d&„Z/d'„Z0Gd(„d)e «Z1d*„Z2y)+aŠ This script is intended for use as a GYP_GENERATOR. It takes as input (by way of the generator flag config_path) the path of a json file that dictates the files and targets to search for. The following keys are supported: files: list of paths (relative) of the files to search for. test_targets: unqualified target names to search for. Any target in this list that depends upon a file in |files| is output regardless of the type of target or chain of dependencies. additional_compile_targets: Unqualified targets to search for in addition to test_targets. Targets in the combined list that depend upon a file in |files| are not necessarily output. For example, if the target is of type none then the target is not output (but one of the descendants of the target will be). The following is output: error: only supplied if there is an error. compile_targets: minimal set of targets that directly or indirectly (for targets of type none) depend on the files in |files| and is one of the supplied targets or a target that one of the supplied targets depends on. The expectation is this set of targets is passed into a build step. This list always contains the output of test_targets as well. test_targets: set of targets from the supplied |test_targets| that either directly or indirectly depend upon a file in |files|. This list if useful if additional processing needs to be done for certain targets after the build, such as running tests. status: outputs one of three values: none of the supplied files were found, one of the include files changed so that it should be assumed everything changed (in this case test_targets and compile_targets are not output) or at least one file was found. invalid_targets: list of supplied targets that were not found. Example: Consider a graph like the following: A D / B C A depends upon both B and C, A is of type none and B and C are executables. D is an executable, has no dependencies and nothing depends on it. If |additional_compile_targets| = ["A"], |test_targets| = ["B", "C"] and files = ["b.cc", "d.cc"] (B depends upon b.cc and D depends upon d.cc), then the following is output: |compile_targets| = ["B"] B must built as it depends upon the changed file b.cc and the supplied target A depends upon it. A is not output as a build_target as it is of type none with no rules and actions. |test_targets| = ["B"] B directly depends upon the change file b.cc. Even though the file d.cc, which D depends upon, has changed D is not output as it was not supplied by way of |additional_compile_targets| or |test_targets|. If the generator flag analyzer_output_path is specified, output is written there. Otherwise output is written to stdout. In Gyp the "all" target is shorthand for the root targets in the files passed to gyp. For example, if file "a.gyp" contains targets "a1" and "a2", and file "b.gyp" contains targets "b1" and "b2" and "a2" has a dependency on "b2" and gyp is supplied "a.gyp" then "all" consists of "a1" and "a2". Notice that "b1" and "b2" are not in the "all" target as "b.gyp" was not directly supplied to gyp. OTOH if both "a.gyp" and "b.gyp" are supplied to gyp then the "all" target includes "b1" and "b2". é)Úprint_functionNFzFound dependencyzNo dependencieszFound dependency (all)éééé)ÚINTERMEDIATE_DIRÚSHARED_INTERMEDIATE_DIRÚ PRODUCT_DIRÚLIB_DIRÚSHARED_LIB_DIRú!!!) ÚRULE_INPUT_PATHÚRULE_INPUT_ROOTÚRULE_INPUT_NAMEÚRULE_INPUT_DIRNAMEÚRULE_INPUT_EXTÚEXECUTABLE_PREFIXÚEXECUTABLE_SUFFIXÚSTATIC_LIB_PREFIXÚSTATIC_LIB_SUFFIXÚSHARED_LIB_PREFIXÚSHARED_LIB_SUFFIXÚCONFIGURATION_NAMEÚcóv—tjdk(r%tjdk(r|jdd«S|S)z*Converts a path to the format used by gyp.Ú\Ú/)ÚosÚsepÚaltsepÚreplace)Úpaths ú;/usr/lib/python3.12/site-packages/gyp/generator/analyzer.pyÚ _ToGypPathr$rs.€ä‡V�Vˆt‚^œŸ ™  SÒ(Ø �<‰<˜˜cÓ "Ð"Ø €+ócóê—d}|jd«r|dz }|dd}|jd«rŒ|t|«kDry|t|«k(r|Sdj|dt|«|z «dz|zS)z¶Resolves |path|, which starts with at least one '../'. Returns an empty string if the path shouldn't be considered. See _AddSources() for a description of |base_path_components|.rú../rrNrr)Ú startswithÚlenÚjoin)r"Úbase_path_componentsÚdepths r#Ú_ResolveParentr-ys‘€ð €%Ø �‰˜ÔØ ˆQ�J€EØ ��ˆ8€Dð �‰˜Õð  ŒSÐ%Ó &Ò&Ø Ø ŒcÐ&Ó'Ò'Ø €KØ �‰Ð& q¬Ð-AÓ)BÀUÑ)JÐKÓ LØ ñ Ø ñ ðr%c óŠ—|D]¾}t|«r"|jd«s|jd«rŒ1|}|d|ddjdd«z}|jd«r)t||«}t|«r|j |«Œˆ|j ||z«t sŒ£t d ||t|«dz «ŒÀy) a‘Extracts valid sources from |sources| and adds them to |result|. Each source file is relative to |base_path|, but may contain '..'. To make resolving '..' easier |base_path_components| contains each of the directories in |base_path|. Additionally each source may contain variables. Such sources are ignored as it is assumed dependencies on them are expressed and tracked in some other means.r Ú$rrNz//rr'Ú AddSource)r)r(r!r-ÚappendÚdebugÚprint)ÚsourcesÚ base_pathr+ÚresultÚsourceÚ org_sources r#Ú _AddSourcesr9‹s¶€ó€fÜ ˆvŒ;˜&×+Ñ+¨EÔ2°f×6GÑ6GÈÔ6LØà€JØ �A‰Y˜  ˜×+Ñ+¨D°#Ó6Ñ 6€FØ ×јÔܘfÐ&:Ó;€fÜ ˆVŒØ� ‰ �fÔØØ ‡M�M�)˜fÑ$Ô%Þ Ü ˆK˜ V¬C°«K¸!©OÑ%<Õ=ñr%có0—d|vrt|d|||«yy)NÚinputs)r9)Úactionr5r+Úresultss r#Ú_ExtractSourcesFromActionr>£s#€à �ÑÜ��xÑ  )Ð-AÀ7ÕKðr%cón—||k(ry|j|dz«r|t|«td«zdS|S)z5Converts |path| to a path relative to |toplevel_dir|.rrN)r(r))Ú toplevel_dirr"s r#Ú _ToLocalPathrA©s?€à ˆ\ÒØ Ø ‡_�_�\ CÑ'Ô(Ø ”�LÓ!¤C¨£HÑ,Ð-Ð .Ð.Ø €+r%có\—tjt|t|«««}|j d«}t |«r|dz }t r td||«g}d|vrt|d|||«d|vr|dD]}t||||«Œd|vr|dD]}t||||«Œ|S)NrÚExtractSourcesr4ÚactionsÚrules) Ú posixpathÚdirnamerAr$Úsplitr)r2r3r9r>)ÚtargetÚ target_dictr@r5r+r=r<Úrules r#Ú_ExtractSourcesrL²sЀô×Ѥ ¨\¼:ÀfÓ;MÓ NÓO€)Ø"Ÿ™¨Ó-Ðô ˆ„^Ø �Ñ€Iå Ü Ð ˜F IÔ.à €'Ø�+ÑÜ� ˜IÑ&¨ Ð3GØôð�+ÑØ˜iÔ(ˆÜ ¨ Ð3GØ 'õ)ð)ð � ÑØ˜GÔ$ˆÜ  iÐ1EÀwÕOð%ð €.r%có—eZdZdZd„Zy)ÚTargetaAHolds information about a particular target: deps: set of Targets this Target depends upon. This is not recursive, only the direct dependent Targets. match_status: one of the MatchStatus values. back_deps: set of Targets that have a dependency on this Target. visited: used during iteration to indicate whether we've visited this target. This is used for two iterations, once in building the set of Targets and again in _GetBuildTargets(). name: fully qualified name of the target. requires_build: True if the target type is such that it needs to be built. See _DoesTargetTypeRequireBuild for details. added_to_compile_targets: used when determining if the target was added to the set of targets that needs to be built. in_roots: true if this target is a descendant of one of the root nodes. is_executable: true if the type of target is executable. is_static_library: true if the type of target is static_library. is_or_has_linked_ancestor: true if the target does a link (eg executable), or if there is a target in back_deps that does a link.cóÆ—t«|_t|_t«|_||_d|_d|_d|_d|_ d|_ d|_ d|_ y)NF) ÚsetÚdepsÚMATCH_STATUS_TBDÚ match_statusÚ back_depsÚnameÚvisitedÚrequires_buildÚadded_to_compile_targetsÚin_rootsÚ is_executableÚis_static_libraryÚis_or_has_linked_ancestor)ÚselfrUs r#Ú__init__zTarget.__init__äs[€Ü“€D„IÜ(€DÔÜ“U€D„NØ€D„Ið€D„LØ€DÔØ$)€DÔ!Ø€D„MØ€DÔØ"€DÔØ%*€DÕ"r%N)Ú__name__Ú __module__Ú __qualname__Ú__doc__r^©r%r#rNrNÑs „ñ;ó$ +r%rNcó—eZdZdZd„Zd„Zy)ÚConfigzoDetails what we're looking for files: set of files to search for targets: see file description for details.cól—g|_t«|_t«|_t«|_y©N)ÚfilesrPÚtargetsÚadditional_compile_target_namesÚtest_target_names©r]s r#r^zConfig.__init__øs&€Ø€D„JÜ“5€D„LÜ+.«5€DÔ(Ü ›U€DÕr%có—|jdi«}|jdd«}|sy t|d«}tj|«}|j «t|t«s t d«‚|jdg«|_ t|jd g««|_ t|jd g««|_y#t $rt d|z«‚t$r}t d|zt|«z«‚d}~wwxYw) zfInitializes Config. This is a separate method as it raises an exception if there is a parse error.Úgenerator_flagsÚ config_pathNÚrzUnable to open file zUnable to parse config file z7config_path must be a JSON file containing a dictionaryrhÚadditional_compile_targetsÚ test_targets)ÚgetÚopenÚjsonÚloadÚcloseÚIOErrorÚ ExceptionÚ ValueErrorÚstrÚ isinstanceÚdictrhrPrjrk)r]ÚparamsrnroÚfÚconfigÚes r#ÚInitz Config.Initþsú€ð—j‘jÐ!2°BÓ7€OØ!×%Ñ% m°TÓ:€KÙ Ø ðMÜ ˆ{˜CÓ €aÜ�y‰y˜‹|€f؇g�g„iô �fœdÔ #Ü ÐOÓ PÐPØ—‘˜G RÓ(€D„JÜ+.Ø ‡j�jÐ-¨rÓ2ó,4€DÔ(ä  §¡¨N¸BÓ!?Ó@€DÕøô ò<Ü Ð,¨{Ñ:Ó ;Ð;Ü òMÜ Ð4°{ÑBÄSÈÃVÑKÓ LÐLûðMús©1C à D Ã,DÄD N)r_r`rarbr^r‚rcr%r#rereôs„ñ0ò#ó Ar%recó<—t|t|««|vrtr td|«yt ||d«dkry||dddD]O}tt j j||««}t||«|vsŒ;trtd|d|«yy) z¯Returns true if the build file |build_file| is either in |files| or one of the files included by |build_file| is in |files|. |toplevel_dir| is the root of the source tree.zgyp file modifiedTÚincluded_filesrFNz%included gyp file modified, gyp_file=zincluded file=)rAr$r2r3r)ÚgypÚcommonÚUnrelativePath)Ú build_fileÚdatarhr@Ú include_fileÚrel_include_files r#Ú_WasBuildFileModifiedrŒs°€ô�,¤ ¨:Ó 6Ó7¸5Ñ@Ý Ü Ð  Ô,Ø ô ˆˆjÑ Ð*Ñ +Ó,°Ò1Ø à˜:Ñ&Ð'7Ñ8¸¸Ó<€lô ”3—:‘:×,Ñ,¨\¸:ÓFÓGðä�LÐ"2Ó3°uÒ<Ý Ü Ð5°zØ Ð.ô 0á ð=ð r%có@—||vrd||fSt|«}|||<d|fS)z¶Creates or returns the Target at targets[target_name]. If there is no Target for |target_name| one is created. Returns a tuple of whether a new Target was created and the Target.FT)rN)riÚ target_namerIs r#Ú_GetOrCreateTargetByNamer�.s:€ð�GÑØ �'˜+Ñ&Ð &Ð&Ü �+Ó €&Ø€'ˆ+ÑØ ˆvˆÐr%cóp—t|ddk7xs$|jd«xs|jd««S)zBReturns true if the target type is such that it needs to be built.ÚtypeÚnonerDrE)Úboolrs)rJs r#Ú_DoesTargetTypeRequireBuildr”9sC€ô ˆk˜&Ñ! VÑ+òEØ�o‰o˜iÓ(òEØ,7¯O©O¸GÓ,Dó FðFr%cóp—i}g}|dd}i} t«} t«} t|«dkD�r|j«} t|| «\} }| r| j |«n |j rŒOd|_t || «|_|| d}|dk(|_|dk(|_ |dk(xs|dk(|_ tjj| «d}|| vrt||||«| |<||vr| j |«| |r)td| «t |_|j%|«nmt'| || |«}|D]X}t)t*j,j/|««|vsŒ.td | d |«t |_|j%|«n|| j1d g«D]k}|j%|«t||«\}}|s| j3|«|j4j |«|j6j |«Œmt|«dkDr�Œ||| | zfS) a¹Returns a tuple of the following: . A dictionary mapping from fully qualified name to Target. . A list of the targets that have a source file in |files|. . Targets that constitute the 'all' target. See description at top of file for details on the 'all' target. This sets the |match_status| of the targets that contain any of the source files in |files| to MATCH_STATUS_MATCHES. |toplevel_dir| is the root of the source tree.NrTr‘Ú executableÚstatic_libraryÚshared_libraryz(matching target from modified build filerIÚmatchesÚ dependencies)rPr)Úpopr�ÚaddrVr”rWrZr[r\r…r†ÚParseQualifiedTargetrŒr3ÚMATCH_STATUS_MATCHESrSr1rLr$rr"ÚnormpathrsÚdiscardrQrT)r‰Ú target_listÚ target_dictsr@rhÚ build_filesÚname_to_targetÚmatching_targetsÚtargets_to_visitÚbuild_file_in_filesÚrootsÚbuild_file_targetsrŽÚcreated_targetrIÚ target_typerˆr4r7ÚdepÚcreated_dep_targetÚ dep_targets r#Ú_GenerateTargetsr¯@sg€ð€.ðÐð!¡�^ÐðÐô ‹%€%ô“uÐä Ð Ó Ó!Ø"×&Ñ&Ó(€KÜ5°nØ6AóCÑ€N�FáØ ‡i�i�ÕØ �ŠØà€F„NÜ7Ø�[Ñ!ó#€FÔà˜{Ñ+¨FÑ3€KØ&¨,Ñ6€FÔØ*Ð.>Ñ>€FÔØ(3°|Ñ(Cò)HØ(3Ð7GÑ(Gð Ô$ô—‘×0Ñ0°Ó=¸aÑ@€JØ Ð,Ñ ,ä   ¨D°%¸Ó Fð˜*Ñ%ð�[Ñ Ø×јVÔ$ð˜:Ò&Ü Ð 6¸ ÔDÜ0€fÔØ×јfÕ%ä  ¨\¸+Ñ-FØ ,ó.€gãˆ&Ü ”b—g‘g×&Ñ& vÓ.Ó /°5Ò 8Ü �˜+ y°&Ô 9Ü 4ˆ&Ô Ø × !Ñ ! &Ô )Ù ð ð˜KÑ(×,Ñ,¨^¸RÖ@ˆØ×јcÔ"ä'?ÀØ@Có(EÑ$И*á Ø � ‰ �jÔ!à ‡k�k‡o�o�jÔ!Ø×Ñ×јvÕ&ðAôW Ð Ó Ô!ðl Ð)¨5Ð3EÑ+EÐ EÐEr%có:—i}|sigfSt|«}|j«D]_}tjj |«}t |«dkDsŒ1|d|vsŒ9|j |d«||||d<|rŒ[|gfcS||D�cgc]}|‘Œc}fScc}w)zÉReturns a tuple of the following: . mapping (dictionary) from unqualified name to Target for all the Targets in |to_find|. . any target names not found. If this is empty all targets were found.r)rPÚkeysr…r†r�r)Úremove)Ú all_targetsÚto_findr6rŽÚ extractedÚxs r#Ú_GetUnqualifiedToTargetMappingr·–s«€ð €&Ù Ø ˆrˆ6€MÜ �‹L€'Ø ×%Ñ%Ö'€kÜ— ‘ ×/Ñ/° Ó<€IÜ ˆ9ƒ~˜Ó˜i¨™l¨gÒ5Ø ‡n�n�Y˜q‘\Ô"Ø(¨Ñ5€fˆY�q‰\ÑÚ Ø�rˆzÒð (ð ™WÓ%™W˜’!˜WÑ%Ð %Ð%ùÒ%s Bcó&—|jtk(ry|jtk(s|jtk(ry|jD]<}t |«sŒt|_t d|jd|j«yt|_y)zÙReturns true if |target| or any of its dependencies is one of the targets containing the files supplied as input to analyzer. This updates |matches| of the Targets as it recurses. target: the Target to look for.FTÚ zmatches by dep)rSÚMATCH_STATUS_DOESNT_MATCHržÚ"MATCH_STATUS_MATCHES_BY_DEPENDENCYrQÚ"_DoesTargetDependOnMatchingTargetsr3rU)rIr¬s r#r¼r¼©s|€ð  ×ÑÔ5Ò5Ø Ø ×ÑÔ0Ò0Ø ×ÑÔ?Ò?Ø Ø �[Œ[€cÜ)¨#Õ.Ü>€fÔÜ ˆD�&—+‘+Ð/°·±Ô:Ù ð ô 2€&ÔØ r%cóh—g}td«|D]}t|«sŒ|j|«Œ!|S)zàReturns the list of Targets in |possible_targets| that depend (either directly on indirectly) on at least one of the targets containing the files supplied as input to analyzer. possible_targets: targets to search from.z#Targets that matched by dependency:)r3r¼r1)Úpossible_targetsÚfoundrIs r#Ú%_GetTargetsDependingOnMatchingTargetsrÀ¼s7€ð €%ÜÐ-Ô.Û €fÜ)¨&Õ1Ø ‡l�l�6Õð!ð €,r%có®—|jryd|_||v|_|jD]m}t||d|«|xj|jzc_|xj|jzc_|xj |j zc_Œo|jr°|j s4|js|s&|js|jr}|rz|j smtd|jd|j d|jd|d|jd |jd |j «|j|«d|_yyyyy) aaRecurses through all targets that depend on |target|, adding all targets that need to be built (and are in |roots|) to |result|. roots: set of root targets. add_if_no_ancestor: If true and there are no ancestors of |target| then add |target| to |result|. |target| must still be in |roots|. result: targets that need to be built are added here.NTFz adding to compile targetsr–rXÚadd_if_no_ancestorrWr[r\) rVrYrTÚ_AddCompileTargetsrXr\rZrWr[r3rUrœ)rIr¨rÂr6Úback_dep_targets r#rÃrÃÉs5€ð ‡^‚^Ø à€&„.ؘe�O€&„/à×)Ô)€oÜ�¨¨u°fÔ=Ø ×#Ò# ×'OÑ'OÑOÕ#Ø ‡O‚O�×/Ñ/Ñ/…OØ ×$Ò$Ø×/Ñ/ñ1Ö$ð *ð ‡_‚_Ø × Ò Ø×-Ò-Ù  ×!6Ò!6Ø × "Ò "Ñ'9Ø×.Ò.Ü Ð )¨6¯;©;¸ Ø × Ñ Ð!;Ø × *Ñ *Ð,@Ø Ð/°×1FÑ1FØ  × 8Ñ 8Ø &¨×(HÑ(Hô  ð ‡J�JˆvÔØ&*€FÕ#ð/ð(:Ð "ð r%cóp—t«}|D]&}td|j«t||d|«Œ(|S)z·Returns the set of Targets that require a build. matching_targets: targets that changed and need to be built. supplied_targets: set of targets supplied to analyzer to search from.z!finding compile targets for matchT)rPr3rUrÃ)r¥Úsupplied_targetsr6rIs r#Ú_GetCompileTargetsrÇôs:€ô ‹5€&Û €fÜ Ð -¨v¯{©{Ô;Ü�vÐ/°°vÕ>ð!ð €-r%c óä—d|vrtd|d«d|vrt|d«d|vr4|dj«td«|dD]}td|«Œd|vr4|dj«td«|dD]}td|«Œd |vr4|d j«td «|d D]}td|«Œd |vr4|d j«td «|d D]}td|«Œd |vr4|d j«td«|d D]}td|«Œ|jdi«jdd«}|sttj|««y t |d«}|j tj|«dz«|j«y#t$r }td|t|««Yd}~yd}~wwxYw)z;Writes the output, either to stdout or a file is specified.ÚerrorzError:Ústatusriz.Supplied targets that depend on changed files:r¹Úinvalid_targetsz%The following targets were not found:Ú build_targetszTargets that require a build:Úcompile_targetszTargets that need to be built:rrz Test targets:rnÚanalyzer_output_pathNÚwÚ zError writing to output file) r3ÚsortrsruÚdumpsrtÚwriterwrxr{)r~ÚvaluesrIÚ output_pathrr�s r#Ú _WriteOutputrÖÿsé€à �ÑÜ ˆ(�F˜7‘OÔ$Ø �ÑÜ ˆ&�Ñ ÔØ�&ÑØ ˆ9Ñ×ÑÔÜ Ð :Ô;ؘÔ#ˆÜ ˆD�&Õð$à˜&Ñ Ø Ð Ñ×"Ñ"Ô$Ü Ð 1Ô2ØÐ*Ô+ˆÜ ˆD�&Õð,à˜ÑØ ˆ?Ñ× Ñ Ô"Ü Ð )Ô*ؘÔ)ˆÜ ˆD�&Õð*à˜&Ñ Ø Ð Ñ×"Ñ"Ô$Ü Ð *Ô+ØÐ*Ô+ˆÜ ˆD�&Õð,à�vÑØ ˆ>Ñ×ÑÔ!Ü ˆ/ÔØ˜Ô(ˆÜ ˆD�&Õð)ð— ‘ Ð,¨bÓ1×5Ñ5ؘdó$€+á Ü Œ$�*‰*�VÓ ÔØ ð?Ü ˆ[˜#Ó€A؇G�GŒD�J‰J�vÓ  Ñ %Ô&؇G�G…IøÜ ò?Ü Ð (¨+´s¸1³v×>Ñ>ûð?úsÆAGÇ G/ÇG*Ç*G/cóº—|djrL|djD]:}ttjj |««|vsŒ.t d|«yy)zNReturns true if one of the files in |files| is in the set of included files.Úoptionsz+Include file modified, assuming all changedTF)Úincludesr$rr"rŸr3)r~rhÚincludes r#Ú_WasGypIncludeFileModifiedrÛ,sV€ð ˆIÑ×ÒØ˜)Ñ$×-Ô-ˆÜ ”B—G‘G×$Ñ$ WÓ-Ó .°%Ò 7Ü Ð;¸WÔEÙð.ð r%có6—|D�cgc] }||vsŒ|‘Œ c}Scc}w)zBReturns a list of the values in |names| that are not in |mapping|.rc©ÚnamesÚmappingrUs r#Ú _NamesNotInrà7s!€á Ó 8™5�4 D°Ò$7Š$˜5Ñ 8Ð8ùÒ 8s… �có<—|D�cgc] }||vsŒ||‘Œc}Scc}w)zUReturns a list of the mapping[name] for each value in |names| that is in |mapping|.rcrÝs r#Ú_LookupTargetsrâ<s&€ñ%*Ó =¡E˜D¨T°Wª_ˆ'�$‹- EÑ =Ð=ùÒ =s… �có^—tjj|«}|dk(r|jdd«y|dk(rV|jdd«ddlmcm}t|dg«}t|dg«}tjj||«y|}|dk(rd }|jd|«y) zDCalculate additional variables for use in the build (called by gyp).ÚmacÚOSÚwinrNÚ+generator_additional_non_configuration_keysÚ"generator_additional_path_sectionsÚandroidÚlinux) r…r†Ú GetFlavorÚ setdefaultÚgyp.generator.msvsÚ generatorÚmsvsÚgetattrÚmsvs_emulationÚCalculateCommonVariables)Údefault_variablesr~ÚflavorÚmsvs_generatorrçrèÚoperating_systems r#ÚCalculateVariablesr÷Bs®€ä �:‰:× Ñ  Ó '€&Ø ˆu‚_Ø× Ñ   uÕ-Ø �‚Ø× Ñ   uÔ-÷0Ð/Ü29¸.Ø5°ró3;Ð/ä)0°Ø,¨bó*2Ð&ô×Ñ×/Ñ/Ð0AÀ6ÕJàÐØ �ÒØ ÐØ× Ñ  Ð'7Õ8r%có4—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z y) ÚTargetCalculatorzBCalculates the matching test_targets and matching compile_targets.c óþ—t|«|_t|«|_t||||t |«|«\|_|_|_t|j |j««\|_ |_ yrg) rPÚ _additional_compile_target_namesÚ_test_target_namesr¯Ú frozensetÚ_name_to_targetÚ_changed_targetsÚ _root_targetsr·Ú_supplied_target_names_no_allÚ_unqualified_mappingrË) r]rhrjrkr‰r¡r¢r@r£s r#r^zTargetCalculator.__init__[s{€ä,/Ð0OÓ,P€DÔ)Ü!Ð"3Ó4€DÔä�t˜[¨,¸ Ü  Ó'¨ó6ñD€DÔ˜$Ô/°Ô1Cô% T×%9Ñ%9Ø%)×%GÑ%GÓ%IóKñ4€DÔ˜tÕ3r%có4—|j|jzSrg)rûrürls r#Ú_supplied_target_namesz'TargetCalculator._supplied_target_namesfs€Ø × 0Ñ 0°4×3JÑ3JÑ JÐJr%cóH—|j«}|jd«|S)z0Returns the supplied test targets without 'all'.Úall)rr )r]r6s r#rz.TargetCalculator._supplied_target_names_no_allis!€à × (Ñ (Ó *€FØ ‡N�N�5ÔØ €Mr%có—|jS)z;Returns true if the supplied files impact the build at all.)rÿrls r#Úis_build_impactedz"TargetCalculator.is_build_impactedos€à × Ñ Ð r%cóÆ—|j«sJ‚t|j«}|jd«t ||j «}d|jv}|r/t|«t|j «zD�cgc]}|‘Œ}}n|D�cgc]}|‘Œ}}td«|jD]}td|«Œtd«|D]}td|j«Œtd«t|«}|xr!t|«t|j «z} | r$t|«t|«zD�cgc]}|‘Œ}}td«|D]}td|j«Œ|D�cgc].}tjj|j«d‘Œ0} }| r| jd«td«| Scc}wcc}wcc}wcc}w) z'Returns the set of output test targets.rzsupplied test_targetsr¹zfound test_targetsz#searching for matching test targetszmatched test_targetsrz all)rrPrür rârrr3rUrÀr…r†r�r1) r]Útest_target_names_no_allÚtest_targets_no_allÚtest_target_names_contains_allr¶rrrŽrIÚmatching_test_targetsÚ"matching_test_targets_contains_allÚmatching_target_namess r#Úfind_matching_test_target_namesz0TargetCalculator.find_matching_test_target_namesss€à × !Ñ !Ô #Ð#Ð #ô # 4×#:Ñ#:Ó;ÐØ×$Ñ$ UÔ+Ü(Ð)AØ)-×)BÑ)BóDÐà%*¨d×.EÑ.EÐ%EÐ"Ù%Ü"%Ð&9Ó":Ü"% d×&8Ñ&8Ó"9ò#:ó<ñ#:˜A’að#:€lñ<ñ"5Ó5Ñ!4˜A’aÐ!4€lÐ5Ü Ð !Ô"Ø×.Ô.ˆ Ü ˆD�+Õð/ä Ð ÔÛˆÜ ˆD�&—+‘+Õðä Ð /Ô0ÜAÀ,ÓOÐØ*Hò+BÜ*-Ð.CÓ*DÜ*-¨d×.@Ñ.@Ó*Añ+Bð'ñ*ô,/Ð/DÓ+EÜ+.Ð/BÓ+Cò,DóFñ,D Qšqð,DÐðFä Ð Ô!Û'ˆÜ ˆD�&—+‘+Õð(ñ,AóBÙ+@ ô!ŸZ™Z×<Ñ<¸V¿[¹[ÓIÈ!ÓLØ+@ððBá)Ø×"Ñ" 5Ô)Ü ˆG„nØ Ð ùò9<ùò6ùòFùò Bs G GÅ GÅ:3GcóT—|j«sJ‚|jj«D] }d|_Œ t |j «|j «}d|j«vr.t|«t|j«zD�cgc]}|‘Œ}}td«|D]}td|j«Œtd«t|j|«}|D�cgc].}tjj!|j«d‘Œ0c}Scc}wcc}w)z*Returns the set of output compile targets.Frz'Supplied test_targets & compile_targetsr¹zFinding compile targetsr)rrþrÔrVrârrrrPrr3rUrÇrÿr…r†r�)r]rIrÆr¶rÍs r#Ú"find_matching_compile_target_namesz3TargetCalculator.find_matching_compile_target_namesžs'€à × !Ñ !Ô #Ð#Ð #ð×&Ñ&×-Ñ-Ö/ˆØ€f…nð0ô& d×&HÑ&HÓ&JØ&*×&?Ñ&?óAÐà �×+Ñ+Ó-Ñ-Ü&)Ð*:Ó&;Ü&)¨$×*<Ñ*<Ó&=ò'>ó@ñ'> š!ð'>Ðð@ä Ð 3Ô4Û"ˆÜ ˆD�&—+‘+Õð#ä Ð #Ô$Ü(¨×)>Ñ)>Ø)9ó;€Oñ*ó +Ù)�ô �J‰J× +Ñ +¨F¯K©KÓ 8¸Ó ;Ø)ñ +ð+ùò@ùò +s  D Ã*3D%N) r_r`rarbr^rrrrrrcr%r#rùrùYs&„ÙJò LòKòò !ò)!óV+r%rùc óô—t«} |j|«|js td«‚t t j j|dj««}tr td|«t||j«rJtt|j«t|j|jz«dœ}t!|fi|¤Žyt#|j|j|j|||||d«}|j%«s2t&ggdœ}|j(r|j(|d<t!|fi|¤Žy|j+«}|j-«} | xs|} || rt.nt&tt1| «t1|«z«dœ}|j(r|j(|d<t!|fi|¤Žy#t$r } t!|t3| «¬ «Yd} ~ yd} ~ wwxYw) z2Called by gyp as the final stage. Outputs results.zÑ>Ø×0Ñ0ñ1ó*2ñ4€kô �6Ñ)˜[Ò)Ø ä! &§,¡,Ø"(×"HÑ"HØ"(×":Ñ":¸DØ"-¨|¸\Ø"(¨Ñ"7ó 9€Jð × 'Ñ 'Ô )Ü 4Ø&(Ø)+ñ.€kð × #Ò #Ø)3×)CÑ)Cˆ Ð%Ñ&Ü�6Ñ)˜[Ò)Ø à"×BÑBÓDÐØ%×HÑHÓJÐØ 4Ò IÐ8IÐØ$5á1õ6Ü7KÜ'+ÜÐ0Ó1ÜÐ-Ó.ñ/ó(0ñ2€Kð ×!Ò!Ø'1×'AÑ'A€kÐ#Ñ$Ü�Ñ'˜;Ó'øä ò'Ü�œs 1›v×&Ò&ûð'ús&ŒCGÃA4GÅA=GÇ G7ÇG2Ç2G7)3rbÚ __future__rÚ gyp.commonr…Úgyp.ninja_syntaxÚ ninja_syntaxrurrFÚsysr2rrrržr»rºrRr†ÚCrossCompileRequestedÚ$generator_supports_multiple_toolsetsÚ4generator_wants_static_library_dependencies_adjustedÚgenerator_default_variablesrGÚunusedr$r-r9r>rArLÚobjectrNrerŒr�r”r¯r·r¼rÀrÃrÇrÖrÛràrâr÷rùrrcr%r#Úr)sEðñ :õx&ãÝ'Û Û ÛÛ à €à,ÐØ(Ðà-Ðð Ðð&'Ð"ðÐðÐà'*§z¡z×'GÑ'GÓ'IÐ$à7<Ð4ðÐó-€Gà).ИgÒ&ð-ó%€Fð )+ИfÒ%ð %òòò$>ò0Lò òô> +ˆVô +ôFAˆVôAòBò2òFòSFòl&ò&ò& ò(+òVò*?òZò9ò >ò 9ô.Y+�vôY+óx3'r%