
    df0                         d Z ddlZddlZddlZddlZddlZddlm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mZ d Zd	Z G d
 de	      Z G d de      ZdZdZdZd Zd ZdZy)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)check_output)UnixCCompiler)
write_file)DistutilsExecErrorDistutilsPlatformErrorCCompilerErrorCompileError)LooseVersionsuppress_known_deprecationc                  <   t         j                  j                  d      } | dk7  rxt         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 |dk(  rdgS |dk(  rdgS dt        |      cxk  rdk  rddgS  t	        d|z        y)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msvcr1001700msvcr1101800msvcr120il  i  ucrtvcruntime140zUnknown MS Compiler version %s N)sysversionfindint
ValueError)msc_posmsc_vers     ^/home/api-vastappli/venv/lib/python3.12/site-packages/setuptools/_distutils/cygwinccompiler.py	get_msvcrr(      s     kkx(G"}++gkGbL9f;;;;<<<S\(D(N++ ) >HII7     zxUnable to set runtime library search path on Windows, usually indicated by `runtime_library_dirs` parameter to Extensionc                        e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd fd
	Zed        Zd Z	 	 	 	 	 	 	 	 	 	 ddZd Z fdZe fd       Z xZS )CygwinCCompilerz9Handles the Cygwin port of the GNU C compiler to Windows.cygwinz.oz.az.dll.az.dllzlib%s%szcyg%s%sz.exec           
      \   t         |   |||       t               \  }}| j                  dj	                  ||             |t
        ur| j                  d|z         t        j                  j                  dd      | _
        t        j                  j                  dd      | _        | j                  | _        d}| j                  d| j                  z  d	| j                  z  d| j                  z  d
| j                  z  dj	                  | j                  |             t               | _        y )Nz%Python's GCC status: {} (details: {})zPython's pyconfig.h doesn't seem to support your compiler. Reason: %s. Compiling may fail because of undefined preprocessor macros.CCgccCXXzg++-sharedz%s -mcygwin -O -Wallz%s -mcygwin -mdll -O -Wallz%s -mcygwinz{} -mcygwin {}compilercompiler_socompiler_cxx
linker_exe	linker_so)super__init__check_config_hdebug_printformatCONFIG_H_OKwarnosenvirongetcccxx
linker_dllset_executablesr(   dll_libraries)selfverbosedry_runforcestatusdetailsshared_option	__class__s          r'   r9   zCygwinCCompiler.__init__Q   s   '51(*3::67K	
 $IIOQXY **..u-::>>%/''!+dgg54tww>/$((:$tww.'..tN 	 	
 '[r)   c                     t        j                  dt        d       t               5  t	        d      cd d d        S # 1 sw Y   y xY w)Nzgcc_version attribute of CygwinCCompiler is deprecated. Instead of returning actual gcc version a fixed value 11.2.0 is returned.   )
stacklevelz11.2.0)warningsr>   DeprecationWarningr   r
   )rG   s    r'   gcc_versionzCygwinCCompiler.gcc_versionr   sA     	X		
 () 	*)	* 	* 	*s	   <Ac                    |dk(  s|dk(  r	 | j                  dd|d|g       y	 | j                  | j                  |z   |d|gz   |z          y# t        $ r}t        |      d}~ww xY w# 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	   r4   )rG   objsrcextcc_argsextra_postargspp_optsmsgs           r'   _compilezCygwinCCompiler._compile   s    %<3&=(

ItS$<=(

$$w.#tS1AANR	 & ("3''( & ("3''(s.   A 'A( 	A%A  A%(	B1A<<Bc                    t        j                   |
xs g       }
t        j                   |xs g       }t        j                   |xs g       }|r| j                  t               |j                  | j                         ||| j
                  k7  s| j                  dk(  rt        j                  j                  |d         }t        j                  j                  t        j                  j                  |            \  }}t        j                  j                  ||dz         }dt        j                  j                  |      z  dg}|D ]  }|j                  |        | j                  t        ||fd|z         |j                  |       |	s|
