HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/relenv/__pycache__/runtime.cpython-310.pyc
o

;j���
@stUdZddlmZddlZddlZddlZddlZddl	Z
ddlZddlZddl
ZddlZddlZddlZddlZddlZddlmZmZmZeraddlmZmZmZm Z ddl!m"Z"ddl#m$Z$ede
�Z	ede�Zede�Zede�Zede�Zede�Zede�Z
ede�Zgd	�Z%e&ej'e&BZ(e)e&e&fZ*d�dd�Z+da,de-d<da.de-d<da/de-d<d�dd�Z0d�dd�Z1d�dd�Z2d�dd�Z3ej4d�d d!��Z5d�d$d%�Z6d�d'd(�Z7d�d-d.�Z8d�d0d1�Z9d2d3d4d5d6d7d8d9d:d;d9d<�Z:d=e-d><da;d?e-d@<d�dAdB�Z<d�dEdF�Z=d�dIdJ�Z>d�dLdM�Z?d�dNdO�Z@d�dPdQ�ZAGdRdS�dS�ZBGdTdU�dU�ZCd�dVdW�ZDd�dXdY�ZEd�dZd[�ZFd�d\d]�ZGd�d^d_�ZHd�dadb�ZId�dcdd�ZJGdedf�df�ZKd�dgdh�ZLd�didj�ZMd�dkdl�ZNd�dmdn�ZOd�dodp�ZPeCeBdqeD�eBdreE�eBdseF�eBdteG�eBdueH�eBdveJ�eBdweM�eBdxeN�eBdyeO�eBdzeP�g
d{�ZQd�d|d}�ZRd�d~d�ZSd�d�d��ZTd�d�d��ZUd�d�d��ZVd�d�d��ZWd�d�d��ZXdS)�a�
This code is run when initializing the python interperter in a Relenv environment.

- Point Relenv's Openssl to the system installed Openssl certificate path
- Make sure pip creates scripts with a shebang that points to the correct
  python using a relative path.
- On linux, provide pip with the proper location of the Relenv toolchain
  gcc. This ensures when using pip any c dependencies are compiled against the
  proper glibc version.
�)�annotationsN)�
TYPE_CHECKING�Any�cast)�Callable�Iterable�Iterator�Sequence)�
ModuleSpec)�
ModuleTyper)�sys�shutil�
subprocess�json�	importlib�site�ctypes�warnings�name�str�path�PathType�returnrcCsbddl}|j�||�}|dus|jdurtd|�d|����|j�|�}|j�|�|tj|<|S)z�
    Import module from a path.

    This causes hashlib to be imported because of importing importlib.util so
    it can not be used until after openssl has been configured.
    rNzUnable to load module z from )	�importlib.util�util�spec_from_file_location�loader�ImportError�module_from_spec�exec_moduler�modules)rrr�spec�module�r#�B/opt/saltstack/salt/lib/python3.10/site-packages/relenv/runtime.py�path_importGs
r%�ModuleType | None�_COMMON�	_RELOCATE�	_BUILDENVcC�&tdurtdtt�t�jd��atS)z+Return the cached ``relenv.common`` module.Nz
relenv.commonz	common.py)r'r%r�pathlib�Path�__file__�parentr#r#r#r$�common^�r/cCr*)z-Return the cached ``relenv.relocate`` module.Nzrelenv.relocatezrelocate.py)r(r%rr+r,r-r.r#r#r#r$�relocatefr0r1cCr*)z-Return the cached ``relenv.buildenv`` module.Nzrelenv.buildenvzbuildenv.py)r)r%rr+r,r-r.r#r#r#r$�buildenvnr0r2cCsdjtj�S)z'
    Current python major version.
    z{}.{})�formatr�version_infor#r#r#r$�get_major_versionv�r5�new_dir�Iterator[None]c	cs8�t��}t�|�zdVWt�|�dSt�|�w)z
    Changedir context.
    N)�os�getcwd�chdir)r7Zold_dirr#r#r$�pushd}s�
r<�string�NonecCs&tj�d�rt|�tj��dSdS)z�
    Prints the provided message if RELENV_DEBUG is truthy in the environment.

    :param string: The message to print
    :type string: str
    ZRELENV_DEBUGN)r9�environ�get�printr�stdout�flush)r=r#r#r$�debug�s�rD�pathlib.PathcCs0t�t���j}tjdkr|jjjS|jjjjS)z(
    Return the relenv module root.
    �win32)r+r,r-�resolver.r�platform)Z
