§
    ZQdü?  ã                   ó  — d Z ddlZddlZddlZddlmZmZmZ ddlZddl	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZ ddlmZ d	„ Z G d
„ de
¦  «        Z G d„ de¦  «        ZdZdZdZd„ Z ej        d¦  «        Zd„ Zd„ Z d„ Z!dS )a  distutils.cygwinccompiler

Provides the CygwinCCompiler class, a subclass of UnixCCompiler that
handles the Cygwin port of the GNU C compiler to Windows.  It also contains
the Mingw32CCompiler class which handles the mingw32 port of GCC (same as
cygwin in no-cygwin mode).
é    N)ÚPopenÚPIPEÚcheck_output)ÚUnixCCompiler)Ú
write_file)ÚDistutilsExecErrorÚCCompilerErrorÚCompileErrorÚUnknownFileError)ÚLooseVersion)Úfind_executablec                  ó  — t           j                             d¦  «        } | dk    rYt           j        | dz   | dz   …         }|dk    rdgS |dk    rdgS |d	k    rd
gS |dk    rdgS |dk    rdgS t          d|z  ¦  «        ‚dS )zaInclude the appropriate MSVC runtime library if Python was built
    with MSVC 7.0 or later.
    zMSC v.éÿÿÿÿé   é
   Ú1300Úmsvcr70Ú1310Úmsvcr71Ú1400Úmsvcr80Ú1500Úmsvcr90Ú1600Úmsvcr100zUnknown MS Compiler version %s N)ÚsysÚversionÚfindÚ
ValueError)Úmsc_posÚmsc_vers     ú0/usr/lib/python3.11/distutils/cygwinccompiler.pyÚ	get_msvcrr#   =   sµ   € õ Œk×Ò˜xÑ(Ô(€GØ�"‚}€}Ý”+˜g a™i¨°©
Ð2Ô3ˆØ�fÒÐà�;ÐØ˜ÒÐà�;ÐØ˜ÒÐà�;ÐØ˜ÒÐà�;ÐØ˜ÒÐà�<ÐåÐ>ÀÑHÑIÔIÐIð% €}ó    c                   óT   — e Zd ZdZdZdZdZdZdZdZ	dZ
dd
„Zd„ Z	 	 	 	 dd„Zdd„ZdS )ÚCygwinCCompilerz? Handles the Cygwin port of the GNU C compiler to Windows.
    Úcygwinz.oú.az.dllzlib%s%sz%s%sz.exer   c           
      ó”  — t          j        | |||¦  «         t          ¦   «         \  }}|                      d|›d|›d�¦  «         |t          ur|                      d|z  ¦  «         t          ¦   «         \  | _        | _        | _	        |                      | j
        d| j        ›d| j        ›d| j	        ›d�z   ¦  «         | j        d	k    rd
| _        nd| _        | j        dk    rd}nd}|                      dddd| j        ›d|›�¬¦  «         | j        dk    rdg| _        |                      d¦  «         d S t          ¦   «         | _        d S )NzPython's GCC status: z (details: ú)zƒPython's pyconfig.h doesn't seem to support your compiler. Reason: %s. Compiling may fail because of undefined preprocessor macros.z: gcc z, ld z
, dllwrap ú
z2.10.90ÚgccÚdllwrapú2.13ú-sharedú-mdll -staticzgcc -mcygwin -O -Wallzgcc -mcygwin -mdll -O -Wallzg++ -mcygwin -O -Wallzgcc -mcygwinz
 -mcygwin ©ÚcompilerÚcompiler_soÚcompiler_cxxÚ
linker_exeÚ	linker_soú2.91.57Úmsvcrtz,Consider upgrading to a newer version of gcc)r   Ú__init__Úcheck_config_hÚdebug_printÚCONFIG_H_OKÚwarnÚget_versionsÚgcc_versionÚ
ld_versionÚdllwrap_versionÚcompiler_typeÚ
linker_dllÚset_executablesÚdll_librariesr#   )ÚselfÚverboseÚdry_runÚforceÚstatusÚdetailsÚshared_options          r"   r9   zCygwinCCompiler.__init__b   sÁ  € åÔ˜t W¨g°uÑ=Ô=Ð=å(Ñ*Ô*‰ˆ�Ø×ÒÐØ ˜&˜& ' ' 'ð+ñ 	,ô 	,ð 	,à�Ð$Ð$Ø�IŠIðOð ññô ð õ ‰NŒNñ 	@ˆÔ˜$œ/¨4Ô+?à×Ò˜Ô+Ð+ØÔ*Ð*Ð*Øœ/˜/˜/ØÔ.Ð.Ð.ð/0ñ 0ñ 	2ô 	2ð 	2ð Œ?˜iÒ'Ð'Ø#ˆDŒOˆOà'ˆDŒOð Œ?˜fÒ$Ð$Ø%ˆMˆMà+ˆMð 	×ÒÐ&=Ø)FØ*AØ(6à)-¬¨¨¸-¸-ð)Ið	 	ñ 	Kô 	Kð 	Kð Ô˜yÒ(Ð(ð !)˜zˆDÔØ�IŠIØ>ñ@ô @ð @ð @ð @õ
 "+¡¤ˆDÔÐÐr$   c                 ó*  — |dk    s|dk    r>	 |                       dd|d|g¦  «         dS # t          $ r}t          |¦  «        ‚d}~ww xY w	 |                       | j        |z   |d|gz   |z   ¦  «         dS # t          $ r}t          |¦  «        ‚d}~ww xY w)z:Compiles the source by spawning GCC and windres if needed.ú.rcú.resÚwindresz-iz-oN)Úspawnr   r
   r3   )rF   ÚobjÚsrcÚextÚcc_argsÚextra_postargsÚpp_optsÚmsgs           r"   Ú_compilezCygwinCCompiler._compile�   sØ   € à�%Š<ˆ<˜3 &š=˜=ð(Ø—
