CasperSecurity

Current Path : /lib/python3.10/distutils/command/__pycache__/
Upload File :
Current File : //lib/python3.10/distutils/command/__pycache__/build_ext.cpython-310.pyc

o

��bc�{�@s�dZddlZddlZddlZddlZddlmZddlTddlm	Z	m
Z
ddlmZddlm
Z
ddlmZdd	lmZdd
lmZddlmZe�d�Zd
d�ZGdd�de�ZdS)z�distutils.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)�*)�customize_compiler�get_python_version)�get_config_h_filename)�newer_group)�	Extension)�get_platform)�log)�	USER_BASEz3^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$cCsddlm}|�dS)Nr��show_compilers)�distutils.ccompilerr
r�r�2/usr/lib/python3.10/distutils/command/build_ext.pyr
s
r
c@seZdZdZdejZddddde�fdd	d
defdd
ddddefddddddddddgZgd�Z	ddde
fgZd d!�Zd"d#�Z
d$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zejd2d3��Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Zd>d?�Zd@dA�ZdBdC�ZdS)D�	build_extz8build C/C++ extensions (compile/link to build directory)z (separated by '%s'))z
build-lib=�bz(directory for compiled extension modules)zbuild-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)zdefine=�DzC preprocessor macros to define)zundef=�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)zrpath=�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=�czspecify the compiler type)z	parallel=�jznumber of parallel build jobs)�swig-cppNz)make SWIG create C++ files (default is C))z
swig-opts=Nz!list of SWIG command line options)zswig=Nzpath to the SWIG executable)�userNz#add user include, library and rpath)rrr r$r%z
help-compilerNzlist available compilerscCs�d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_
d|_d|_d|_d|_d|_d|_d|_dS)Nr)�
extensions�	build_lib�	plat_name�
build_tempr�package�include_dirs�define�undef�	libraries�library_dirs�rpath�link_objectsrr �compiler�swig�swig_cpp�	swig_optsr%�parallel��selfrrr�initialize_optionsjs*
zbuild_ext.initialize_optionsc

Cs�ddlm}|�ddddddd	d
�|jdur|jj|_|jj|_|��}|jdd�}|j	dur7|jj	p5g|_	t
|j	t�rE|j	�t
j�|_	tjtjkrW|j	�t
j�tjd
��|j	�|�t
jj��||krq|j	�|�t
jj��|�d�|�d�|jdur�g|_|jdur�g|_nt
|jt�r�|j�t
j�|_|jdur�g|_nt
|jt�r�|j�t
j�|_t
jdk�r-|j�t
j�tjd��tjtjkr�|j�t
j�tjd��|jr�t
j�|jd�|_n	t
j�|jd�|_|j	�t
j�t���t tdd�}|�r|j�|�|j!dk�rd}n|j!dd�}t
j�tjd�}|�r't
j�||�}|j�|�tj"dd�dk�r\tj#�$t
j�tjd���rV|j�t
j�tjddt%�d��n|j�d�	|j(�ro|j(�d"�}d#d$�|D�|_(|j)�rz|j)�d"�|_)|j*du�r�g|_*n|j*�d%�|_*|j+�r�t
j�t,d
�}t
j�t,d�}	t
j�-|��r�|j	�|�t
j�-|	��r�|j�|	�|j�|	�t
|j.t��r�z	t/|j.�|_.WdSt0�y�t1d&��wdS)'Nr)�	sysconfig�build)r'r')r)r))r2r2)rr)r r )r6r6)r(r(�)�
plat_specific�includer.r1�nt�libs�Debug�Release�_home�win32��PCbuild��cygwin�bin�lib�python�config�.F�Py_ENABLE_SHARED�LIBDIR�,cSsg|]}|df�qS)�1r)�.0�symbolrrr�
<listcomp>�sz.build_ext.finalize_options.<locals>.<listcomp>� zparallel should be an integer)2�	distutilsr:�set_undefined_optionsr*�distribution�ext_package�ext_modulesr&�get_python_incr+�
isinstance�str�split�os�pathsep�sys�exec_prefix�base_exec_prefix�append�path�join�extend�ensure_string_listr.r/r0�name�prefixrr)�dirnamer�getattrr(�platform�
executable�
startswithr�get_config_var�python_buildr,r-r5r%r�isdirr6�int�
ValueError�DistutilsOptionError)
r8r:�
py_include�plat_py_include�	_sys_home�suffix�new_lib�defines�user_include�user_librrr�finalize_options�s��




�




�
��zbuild_ext.finalize_optionscCsbddlm}|jsdS|j��r&|�d�}|j�|��pg�|j	�
|j�||j|j
|j|jd�|_t|j�tjdkrJ|jt�krJ|j�|j�|jdurV|j�|j�|jdurj|jD]\}}|j�||�q^|jdur{|jD]}|j�|�qr|jdur�|j�|j�|j	dur�|j�|j	�|jdur�|j�|j�|j dur�|j�!|j �|�"�dS)Nr)�new_compiler�
build_clib)r2�verbose�dry_runr r?)#rrr&rX�has_c_libraries�get_finalized_commandr.rg�get_library_namesr/rdr�r2r�r�r rr_rir(r	�
initializer+�set_include_dirsr,�define_macror-�undefine_macro�
set_libraries�set_library_dirsr0�set_runtime_library_dirsr1�set_link_objects�build_extensions)r8rr�ri�value�macrorrr�runs@

�








z
build_ext.runc
Csht|t�s	td��t|�D]�\}}t|t�rq
t|t�r"t|�dkr&td��|\}}t�d|�t|t	�r:t
�|�s>td��t|t�sGtd��t||d�}dD]}|�
|�}|d	urat|||�qP|�
d
�|_d|vrqt�d�|�
d
�}|r�g|_g|_|D],}	t|	t�r�t|	�dvs�td��t|	�dkr�|j�|	d�q�t|	�dkr�|j�|	�q�|||<q
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 instances�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)r+r/r.�
extra_objects�extra_compile_args�extra_link_argsNr0�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)r\�list�DistutilsSetupError�	enumerater�tuple�lenr
�warnr]�extension_name_re�match�dict�get�setattr�runtime_library_dirs�
define_macros�undef_macrosrd)
r8r&r�ext�ext_name�
build_info�key�valr�r�rrr�check_extensions_listVsd

�
��
��
�
�

��
�zbuild_ext.check_extensions_listcCs,|�|j�g}|jD]}|�|j�q|S�N)r�r&rgr�)r8�	filenamesr�rrr�get_source_files�s

zbuild_ext.get_source_filescCs2|�|j�g}|jD]}|�|�|j��q|Sr�)r�r&rd�get_ext_fullpathri)r8�outputsr�rrr�get_outputs�s

zbuild_ext.get_outputscCs*|�|j�|jr|��dS|��dSr�)r�r&r6�_build_extensions_parallel�_build_extensions_serialr7rrrr��szbuild_ext.build_extensionsc
s��j}�jdurt��}zddlm}Wntyd}Ynw|dur*���dS||d��8���fdd��jD�}t�j|�D]\}}��	|��|�
�Wd�n1sYwYqAWd�dS1sjwYdS)NTr)�ThreadPoolExecutor)�max_workerscsg|]	}���j|��qSr)�submit�build_extension)rRr���executorr8rrrT�s�z8build_ext._build_extensions_parallel.<locals>.<listcomp>)r6r_�	cpu_count�concurrent.futuresr��ImportErrorr�r&�zip�_filter_build_errors�result)r8�workersr��futuresr��futrr�rr��s,
��
���"�z$build_ext._build_extensions_parallelc	CsD|jD]}|�|��
|�|�Wd�n1swYqdSr�)r&r�r�)r8r�rrrr��s
���z"build_ext._build_extensions_serialc
csX�zdVWdStttfy+}z|js�|�d|j|f�WYd}~dSd}~ww)Nz"building extension "%s" failed: %s)�CCompilerError�DistutilsError�CompileError�optionalr�ri)r8r��errrr��s����zbuild_ext._filter_build_errorsc
CsL|j}|dust|ttf�std|j��t|�}|�|j�}||j}|j	s6t
||d�s6t�d|j�dSt�
d|j�|�||�}|jpGg}|jdd�}|jD]}|�|f�qR|jj||j||j|j||jd�}|dd�|_|jr||�|j�|jp�g}|jp�|j�|�}	|jj|||�|�|j|j ||�!|�|j|j|	d�
dS)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)zbuilding '%s' extension)�
output_dirr�r+r�extra_postargs�depends)r.r/r�r��export_symbolsrr)�target_lang)"r�r\r�r�r�ri�sortedr�r�r rr
r�info�swig_sourcesr�r�r�rdr2�compiler)r+�_built_objectsr�rgr��language�detect_language�link_shared_object�
get_librariesr/r��get_export_symbols)
r8r�r��ext_pathr��
extra_argsr�r-�objectsr�rrrr��sV��


�


�zbuild_ext.build_extensioncCs$g}g}i}|jrt�d�|jsd|jvsd|jvrd}nd}|D](}tj�|�\}}	|	dkrE|�|d|�|�|�|d||<q"|�|�q"|sO|S|jpU|�	�}
|
dg}|�
|j�|jrh|�d�|jsv|jD]}|�|�qn|D]}||}
t�d	||
�|�|d
|
|g�qx|S)z�Walk 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�_wrap���z-pythonzswigging %s to %sz-o)
r4r
r�r5r_re�splitextrdr3�	find_swigrgr��spawn)r8r��	extension�new_sourcesr��swig_targets�
target_ext�source�baser�r3�swig_cmd�o�targetrrrr�2s>




zbuild_ext.swig_sourcescCsZtjdkrdStjdkr&dD]}tj�d|d�}tj�|�r#|SqdStdtj��)z�Return the name of the SWIG executable.  On Unix, this is
        just "swig" -- it should be in the PATH.  Tries a bit harder on
        Windows.
        �posixr3r?)z1.3z1.2z1.1z	c:\swig%szswig.exez>I don't know how to find (much less run) SWIG on platform '%s')r_rirerf�isfile�DistutilsPlatformError)r8�vers�fnrrrr�hs

���zbuild_ext.find_swigcCs�|�|�}|�d�}|�|d�}|js)tjj|dd�|g�}tj�|j|�Sd�|dd��}|�d�}tj�	|�
|��}tj�||�S)z�Returns the path of the filename for a given extension.

        The file is located in `build_lib` or directly in the package
        (inplace option).
        rMr�Nr�build_py)�get_ext_fullnamer^�get_ext_filenamerr_rerfr'r��abspath�get_package_dir)r8r��fullname�modpath�filenamer*r��package_dirrrrr��s


zbuild_ext.get_ext_fullpathcCs|jdur|S|jd|S)zSReturns the fullname of a given extension name.

        Adds the `package.` prefixNrM)r*)r8r�rrrr��s
zbuild_ext.get_ext_fullnamecCs.ddlm}|�d�}|d�}tjj|�|S)z�Convert 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�rprM�
EXT_SUFFIX)�distutils.sysconfigrpr^r_rerf)r8r�rpr��
ext_suffixrrrr��s
zbuild_ext.get_ext_filenamecCsvd|j�d�d}z|�d�Wnty(d|�d��dd��d�}Ynwd	|}||jvr8|j�|�|jS)
aReturn 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.
        �_rMr��asciir�punycode�-�_�PyInit)rir^�encode�UnicodeEncodeError�replace�decoder�rd)r8r�ry�
initfunc_namerrrr��s �
zbuild_ext.get_export_symbolscCs�tjdkr1ddlm}t|j|�s.d}|jr|d}|tjd?tjd?d@f}|j|gS|jSdd	l	m
}d
}	|rH|d�}|jd|gS|jS)z�Return 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).
        rDr)�MSVCCompilerz
python%d%d�_d���r�FrN�getandroidapilevelTrH�_PYTHON_HOST_PLATFORM�ANDROID_API_LEVEL�MACHDEP�	LDVERSIONrK)rarm�distutils._msvccompilerrr\r2r�
hexversionr.r�rp�hasattrr_�environ)r8r�r�template�	pythonlibrp�link_libpython�	ldversionrrrr��s$

��
zbuild_ext.get_libraries) �__name__�
__module__�__qualname__�descriptionr_r`�sep_byr	�user_options�boolean_optionsr
�help_optionsr9r~r�r�r�r�r�r�r��
contextlib�contextmanagerr�r�r�r�r�r�r�r�r�rrrrr!sp
�����+��@N	
	L6	
r)�__doc__r!r_�rera�distutils.corer�distutils.errorsr�rrr�distutils.dep_utilr�distutils.extensionr�distutils.utilr	rVr
�siterr�r�r
rrrrr�<module>s&�
Hacker Blog, Shell İndir, Sql İnjection, XSS Attacks, LFI Attacks, Social Hacking, Exploit Bot, Proxy Tools, Web Shell, PHP Shell, Alfa Shell İndir, Hacking Training Set, DDoS Script, Denial Of Service, Botnet, RFI Attacks, Encryption
Telegram @BIBIL_0DAY