
    Ig.                     @   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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d	lmZ  ej        d
gdgdgdgdgdgdgddgej        d	          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#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)check_output   )UnixCCompiler)
write_file)DistutilsExecErrorDistutilsPlatformErrorCCompilerErrorCompileError)LooseVersionsuppress_known_deprecation)RangeMapmsvcr70msvcr71msvcr80msvcr90msvcr100msvcr110msvcr120ucrtvcruntime140)	i  i  ix  i  i@  i  i  il  i  c                     t          j        dt          j                  } 	 t	          |                     d                    }n# t          $ r Y dS w xY w	 t          |         S # t          $ r t          d|z            w xY w)zaInclude the appropriate MSVC runtime library if Python was built
    with MSVC 7.0 or later.
    zMSC v\.(\d{4})r   NzUnknown MS Compiler version %s )
researchsysversionintgroupAttributeError_msvcr_lookupKeyError
ValueError)matchmsc_vers     a/var/www/html/4nations/venv/lib/python3.11/site-packages/setuptools/_distutils/cygwinccompiler.py	get_msvcrr%   4   s     I'55Eekk!nn%%   FW%% F F F:WDEEEFs   "A 
AAA# #B 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.exer   c           
         t                                          |||           t                      \  }}|                     d                    ||                     |t
          ur|                     d|z             t          j        	                    dd          | _
        t          j        	                    dd          | _        | j
        | _        d}|                     d| j
        z  d	| j
        z  d| j        z  d
| j
        z  d                    | j        |                     t                      | _        d S )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$   r5   zCygwinCCompiler.__init__V   s7   '5111(**3::67KK	
 	
 	
 $$IIOQXY   *..u--:>>%//'!+dg54tw>/$(:$tw.'..tNN 	 	
 	
 	
 '[[    c                     t          j        dt          d           t                      5  t	          d          cd d d            S # 1 swxY w Y   d S )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   )rC   s    r$   gcc_versionzCygwinCCompiler.gcc_versionw   s     	X		
 	
 	
 	
 ()) 	* 	*))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   AAA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
   r0   )rC   objsrcextcc_argsextra_postargspp_optsmsgs           r$   _compilezCygwinCCompiler._compile   s    %<<3&==(

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

$w.#tS1AANR     & ( ( ("3'''(s,   * 
AAA&A4 4
B>BBNc                    t          j         |
pg           }
t          j         |pg           }t          j         |pg           }|r|                     t                     |                    | j                   ||| j        k    s| j        dk    rt          j        	                    |d                   }t          j        
                    t          j                            |                    \  }}t          j                            ||dz             }dt          j                            |          z  dg}|D ]}|                    |           |                     t          ||fd|z             |                    |           |	s|
                    d           t!          j        | |||||||d|	|
|||           dS )	zLink the objects.Nr+   r   z.defz
LIBRARY %sEXPORTSz
writing %sz-s)copyr:   _runtime_library_dirs_msgextendrB   
EXECUTABLEr@   r;   pathdirnamesplitextbasenamejoinappendexecuter   r   link)rC   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$   rl   zCygwinCCompiler.link   s   $ 	-"5266Iio2..	)GMr** 	1II/000 	+,,, &4?**do.F.F wwqz22H(*(8(8  11) )%X}
 w||Hh.?@@H %rw'7'7'H'HH)TH% % %$$$$LLh%9<(;RSSS
 NN8$$$  	'  &&& 	
 	
 	
 	
 	
rK   c                 :    |                      t                     g S N)r:   rb   rC   dirs     r$   runtime_library_dir_optionz*CygwinCCompiler.runtime_library_dir_option   s     			+,,,	rK   c                     t           j                            |          }t                                          |||          S r   )r;   re   normcaser4   _make_out_path)rC   rp   	strip_dirsrc_namenorm_src_namerJ   s        r$   r   zCygwinCCompiler._make_out_path   s4    ((22ww%%j)]KKKrK   c                 L     i t                      j         fddD             S )z3
        Add support for rc and res files.
        c                 &    i | ]}||j         z   S  )obj_extension).0rY   rC   s     r$   
<dictcomp>z2CygwinCCompiler.out_extensions.<locals>.<dictcomp>  s#    HHHsC$,,HHHrK   )rT   rS   )r4   out_extensions)rC   rJ   s   `r$   r   zCygwinCCompiler.out_extensions   s9    

gg$
HHHHHHH
 	
rK   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_extensionr5   propertyrQ   r^   rl   r   r   r   __classcell__rJ   s   @r$   r'   r'   I   s,       CCMM# !! M) ) ) ) ) )B * * X*( ( (* !X
 X
 X
 X
t  L L L L L
 
 
 
 
 X
 
 
 
 
rK   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.mingw32r   c           
      >   t                                          |||           d}t          | j                  rt	          d          |                     d| j        z  d| j        z  d| j        z  d| j        z  d                    | j        |                     d S )Nr-   z1Cygwin gcc cannot be used with --compiler=mingw32z%s -O -Wallz%s -mdll -O -Wallz%sz{} {}r.   )	r4   r5   is_cygwinccr>   r	   rA   r?   r8   r@   )rC   rD   rE   rF   rI   rJ   s        r$   r5   zMingw32CCompiler.__init__  s    '5111!tw 	V !TUUU"TW,+dg5&1dg~nnT_mDD 	 	
 	
 	
 	
 	
rK   c                 *    t          t                    r   )r   rb   r   s     r$   r   z+Mingw32CCompiler.runtime_library_dir_option   s    $%>???rK   r   )r   r   r   r   r   r5   r   r   r   s   @r$   r   r   
  s^        DDM
 
 
 
 
 
"@ @ @ @ @ @ @rK   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 |                                 }	 t          |          }	 d|                                v r t          d|z  f|                                 S t          d	|z  f|                                 S # |                                 w xY w# t          $ r,}t          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'Clangzsys.version mentions 'Clang'__GNUC__z'%s' mentions '__GNUC__'z '%s' does not mention '__GNUC__'zcouldn't read '{}': {}N)	distutilsr   r   r   r9   get_config_h_filenameopenreadcloseCONFIG_H_NOTOKOSErrorCONFIG_H_UNCERTAINr8   strerror)r   fnconfig_hexcs       r$   r6   r6   -  s4   * $##### 888 #+::: 
	(	(	*	*B
W88	X]]__,,"$>$CC NN &'IB'NNNNHNN W W W"$<$C$CB$U$UVVVVVVVWsB   
C	 !B0 ;C	 B0 C	 0CC	 	
C?!C:4C?:C?c                     t          t          j        |           dgz             }|                                                    d          S )zCTry to determine if the compiler that would be used is from cygwin.z-dumpmachines   cygwin)r   shlexsplitstripendswith)r>   
out_strings     r$   r   r   \  s?    ek"oo0@@AAJ&&y111rK   )$r   r;   r   r   ra   r   rO   
subprocessr   unixccompilerr   	file_utilr   errorsr   r   r	   r
   r   r   r   _collectionsr   leftundefined_valuer   r%   rb   r'   r   r9   r   r   r6   r   get_versionsr   rK   r$   <module>r      s    
			 				 



    # # # # # # ( ( ( ( ( ( ! ! ! ! ! !            > = = = = = = = " " " " " "  kkkklll~&&#  .F F F I }
 }
 }
 }
 }
m }
 }
 }
B@ @ @ @ @ @ @ @<   ,W ,W ,W^2 2 2  rK   