’
˜I t¨S°$¸Ð<Ñ=Ô=Ð=Ð=Ð=øÝ%ð (ð (ð (Ý" 3Ñ'Ô'Ð'øøøøð(øøøð(Ø—
’
˜4Ô+¨gÑ5¸¸dÀCÐ8HÑHØ)ñ*ñ +ô +ð +ð +ð +øå%ð (ð (ð (Ý" 3Ñ'Ô'Ð'øøøøð(øøøs,   Ž* ª
A´AÁAÁ&A4 Á4
BÁ>BÂBNc                 ó  — t          j         |
pg ¦  «        }
t          j         |pg ¦  «        }t          j         |pg ¦  «        }|                     | j        ¦  «         |��r|| j        k    s| j        dk    �r[t
          j                             |d         ¦  «        }t
          j                             t
          j         	                    |¦  «        ¦  «        \  }}t
          j         
                    ||dz   ¦  «        }t
          j         
                    |d|z   dz   ¦  «        }dt
          j         	                    |¦  «        z  dg}|D ]}|                     |¦  «         Œ|                      t          ||fd	|z  ¦  «         | j        d
k    r/|
                     d|g¦  «         |
                     d|g¦  «         n|                     |¦  «         |	s|
                     d¦  «         t          j        | |||||||d|	|
