
    v.g{                         d 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m	Z	m
Z
mZmZmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ  ej        d          Zd Z  G d de          Z!dS )zdistutils.command.build_ext

Implements the Distutils 'build_ext' command, for building extension
modules (currently limited to C extensions, should accommodate C++
extensions ASAP).    N   )Command)DistutilsOptionErrorDistutilsSetupErrorCCompilerErrorDistutilsErrorCompileErrorDistutilsPlatformError)customize_compilerget_python_version)get_config_h_filename)newer_group)	Extension)get_platform)log   )
py37compat)	USER_BASEz3^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$c                  &    ddl m}   |              d S )Nr   show_compilers)	ccompilerr   r   s    u/var/www/html/ws.service.destra.net.br/ws_env/lib/python3.11/site-packages/setuptools/_distutils/command/build_ext.pyr   r   #   s(    ******N    c                       e Zd ZdZdej        z  Zddddd e            z  fdd	d
dez   fddddddez   fddddddddddgZg dZ	ddde
fgZd  Zd! Zd" Zd# Zd$ Zd% Zd& Zd' Zd( Zej        d)             Zd* Zd+ Zd, Zd- Zd. Zd/ Zd0 Zd1 ZdS )2	build_extz8build C/C++ extensions (compile/link to build directory)z (separated by '%s'))z
build-lib=bz(directory for compiled extension modules)zbuild-temp=tz1directory for temporary files (build by-products)z
plat-name=pz>platform name to cross-compile for, if supported (default: %s))inplaceiziignore build-lib and put compiled extensions into the source directory alongside your pure Python moduleszinclude-dirs=Iz.list of directories to search for header files)zdefine=DzC preprocessor macros to define)zundef=Uz!C preprocessor macros to undefine)z
libraries=lz!external C libraries to link withzlibrary-dirs=Lz.directories to search for external C libraries)zrpath=Rz7directories to search for shared C libraries at runtime)zlink-objects=Oz2extra explicit link objects to include in the link)debuggz'compile/link with debugging information)forcefz2forcibly build everything (ignore file timestamps))z	compiler=czspecify the compiler type)z	parallel=jznumber of parallel build jobs)swig-cppNz)make SWIG create C++ files (default is C))z
swig-opts=Nz!list of SWIG command line options)zswig=Nzpath to the SWIG executable)userNz#add user include, library and rpath)r    r)   r+   r/   r0   zhelp-compilerNzlist available compilersc                 ,   d | _         d | _        d | _        d | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d S )Nr   )
extensions	build_lib	plat_name
build_tempr    packageinclude_dirsdefineundef	librarieslibrary_dirsrpathlink_objectsr)   r+   compilerswigswig_cpp	swig_optsr0   parallelselfs    r   initialize_optionszbuild_ext.initialize_optionsn   s     
 
 

		r   c           
      N   ddl m} |                     ddddddd	d
           | j        | j        j        | _        | j        j        | _        |                                }|                    d          }| j	        | j        j	        pg | _	        t          | j	        t                    r)| j	                            t          j                  | _	        t          j        t          j        k    rB| j	                            t          j                            t          j        d                     | j	                            |                    t          j        j                             ||k    r<| j	                            |                    t          j        j                             |                     d           |                     d           | j        g | _        | j        g | _        nCt          | j        t                    r)| j                            t          j                  | _        | j        g | _        nCt          | j        t                    r)| j                            t          j                  | _        t          j        dk    r| j                            t          j                            t          j        d                     t          j        t          j        k    rB| j                            t          j                            t          j        d                     | j        r+t          j                            | j        d          | _        n*t          j                            | j        d          | _        | j	                            t          j                            t?                                           | j                            t          j                   | j         dk    rd}n| j         dd          }t          j                            t          j        d          }|r t          j                            ||          }| j                            |           t          j!        d d         dk    ru|j"        sT| j                            t          j                            t          j        ddtG                      z   d                     n| j                            d           |$                    d          rO|j"        s.| j                            |$                    d                     n| j                            d           | j%        r+| j%                            d          }d  |D             | _%        | j&        r| j&                            d          | _&        | j'        g | _'        n| j'                            d!          | _'        | j(        rt          j                            tR          d          }t          j                            tR          d          }t          j        *                    |          r| j	                            |           t          j        *                    |          r4| j                            |           | j                            |           t          | j+        t                    r9	 tY          | j+                  | _+        d S # tZ          $ r t]          d"          w xY wd S )#Nr   )	sysconfigbuild)r3   r3   )r5   r5   )r>   r>   )r)   r)   )r+   r+   )rB   rB   )r4   r4   r   )plat_specificincluder:   r=   ntlibsDebugReleasewin32   PCbuild   cygwinlibpythonconfig.Py_ENABLE_SHAREDLIBDIR,c                     g | ]}|d fS )1 ).0symbols     r   
