a
    رBic                     @   s  d dl Z d dlZd dlmZmZ g dZdhZddddd	d
ddddddddddddddddddddddddddddddddddd ddd!d!d"d"d#d ddd$Zd%Ze	ed&sej
ejksd'e jvrd(ZdZej d  Zd)ejdd*  Zd+ejdd*  Ze jej
Ze jejZe jejZe jejZdadZd,d- Zej rhe j!eej Z"nee # Z"e j$d.kre"% &d/ree j'e"eeZ"d0e jv ree jd0 Z"d1d2 Z(e)ed3dZ*e j$d.krd4d5 Z+e+e"Z"e+e*Z*dmd6d7Z,e,d8Z-e-r2d9D ]Z.d:ee. d;< d<ee. d=< qd>d? Z/d@dA Z0dBdC Z1dDdE Z2dFdG Z3dndHdIZ4dJdK Z5dLdM Z6dNdO Z7dPdQ Z8dRdS Z9dodTdUZ:dVdW Z;dXdY Z<dZd[ Z=e2 dd8fd\d]Z>e2 dd8fd^d_Z?d`da Z@dbdc ZAddde ZBdfdg ZCdhdi ZDdjdk ZEeFdlkreE  dS )p    N)pardirrealpath)get_config_h_filenameget_config_varget_config_varsget_makefile_filenameget_pathget_path_names	get_pathsget_platformget_python_versionget_scheme_namesparse_config_hZMACOSX_DEPLOYMENT_TARGETz6{installed_base}/{platlibdir}/python{py_version_short}z0{platbase}/{platlibdir}/python{py_version_short}z1{base}/lib/python{py_version_short}/site-packagesz>{platbase}/{platlibdir}/python{py_version_short}/site-packagesz;{installed_base}/include/python{py_version_short}{abiflags}z?{installed_platbase}/include/python{py_version_short}{abiflags}z
{base}/binz{base})stdlib
platstdlibpurelibplatlibincludeplatincludescriptsdataz{installed_base}/lib/pythonz{base}/lib/pythonz{installed_base}/include/pythonz{installed_base}/Libz
{base}/Libz{base}/Lib/site-packagesz{installed_base}/Includez{base}/Scriptsz#{userbase}/Python{py_version_nodot}z1{userbase}/Python{py_version_nodot}/site-packagesz+{userbase}/Python{py_version_nodot}/Includez+{userbase}/Python{py_version_nodot}/Scriptsz
{userbase})r   r   r   r   r   r   r   z0{userbase}/{platlibdir}/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz>{userbase}/{platlibdir}/python{py_version_short}/site-packagesz+{userbase}/include/python{py_version_short}z{userbase}/binz{userbase}/lib/pythonz#{userbase}/lib/python/site-packagesz{userbase}/include)posix_prefix
posix_homentZnt_userZ
posix_userZosx_framework_userFZreal_prefixRPM_BUILD_ROOTz/local%d.%d   z%d%dc                 C   s&   z
t | W S  ty    |  Y S 0 d S N)r   OSError)path r    !/usr/lib64/python3.9/sysconfig.py_safe_realpathx   s    
r"   r   )z\pcbuild\win32z\pcbuild\amd64Z_PYTHON_PROJECT_BASEc                 C   s,   dD ]"}t jt j| d|r dS qdS )N)ZSetupzSetup.localZModulesTF)osr   isfilejoin)dfnr    r    r!   _is_python_source_dir   s    r(   _homec                 C   s0   | r,t j| t jt jtdr,tS | S )NZPCbuild)r#   r   normcase
startswithr%   _PREFIX)r&   r    r    r!   _fix_pcbuild   s
    r-   c                 C   s   | rt rtt S ttS r   )	_sys_homer(   _PROJECT_BASE)Z
check_homer    r    r!   is_python_build   s    r0   T)r   r   z{srcdir}/Includer   z{projectbase}/.r   c                 C   sv   z| j f i |W S  typ   z| j f i tjW  Y S  tyj } ztd| d W Y d }~n
d }~0 0 Y n0 d S )Nz{%s})formatKeyErrorr#   environAttributeError)sZ
local_varsvarr    r    r!   _subst_vars   s    r7   c                 C   s0   |   }| D ]\}}||v r"q|| |< qd S r   )keysitems)Ztarget_dictZ
other_dictZtarget_keyskeyvaluer    r    r!   _extend_dict   s
    r<   c                 C   sb   i }|d u ri }t |t  t|   D ]4\}}tjdv rFtj|}tjt	||||< q(|S )N)posixr   )
r<   r   _INSTALL_SCHEMESr9   r#   namer   
expandusernormpathr7   )schemevarsresr:   r;   r    r    r!   _expand_vars   s    
rE   c                   C   s   t jdkrdS t jS )Nr=   r   )r#   r?   r    r    r    r!   _get_default_scheme   s    
rF   c                  C   sz   t jdd } | r| S dd }t jdkrBt jdp6d}||dS tjdkrptjrp|dd	tjd
tjd d  S |ddS )NPYTHONUSERBASEc                  W   s   t jt jj|  S r   )r#   r   r@   r%   )argsr    r    r!   joinuser   s    z_getuserbase.<locals>.joinuserr   APPDATA~PythondarwinLibraryr   r   z.local)r#   r3   getr?   sysplatform
_frameworkversion_info)env_baserI   baser    r    r!   _getuserbase   s    


rV   c              	   C   sr  dd l }|d}|d}|d}|d u r2i }i }i }t| dd}| }	W d    n1 sd0    Y  |	D ]}
|
dsr|
 dkrqr||
}|rr|d	d
\}}| }|dd}d|v r|||< qrz|t	v rt
t|}W n$ t
y   |dd||< Y qr0 |||< qrt| }d}t|dkr8t|D ]}|| }||}||}|r|r| | k r|n|}n|r|n|}|d ur|d	}d}||v rt|| }n||v rd}nx|tjv rtj| }n`||v rD|dr|dd  |v rd}n$d| |v r2d}nt|d|  }nd ||< }|r0|| d  }|d |  | | }d|v r|||< nz|t	v rt
t|}W n  t
y   | ||< Y n
0 |||< || |dr0|dd  |v r0|dd  }||vr0|||< n|||< || q@q*| D ]"\}}t|tr@| ||< q@|| |S )Nr   z"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)z\$\(([A-Za-z][A-Za-z0-9_]*)\)z\${([A-Za-z][A-Za-z0-9_]*)}surrogateescape)errors#    r   z$$$)ZCFLAGSZLDFLAGSZCPPFLAGSTFZPY_   )recompileopen	readlinesr+   stripmatchgroupreplace_ALWAYS_STR
ValueErrorintlistr8   lentuplesearchstartstrr#   r3   endremover9   
isinstanceupdate)filenamerC   r^   Z_variable_rxZ_findvar1_rxZ_findvar2_rxdoneZnotdoneflineslinemnvZtmpvZ	variablesZrenamed_variablesr?   r;   Zm1Zm2founditemZafterkr    r    r!   _parse_makefile   s    	


