o
     JAfk                     @   sB  	 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Zdd Ze duZ	e	rde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%O ZdZ
ej d  Zejd   d&ejd'  Zejd   ej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(Zd)Zd*Zd+d, Z ej!re j"e ej!Z#ne e $ Z#e j%d-kre#& 'd.re e j(e#eeZ#d/e j)v re e j)d/ Z#d0d1 Z*e+ed2dZ,e j%d-krd3d4 Z-e-e#Z#e-e,Z,drd6d7Z.e.d8Z/e/r%d9D ]Z0ee0 Z0e0d: e0d;< d<e0d:< d=e0d>< qd?d@ Z1dAdB Z2dCdD Z3dEdF Z4dGdH Z5dIdJ Z6dsdKdLZ7dMdN Z8dOdP Z9dQdR Z:dSdT Z;dUdV Z<dtdWdXZ=dYdZ Z>d[d\ Z?d]d^ Z@e6 dd8fd_d`ZAe6 dd8fdadbZBdcdd ZCdedf ZDdgdh ZEdidj ZFdkdl ZGdmdn ZHdodp ZIeJdqkreI  dS dS )u    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}/Scripts)posix_prefix
posix_homentc                  C   s   t jdd } | r| S tjdkrd S dd }t jdkr(t jdp"d}||dS tjd	krCtjrC|dd
tjtjd  dtjd  S |ddS )NPYTHONUSERBASEvxworksc                  W   s   t jt jj|  S N)ospath
expanduserjoin)args r"    /usr/lib/python3.10/sysconfig.pyjoinuserI   s   z_getuserbase.<locals>.joinuserr   APPDATA~PythondarwinLibraryr   .   z.local)r   environgetsysplatformname
_frameworkversion_info)env_baser$   baser"   r"   r#   _getuserbase@   s   




r5   z({userbase}/Python{py_version_nodot_plat}z6{userbase}/Python{py_version_nodot_plat}/site-packagesz0{userbase}/Python{py_version_nodot_plat}/Includez0{userbase}/Python{py_version_nodot_plat}/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}/include/python{py_version_short}z{userbase}/binz{userbase}/lib/pythonz#{userbase}/lib/python/site-packages)nt_user
posix_userosx_framework_userr*   r+   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_]*)}c                 C   s"   zt | W S  ty   |  Y S w r   )r   OSError)r   r"   r"   r#   _safe_realpath   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)r   r   isfiler    )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
   rC   Fc                 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   rF   T)r   r   r   Zheadersz{srcdir}/Includez{projectbase}/.r   c                 C   sh   z	| j di |W S  ty3 } zz| j di tjW W  Y d }~S  ty.   t| d w d }~ww )Nr"   )formatKeyErrorr   r,   AttributeError)sZ
local_varsvarr"   r"   r#   _subst_vars   s    rL   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   
rQ   c                 C   sb   i }|d u ri }t |t  t|   D ]\}}tjdv r#tj|}tjt	||||< q|S )N)posixr   )
rQ   r   _INSTALL_SCHEMESrN   r   r0   r   r   normpathrL   )schemevarsresrO   rP   r"   r"   r#   _expand_vars   s   
rX   c                   C   s>   t jdkrddddS tjdkrtjrddddS ddddS )	Nr   r   r6   )prefixhomeuserr(   r   r8   r7   )r   r0   r.   r/   r1   r"   r"   r"   r#   _get_preferred_schemes   s   
r\   c                 C   s*   t  |  }|tvrt| d|d|S )Nz
 returned z., which is not a valid scheme on this platform)r\   rS   
ValueError)rO   rU   r"   r"   r#   get_preferred_scheme   s   
r^   c                   C   s   t dS )NrY   )r^   r"   r"   r"   r#   get_default_scheme  s   r_   c              	   C   sX  	 dd l }|d u ri }i }i }t| t dd}| }W d    n1 s'w   Y  |D ]S}|ds;| dkr<q.|t|}	|	r|		dd\}
}| }|
dd}d	|v r_|||
< q.z|
tv rftt|}W n ty|   |
dd	||
< Y q.w |||
< q.t| }d
}t|dkrt|D ]}|| }|t|}|t|}|r|r| | k r|n|}	n|r|n|}	|	d ur||		d}
d}|
|v rt||
 }n@|