MODULE_DIRr#r#r$�relenv_root�s

rI�func�Callable[..., bytes]�args�kwargscst���d
�fdd��}|S)zf
    Build a shebang to point to the proper location.

    :return: The shebang
    :rtype: bytes
    �selfrrLrMr�bytescs�t�|j�}tjrt�t����d}zt��tj	|t�tj
����}WntyBt
d|j����|g|�Ri|��}|YSwt
d|�d|���tjdkr_tt�d�|���dStt�d�|�}td	t��|��}|��S)
N�binz$Relenv Value Error - _build_shebang zRelenv - _build_shebang � rFz#!<launcher_dir>s
�/r)r+r,�
target_dir�TARGET�_ensure_target_path�absoluter/Zrelative_interpreterr�RELENV�
executablerG�
ValueErrorrDrHr�encode�
PurePosixPathrZformat_shebang)rNrLrM�scriptsZinterpreterZoriginal_resultZrel_path�	formatted�rJr#r$�wrapped�s "�
z_build_shebang.<locals>.wrappedN)rNrrLrrMrrrO��	functools�wraps)rJrLrMr_r#r^r$�_build_shebang�src�Callable[[str], Any]cst���d�fdd��}|S)	�H
    Return a wrapper to resolve paths relative to the relenv root.
    rrrrcsl|dkr&�|�}tj�d�rt�}nt�d}td|�d|�d|���|S�|�}td|�d|���|S)NZBINDIR�RELENV_PIP_DIRZScriptszget_config_var call z old: z new: rQ)r9r?r@rIrD)rZorig�valr^r#r$r_�s
z'get_config_var_wrapper.<locals>.wrappedN)rrrrr`)rJr_r#r^r$�get_config_var_wrapper�srhZar�gccz?-Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wallz-I. -I./Includezg++z/usr/local/lib/python3.10z/usr/local/libzgcc -shared�zg++ -shared�ZARZCCZCFLAGSZCPPFLAGSZCXXZLIBDESTZ	SCRIPTDIRZ	BLDSHAREDZLDFLAGSZLDCXXSHAREDZLDSHARED�
ConfigVars�CONFIG_VARS_DEFAULTSzConfigVars | None�_SYSTEM_CONFIG_VARScCs�tdurtSt�d�}|��r>tjt|�ddgdd�}zt�|j	�
��aWtStjy=td|j	�
����t
aYtSwtd�t
atS)	z�
    Read the system python's sysconfig values.

    Th system python isthe one installed by your package manager. Memoize them
    to avoid the overhead of shelling out.
    Nz/usr/bin/python3z-czFimport json, sysconfig; print(json.dumps(sysconfig.get_config_vars()))T)�capture_outputzFailed to load JSON from: zSystem python not found)rnr+r,�existsr�runrr�loadsrB�stripZJSONDecodeErrorrDrm)Zpyexec�pr#r#r$�system_sysconfig�s,
����ru�Callable[..., ConfigVars]�modcst���d��fdd��}|S)	rerLrrrlcsRtjdks
dtjvr�|�S��}t�}dD]}||||<qt�d|��|�S)NrF�RELENV_BUILDENVrkZ_CONFIG_VARS)rrHr9r?ru�setattr)rLZconfig_varsZsystem_config_varsr�rJrwr#r$r_s
z(get_config_vars_wrapper.<locals>.wrappedN)rLrrrlr`)rJrwr_r#rzr$�get_config_vars_wrappersr{�Callable[..., dict[str, str]]�default_schemecs$t���|ddfd
�fdd�
�}|S)reNT�scheme�
str | None�vars�dict[str, str] | None�expand�boolr�dict[str, str]cs4�|||d�}dtjvrtt��|d<|dt_|S)N)r~r�r�rfr\)r9r?rrIr�exec_prefix)r~r�r��pathsr^r#r$r_,s


z"get_paths_wrapper.<locals>.wrapped)r~rr�r�r�r�rr�r`)rJr}r_r#r^r$�get_paths_wrapper's�r��Callable[..., Any]cst���d
�fdd��}|S)zl
    Wrapper around build_ext.finalize_options.

    Used to add the relenv environment's include path.
    rNrrLrMrr>cs>�|g|�Ri|��dtjvr|j�tt�d��dSdS)NrxZinclude)r9r?Zinclude_dirs�appendrrI)rNrLrMr^r#r$�wrapperBs