&
















r~   c                  C   sd   t rtjtptdS ttdr0dttj	f } nd} ttj
drP| dtj
j 7 } tjtd| dS )NZMakefileabiflagszconfig-%s%sZconfig
_multiarchz-%sr   )_PYTHON_BUILDr#   r   r%   r.   r/   hasattrrP   _PY_VERSION_SHORTr   implementationr   r   )Zconfig_dir_namer    r    r!   r   f  s    
r   c                
   C   s(   t jddjtjtjttjdddS )NZ_PYTHON_SYSCONFIGDATA_NAMEz+_sysconfigdata_{abi}_{platform}_{multiarch}r   rZ   )ZabirQ   Z	multiarch)	r#   r3   rO   r1   rP   r   rQ   getattrr   r    r    r    r!   _get_sysconfigdata_names  s    r   c               
   C   s  dd l } i }t }zt|| W nL tyl } z4d| }t|drP|d|j  }t|W Y d }~n
d }~0 0 t }z6t|}t|| W d    n1 s0    Y  W nL ty } z4d| }t|dr|d|j  }t|W Y d }~n
d }~0 0 t	r
|d |d< t
 }dtjv r>dd l}||}	||	_|	tj|< dt tf }
ttd	r`|
d
7 }
tj|
dd tj|
|d }t|ddd2}|d |d | j ||d W d    n1 s0    Y  tdddd}||
 W d    n1 s0    Y  d S )Nr   z.invalid Python installation: unable to open %sstrerrorz (%s)ZLDSHAREDZ	BLDSHAREDrM   zbuild/lib.%s-%sZgettotalrefcountz-pydebugT)exist_okz.pywutf8)encodingzB# system configuration generated and used by the sysconfig module
zbuild_time_vars = )streamzpybuilddir.txt)pprintr   r~   r   r   r   r   r`   r   r   r   rP   rQ   types
ModuleTypebuild_time_varsmodulesr   r   r#   makedirsr   r%   write)r   rC   makefileemsgZconfig_hru   r?   r   moduleZ
pybuilddirZdestfiler    r    r!   _generate_posix_vars|  sL    

,




.r   c                 C   s0   t  }t|t t dgd}|j}| | d S )Nr   r   )r   
__import__globalslocalsr   rr   )rC   r?   Z_tempr   r    r    r!   _init_posix  s    r   c                 C   sf   dd l }td| d< td| d< td| d< | d | d< d	| d
< t| d< tjttj	| d< d S )Nr   r   ZLIBDESTr   Z
BINLIBDESTr   Z	INCLUDEPY
EXT_SUFFIXz.exeZEXEVERSIONZBINDIR)
_impr   extension_suffixes_PY_VERSION_SHORT_NO_DOTr#   r   dirnamer"   rP   
executable)rC   r   r    r    r!   _init_non_posix  s    r   c           	      C   s   |d u ri }dd l }|d}|d}|  }|s6q||}|r|dd\}}z|tv rbtt|}W n ty~   Y n0 |||< q(||}|r(d||d< q(|S )Nr   z"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
r[   r   )r^   r_   readlinerc   rd   rf   rg   rh   )	fprC   r^   Z	define_rxZundef_rxrw   rx   ry   rz   r    r    r!   r     s,    