j                  d       t!        j"                  | |||||||d|	|
|||       y)	zLink the objects.Nr/   r   z.defz
LIBRARY %sEXPORTSz
writing %sz-s)copyr>   _runtime_library_dirs_msgextendrF   
EXECUTABLErD   r?   pathdirnamesplitextbasenamejoinappendexecuter   r   link)rG   target_descobjectsoutput_filename
output_dir	librarieslibrary_dirsruntime_library_dirsexport_symbolsdebugextra_preargsr^   
build_temptarget_langtemp_dirdll_namedll_extensiondef_filecontentssyms                       r'   ro   zCygwinCCompiler.link   s   $ 		-"526IIio2.	))GMr*II/0 	++, &4??*doo.F wwwqz2H(*(8(8  1)%X}
 ww||Hh.?@H %rww'7'7'HH)TH% %$%LLh%9<(;RS
 NN8$   & 	
r)   c                 0    | j                  t               g S N)r>   re   rG   dirs     r'   runtime_library_dir_optionz*CygwinCCompiler.runtime_library_dir_option   s     			+,	r)   c                 d    t         j                  j                  |      }t        |   |||      S r   )r?   rh   normcaser8   _make_out_path)rG   rs   	strip_dirsrc_namenorm_src_namerN   s        r'   r   zCygwinCCompiler._make_out_path   s+    ((2w%j)]KKr)   c                 b    i t         |   dD ci c]  }||| j                  z    c}S c c}w )z3
        Add support for rc and res files.
        )rW   rV   )r8   out_extensionsobj_extension)rG   r\   rN   s     r'   r   zCygwinCCompiler.out_extensions   s@    

g$
8GHsC$,,,,H
 	
Hs   ,r   r   r   )
NNNNNr   NNNN)__name__
__module____qualname____doc__compiler_typer   static_lib_extensionshared_lib_extensiondylib_lib_extensionstatic_lib_formatshared_lib_formatdylib_lib_formatexe_extensionr9   propertyrT   ra   ro   r   r   r   __classcell__rN   s   @r'   r+   r+   D   s    CMM# !! M)B * *(* !X
tL
 
 
r)   r+   c                   .     e Zd ZdZdZd fd	Zd Z xZS )Mingw32CCompilerz:Handles the Mingw32 port of the GNU C compiler to Windows.mingw32c           
      `   t         |   |||       d}t        | j                        rt	        d      | j                  d| j                  z  d| j                  z  d| j                  z  d| j                  z  dj                  | j                  |             g | _	        t               | _	        y )Nr1   z1Cygwin gcc cannot be used with --compiler=mingw32z%s -O -Wallz%s -mdll -O -Wallz%sz{} {}r2   )r8   r9   is_cygwinccrB   r   rE   rC   r<   rD   rF   r(   )rG   rH   rI   rJ   rM   rN   s        r'   r9   zMingw32CCompiler.__init__
  s    '51!tww !TUU"TWW,+dgg5&1dgg~nnT__mD 	 	
   '[r)   c                      t        t              r   )r   re   r   s     r'   r   z+Mingw32CCompiler.runtime_library_dir_option&  s    $%>??r)   r   )r   r   r   r   r   r9   r   r   r   s   @r'   r   r     s    DM)8@r)   r   okznot ok	uncertainc                     ddl m}  dt        j                  v rt        dfS dt        j                  v rt        dfS | j                         }	 t        |      }	 d|j                         v rt        d|z  f|j                          S t        d	|z  f|j                          S # |j                          w xY w# t        $ r,}t        d
j                  ||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'Clangzsys.version mentions 'Clang'__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read '{}': {}N)	distutilsr   r    r!   r=   get_config_h_filenameopenreadcloseCONFIG_H_NOTOKOSErrorCONFIG_H_UNCERTAINr<   strerror)r   fnconfig_hexcs       r'   r:   r:   3  s    * $ 888 #++::: 
	(	(	*B
W8	X]]_,"$>$CC NN &'IB'NNNNHNN W"$<$C$CB$UVVWsB   B5 B  4B5 
B  B5  B22B5 5	C*>!C%C*%C*c                     t        t        j                  |       dgz         }|j                         j	                  d      S )zCTry to determine if the compiler that would be used is from cygwin.z-dumpmachines   cygwin)r   shlexsplitstripendswith)rB   
out_strings     r'   r   r   b  s6    ekk"o0@@AJ&&y11r)   )r   r?   r    rd   r   rR   
subprocessr   distutils.unixccompilerr   distutils.file_utilr   distutils.errorsr   r   r   r	   distutils.versionr
   r   r(   re   r+   r   r=   r   r   r:   r   get_versions r)   r'   <module>r      s    
 
    # 1 *  G JHI }
m }
B"@ "@R   ,W^2 r)   