�z)finalize_options_wrapper.<locals>.wrapperN)rNrrLrrMrrr>r`�rJr�r#r^r$�finalize_options_wrapper;sr�cst���d�fd
d��}|S)z{
    Wrap pip's wheel install function.

    This method determines any newly installed files and checks their RPATHs.
    rr�
wheel_pathrr~r�req_description�	pycompile�warn_script_location�
direct_url�	requestedrc	sjddlm}ddlm}	||��}
|	|
|�\}}Wd�n1s"wY�||||||||�dtjvr�t�|j�}
t	�}t
|
|d��a}|��D]S}|
|�dd�d}|�
�setd|���qMt��|�r�td	|���t��|
||d
d|�qMt��|�r�t�d�}|r�t��t|
|�t|�d�qMtd
�qMWd�dS1s�wYdSdS)Nr)�ZipFile)�parse_wheelrxZRECORD�,��Relenv - File not found �Relenv - Found elf �libTZotoolzGThe otool command is not available, please run `xcode-select --install`)Zzipfiler�Zpip._internal.utils.wheelr�r9r?r+r,�platlibrI�open�	readlines�splitrprDr1�is_elf�
handle_elfZis_machor
�whichZhandle_machor)rr�r~r�r�r�r�r�r�r�ZzfZinfo_dirZmetadata�plat�rootdir�fp�line�fileZ	otool_binr^r#r$r�RsH
��


��"��z&install_wheel_wrapper.<locals>.wrapperN)rrr�rr~rr�rr�rr�rr�rr�rrrr`r�r#r^r$�install_wheel_wrapperKs-r�cst���d�fdd��}|S)z|
    Wrap pip's legacy install function.

    This method determines any newly installed files and checks their RPATHs.
    �install_optionsr�global_options�root�home�prefix�
use_user_siter�r~�
setup_py_path�isolated�req_name�	build_env�unpacked_source_directoryr�rcsTt�|�jd}t|��}|��}Wd�n1swYd}d}|��D]&}|�d�r<|�d�d��}|r<n|�d�rN|�d�d��}|rNnq(�||||||||||	|
|||
�d}|r�t�|�ddt	���d	}t
|�d
��D]}|j�|�d|���r�|}nqzt
t�|j
��d
��D]}|j�|�d|���r�|}nq�|dur�td|
���dSt�|j�}t�}t|��\td
��>}|��D]1}t�|�����}|��s�td|���q�t��|�r�td|���t��|||dd|�q�Wd�n1�s
wYWd�dSWd�dS1�s#wYdS)NzPKG-INFOzVersion:z	Version: r�zName:zName: r��python�
site-packagesz
*.egg-info�-z*Relenv was not able to find egg info for: zinstalled-files.txtr�r�T)r+r,r.r��read�
splitlines�
startswithr�rsr5�sorted�globr�purelibrDr�rIr<r�rGrpr1r�r�)r�r�r�r�r�r�r�r~r�r�r�r�r�r�Zpkginfor�Zpkg_info�versionrr�ZegginfoZsitepackrr�r�r�r^r#r$r��s�

�

����

�� ��$�z'install_legacy_wrapper.<locals>.wrapperN)r�rr�rr�rr�rr�rr�rr�rr~rr�rr�rr�rr�rr�rr�rrrr`r�r#r^r$�install_legacy_wrapper�s	Ir�c@s4eZdZdZ		ddd
d�Zddd�Zddd�ZdS)�Wrapperz-
    Wrap methods of an imported module.
    �equalsFr"rr��Callable[[str], ModuleType]�matcher�_loadingr�rr>cCs||_||_||_||_dS�N)r"r�r��loading)rNr"r�r�r�r#r#r$�__init__�s
zWrapper.__init__rNcCs |jdkr|�|j�S|j|kS)zA
        Check if wrapper metches module being imported.
        r�)r�r�r"�rNr"r#r#r$�matches�s

zWrapper.matches�module_namercCs
|�|�S)z0
        Preform the wrapper operation.
        )r�)rNr�r#r#r$�__call__�s