<listcomp>z.build_ext.finalize_options.<locals>.<listcomp>   s    ???VFC=???r    zparallel should be an integer)/	distutilsrG   set_undefined_optionsr6   distributionext_packageext_modulesr2   get_python_incr7   
isinstancestrsplitospathsepsysexec_prefixbase_exec_prefixappendpathjoinextendensure_string_listr:   r;   r<   nameprefixr)   r5   dirnamer   r4   platformpython_buildr   get_config_varr8   r9   rA   r0   r   isdirrB   int
ValueErrorr   )	rD   rG   
py_includeplat_py_includesuffixnew_libdefinesuser_includeuser_libs	            r   finalize_optionszbuild_ext.finalize_options   s   ''''''""&($$&		
 		
 		
 <,8DL+7 --//
#222CC$ $ 1 > D"Dd'-- 	D $ 1 7 7
 C CD ?c222$$RW\\#/9%M%MNNN 	  !1!1"'/!B!BCCCj(($$_%:%:27?%K%KLLL,,,/// >!DN$ "D)3// 	D $ 1 7 7
 C CD:DJJ
C(( 	6))"*55DJ
 7d?? $$RW\\#/6%J%JKKK#sz11!((c6JF)S)STTTz K"$',,t"H"H"$',,t	"J"J $$RW__5J5L5L%M%MNNN$$S%9::: ~((  +gll3?I>>G 8',,w77$$W--- <x'') 	.!((GLL
E86H6J6J+JH     !((---
 ##$677 	.) .!(()A)A()K)KLLLL !((--- ; 	@k'',,G??w???DK
 : 	/))#..DJ>!DNN!^11#66DN 9 	,7<<	9==Lw||Iu55Hw}}\** 7!((666w}}X&& ,!((222
!!(+++dmS)) 	LL #DM 2 2 L L L*+JKKKL	L 	Ls   -\ \"c                 v   ddl m} | j        sd S | j                                        rb|                     d          }| j                            |                                pg            | j	        
                    |j                    || j        | j        | j        | j                  | _        t!          | j                   t"          j        dk    r6| j        t)                      k    r| j                            | j                   | j        | j                            | j                   | j        (| j        D ] \  }}| j                            ||           !| j        $| j        D ]}| j                            |           | j        | j                            | j                   | j	        | j                            | j	                   | j        | j                            | j                   | j         | j        !                    | j                    | "                                 d S )Nr   )new_compiler
build_clib)r>   verbosedry_runr+   rK   )#r   r   r2   rd   has_c_librariesget_finalized_commandr:   rs   get_library_namesr;   rp   r   r>   r   r   r+   r   rk   ru   r4   r   
initializer7   set_include_dirsr8   define_macror9   undefine_macroset_librariesset_library_dirsr<   set_runtime_library_dirsr=   set_link_objectsbuild_extensions)rD   r   r   ru   valuemacros         r   runzbuild_ext.run  s3   ,,,,,,  	F
 ,,.. 	<33LAAJN!!*">">"@"@"FBGGG$$Z%:;;; %]LL*	
 
 
 	4=))) 7d??t~??M$$T^444 (M**4+<===;"!% 8 8u**47777:! 4 4,,U3333>%M''777(M**4+<===:!M224:>>>(M**4+<=== 	r   c                    t          |t                    st          d          t          |          D ]	\  }}t          |t                    rt          |t
                    rt          |          dk    rt          d          |\  }}t          j        d|           t          |t                    rt                              |          st          d          t          |t                    st          d          t	          ||d                   }dD ]*}|                    |          }|t          |||           +|                    d
          |_        d|v rt          j        d           |                    d          }|rg |_        g |_        |D ]}	t          |	t
                    rt          |	          dv st          d          t          |	          dk    r!|j                            |	d                    kt          |	          dk    r|j                            |	           |||<   d	S )a  Ensure that the list of extensions (presumably provided as a
        command option 'extensions') is valid, i.e. it is a list of
        Extension objects.  We also support the old-style list of 2-tuples,
        where the tuples are (ext_name, build_info), which are converted to
        Extension instances here.

        Raise DistutilsSetupError if the structure is invalid anywhere;
        just returns otherwise.
        z:'ext_modules' option must be a list of Extension instancesr   zMeach element of 'ext_modules' option must be an Extension instance or 2-tuplezvold-style (ext_name, build_info) tuple found in ext_modules for extension '%s' -- please convert to Extension instancezRfirst element of each tuple in 'ext_modules' must be the extension name (a string)zOsecond element of each tuple in 'ext_modules' must be a dictionary (build info)sources)r7   r;   r:   extra_objectsextra_compile_argsextra_link_argsNr<   def_filez9'def_file' element of build info dict no longer supportedmacros)r   r   z9'macros' element of build info dict must be 1- or 2-tupler   r   )rh   listr   	enumerater   tuplelenr   warningri   extension_name_rematchdictgetsetattrruntime_library_dirsdefine_macrosundef_macrosrp   )
