a
    åze˜P  ã                   @   sª  d dl Z d dlZd dlZd dlZddlmZ ej ej¡Z	ej ej
¡Zej ej¡Zej ej¡Zdejv r‚ej ejd ¡Zn&ejr ej ej ej¡¡Zne ¡ Zdd„ ZeeddƒZejdkrÞd	d
„ ZeeƒZeeƒZdd„ Zeƒ ZdZzesüejZW n ey   Y n0 dd„ Z d+dd„Z!d,dd„Z"dd„ Z#dd„ Z$dd„ Z%d-dd„Z&e 'd¡Z(e 'd¡Z)e 'd¡Z*d.dd „Z+d!d"„ Z,da-d#d$„ Z.d%d&„ Z/d'd(„ Z0d)d*„ Z1dS )/é    Né   )ÚDistutilsPlatformErrorZ_PYTHON_PROJECT_BASEc                 C   s,   dD ]"}t j t j | d|¡¡r dS qdS )N)ZSetupzSetup.localZModulesTF)ÚosÚpathÚisfileÚjoin)ÚdÚfn© r
   ú)/usr/lib/python3.9/distutils/sysconfig.pyÚ_is_python_source_dir*   s    r   Ú_homeÚntc                 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_pcbuild3   s
    ÿr   c                   C   s   t rtt ƒS ttƒS )N)Ú	_sys_homer   Úproject_baser
   r
   r
   r   Ú_python_build;   s    r   Ú c                   C   s   dt jd d…  S )Nz%d.%dé   )ÚsysÚversion_infor
   r
   r
   r   Úget_python_versionO   s    r   c                 C   s¼   |d u r| rt pt}tjdkrjtrL| r.tp,tS tj t	dƒd¡}tj 
|¡S dtƒ  t }tj |d|¡S tjdkrªtrœtj |d¡tjj tj |d¡ S tj |d¡S tdtj ƒ‚d S )	NÚposixÚsrcdirZIncludeÚpythonZincluder   ÚPCzFI don't know where Python installs its C header files on platform '%s')ÚBASE_EXEC_PREFIXÚBASE_PREFIXr   ÚnameÚpython_buildr   r   r   r   Úget_config_varÚnormpathr   Úbuild_flagsÚpathsepr   )Úplat_specificÚprefixZincdirZ
python_dirr
   r
   r   Úget_python_incW   s*    

ÿÿÿr)   c                 C   s²   |d u r&|r| rt pt}n| r"tp$t}tjdkrr| s8|r@tj}nd}tj 	||dt
ƒ  ¡}|rb|S tj 	|d¡S n<tjdkr |rŽtj 	|d¡S tj 	|dd¡S ntdtj ƒ‚d S )Nr   Úlibr   zsite-packagesr   ZLibz?I don't know where Python installs its library on platform '%s')r   r    ÚEXEC_PREFIXr   r   r!   r   Ú
platlibdirr   r   r   r   )r'   Ústandard_libr(   ÚlibdirZ	libpythonr
   r
   r   Úget_python_lib   s.    

ÿ
ÿÿr/   c              	   C   sö  | j dkròtjdkr8tdƒs8dd l}| t¡ dtd< tdddd	d
dddƒ\}}}}}}}}	dtj	v r¨tj	d }
tjdkr¤d
tj	vr¤| 
|¡r¤|
|t|ƒd …  }|
}dtj	v r¼tj	d }d
tj	v rÐtj	d
 }dtj	v rætj	d }n|d }dtj	v r|d tj	d  }dtj	v r<|d tj	d  }|d tj	d  }dtj	v r~|d tj	d  }|d tj	d  }|d tj	d  }dtj	v r”tj	d }dtj	v r´|d tj	d  }n|d |	 }|d | }| j|||d | ||||d || _d S )NZunixÚdarwinZCUSTOMIZED_OSX_COMPILERr   ÚTrueZCCZCXXÚCFLAGSZCCSHAREDZLDSHAREDZSHLIB_SUFFIXZARZARFLAGSZCPPz -EÚLDFLAGSú ÚCPPFLAGS)ZpreprocessorÚcompilerZcompiler_soZcompiler_cxxZ	linker_soZ
linker_exeÚarchiver)Zcompiler_typer   Úplatformr#   Ú_osx_supportÚcustomize_compilerÚ_config_varsÚget_config_varsr   Úenvironr   ÚlenZset_executablesZshared_lib_extension)r6   r9   ZccZcxxZcflagsZccsharedZldsharedZshlib_suffixÚarZar_flagsZnewccZcppr7   Zcc_cmdr
   r
   r   r:   ­   sf    


ÿÿ


ÿþ






ù	r:   c                  C   sD   t r,tjdkr"tj tptd¡} q6tp(t} n
tdd} tj | d¡S )Nr   r   r   ©r'   z
pyconfig.h)r"   r   r!   r   r   r   r   r)   )Zinc_dirr
   r
   r   Úget_config_h_filenameö   s    


rA   c                  C   s\   t rtj tptd¡S tddd} d tƒ t	¡}t
tjdƒrL|dtjj 7 }tj | |d¡S )NZMakefiler   r   ©r'   r-   zconfig-{}{}Ú
_multiarchz-%s)r"   r   r   r   r   r   r/   Úformatr   r%   Úhasattrr   ÚimplementationrC   )Zlib_dirZconfig_filer
   r
   r   Úget_makefile_filename  s    rG   c                 C   s˜   |d u ri }t  d¡}t  d¡}|  ¡ }|s.q”| |¡}|rv| dd¡\}}zt|ƒ}W n tyj   Y n0 |||< q | |¡}|r d|| d¡< q |S )Nz"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