zWrapper.__call__N)r�F)
r"rr�r�r�rr�r�rr>)rNr�r"rrr�)rNr�r�rrr)�__name__�
__module__�__qualname__�__doc__r�r�r�r#r#r#r$r��s�
r�c@s\eZdZdZ		d$d%d	d
�Z		d$d&dd�Z	d'd(dd�Zd)dd�Zd*dd �Zd+d"d#�Z	dS),�RelenvImporterz4
    Handle runtime wrapping of module methods.
    N�wrappers�Iterable[Wrapper] | None�_loads�dict[str, ModuleType] | Nonerr>cCs,|durg}t|�|_|duri}||_dSr�)�setr�r�)rNr�r�r#r#r$r��s

zRelenvImporter.__init__rNr�r�package_path�Sequence[str] | None�targetr�ModuleSpec | NonecCs\|jD](}|�|�r+|js+td|�d|�d|���d|_tj�||�}td|�SqdS)�.
        Find modules being imported.
        �RelenvImporter - match rQTr�N)r�r�r�rDrr�spec_from_loaderr)rNr�r�r�r�r!r#r#r$�	find_spec
s
	�zRelenvImporter.find_spec�RelenvImporter | NonecCs<|jD]}|�|�r|jstd|���d|_|SqdS)r�r�TN)r�r�r�rD)rNr�r�r�r#r#r$�find_modules
�zRelenvImporter.find_modulerrcCsZd}|jD]}|�|�rtd|���||�}d|_nq|dur&t�|�}|tj|<|S)z*
        Load an imported module.
        NzRelenvImporter - load_module F)r�r�rDr�r�
import_modulerr )rNrrwr�r#r#r$�load_module*s

�

zRelenvImporter.load_moduler!r
r&cCs|�|j�S)z/
        Create the module via a spec.
        )r�r)rNr!r#r#r$�
create_module:r6zRelenvImporter.create_moduler"cCsdS)z#
        Exec module noop.
        Nr#r�r#r#r$r@szRelenvImporter.exec_module�NN)r�r�r�r�rr>)
rNr�r�rr�r�r�rrr�r�)rNr�r�rr�r�rr�)rNr�rrrr)rNr�r!r
rr&)rNr�r"rrr>)
r�r�r�r�r�r�r�r�r�rr#r#r#r$r��s���

r�cCsnt�d�}td|�}t|j�|_t|j|�|_d|_z|��}Wn
t	y-|�
�}Ynwt|j|�|_|S)z
    Sysconfig wrapper.
    �	sysconfigrT)
rr�rrhZget_config_varr{Zget_config_varsZ_PIP_USE_SYSCONFIGZget_default_scheme�AttributeErrorZ_get_default_schemer�Z	get_paths)rr"rwr~r#r#r$�wrap_sysconfigGs

�r�cCs(t�|�}td|�}t|jj�|j_|S)z&
    pip.distlib.scripts wrapper.
    r)rr�rrcZScriptMaker�rr"rwr#r#r$�wrap_pip_distlib_scriptsZ�

r�cCs(t�|�}td|�}t|jj�|j_|S)z$
    distutils.command wrapper.
    r)rr�rr�Z	build_extZfinalize_optionsr�r#r#r$�wrap_distutils_commanddr�r�cC�$t�|�}td|�}t|j�|_|S)z9
    pip._internal.operations.install.wheel wrapper.
    r)rr�rr�Z
install_wheelr�r#r#r$�wrap_pip_install_wheeln�

r�cCr�)z:
    pip._internal.operations.install.legacy wrapper.
    r)rr�rr��installr�r#r#r$�wrap_pip_install_legacyxr�r��valuecCsX|tjvrtj||krtd|�d|�dtj|���dStd|���|tj|<dS)z�
    Set an environment variable if not already set.

    If the environment variable is already set and not equal to value, warn the
    user.
    z	Warning: z1 environment not set to relenv's root!
expected: z

current: zRelenv set N)r9r?rArD)rr�r#r#r$�set_env_if_not_set�s$r�cC�.t�|�}td|�}ddd�}||j�|_|S)	z1
    pip._internal.operations.build wrapper.
    rrJr�rcst���d�fdd��}|S)NrLrrMrcs�tjdkr�|i|��St���}tt�jd�}|dus!|��s&td�n ttj�}d|�d|�d|�d�}t	d|�t	d|�t	d	|��|i|��S)