rD   r2   r!   extext_name
build_infokeyvalr   r   s
             r   check_extensions_listzbuild_ext.check_extensions_list\  s    *d++ 	%L    
++ J	  J	 FAs#y))  c5)) SXX]])4  
 $' HjK: 	   x-- 2C2I2I(2S2S )<  
 j$// )8   Hj&;<<C 
+ 
+ !nnS))?Cc*** (2~~g'>'>C$Z''R    ^^H--F 8$&!#% # 	8 	8E&ue44 Uv9M9M14   5zzQ(//a9999Uq)00777JqMMUJ	  J	 r   c                     |                      | j                   g }| j        D ]}|                    |j                   |S N)r   r2   rs   r   )rD   	filenamesr   s      r   get_source_fileszbuild_ext.get_source_files  sO    ""4?333	 ? 	* 	*CS[))))r   c                     |                      | j                   g }| j        D ]/}|                    |                     |j                             0|S r   )r   r2   rp   get_ext_fullpathru   )rD   outputsr   s      r   get_outputszbuild_ext.get_outputs  s\     	""4?333
 ? 	< 	<CNN400::;;;;r   c                     |                      | j                   | j        r|                                  d S |                                  d S r   )r   r2   rB   _build_extensions_parallel_build_extensions_serialrC   s    r   r   zbuild_ext.build_extensions  sR    ""4?333= 	,++-----))+++++r   c                      j         } j         du rt          j                    }	 ddlm} n# t
          $ r d }Y nw xY w|                                  d S  ||          5  fd j        D             }t           j        |          D ]F\  }} 	                    |          5  |
                                 d d d            n# 1 swxY w Y   G	 d d d            d S # 1 swxY w Y   d S )NTr   )ThreadPoolExecutor)max_workersc                 F    g | ]}                     j        |          S r]   )submitbuild_extension)r^   r   executorrD   s     r   r`   z8build_ext._build_extensions_parallel.<locals>.<listcomp>  s7       ?B 4c::  r   )rB   rk   	cpu_countconcurrent.futuresr   ImportErrorr   r2   zip_filter_build_errorsresult)rD   workersr   futuresr   futr   s   `     @r   r   z$build_ext._build_extensions_parallel  s   -=D  lnnG	======= 	 	 	GGG	 ?))+++FG444 	!    FJo  G  99 ! !S..s33 ! !JJLLL! ! ! ! ! ! ! ! ! ! ! ! ! ! !!		! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!sC   . ==$AC#(C	=C#	CC#CC##C'*C'c                     | j         D ]D}|                     |          5  |                     |           d d d            n# 1 swxY w Y   Ed S r   )r2   r   r   )rD   r   s     r   r   z"build_ext._build_extensions_serial  s    ? 	* 	*C**3// * *$$S)))* * * * * * * * * * * * * * *	* 	*s   AA	A	c              #      K   	 d V  d S # t           t          t          f$ rA}|j        s |                     d                    |j        |                     Y d }~d S d }~ww xY w)Nz"building extension "{}" failed: {})r   r   r	   optionalwarnformatru   )rD   r   es      r   r   zbuild_ext._filter_build_errors  s      	PEEEEE= 	P 	P 	P< II:AA#(ANNOOOOOOOOO	Ps   
 A"6AA"c                    |j         }|t          |t          t          f          st	          d|j        z            t          |          }|                     |j                  }||j        z   }| j	        s-t          ||d          st          j        d|j                   d S t          j        d|j                   |                     ||          }|j        pg }|j        d d          }|j        D ]}|                    |f           | j                            || j        ||j        | j        ||j                  }|d d          | _        |j        r|                    |j                   |j        pg }|j        p| j                            |          }	| j                            |||                     |          |j        |j         || !                    |          | j        | j        |	
  
         d S )Nzjin 'ext_modules' option (extension '%s'), 'sources' must be present and must be a list of source filenamesnewerz$skipping '%s' extension (up-to-date)zbuilding '%s' extension)