|v rd}n9|
tjv rtj|
 }n.|
|v r|dr|dd  |v rd}nd|
 |v rd}nt|d|
  }nd ||
< }|r{||	 d  }|d |	  | | }d	|v r6|||< qz|tv r>tt|}W n tyS   | ||< Y nw |||< || |dr{|dd  |v r{|dd  }||vr{|||< q|r|||< || qt|dks| D ]\}}t|tr| ||< q|| |S )Nr   surrogateescape)encodingerrors# r+      z$$$)ZCFLAGSZLDFLAGSZCPPFLAGSTFZPY_   )reopenr.   getfilesystemencoding	readlinesrA   stripmatch_variable_rxgroupreplace_ALWAYS_STRr]   intlistrM   lentuplesearch_findvar1_rx_findvar2_rxstartstrr   r,   endremoverN   
isinstanceupdate)filenamerV   Zkeep_unresolvedrh   doneZnotdoneflineslinemnvZtmpvZ	variablesZrenamed_variablesr0   rP   Zm1Zm2founditemZafterkr"   r"   r#   _parse_makefile  s   












D
r   c                  C   sj   	 t rtjtp	tdS ttdrdt tj	 } nd} ttj
dr+| dtj
j 7 } tjtd| dS )NZMakefileabiflagszconfig-Zconfig
_multiarch-r   )_PYTHON_BUILDr   r   r    rD   rE   hasattrr.   _PY_VERSION_SHORTr   implementationr   r   )Zconfig_dir_namer"   r"   r#   r     s   
r   c               	   C   s2   t tjdd} tjddtj dtj d|  S )Nr   rd   Z_PYTHON_SYSCONFIGDATA_NAMEZ_sysconfigdata__)getattrr.   r   r   r,   r-   r   r/   )Z	multiarchr"   r"   r#   _get_sysconfigdata_name  s
   r   c               
   C   s  	 dd l } i }t }zt|| W n# ty4 } zd| }t|dr,| d|j d}t|d }~ww t }zt|dd}t|| W d    n1 sOw   Y  W n# tyx } zd| }t|drp| d|j d}t|d }~ww t	r|d |d	< t
 }d
tjv rdd l}||}	||	_|	tj|< dt  dt }
ttdr|
d7 }
tj|
dd tj|
|d }t|ddd}|d |d | j ||d W d    n1 sw   Y  tdddd}||
 W d    d S 1 sw   Y  d S )Nr   z,invalid Python installation: unable to open strerrorz ()zutf-8)ra   ZLDSHAREDZ	BLDSHAREDr(   z
build/lib.r   Zgettotalrefcountz-pydebugT)exist_okz.pywutf8zB# system configuration generated and used by the sysconfig module
zbuild_time_vars = )streamzpybuilddir.txt)pprintr   r   r9   r   r   r   ri   r   r   r   r.   r/   types
ModuleTypebuild_time_varsmodulesr   r   r   makedirsr   r    write)r   rV   makefileemsgZconfig_hr   r0   r   moduleZ
pybuilddirZdestfiler"   r"   r#   _generate_posix_vars  s^   









"r   c                 C   s2   	 t  }t|t t dgd}|j}| | d S )Nr   r   )r   
__import__globalslocalsr   r~   )rV   r0   Z_tempr   r"   r"   r#   _init_posix  s
   r   c                 C   sp   	 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| d< d S )Nr   r   ZLIBDESTr   Z
BINLIBDESTr   Z	INCLUDEPY
EXT_SUFFIXz.exeZEXEVERSIONZBINDIRrd   ZTZPATH)
_impr   extension_suffixes_PY_VERSION_SHORT_NO_DOTr   r   dirnamer:   r.   
executable)rV   r   r"   r"   r#   _init_non_posix  s   r   c           	      C   s   	 |d u ri }dd l }|d}|d}	 |  }|s	 |S ||}|rI|dd\}}z|tv r5tt|}W n	 tyC   Y nw |||< n||}|rWd||d< q)Nr   z"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
Tr+   re   )rh   compilereadlinerm   ro   rq   r]   rr   )	fprV   rh   Z	define_rxZundef_rxr   r   r   r   r"   r"   r#   r     s4   




r   c                  C   sD   	 t rtjdkrtjtptd} n	tpt} ntd} tj| dS )Nr   ZPCr   z
pyconfig.h)r   r   r0   r   r    rD   rE   r   )Zinc_dirr"   r"   r#   r     s   