N�linux�cargo�,Unable to set CARGO_HOME no toolchain existsz-C link-arg=-Wl,-rpath,z/lib -C link-arg=-Lz/sysroot/libZ
CARGO_HOMEZOPENSSL_DIRZ	RUSTFLAGS)
rrHr/�
get_toolchainrZDATA_DIRrprDrWr�)rLrM�	toolchain�
cargo_homeZ
relenvrootZ	rustflagsr^r#r$r��s"



���


z3wrap_pip_build_wheel.<locals>.wrap.<locals>.wrapper)rLrrMrrrr`r�r#r^r$�wrap�sz"wrap_pip_build_wheel.<locals>.wrapN�rJr�rr�)rr�rZbuild_wheel_pep517)rr"rwr�r#r#r$�wrap_pip_build_wheel�s



r�c@sBeZdZUdZdZded<dZded<dZded<dZded<dS)	rTz0
    Container for global pip target state.
    Fr�Nr�PATH�IGNORE�INSTALL)	r�r�r�r�rT�__annotations__r�r�r�r#r#r#r$rT�s
rTcCstjdur	td��tjS)zF
    Return the stored target path, raising if it is unavailable.
    Nz)TARGET path requested but not initialized)rTr��RuntimeErrorr#r#r#r$rU�s
rUcCsXt�|�}td|�}ddd�}||jj�|j_ddd�}t|jd	�r*||jj�|j_|S)zB
    Wrap pip install command to store target argument state.
    rrJr�rcst���d	�fdd��}|S)
NrNr�optionsrL�
Sequence[str]rcs.|js|jrdt_|jt_|jt_�|||�S)NT)r�rSrTr��ignore_installedr�)rNr�rLr^r#r$r��sz3wrap_cmd_install.<locals>.wrap_run.<locals>.wrapper)rNrr�rrLr�rrr`r�r#r^r$�wrap_run�sz"wrap_cmd_install.<locals>.wrap_runcSst�|�dd
d��}|S)
NrNrrSr�target_temp_dir�upgrader�r�intcSsddlm}|S)Nr)�SUCCESS)Zpip._internal.cli.status_codesr)rNrSrrrr#r#r$r��sz=wrap_cmd_install.<locals>.wrap_handle_target.<locals>.wrapper)
rNrrSrrrrr�rrr`r�r#r#r$�wrap_handle_target�sz,wrap_cmd_install.<locals>.wrap_handle_target�_handle_target_dirNr�)rr�rZInstallCommandrq�hasattrr)rr"rwrrr#r#r$�wrap_cmd_install�s



	r	cCr�)	zJ
    Wrap pip locations to fix locations when installing with target.
    rrJr�rcs(t���					dd�fd
d�
�}|S)NF�	dist_namer�userr�r��PathType | Noner�r�r�rrc	sL�||||||�}tjr$tjr$ddlm}t�}||||j|j|jd�}|S)Nr)�Scheme)r�r��headersr\�data)rTr�Zpip._internal.models.schemer
rUrr\r)	r
rr�r�r�r�r~r
Ztarget_pathr^r#r$r��s	�z<wrap_locations.<locals>.make_scheme_wrapper.<locals>.wrapper)FNNFN)r
rrr�r�rr�rr�r�r�rrrr`r�r#r^r$�make_scheme_wrapper�s�z+wrap_locations.<locals>.make_scheme_wrapperNr�)rr�rZ
get_scheme)rr"rwrr#r#r$�wrap_locations�s



rcCs2t�|�}td|�}ddd�}||jj�|j_|S)	�5
    Honor ignore installed option from pip cli.
    rrJr�rcs"t���		d
d�fdd	�
�}|S)NrNrr��session�
target_python�ignore_requires_pythonrcstjrtj|_�|||||�Sr�)rTr�r)rNr�rrrr^r#r$r�szFwrap_req_command.<locals>.make_package_finder_wrapper.<locals>.wrapperr�)rNrr�rrrrrrrrrr`r�r#r^r$�make_package_finder_wrappers
�z5wrap_req_command.<locals>.make_package_finder_wrapperNr�)rr�rZRequirementCommandZ_build_package_finder)rr"rwrr#r#r$�wrap_req_commands