output_dirr   r7   r)   extra_postargsdepends)r:   r;   r   r   export_symbolsr)   r5   target_lang)"r   rh   r   r   r   ru   sortedr   r   r+   r   r   r)   infoswig_sourcesr   r   r   rp   r>   compiler5   r7   _built_objectsr   rs   r   languagedetect_languagelink_shared_objectget_librariesr;   r   get_export_symbols)
rD   r   r   ext_pathr   
extra_argsr   r9   objectsr   s
             r   r   zbuild_ext.build_extension  s!   +?*WtUm"D"D?%-/2x8   //((22CK'
 	:k'8WEE 	:I<chGGGFH.999
 ##GS11  +1r
"111%% 	$ 	$EMM5(####-'')*%K ( 
 
 &aaaj
  	.NN3,---(.B
 <I4=#@#@#I#I((((--)!$!9%22377*  	) 	
 	
 	
 	
 	
r   c                    g }g }i }| j         rt          j        d           | j         sd| j        v s	d|j        v rd}nd}|D ]{}t          j                            |          \  }}	|	dk    r<|                    |dz   |z              |                    |           |d         ||<   f|                    |           ||s|S | j        p| 	                                }
|
dg}|
                    | j                   | j         r|                    d           | j        s|j        D ]}|                    |           |D ];}||         }t          j        d	||           |                     |d
||gz              <|S )zWalk the list of source files in 'sources', looking for SWIG
        interface (.i) files.  Run SWIG on all that are found, and
        return a modified 'sources' list with SWIG source files replaced
        by the generated C (or C++) files.
        z/--swig-cpp is deprecated - use --swig-opts=-c++z-c++z.cppz.cz.i_wrapz-pythonzswigging %s to %sz-o)r@   r   r   rA   rk   rq   splitextrp   r?   	find_swigrs   r   spawn)rD   r   	extensionnew_sourcesr   swig_targets
target_extsourcebaser   r?   swig_cmdotargets                 r   r   zbuild_ext.swig_sourcesJ  s     = 	KKIJJJ M	$.(()---JJJ 	+ 	+F'**622KT3d{{""4'>J#>???##F+++'22V$$""6**** 	y,DNN,,)$'''= 	$OOF### ~ 	#( # #""""" 	: 	:F!&)FH(&&999JJx4"889999r   c                    t           j        dk    rdS t           j        dk    rMdD ]H}t           j                            d|z  d          }t           j                            |          r|c S IdS t          dt           j        z            )zReturn the name of the SWIG executable.  On Unix, this is
        just "swig" -- it should be in the PATH.  Tries a bit harder on
        Windows.
        posixr?   rK   )z1.3z1.2z1.1z	c:\swig%szswig.exez>I don't know how to find (much less run) SWIG on platform '%s')rk   ru   rq   rr   isfiler
   )rD   versfns      r   r   zbuild_ext.find_swig  s    
 7g6W__ . " "W\\,"5zBB7>>"%% III "z(#%'W-  r   c                 *   |                      |          }|                    d          }|                     |d                   }| j        sDt	          j        j        |dd         |gz    }t          j                            | j        |          S d                    |dd                   }|                     d          }t          j        	                    |
                    |                    }t          j                            ||          S )zReturns the path of the filename for a given extension.

        The file is located in `build_lib` or directly in the package
        (inplace option).
        rW   r   Nr   build_py)get_ext_fullnamerj   get_ext_filenamer    rk   rq   rr   r3   r   abspathget_package_dir)rD   r   fullnamemodpathfilenamer6   r   package_dirs           r   r   zbuild_ext.get_ext_fullpath  s     ((22..%%((55| 	: w|WSbS\XJ%>?H7<<999 ((71R4=))--j99gooh&>&>w&G&GHH w||K222r   c                 .    | j         |S | j         dz   |z   S )zSReturns the fullname of a given extension name.

        Adds the `package.` prefixNrW   )r6   )rD   r   s     r   r   zbuild_ext.get_ext_fullname  s#     <O<#%00r   c                 z    ddl m} |                    d          } |d          }t          j        j        | |z   S )zConvert the name of an extension (eg. "foo.bar") into the name
        of the file from which it will be loaded (eg. "foo/bar.so", or
        "foo\bar.pyd").
        r   rz   rW   
EXT_SUFFIX)rG   rz   rj   rk   rq   rr   )rD   r   rz   r   
ext_suffixs        r   r   zbuild_ext.get_ext_filename  sJ    
 	/.....>>#&&#^L11