r   c                   C   s   	 t ttS r   )ru   sortedrS   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 r   )rX   rS   )rU   rV   expandr"   r"   r#   r
   +  s   
r
   c                 C   s   	 t ||||  S r   )r
   )r0   rU   rV   r   r"   r"   r#   r   7  s   r   c                  G   s  	 t d u ri 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yH   dt d< Y nw zt	jddt d< W n tya   dt d< Y nw tjdkrktt  tjdkrttt  t d}|d ur|t d< trt t d< t dt}tjdkrtrtjt }tj||}ntjt }t|t d< t	jdkrdd l}|t  | rg }| D ]
}|t | q|S t S )NrY   exec_prefixZ
py_versionZpy_version_shortZpy_version_nodotZinstalled_baser4   Zinstalled_platbaseZplatbaseZprojectbase
platlibdirr   rd   r*   Zpy_version_nodot_platr   rR   r   SOuserbasesrcdirr(   r   ) _CONFIG_VARSrB   _EXEC_PREFIX_PY_VERSIONr   r   _BASE_PREFIX_BASE_EXEC_PREFIXrE   r.   r   r   rI   winverrp   r   r0   r   r   r-   _HAS_USER_BASEr5   r   r   r   r   r    r:   r/   _osx_supportZcustomize_config_varsappend)r!   r   r   r4   r   Zvalsr0   r"   r"   r#   r   ?  sb   








r   c                 C   s,   	 | dkrdd l }|dtd t | S )Nr   r   z SO is deprecated, use EXT_SUFFIXre   )warningswarnDeprecationWarningr   r-   )r0   r   r"   r"   r#   r     s
   r   c                  C   s  	 t jdkr$d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s.tt d	s1tjS d
t jv r;t jd
 S t  \} }}}}|  	dd} |	dd}|	dd}| d d dkrg|  d| S | d d dkr|d dkrd} t
|d d  d|dd   }ddd}|d|tj  7 }nH| d d dkrddlm} | S | d d dkrd} dd l}|d }||}	|	r|	 }n| d d d!krdd l}
|
t | ||\} }}|  d| d| S )"Nr   Zamd64z	win-amd64z(arm)z	win-arm32z(arm64)z	win-arm64rR   unameZ_PYTHON_HOST_PLATFORM/rd    r   r      linuxZsunosr   5Zsolarisrg   r*   re   Z32bitZ64bit)il    Zaix)aix_platform   cygwinz[\d.]+r(   )r   r0   r.   versionlowerr/   r   r,   r   rp   rr   maxsizeZ_aix_supportr   rh   r   rm   ro   r   Zget_platform_osxr   )Zosnamehostreleaser   machineZbitnessr   rh   Zrel_rer   r   r"   r"   r#   r     sX   


"



r   c                   C   s   t S r   )r   r"   r"   r"   r#   r     s   r   c                 C   sf   	 dd l }	 |t| p|t| }|r/| \}}| d| ||d | |d   } n	 | S q)Nr   Tr+   )rh   rv   rw   rx   spanr-   ro   )rJ   rV   rh   r   Zbegr{   r"   r"   r#   expand_makefile_vars  s   *r   c                 C   sN   t t| D ]\}\}}|dkrt|  d td| d| d qd S )Nr   z: 	z = "")	enumerater   rN   print)titler   indexrO   rP   r"   r"   r#   _print_dict  s
   r   c                   C   st   	 dt jv rt  d S tdt  d tdt  d tdt  d t  tdt  t  tdt	  d S )Nz--generate-posix-varszPlatform: "r   zPython version: "zCurrent installation scheme: "ZPathsZ	Variables)
r.   argvr   r   r   r   r_   r   r
   r   r"   r"   r"   r#   _main  s   
r   __main__)F)NTr   )Kr   r.   Zos.pathr   r   __all__rq   rS   r5   r   r   r   splitr   r2   r   r   r   rT   rY   rB   base_prefixr   r   r   base_exec_prefixr   r   Z
_USER_BASErn   rw   rx   r:   r   r   rE   getcwdr0   r   endswithr    r,   r>   r   rD   rC   rF   r   rU   rL   rQ   rX   r\   r^   r_   r   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   &





	

 ?
"SQ

