a
    رBiP                     @   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 rejejd Zn&ejrejejejZne Zdd ZeeddZejdkrd	d
 ZeeZeeZdd Ze ZdZzese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/lib64/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rtrt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|rt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rt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 rtj	d }
tjdkrd
tj	vr|
|r|
|t|d   }|
}dtj	v rtj	d }d
tj	v rtj	d
 }dtj	v rt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 rt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-64.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 rDqt|}|r2|dd\}}	|	 }	|	dd}
d	|
v r|	||< q2zt|	}	W n" t	y   |	dd	||< Y q20 |	||< q2d
}|rpt
|D ]}|| }t|pt|}|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 rd}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||= qq|  | 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rtrt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