w|X&33r   c                 v   |j                             d          d         }	 |                    d           d|z   }nO# t          $ rB d|                    d                              dd                              d          z   }Y nw xY wd	|z   }||j        vr|j                            |           |j        S )
a  Return the list of symbols that a shared extension has to
        export.  This either uses 'ext.export_symbols' or, if it's not
        provided, "PyInit_" + module_name.  Only relevant on Windows, where
        the .pyd file (DLL) must export the module "PyInit_" function.
        rW   r   ascii_U_punycode   -   _PyInit)ru   rj   encodeUnicodeEncodeErrorreplacedecoder   rp   )rD   r   ru   r   initfunc_names        r   r   zbuild_ext.get_export_symbols  s     x~~c""2&	  KK    4ZFF " 	X 	X 	XDKK
33;;D$GGNNwWWWFFF	X
 !6) 222%%m444!!s   = A	B	B	c                    t           j        dk    rYddlm} t	          | j        |          s=d}| j        r|dz   }|t           j        dz	  t           j        dz	  dz  fz  }|j        |gz   S ndd	l	m
} d
} |d          r\t          t           d          rd}nDt           j        dk    rd}n1dt          j        v r# |d          dk    rd}n |d          dk    rd}|r |d          }|j        d|z   gz   S |j        t          j                    z   S )zReturn the list of libraries to link against when building a
        shared extension.  On most platforms, this is just 'ext.libraries';
        on Windows, we add the Python library (eg. python20.dll).
        rO   r   )MSVCCompilerz
python%d%d_d         r	  FrX   getandroidapilevelTrS   _PYTHON_HOST_PLATFORMANDROID_API_LEVELr   MACHDEP	LDVERSIONrU   )rm   rx   _msvccompilerr  rh   r>   r)   
hexversionr:   rG   rz   hasattrrk   environr   	pythonlib)rD   r   r  templater(  rz   link_libpython	ldversions           r   r   zbuild_ext.get_libraries  sm    <7""444444dm\:: 
3': /'$H$Nb(^r)T1( 	 }	{22
3( 322222"N~011 .3 455 	.%)NN\X--%)NN,
::%~&9::a??)-'	22h>>)- >*N;77	}9(<'===}z35555r   ) __name__
__module____qualname__descriptionrk   rl   sep_byr   user_optionsboolean_optionsr   help_optionsrE   r   r   r   r   r   r   r   r   
contextlibcontextmanagerr   r   r   r   r   r   r   r   r   r]   r   r   r   r   )   s       LK( $bj0FGQ*lnn-	
	
 <vE	

 	<<@<vE	

 	STAL7;GA6=K&LP HGGO 
$ :NKL  0RL RL RLh@  @  @ DY  Y  Y v    , , ,! ! !** * *
 P P PO
 O
 O
b7 7 7r  23 3 361 1 1	4 	4 	4" " "*56 56 56 56 56r   r   )"__doc__r4  rk   rerm   corer   errorsr   r   r   r   r	   r
   rG   r   r   r   dep_utilr   r   r   utilr   distutils._logr    r   siter   r   r   r   r   r]   r   r   <module>r?     s        				 				 



                      ? > > > > > > > - - - - - - " " " " " " ! ! ! ! ! !                         BJUVV   l6 l6 l6 l6 l6 l6 l6 l6 l6 l6r   