r   c                  C   sB   t r,tjdkr"tjtptd} q4tp(t} ntd} tj| dS )Nr   ZPCr   zpyconfig-64.h)r   r#   r?   r   r%   r.   r/   r   )Zinc_dirr    r    r!   r     s    

r   c                   C   s   t ttS r   )rk   sortedr>   r    r    r    r!   r     s    r   c                   C   s   t S r   )_SCHEME_KEYSr    r    r    r!   r	     s    r	   c                 C   s   |rt | |S t|  S d S r   )rE   r>   )rB   rC   expandr    r    r!   r
     s    
r
   c                 C   s   t ||||  S r   )r
   )r?   rB   rC   r   r    r    r!   r     s    r   c                  G   s  t d u rVi a tt d< tt d< tt d< tt d< tt d< tt d< tt d< tt d< tt d	< tt d
< t	j
t d< zt	jt d< W n ty   dt d< Y n0 tjdkrtt  dt d< tjdkrtt  t d}|d ur|t d< t t d< t dt}tjdkr,trtjt }tj||}ntjt }t|t d< t	jdkrVdd l}|t  | rg }| D ]}|t | qd|S t S d S )Nprefixexec_prefixZ
py_versionZpy_version_shortZpy_version_nodotZinstalled_baserU   Zinstalled_platbaseZplatbaseZprojectbase
platlibdirr   rZ   r   ZTZPATHr=   r   SOuserbasesrcdirrM   r   )_CONFIG_VARSr,   _EXEC_PREFIX_PY_VERSIONr   r   _BASE_PREFIX_BASE_EXEC_PREFIXr/   rP   r   r   r4   r#   r?   r   r   rO   rV   r   r   r   r   r%   r"   rQ   _osx_supportZcustomize_config_varsappend)rH   r   r   rU   r   Zvalsr?   r    r    r!   r      sT    






r   c                 C   s*   | dkrdd l }|dtd t | S )Nr   r   z SO is deprecated, use EXT_SUFFIXr   )warningswarnDeprecationWarningr   rO   )r?   r   r    r    r!   r   o  s    r   c                  C   s  t jdkrFdtj v rdS dtj v r.dS dtj v r@dS tjS t jdksZtt d	s`tjS d
t jv rtt jd
 S t  \} }}}}|  	dd} |	dd}|	dd}| d d dkrd| |f S | d d dkr,|d dkrd} dt
|d d |dd  f }ddd}|d|tj  7 }n| d d dkrPddlm} | S | d d  d!krd!} dd l}|d"}||}	|	r|	 }n2| d d  d#krdd l}
|
t | ||\} }}d$| ||f S )%Nr   Zamd64z	win-amd64z(arm)z	win-arm32z(arm64)z	win-arm64r=   unameZ_PYTHON_HOST_PLATFORM/rZ    _-   linuxz%s-%sZsunosr   5Zsolarisz%d.%sr]   r   Z32bitZ64bit)il    z.%sZaix)aix_platform   cygwinz[\d.]+rM   z%s-%s-%s)r#   r?   rP   versionlowerrQ   r   r3   r   re   rh   maxsizeZ_aix_supportr   r^   r_   rc   rd   r   Zget_platform_osxr   )Zosnamehostreleaser   machineZbitnessr   r^   Zrel_rerx   r   r    r    r!   r   {  sR    


 




r   c                   C   s   t S r   )r   r    r    r    r!   r     s    r   c                 C   sF   t t| D ]0\}\}}|dkr0td|   td||f  qd S )Nr   z%s: z
	%s = "%s")	enumerater   r9   print)titler   indexr:   r;   r    r    r!   _print_dict  s    r   c                   C   sf   dt jv rt  d S tdt   tdt   tdt   t  tdt  t  tdt	  d S )Nz--generate-posix-varszPlatform: "%s"zPython version: "%s"z!Current installation scheme: "%s"ZPathsZ	Variables)
rP   argvr   r   r   r   rF   r   r
   r   r    r    r    r!   _main  s    
r   __main__)F)N)N)Gr#   rP   Zos.pathr   r   __all__rf   r>   Z_PIP_USE_SYSCONFIGr   r   base_prefixr3   Z_prefix_additionr   r   splitr   rS   r   r   r   rA   r,   r   r   r   base_exec_prefixr   r   Z
_USER_BASEr"   r   r   r/   getcwdr?   r   endswithr%   r(   r   r.   r-   r0   r   rB   r7   r<   rE   rF   rV   r~   r   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   __name__r    r    r    r!   <module>   s   

A	


		
 	?
"OQ