|||¦  «         dS )zLink the objects.Nr,   r   z.defÚlibr(   z
LIBRARY %sÚEXPORTSz
writing %sr-   z--output-libz--defz-s)ÚcopyÚextendrE   Ú
EXECUTABLErC   ÚosÚpathÚdirnameÚsplitextÚbasenameÚjoinÚappendÚexecuter   r   Úlink)rF   Útarget_descÚobjectsÚoutput_filenameÚ
output_dirÚ	librariesÚlibrary_dirsÚruntime_library_dirsÚexport_symbolsÚdebugÚextra_preargsrV   Ú
build_tempÚtarget_langÚtemp_dirÚdll_nameÚdll_extensionÚdef_fileÚlib_fileÚcontentsÚsyms                        r"   rh   zCygwinCCompiler.link¬   s"  € õ œ	 -Ð"5°2Ñ6Ô6ˆÝ”I˜i˜o¨2Ñ.Ô.ˆ	Ý”)˜G˜M rÑ*Ô*ˆð 	×Ò˜Ô+Ñ,Ô,Ð,ð Ñ'Ø˜DœOÒ+Ð+¨t¬À%Ò/GÑ/Gõ ”w—’ w¨q¤zÑ2Ô2ˆHå(*¬×(8Ò(8Ý”× Ò  Ñ1Ô1ñ)3ô )3Ñ%ˆX�}õ ”w—|’| H¨h¸Ñ.?Ñ@Ô@ˆHÝ”w—|’| H¨e°hÑ.>ÀÑ.EÑFÔFˆHð �rœw×/Ò/°Ñ@Ô@Ñ@ØðˆHð &ð %ð %�Ø—’ Ñ$Ô$Ð$Ð$Ø�LŠL� h°Ð%9Ø%¨Ñ0ñ2ô 2ð 2ð Œ )Ò+Ð+Ø×$Ò$ n°hÐ%?Ñ@Ô@Ð@à×$Ò$ g¨xÐ%8Ñ9Ô9Ð9Ð9ð —’˜xÑ(Ô(Ð(ð ð 	'Ø× Ò  Ñ&Ô&Ð&åÔ˜4 ¨g°Ø% y°,Ø/ØØ  -°ÀØ&ñ	(ô 	(ð 	(ð 	(ð 	(r$   Ú c                 ó$  — |€d}g }|D �]}t           j                             t           j                             |¦  «        ¦  «        \  }}|| j        ddgz   vrt          d|›d|›d�¦  «        ‚|rt           j                             |¦  «        }|dv r?|                     t           j                             |||z   | j	        z   ¦  «        ¦  «         ŒÊ|                     t           j                             ||| j	        z   ¦  «        ¦  «         �Œ|S )	z#Adds supports for rc and res files.Nr|   rN   rO   zunknown file type 'z	' (from 'z'))rO   rN   )
r`   ra   rc   ÚnormcaseÚsrc_extensionsr   rd   rf   re   Úobj_extension)rF   Úsource_filenamesÚ	strip_dirrl   Ú	obj_namesÚsrc_nameÚbaserT   s           r"   Úobject_filenamesz CygwinCCompiler.object_filenamesú   sB  € àÐØˆJØˆ	Ø(ð 	Kñ 	KˆHåœ×(Ò(­¬×)9Ò)9¸(Ñ)CÔ)CÑDÔD‰IˆD�#Ø˜4Ô.°%¸°Ñ?Ð@Ð@Ý&Ð&Ø�s�s˜H˜H˜Hð(&ñ 'ô 'ð 'àð /Ý”w×'Ò'¨Ñ.Ô.�Ø�oÐ%Ð%à× Ò ¥"¤'§,¢,¨zØ.2°S©j¸4Ô;MÑ.Mñ#Oô #Oñ Pô Pð Pð Pð × Ò ¥"¤'§,¢,¨zØ/3°dÔ6HÑ/Hñ#Jô #Jñ Kô Kð Kñ KàÐr$   ©r   r   r   )
NNNNNr   NNNN)r   r|   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   r€   Ústatic_lib_extensionÚshared_lib_extensionÚstatic_lib_formatÚshared_lib_formatÚexe_extensionr9   rY   rh   r†   © r$   r"   r&   r&   W   s¦   € € € € € ðð à€MØ€MØÐØ!ÐØ!ÐØÐØ€Mð9-ð 9-ð 9-ð 9-ðv(ð (ð (ð FJØEIØ9=Ø?CðJ(ð J(ð J(ð J(ð\ð ð ð ð ð r$   r&   c                   ó   — e Zd ZdZdZdd„ZdS )ÚMingw32CCompilerz@ Handles the Mingw32 port of the GNU C compiler to Windows.
    Úmingw32r   c                 ó<  — t                                | |||¦  «         | j        dk    rd}nd}| j        dk    rd}nd}t	          ¦   «         rt          d¦  «        ‚|                      dd	d
d| j        ›d|›d|›�¬¦  «         g | _        t          ¦   «         | _        d S )Nr.   r/   r0   r7   z--entry _DllMain@12r|   z1Cygwin gcc cannot be used with --compiler=mingw32zgcc -O -Wallzgcc -mdll -O -Wallzg++ -O -Wallr,   ú r1   )
r&   r9   r@   r?   Úis_cygwingccr	   rD   rC   rE   r#   )rF   rG   rH   rI   rL   Úentry_points         r"   r9   zMingw32CCompiler.__init__  sÙ   € å× Ò  $¨°¸%Ñ@Ô@Ð@ð Œ?˜fÒ$Ð$Ø%ˆMˆMà+ˆMð Ô˜yÒ(Ð(Ø/ˆKˆKàˆKå‰>Œ>ð 	EÝ ØCñEô Eð Eð 	×Ò nØ)=Ø*8Ø(-à+/¬?¨?¨?¸M¸M¸MØ+6¨;ð(8ð	 	ñ 	9ô 	9ð 	9ð ˆÔõ '™[œ[ˆÔÐÐr$   Nr‡   )rˆ   r‰   rŠ   r‹   rB   r9   r‘   r$   r"   r“   r“     s7   € € € € € ðð à€Mð&)ð &)ð &)ð &)ð &)ð &)r$   r“   Úokznot okÚ	uncertainc                  óº  — ddl m}  dt          j        v r	t          dfS |                      ¦   «         }	 t          |¦  «        }	 d|                     ¦   «         v r t          d|z  f|                     ¦   «          S t          d|z  f|                     ¦   «          S # |                     ¦   «          w xY w# t          $ r}t          d|›d	|j        ›�fcY d
}~S d
}~ww xY w)aw  Check if the current Python installation appears amenable to building
    extensions with GCC.

    Returns a tuple (status, details), where 'status' is one of the following
    constants:

    - CONFIG_H_OK: all is well, go ahead and compile
    - CONFIG_H_NOTOK: doesn't look good
    - CONFIG_H_UNCERTAIN: not sure -- unable to read pyconfig.h

    'details' is a human-readable string explaining the situation.

    Note there are two ways to conclude "OK": either 'sys.version' contains
    the string "GCC" (implying that this Python was built with GCC), or the
    installed "pyconfig.h" contains the string "__GNUC__".
    r   )Ú	sysconfigÚGCCzsys.version mentions 'GCC'Ú__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read 'z': N)Ú	distutilsrœ   r   r   r<   Úget_config_h_filenameÚopenÚreadÚcloseÚCONFIG_H_NOTOKÚOSErrorÚCONFIG_H_UNCERTAINÚstrerror)rœ   ÚfnÚconfig_hÚexcs       r"   r:   r:   F  s   € ð* $Ð#Ð#Ð#Ð#Ð#ð •”ÐÐÝÐ8Ð8Ð8ð 
×	(Ò	(Ñ	*Ô	*€Bð?Ý˜‘8”8ˆð	Ø˜XŸ]š]™_œ_Ð,Ð,Ý"Ð$>ÀÑ$CÐCð �NŠNÑÔÐÐõ &Ð'IÈBÑ'NÐNà�NŠNÑÔÐÐøˆH�NŠNÑÔÐÐøøøøÝð ?ð ?ð ?Ý"Ð"Ø,.¨B¨B°´°Ð=ð?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøøð?øøøsA   ³B2 Á!B Á$B2 Á9B ÂB2 ÂB/Â/B2 Â2
CÂ<CÃCÃCs   (\d+\.\d+(\.\d+)*)c                 óº  — |                       ¦   «         d         }t          |¦  «        €dS t          | dt          ¬¦  «        j        }	 |                     ¦   «         }|                     ¦   «          n# |                     ¦   «          w xY wt                               |¦  «        }|€dS t          | 
                    d¦  «                             ¦   «         ¦  «        S )z¤Find the version of an executable by running `cmd` in the shell.

    If the command is not found, or the output does not match
    `RE_VERSION`, returns None.
    r   NT)ÚshellÚstdouté   )Úsplitr   r   r   r­   r¢   r£   Ú
RE_VERSIONÚsearchr   ÚgroupÚdecode)ÚcmdÚ
executableÚoutÚ
out_stringÚresults        r"   Ú_find_exe_versionr¹   s  sµ   € ð —’‘”˜Q”€JÝ�zÑ"Ô"Ð*ØˆtÝ
�˜4­Ð
-Ñ
-Ô
-Ô
4€CðØ—X’X‘Z”Zˆ
à�	Š	‰Œˆˆøˆ�	Š	‰ŒˆˆøøøÝ×Ò˜zÑ*Ô*€FØ€~Øˆtõ ˜Ÿš Q™œ×.Ò.Ñ0Ô0Ñ1Ô1Ð1s   Á	A2 Á2Bc                  ó<   — g d¢} t          d„ | D ¦   «         ¦  «        S )zg Try to find out the versions of gcc, ld and dllwrap.

    If not possible it returns None for it.
    )zgcc -dumpversionzld -vzdllwrap --versionc                 ó,   — g | ]}t          |¦  «        ‘ŒS r‘   )r¹   )Ú.0r´   s     r"   ú
<listcomp>z get_versions.<locals>.<listcomp>Ž  s!   € Ð=Ð=Ð=¨SÕ# CÑ(Ô(Ð=Ð=Ð=r$   )Útuple)Úcommandss    r"   r>   r>   ˆ  s-   € ð
 BÐAÐA€HÝÐ=Ð=°HÐ=Ñ=Ô=Ñ>Ô>Ð>r$   c                  ór   — t          ddg¦  «        } |                      ¦   «                              d¦  «        S )z>Try to determine if the gcc that would be used is from cygwin.r,   z-dumpmachines   cygwin)r   ÚstripÚendswith)r·   s    r"   r—   r—   �  s4   € å˜u nÐ5Ñ6Ô6€JØ×ÒÑÔ×&Ò& yÑ1Ô1Ð1r$   )"r‹   r`   r   r]   Ú
subprocessr   r   r   ÚreÚdistutils.unixccompilerr   Údistutils.file_utilr   Údistutils.errorsr   r	   r
   r   Údistutils.versionr   Údistutils.spawnr   r#   r&   r“   r<   r¤   r¦   r:   Úcompiler°   r¹   r>   r—   r‘   r$   r"   ú<module>rË      sµ  ððð ð^ 
€	€	€	Ø 
€
€
€
Ø €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 	€	€	€	à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø *Ð *Ð *Ð *Ð *Ð *ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (à *Ð *Ð *Ð *Ð *Ð *Ø +Ð +Ð +Ð +Ð +Ð +ðJð Jð Jð4wð wð wð wð w�mñ wô wð wðt+)ð +)ð +)ð +)ð +)�ñ +)ô +)ð +)ðb €Ø€Ø Ð ð)?ð )?ð )?ðV ˆRŒZÐ.Ñ/Ô/€
ð2ð 2ð 2ð*?ð ?ð ?ð2ð 2ð 2ð 2ð 2r$   