r   r   r   )ÚreÚcompileÚreadlineÚmatchÚgroupÚintÚ
ValueError)ÚfpÚgZ	define_rxZundef_rxÚlineÚmÚnÚvr
   r
   r   Úparse_config_h  s"    




rU   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²  ddl m} || ddddd}|d u r*i }i }i }| ¡ }|d u rDqÂt |¡}|r2| dd¡\}}	|	 ¡ }	|	 dd¡}
d	|
v rˆ|	||< q2zt|	ƒ}	W n" t	y¶   |	 dd	¡||< Y q20 |	||< q2d
}|rpt
|ƒD ]–}|| }t |¡pôt |¡}|rf| d¡}d}||v r"t|| ƒ}nˆ||v r2d}nx|tjv rJtj| }n`||v rž| d¡rx|dd … |v rxd}n$d| |v rŒd}nt|d|  ƒ}nd ||< }|rl|| ¡ d … }|d | ¡ … | | }d	|v rì|||< nxzt|ƒ}W n  t	y   | ¡ ||< Y n
0 |||< ||= | d¡rl|dd … |v rl|dd … }||vrl|||< qÔ||= qÔqÆ| ¡  | ¡ D ]"\}}	t|	tƒr€|	 ¡ ||< q€| |¡ |S )Nr   )ÚTextFiler   Úsurrogateescape)Zstrip_commentsZskip_blanksZ
join_linesÚerrorsr   z$$r   ú$)r2   r3   r5   TFZPY_é   )Zdistutils.text_filerV   rJ   Ú_variable_rxrK   rL   ÚstripÚreplacerM   rN   ÚlistÚ_findvar1_rxÚsearchÚ_findvar2_rxÚstrr   r=   r   ÚendÚstartÚcloseÚitemsÚ
isinstanceÚupdate)r	   rP   rV   rO   ÚdoneZnotdonerQ   rR   rS   rT   ZtmpvZrenamed_variablesr!   ÚvalueÚfoundÚitemZafterÚkr
   r
   r   Úparse_makefile1  s‚    








ÿ



rn   c                 C   sV   t  | ¡pt | ¡}|rR| ¡ \}}| d|… | | d¡¡ | |d …  } q qRq | S )Nr   r   )r_   r`   ra   ÚspanÚgetrL   )ÚsÚvarsrR   Zbegrc   r
   r
   r   Úexpand_makefile_vars›  s    *rs   c               
   C   sV   t j ddjtjtjttjddƒd¡} t	| t
ƒ tƒ dgdƒ}|j}i at |¡ d S )NZ_PYTHON_SYSCONFIGDATA_NAMEz+_sysconfigdata_{abi}_{platform}_{multiarch}rC   r   )Zabir8   Z	multiarchÚbuild_time_varsr   )r   r=   rp   rD   r   Úabiflagsr8   ÚgetattrrF   Ú
__import__ÚglobalsÚlocalsrt   r;   rh   )r!   Z_temprt   r
   r
   r   Ú_init_posix¶  s    ýÿrz   c                  C   s~   i } t ddd| d< t ddd| d< tdd| d< t ¡ d | d< d	| d
< tƒ  dd¡| d< tj tj 	t
j¡¡| d< | ad S )Nr   r   rB   ZLIBDESTZ
BINLIBDESTr@   Z	INCLUDEPYÚ
EXT_SUFFIXz.exeZEXEÚ.r   ÚVERSIONZBINDIR)r/   r)   Ú_impÚextension_suffixesr   r]   r   r   ÚdirnameÚabspathr   Ú
executabler;   )rP   r
   r
   r   Ú_init_ntÆ  s    rƒ   c                  G   s\  t d u r*tƒ  dtj ¡}|r(|ƒ  ni a tt d< tt d< t  d¡}|d urV|t d< t  dt¡}tjdkrœtrŽtj	 
tƒ ¡}tj	 ||¡}ntj	 
tƒ ¡}tj	 tj	 |¡¡t d< trtjdkrt}tj	 t d ¡s|t ¡ krtj	 |t d ¡}tj	 |¡t d< tjdkr*d	d l}| t ¡ | rTg }| D ]}| t  |¡¡ q8|S t S d S )
NZ_init_r(   Úexec_prefixr{   ÚSOr   r   r0   r   )r;   rx   rp   r   r!   r   r+   r   r"   r   r€   rG   r   r   r$   ÚisabsÚgetcwdr   r8   r9   Zcustomize_config_varsÚappend)ÚargsÚfuncr…   r   Úbaser9   Zvalsr!   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_SUFFIXr   )ÚwarningsÚwarnÚDeprecationWarningr<   rp   )r!   rŒ   r
   r
   r   r#   #  s    r#   )r   N)r   r   N)N)N)2r~   r   rH   r   rX   r   r   r$   r(   r   r„   r+   Úbase_prefixr    Úbase_exec_prefixr   r=   r   r   r‚   r€   r‡   r   rv   r   r!   r   r   r"   r%   ru   ÚAttributeErrorr   r)   r/   r:   rA   rG   rU   rI   r[   r_   ra   rn   rs   r;   rz   rƒ   r<   r#   r
   r
   r
   r   Ú<module>   sX   



(
.I




jJ