Ë ]÷æÒÏ<ÐãóR—dZddlZddlZddddddœZd„Zd „Zd „Zd „Zd „Zd „Z d„Z y)z8Utility functions shared amongst the Windows generators.éNÚexeÚdllÚlibÚsys)Ú executableÚloadable_moduleÚshared_libraryÚstatic_libraryÚwindows_drivercó„—tjjtjjt««}tjjtjj |dd««}tjj |dd«}tjj |d«}|S)z/Returns the path of the large_pdb_shim.cc file.z..ÚdataÚwinzlarge-pdb-shim.cc)ÚosÚpathÚabspathÚdirnameÚ__file__Újoin)Úthis_dirÚsrc_dirÚ win_data_dirÚlarge_pdb_shim_ccs ú1/usr/lib/python3.12/site-packages/gyp/MSVSUtil.pyÚ_GetLargePdbShimCcPathrsv€ä �W‰W�_‰_œRŸW™WŸ_™_¬XÓ6Ó 7€(Ü �G‰G�O‰OœBŸG™GŸL™L¨°4¸Ó>Ó ?€'Ü—‘—‘˜g v¨uÓ5€,Ü—g‘g—l‘l <Ð1DÓEÐØ ÐócóX—i}|D]"}||vrŒtj||«||<Œ$|S)a-Performs a partial deep-copy on |in_dict|, only copying the keys in |keys|. Arguments: in_dict: The dictionary to copy. keys: The keys to be copied. If a key is in this list and doesn't exist in |in_dict| this is not an error. Returns: The partially deep-copied dictionary. )ÚcopyÚdeepcopy)Úin_dictÚkeysÚdÚkeys rÚ_DeepCopySomeKeysr#s;€ð €!Û €cØ �'ÑØÜ �]‰]˜7 3™<Ó (€A€c‚Fðð €(rcób—|jdd«}|d›d|›�|d<dj|«S)zÃAdd a suffix to the end of a target. Arguments: name: name of the target (foo#target) suffix: the suffix to be added Returns: Target name with suffix added (foo_suffix#target) Ú#érÚ_)Úrsplitr)ÚnameÚsuffixÚpartss rÚ _SuffixNamer,0s4€ð �+‰+�c˜1Ó €%ؘa›¡&Ð )€%ˆ�(Ø �‰�%‹Ðrcó,—t|t|««S)z¹Add a shard number to the end of a target. Arguments: name: name of the target (foo#target) number: shard number Returns: Target name with shard added (foo_1#target) )r,Ústr)r)Únumbers rÚ _ShardNamer0>s€ô �Tœ3˜v›;Ó 'Ð'rc óœ—i}|D](}t||jdd««}|sŒ$|||<Œ*g}|D]F}||vr/t||«D]}|jt ||««ŒŒ6|j|«ŒHi}|D]²}||vr¤t||«D]’}t ||«}t j ||«||<t ||d|«||d<||jdg«} g} t|t | «||«D]} | j| | «Œ| ||d<Œ”Œ«||||<Œ´t|«D]†}dD]} t j ||j| g««} g}| D]F}||vr/t||«D]}|jt ||««ŒŒ6|j|«ŒH|||| <Œ�Œˆ||fS)a Shard some targets apart to work around the linkers limits. Arguments: target_list: List of target pairs: 'base/base.gyp:base'. target_dicts: Dict of target properties keyed on target pair. Returns: Tuple of the new sharded versions of the inputs. Ú msvs_shardrÚ target_nameÚsources)Ú dependenciesÚdependencies_original)ÚintÚgetÚrangeÚappendr0rÚlenÚsorted)Ú target_listÚ target_dictsÚtargets_to_shardÚtÚshardsÚnew_target_listÚiÚnew_target_dictsr)r4Ú new_sourcesÚposÚdeptyper5Únew_dependenciesr!s rÚ ShardTargetsrIJs%€ðÐÛ €aÜ �˜a‘×$Ñ$ \°1Ó5Ó 6€FÚ Ø"Ð�qÒð ð €/Û €aØÐ ÑÜÐ% aÑ(Ö)ˆ!Ø×Ñœz¨!¨QÓ/Õ0ñ*ð×јQÕð ðÐÛ €aØÐ ÑÜÐ% aÑ(Ö)ˆ!ܘ!˜QÓˆÜ!%§¡¨<¸©?Ó!;ИÑÜ0:Ø ˜dÑ # MÑ 2°Aó17Иј}Ñ-à" 4Ñ(×,Ñ,¨Y¸Ó;ˆØˆ ܘœC ›LÐ*:¸1Ñ*=Ö>ˆCØ × Ñ ˜W S™\Õ *ð?à,7ИјyÒ)ñ*ð)¨™OÐ�qÒð ô Ð"Ö #€aÛ<ˆÜ—Y‘YÐ/°Ñ2×6Ñ6°wÀÓCÓD€lØÐÛˆ!Ø Ð Ñ ÜÐ)¨!Ñ,Ö-ˆaØ × #Ñ #¤J¨q°!Ó$4Õ 5ñ.ð × !Ñ ! !Õ $ð ð &6Ð�qј'Ò"ñ=ð $ð Ð+Ð ,Ð,rcó<—|d|}|jdi«}|jdi«}|jd«}|r|S|jdi«}|jdd«}|r|S|jd|d «}|›d t|d ›d �}|d dz|z}|S)a“Returns the path to the PDB file that will be generated by a given configuration. The lookup proceeds as follows: - Look for an explicit path in the VCLinkerTool configuration block. - Look for an 'msvs_large_pdb_path' variable. - Use '<(PRODUCT_DIR)/<(product_name).(exe|dll).pdb' if 'product_name' is specified. - Use '<(PRODUCT_DIR)/<(target_name).(exe|dll).pdb'. Arguments: target_dict: The target dictionary to be searched. config_name: The name of the configuration of interest. vars: A dictionary of common GYP variables with generator-specific values. Returns: The path of the corresponding PDB file. ÚconfigurationsÚ msvs_settingsÚ VCLinkerToolÚProgramDatabaseFileÚ variablesÚmsvs_large_pdb_pathNÚ product_namer3Ú.Útypez.pdbÚ PRODUCT_DIRÚ/)Ú setdefaultr8ÚTARGET_TYPE_EXT) Ú target_dictÚ config_nameÚvarsÚconfigÚmsvsÚlinkerÚpdb_pathrOÚpdb_bases rÚ _GetPdbPathr`�sº€ð$ Ð'Ñ (¨Ñ 5€&Ø × Ñ ˜?¨BÓ /€$à �8‰8�N BÓ '€&à �Z‰ZÐ-Ó .€(Ù Ø €Oà�o‰o˜k¨2Ó.€)Ø �]‰]Ð0°$Ó 7€(Ù Ø €Oð�_‰_˜^¨[¸Ñ-GÓ H€(Ú$¤o°kÀ&Ñ6IÓ&JÐ K€(Ø �-Ñ  3Ñ &¨Ñ 1€(à €/rcó^—g}|D]4}||}t|jdd««sŒ$|j|«Œ6t«}|D�]ß}||}|jd«}t |gd¢«}d} |dz| z} t || «} t jj|«} |ddz| z} | dz| z}tj|«}| |d<d |d <|g|d <| |gd œg|d <d}|dz|z}t ||«}tj|«}||d<d|d <|g|d <| g|d<|jd«j«D]�\}}t|||«}dD]}|j|d«Œ|jdi«}|jdi«}d|d<||d<|d|}|jdi«}|jdi«}d|d<||d<Œ‘|jd| «|jd|«||| <|||<|jdg«j|«�Œâ||fS)aïInsert a shim target that forces the linker to use 4KB pagesize PDBs. This is a workaround for targets with PDBs greater than 1GB in size, the limit for the 1KB pagesize PDBs created by the linker by default. Arguments: target_list: List of target pairs: 'base/base.gyp:base'. target_dicts: Dict of target properties keyed on target pair. vars: A dictionary of common GYP variables with generator-specific values. Returns: Tuple of the shimmed version of the inputs. Úmsvs_large_pdbrr3)rKÚdefault_configurationÚtoolsetÚlarge_pdb_copyr'ÚSHARED_INTERMEDIATE_DIRrUÚnonerSr4)Ú destinationÚfilesÚcopiesÚlarge_pdb_shimr r5rK)Úmsvs_precompiled_headerÚmsvs_precompiled_sourceÚtestNrLÚVCCLCompilerToolÚ3ÚDebugInformationFormatÚProgramDataBaseFileNamerMÚtrueÚGenerateDebugInformationrN)r7r8r:rr#r,rrÚbasenamerrÚitemsr`ÚpoprVÚinsert)r=r>rZÚtargets_to_shimr@rXrr3Ú base_dictÚ copy_suffixÚcopy_target_nameÚfull_copy_target_nameÚshim_cc_basenameÚ shim_cc_dirÚ shim_cc_pathÚ copy_dictÚ shim_suffixÚshim_target_nameÚfull_shim_target_nameÚ shim_dictrYr[r^r"r\Úcompilerr]s rÚInsertLargePdbShimsr‡©sÇ€ð€/Û €aؘq‘/€Kô ˆ{�‰Ð/°Ó3Ô 4Øð ×ј1Õð ô-Ó.Ðä €aؘq‘/€KØ—/‘/ -Ó0€Kä! +Ú @óB€Ið#€KØ" SÑ(¨;Ñ6ÐÜ'¨¨;Ó7ÐÜ—w‘w×'Ñ'Ð(9Ó:ÐØÐ0Ñ1°CÑ7Ð:JÑJ€KØ Ñ$Ð'7Ñ7€LÜ— ‘ ˜iÓ(€IØ/€IˆmÑØ€IˆfÑØ.Ð0€IˆiÑà Ø"Ð$ñð€IˆhÑð#€KØ" SÑ(¨;Ñ6ÐÜ'¨¨;Ó7ÐÜ— ‘ ˜iÓ(€IØ/€IˆmÑØ(€IˆfÑØ)Ð+€IˆiÑØ"7Ð 9€IˆnÑð )Ÿ}™}Ð-=Ó>×DÑDÖFш �Vܘ[¨+°tÓ<€hóPˆ#Ø� ‰ �3˜ÕðPð× Ñ ˜°Ó 3€dð—‘Ð!3°RÓ8€hØ+.€hÐ'Ñ(Ø,4€hÐ(Ñ)ðÐ+Ñ,¨[Ñ9€fØ × Ñ ˜°Ó 3€dØ�‰˜~¨rÓ2€fØ+1€fÐ 'Ñ(Ø&.€fÐ "Ò#ð) Gð0×Ñ�qÐ/Ô0Ø×Ñ�qÐ/Ô0Ø*3€LÐ&Ñ'Ø*3€LÐ&Ñ'ð×ј>¨2Ó.×5Ñ5Ð6KÖLðO ðR �|Ð $Ð$r) Ú__doc__rrrWrr#r,r0rIr`r‡©rrÚrŠsNðñ ?ã Û ð ØØØØñ €òò ò$ ò (ò4-òn%óPf%r