�rcs
t�|�}td|�}|jj��jj}|dkr/t���						dd�fdd�
�}||j_|S|dkrMt���							dd�fdd�
�}||j_|S|dkrkt���							dd �fdd�
�}||j_|St���							dd�fdd�
�}||j_|S)!rr�NTFrNr�rr�r�r�r�r�r�rcs8ztjr
dt_t�}�|||||||�Wdt_Sdt_w�NTF�rTr�rU)rNr�r�r�r�r�r��Zoriginalr#r$�install_wrapper_pep517;s
�
z0wrap_req_install.<locals>.install_wrapper_pep517�r�c	�:ztjr
dt_t�}�||||||||�Wdt_Sdt_wrr�rNr�r�r�r�r�r�r�rr#r$�install_wrapper_pep517_optsY��z5wrap_req_install.<locals>.install_wrapper_pep517_opts�	r�c		
s<ztjr
dt_t�}�|||||||||�	Wdt_Sdt_wrr)	rNr�r�r�r�r�r�r�r�rr#r$�install_wrapper_legacyys �z0wrap_req_install.<locals>.install_wrapper_legacyc	rrrrrr#r$�install_wrapper_generic�r!z1wrap_req_install.<locals>.install_wrapper_generic)NNNTFT)rNrr�rr�rr�rr�r�r�r�r�r�rr)NNNNTFT)rNrr�rr�rr�rr�rr�r�r�r�r�r�rr)rNrr�rr�rr�rr�rr�rr�r�r�r�r�r�rr)	rr�rZInstallRequirementr��__code__�co_argcountrarb)rr"rwZargcountrr r#r$r#rr$�wrap_req_install/sd

�c��C��!��r'r�zpip._vendor.distlib.scriptszdistutils.command.build_extz&pip._internal.operations.install.wheelz'pip._internal.operations.install.legacyz$pip._internal.operations.build.wheelzpip._internal.commands.installzpip._internal.locationszpip._internal.cli.req_commandzpip._internal.req.req_install)r�cs�tjdkrdSt���}|jd}t���}d}zt���}Wn	ty(Ynw|s1td�dS|�	�s;td�dS|j
ddd�|d�|d	krMd
�nd�|d|�d
�}d��fdd�}|�t|�krv��t
�d�j�|d��dSdS)z
    Setup cargo config.
    r�Nr�z3Unable to set CARGO_HOME ppbt package not installedr�T)�parents�exist_okzconfig.tomlzx86_64-linux-gnuzx86_64-unknown-linux-gnuzaarch64-unknown-linux-gnurPz-gccrrcs����sdSz���}Wn
tyYdSwd��d�}||vr#dS|��D] }|��}|�d�rG|�d�\}}}|���d�}|rG|Sq'dS)Nz[target.�]�linker�=�")rp�	read_text�OSErrorr�rsr��	partition)�contentsZmarkerr��stripped�_Z
value_partZ	value_str�Zcargo_configZ
cargo_tripletr#r$�existing_linker�s&�
�z-install_cargo_config.<locals>.existing_linkerzK            [target.{triplet}]
            linker = "{linker}"
            )�tripletr+)rr)rrHr/Z	work_dirsrZget_tripletr��PermissionErrorrDrp�mkdirr�
write_text�textwrap�dedentr3)�dirsr�r6r�rir5r#r4r$�install_cargo_config�sB



�����r=cCsPtjdkrdSt�d�}|s3td�tttjdd��td�dkr'td	�td
�dkr1td�dSdt	j
vr�tj|d
dgddddd�}|j
dkr\d}|jrW|d|j��7}t|�n/z|j�dd�\}}Wntyutd�YdSw|���d�}t|�td�dkr�td�tttjdd��td�dkr�td	�td
�dkr�td�dt	j
v�r"tj|d
dgddddd�}|j
dkr�d}|jr�|d|j��7}t|�dSz|j�dd�\}}Wnty�td�YdSwt�|���d��}t	j
�d��s	t|d�t	j
d<|d}|���r$t	j
�d ��s&t|�t	j
d <dSdSdSdS)!z2
    Configure openssl certificate locations.
    rFNZopensslz/Could not find the 'openssl' binary in the pathr�zossl-modules�defaultrz+Unable to load the default openssl providerZlegacyz*Unable to load the legacy openssl providerZOPENSSL_MODULESr�z-mTF)Zuniversal_newlines�shellZcheckroz0Unable to get the modules directory from opensslz: �:r�zUnable to parse modules dirr-Zfipsz(Unable to load the fips openssl providerZSSL_CERT_DIRz-dz5Unable to get the certificates directory from opensslzUnable to parse openssldirZcertszcert.pemZ
SSL_CERT_FILE)rrHr
r�rD�set_openssl_modules_dirrrW�load_openssl_providerr9r?rrq�
returncode�stderrrBr�rYrsr+r,r@rp)Zopenssl_bin�proc�msgr3Z	directoryrZ	cert_filer#r#r$�
setup_openssls�


�

��
��rGcCsltjdkrttjdd�}n	ttjdd�}t�|�}tj}|j}|tjf|_	tj
|_|d|���dS)z>
    Set the default search location for openssl modules.
    �darwinr��libcrypto.dylib�libcrypto.soN)
rrHrrWr�CDLL�c_void_p�%OSSL_PROVIDER_set_default_search_path�c_char_p�argtypes�c_int�restyperZ)r�
cryptopath�	libcrypto�
POSSL_LIB_CTXrMr#r#r$rAes

rArcCsptjdkrttjdd�}n	ttjdd�}t�|�}tj}|j}|tjf|_	tj
|_|d|���}t
|�S)z!
    Load an openssl module.
    rHr�rIrJN)rrHrrWrrKrL�OSSL_PROVIDER_loadrNrOrPrQrZr)rrRrSrTrU�resultr#r#r$rBus

rBcCs�tj�dd�}|rLt�|���}t|�t_t|�t_	dtj
j�dtj
j��}t|d|�t|d|d�t|d|d�gdd	�tj
D�t_
d
Sd
S)z%
    Setup cross root if needed.
    ZRELENV_CROSSrjr��.r�zlib-dynloadr�cSsg|]}d|vr|�qS)r�r#)�.0r3r#r#r$�
<listcomp>�sz#setup_crossroot.<locals>.<listcomp>N)r9r?r@r+r,rGrrr�r�r4�major�minorr)ZcrossZ	crossrootZpyverr#r#r$�setup_crossroot�s

�
��r\�Callable[[], Any]�Callable[[], None]cst���d�fdd��}|S)z�
    Wrap site.execsitecustomize.

    This allows relenv a hook to be the last thing that runs when pythong is
    setting itself up.
    rr>c
s���d}zddl}|}Wnty%}z|jdkr�WYd}~nd}~ww|dus/d|jvrRtjdd�}t��tj�tjdd�<td|���tdtj���ntd�dt	_
td�dS)	Nr�
sitecustomizez
pip-build-envzoriginal sys.path was znew sys.path is zSkip path mungingFzAfter site customize wrapper)r_rrr-rrr/Zsanitize_sys_pathrDr�ENABLE_USER_SITE)Zsitecustomize_moduleZ_sitecustomize�excZ_origr^r#r$r��s&
���z"wrapsitecustomize.<locals>.wrapperN�rr>r`r�r#r^r$�wrapsitecustomize�srccCsbtjddtddd�t�t_t�ttj	�t_	t
�t�tgtj
t_
tjdkr/td�dSdS)	z+
    Bootstrap the relenv environment.
    �ignorez.*falling back to find_module.*zimportlib._bootstrapi�)�message�categoryr"�lineno)��
r�N)r�filterwarnings�
ImportWarningrIrrWrGrcr�execsitecustomizer\r=�importer�	meta_pathr4r�r#r#r#r$�	bootstrap�s �
�ro)rrrrrr)rr)rr)r7rrr8)r=rrr>)rrE)rJrKrLrrMrrrK)rJrdrrd)rrl)rJrvrwrrrv)rJr|r}rrr|r�)rrrr)rrr�rrr>rb)rrrr>)rrrr)rJr]rr^)Yr�Z
__future__r�
contextlibrZ_ctypesrarZ
_importlibrZ_jsonr9r+r
Z_shutilrZ_siterZ_subprocessr�_sysr:r�	_warnings�typingrrrZcollections.abcrrrr	Zimportlib.machineryr
�typesr�__all__r�PathLiker�dictrlr%r'r�r(r)r/r1r2r5�contextmanagerr<rDrIrcrhrmrnrur{r�r�r�r�r�r�r�r�r�r�r�r�r�rTrUr	rrr'rmr=rGrArBr\rcror#r#r#r$�<module>s�

















�


 


8V 
N









"

	
#
*

��

D
V


(