
    =Og?                        	 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 )    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 )NzMSC v.   
   1300msvcr701310msvcr711400msvcr801500msvcr901600msvcr100zUnknown MS Compiler version %s )sysversionfind
ValueError)msc_posmsc_vers     2/usr/lib64/python3.11/distutils/cygwinccompiler.py	get_msvcrr#   =   s     kx((G"}}+gai
23f;;;;<>HIII% }    c                   R    e 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 )CygwinCCompiler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: )zPython'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   tWgu===(** &&'''+ 	, 	, 	,$$IIO    NN 	@$/4+?++***///.../0 0 	2 	2 	2 ?i''#DOO'DO ?f$$%MM+M 	&=)F*A(6)---)I	 	 	K 	K 	K y(( !)zDII>@ @ @ @ @
 "+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)N.rc.reswindresz-iz-o)spawnr   r
   r3   )rF   objsrcextcc_argsextra_postargspp_optsmsgs           r"   _compilezCygwinCCompiler._compile   s    H%<<3&==(

ItS$<=====% ( ( ("3'''((

4+g5dC8HH)* + + + + +% ( ( ("3'''(s,   + 
A	AA	&A5 5
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 )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%    	 	-"5266Iio2..	)GMr** 	+,,, 'DO++t%/G/G wwqz22H(*(8(8  11)3 )3%X} w||Hh.?@@Hw||Heh.>.EFFH rw//@@@H & % %$$$$LLh%9%02 2 2 )++$$nh%?@@@$$gx%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 )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   sE   1J	( 	K 	KH(()9)9()C)CDDID#4.%?@@&&ssHHH(& ' ' ' /w''..o%%  "',,z.2Sj4;M.M#O #O P P P P   "',,z/3d6H/H#J #J K K K Kr$   r   r   r   )
NNNNNr   NNNN)r   r|   )__name__
__module____qualname__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EI9=?CJ( J( J( J(\     r$   r&   c                       e Zd Z	 dZddZdS )Mingw32CCompiler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$$%MM+M y((/KKK>> 	E CE E E 	n)=*8(-+/???MMM+6;(8	 	 	9 	9 	9  '[[r$   Nr   )r   r   r   rB   r9   r   r$   r"   r   r     s2        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)
Nr   )	sysconfigGCCzsys.version mentions 'GCC'__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read 'z': )	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?88	X]]__,,"$>$CC NN &'IB'NNNNHNN ? ? ?"",.BB=? 	? 	? 	? 	? 	? 	??sA   B3 !B %B3 :B B3 B00B3 3
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 )Nr   T)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
-
-
-
4CXXZZ
				z**F~t Q..00111s   
A3 3B	c                  >    	 g d} t          d | D                       S )N)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>     s2     BAAH==H===>>>r$   c                  t    	 t          ddg          } |                                                     d          S )Nr,   z-dumpmachines   cygwin)r   stripendswith)r   s    r"   r   r     s7    Hun566J&&y111r$   )!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 RZ.//
2 2 2*? ? ?2 2 2 2 2r$   