
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
�u„j,a  ã               @   s  d Z ddlZddlZddlmZmZ dddddd	d
ddddg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doZej	j
ƒ d Zd6ejdd7…  Zd8ejdd7…  ZejjejƒZejjejƒZejjejƒZejjejƒZdadZd9d:„ Zej�rPejjeejƒƒZneejƒ ƒZej d;k�rŒej!ƒ j"dpƒ�rŒeejj#eeeƒƒZd>ej$k�r¦eej$d> ƒZd?d@„ Z%e&edAdƒZ'e'�rðej d;k�rðe'j!ƒ j"dqƒ�rðejjejje'ƒƒZ'drdCdD„Z(e(dEƒZ)e)�r0x&dsD ]Z*dHee* d3< dIee* dJ< �qW dKdL„ Z+dMdN„ Z,dOdP„ Z-dQdR„ Z.dSdT„ Z/dtdUdV„Z0dWd„ Z1dXdY„ Z2dZd[„ Z3d\d]„ Z4d^d_„ Z5dud`d„Z6dad„ Z7dbd„ Z8dcd	„ Z9e.ƒ ddEfddd
„Z:e.ƒ ddEfded„Z;dfd„ Z<dgd„ Z=dhd„ Z>did„ Z?djdk„ Z@dldm„ ZAeBdnk�reAƒ  dS )vz-Access to Python's configuration information.é    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/{installed_base}/lib64/python{py_version_short}z){platbase}/lib64/python{py_version_short}z1{base}/lib/python{py_version_short}/site-packagesz7{platbase}/lib64/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   z){userbase}/lib64/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz7{userbase}/lib64/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ÚntÚnt_userÚ
posix_userÚosx_framework_userr   r   r   r   r   r   r   z%d.%dé   z%d%dc             C   s"   yt | ƒS  tk
r   | S X d S )N)r   ÚOSError)Úpath© r    ú!/usr/lib64/python3.6/sysconfig.pyÚ_safe_realpathc   s    r"   r   ú\pcbuild\win32ú\pcbuild\amd64Z_PYTHON_PROJECT_BASEc             C   s.   x(dD ] }t jjt jj| d|ƒƒrdS qW dS )Nú
Setup.distúSetup.localÚModulesTF)r%   r&   )Úosr   ÚisfileÚjoin)ÚdÚfnr    r    r!   Ú_is_python_source_dirx   s    
r-   Ú_homeFc             C   s   | rt rtt ƒS ttƒS )N)Ú	_sys_homer-   Ú_PROJECT_BASE)Ú
check_homer    r    r!   Úis_python_build‚   s    r2   Tr   r   z{srcdir}/Includez{projectbase}/.r   c             C   sd   y| j f |ŽS  tk
r^   y| j f tjŽS  tk
rX } ztd| ƒ‚W Y d d }~X nX Y nX d S )Nz{%s})ÚformatÚKeyErrorr(   ÚenvironÚAttributeError)ÚsÚ
local_varsÚvarr    r    r!   Ú_subst_vars�   s    r:   c             C   s4   | j ƒ }x&|jƒ D ]\}}||kr$q|| |< qW d S )N)ÚkeysÚitems)Útarget_dictÚ
other_dictÚtarget_keysÚkeyÚvaluer    r    r!   Ú_extend_dict˜   s
    rB   c             C   sf   i }|d kri }t |tƒ ƒ xDt|  jƒ D ]4\}}tjdkrHtjj|ƒ}tjjt	||ƒƒ||< q*W |S )NÚposixr   )rC   r   )
rB   r   Ú_INSTALL_SCHEMESr<   r(   Únamer   Ú
expanduserÚnormpathr:   )ÚschemeÚvarsÚresr@   rA   r    r    r!   Ú_expand_vars    s    
rK   c               C   s   t jdkrdS t jS )NrC   r   )r(   rE   r    r    r    r!   Ú_get_default_scheme­   s    
rL   c              C   s’   t jjdd ƒ} dd„ }t jdkrBt jjdƒp.d}| r8| S ||dƒS tjdkr|td	ƒ}|r|| r`| S |dd
|dtjd d…  ƒS | r„| S |ddƒS d S )NÚPYTHONUSERBASEc              W   s   t jjt jj| Ž ƒS )N)r(   r   rF   r*   )Úargsr    r    r!   Újoinuser·   s    z_getuserbase.<locals>.joinuserr   ÚAPPDATAú~ÚPythonÚdarwinÚPYTHONFRAMEWORKÚLibraryz%d.%dr   z.local)r(   r5   ÚgetrE   ÚsysÚplatformr   Úversion_info)Úenv_baserO   ÚbaseÚ	frameworkr    r    r!   Ú_getuserbase´   s"    



r]   c             C   sZ  ddl }|jdƒ}|jdƒ}|jdƒ}|dkr2i }i }i }t| dd��}|jƒ }	W dQ R X x¢|	D ]š}
|
jdƒs`|
jƒ d	kr|q`|j|
ƒ}|r`|jd
dƒ\}}|jƒ }|jdd	ƒ}d|krÀ|||< q`yt	|ƒ}W n$ t
k
rð   |jddƒ||< Y q`X |||< q`W t|jƒ ƒ}d}�x
t|ƒdk�r�xòt|ƒD �]ä}|| }|j|ƒ}|j|ƒ}|�rv|�rv|jƒ |jƒ k �rp|n|}n|�r€|n|}|dk	�rþ|jd
ƒ}d}||k�r´t|| ƒ}nˆ||k�rÄd}nx|tjk�rÜtj| }n`||k�r0|jdƒ�r
|dd… |k�r
d	}n$d| |k�rd}nt|d|  ƒ}nd	 ||< }|�r||jƒ d… }|d|jƒ … | | }d|k�r~|||< n~yt	|ƒ}W n" t
k
�r¬   |jƒ ||< Y n
X |||< |j|ƒ |jdƒ�r|dd… |k�r|dd… }||k�r|||< n|||< |j|ƒ �q,W �qW x.|jƒ D ]"\}}t|tƒ�r&|jƒ ||< �q&W |j|ƒ |S )zÌParse a Makefile-style file.

    A dictionary containing name/value pairs is returned.  If an
    optional dictionary is passed in as the second argument, it is
    used instead of a new dictionary.
    r   Nz"([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$$ú$ÚCFLAGSÚLDFLAGSÚCPPFLAGSTFÚPY_é   )rd   re   rf   )ÚreÚcompileÚopenÚ	readlinesÚ
startswithÚstripÚmatchÚgroupÚreplaceÚintÚ
ValueErrorÚlistr;   ÚlenÚtupleÚsearchÚstartÚstrr(   r5   ÚendÚremover<   Ú
isinstanceÚupdate)ÚfilenamerI   ri   Ú_variable_rxÚ_findvar1_rxÚ_findvar2_rxÚdoneÚnotdoneÚfÚlinesÚlineÚmÚnÚvÚtmpvÚ	variablesÚrenamed_variablesrE   rA   Úm1Úm2ÚfoundÚitemÚafterÚkr    r    r!   Ú_parse_makefileÐ   s–    	


















r“   c              C   sd   t rtj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jtdƒ| dƒS )z Return the path of the Makefile.ÚMakefileÚabiflagszconfig-%s%sÚconfigÚ
_multiarchz-%sr   )Ú_PYTHON_BUILDr(   r   r*   r/   r0   ÚhasattrrW   Ú_PY_VERSION_SHORTr•   Úimplementationr—   r   )Úconfig_dir_namer    r    r!   r   L  s    
c            	   C   s(   t jjddjtjtjttjddƒd�ƒS )NÚ_PYTHON_SYSCONFIGDATA_NAMEz+_sysconfigdata_{abi}_{platform}_{multiarch}r—   ra   )ÚabirX   Ú	multiarch)	r(   r5   rV   r3   rW   r•   rX   Úgetattrr›   r    r    r    r!   Ú_get_sysconfigdata_nameY  s
    r¡   c           ,   C   sÊ  ddl } i }tƒ }yt||ƒ W nJ tk
rj } z.d| }t|dƒrR|d|j  }t|ƒ‚W Y dd}~X nX tƒ }y"t|ƒ�}t||ƒ W dQ R X W nJ tk
rÞ } z.d| }t|dƒrÆ|d|j  }t|ƒ‚W Y dd}~X nX t	rð|d |d< t
ƒ }dtjk�r$ddl}|j|ƒ}	||	_|	tj|< d	tƒ tf }
ttd
ƒ�rF|
d7 }
tj|
dd� tjj|
|d ƒ}t|ddd��(}|jdƒ |jdƒ | j ||d� W dQ R X tdddd��}|j|
ƒ W dQ R X dS )z;Generate the Python module containing build-time variables.r   Nz.invalid Python installation: unable to open %sÚstrerrorz (%s)ÚLDSHAREDÚ	BLDSHAREDrS   zbuild/lib.%s-%sÚgettotalrefcountz-pydebugT)Úexist_okz.pyÚwÚutf8)ÚencodingzB# system configuration generated and used by the sysconfig module
zbuild_time_vars = )Ústreamzpybuilddir.txtÚascii)Úpprintr   r“   r   r™   r¢   r   rk   r   r˜   r¡   rW   rX   ÚtypesÚ
ModuleTypeÚbuild_time_varsÚmodulesr   rš   r(   Úmakedirsr   r*   Úwrite)r¬   rI   ÚmakefileÚeÚmsgÚconfig_hr„   rE   r­   ÚmoduleÚ
pybuilddirÚdestfiler    r    r!   Ú_generate_posix_varsb  sL    






rº   c             C   s0   t ƒ }t|tƒ tƒ dgdƒ}|j}| j|ƒ dS )z7Initialize the module as appropriate for POSIX systems.r¯   r   N)r¡   Ú
__import__ÚglobalsÚlocalsr¯   r}   )rI   rE   Ú_tempr¯   r    r    r!   Ú_init_posix¡  s    r¿   c             C   sV   t dƒ| d< t dƒ| d< t dƒ| d< d| d< d	| d
< t| d< tjjttjƒƒ| d< dS )z+Initialize the module as appropriate for NTr   ÚLIBDESTr   Ú
BINLIBDESTr   Ú	INCLUDEPYz.pydÚ
EXT_SUFFIXz.exeÚEXEÚVERSIONÚBINDIRN)r   Ú_PY_VERSION_SHORT_NO_DOTr(   r   Údirnamer"   rW   Ú
executable)rI   r    r    r!   Ú_init_non_posix©  s    rÊ   c       	      C   s¦   |dkri }ddl }|jdƒ}|jdƒ}xx| jƒ }|s8P |j|ƒ}|r‚|jddƒ\}}yt|ƒ}W n tk
rv   Y nX |||< q*|j|ƒ}|r*d||jdƒ< q*W |S )zÌParse a config.h-style file.

    A dictionary containing name/value pairs is returned.  If an
    optional dictionary is passed in as the second argument, it is
    used instead of a new dictionary.
    Nr   z"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
rb   r   )ri   rj   Úreadlinero   rp   rr   rs   )	ÚfprI   ri   Ú	define_rxÚundef_rxr†   r‡   rˆ   r‰   r    r    r!   r   ¹  s*    




c              C   sB   t r,tjdkr"tjjtptdƒ} q4tp(t} ntdƒ} tjj| dƒS )zReturn the path of pyconfig.h.r   ÚPCr   zpyconfig-64.h)r˜   r(   rE   r   r*   r/   r0   r   )Úinc_dirr    r    r!   r   Ù  s    

c               C   s   t ttƒƒS )z,Return a tuple containing the schemes names.)rv   ÚsortedrD   r    r    r    r!   r   å  s    c               C   s   t S )z*Return a tuple containing the paths names.)Ú_SCHEME_KEYSr    r    r    r!   r	   ê  s    c             C   s   |rt | |ƒS t|  S dS )z°Return a mapping containing an install scheme.

    ``scheme`` is the install scheme name. If not provided, it will
    return the default scheme for the current platform.
    N)rK   rD   )rH   rI   Úexpandr    r    r!   r
   ï  s    
c             C   s   t |||ƒ|  S )z[Return a path corresponding to the scheme.

    ``scheme`` is the install scheme name.
    )r
   )rE   rH   rI   rÓ   r    r    r!   r   û  s    c              G   s|  t dk�rFi 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< yt	j
t d< W n tk
rˆ   dt d< Y nX tjdkrœtt ƒ tjdkr®tt ƒ t jdƒ}|dk	rÈ|t d< tƒ t d< t jdtƒ}tjdk�rt�rtjjtƒ ƒ}tjj||ƒ}ntjjtƒ ƒ}t|ƒt d< t	jdk�rFddl}|jt ƒ | �rtg }x| D ]}|jt j|ƒƒ �qVW |S t S dS )an  With no arguments, return a dictionary of all configuration
    variables relevant for the current platform.

    On Unix, this means every variable defined in Python's installed Makefile;
    On Windows it's a much smaller set.

    With arguments, return a list of values that result from looking up
    each argument in the configuration variable dictionary.
    NÚprefixÚexec_prefixÚ
py_versionÚpy_version_shortÚpy_version_nodotÚinstalled_baser[   Úinstalled_platbaseÚplatbaseÚprojectbaser•   ra   r   rC   rÃ   ÚSOÚuserbaseÚsrcdirrS   r   )Ú_CONFIG_VARSÚ_PREFIXÚ_EXEC_PREFIXÚ_PY_VERSIONrš   rÇ   Ú_BASE_PREFIXÚ_BASE_EXEC_PREFIXr0   rW   r•   r6   r(   rE   rÊ   r¿   rV   r]   r˜   r   rÈ   r   r*   r"   rX   Ú_osx_supportÚcustomize_config_varsÚappend)rN   rÝ   rß   r[   ræ   ÚvalsrE   r    r    r!   r     sP    






c             C   s*   | dkrddl }|jdtdƒ tƒ j| ƒS )z“Return the value of a single variable using the dictionary returned by
    'get_config_vars()'.

    Equivalent to get_config_vars().get(name)
    rÝ   r   Nz SO is deprecated, use EXT_SUFFIXr   )ÚwarningsÚwarnÚDeprecationWarningr   rV   )rE   rê   r    r    r!   r   P  s    c              C   s  t jdkrnd} tjj| ƒ}|d)kr(tjS tjjd|ƒ}tj|t| ƒ |… jƒ }|dkr\dS |dkrhdS tjS t jd	ks„tt d
ƒ rŠtjS dt j	kržt j	d S t j
ƒ \}}}}}|jƒ jddƒ}|jddƒ}|jddƒ}|dd… dkrôd||f S |dd… dk�rV|d dk�rd}dt|d ƒd |dd… f }dddœ}	|d|	tj  7 }n²|dd … d!k�rtd||f S |dd… d"k�r”d#|||f S |dd$… d%k�rÖd%}ddl}
|
jd&ƒ}|j|ƒ}|�r|jƒ }n2|dd$… d'k�rddl}|jtƒ |||ƒ\}}}d(|||f S )*a«  Return a string that identifies the current platform.

    This is used mainly to distinguish platform-specific build directories and
    platform-specific built distributions.  Typically includes the OS name
    and version and the architecture (as supplied by 'os.uname()'),
    although the exact information included depends on the OS; eg. for IRIX
    the architecture isn't particularly important (IRIX only runs on SGI
    hardware), but for Linux the kernel version isn't particularly
    important.

    Examples of returned values:
       linux-i586
       linux-alpha (?)
       solaris-2.6-sun4u
       irix-5.3
       irix64-6.2

    Windows will return one of:
       win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
       win-ia64 (64bit Windows on Itanium)
       win32 (all others - specifically, sys.platform is returned)

    For other non-POSIX platforms, currently just returns 'sys.platform'.
    r   z bit (rb   ú)Úamd64z	win-amd64Úitaniumzwin-ia64rC   ÚunameÚ_PYTHON_HOST_PLATFORMú/ra   ú Ú_ú-Né   Úlinuxz%s-%sÚsunosr   Ú5Úsolarisz%d.%srh   r   Ú32bitÚ64bit)iÿÿÿl   ÿÿÿÿ z.%sé   ÚirixÚaixz%s-%s.%sé   Úcygwinz[\d.]+rS   z%s-%s-%séÿÿÿÿ)r(   rE   rW   ÚversionÚfindrX   ru   Úlowerr™   r5   rð   rq   rr   Úmaxsizeri   rj   ro   rp   ræ   Úget_platform_osxr   )rÔ   ÚiÚjÚlookÚosnameÚhostÚreleaser  ÚmachineÚbitnessri   Úrel_rer‡   ræ   r    r    r!   r   \  sZ    


 



c               C   s   t S )N)rš   r    r    r    r!   r   ·  s    c             C   sJ   xDt t|jƒ ƒƒD ]0\}\}}|dkr2td|  ƒ td||f ƒ qW d S )Nr   z%s: z
	%s = "%s")Ú	enumeraterÑ   r<   Úprint)Útitler   Úindexr@   rA   r    r    r!   Ú_print_dict»  s    r  c               C   sf   dt jkrtƒ  dS tdtƒ  ƒ tdtƒ  ƒ tdtƒ  ƒ tƒ  tdtƒ ƒ tƒ  tdt	ƒ ƒ dS )z*Display all information sysconfig detains.z--generate-posix-varsNzPlatform: "%s"zPython version: "%s"z!Current installation scheme: "%s"ÚPathsÚ	Variables)
rW   Úargvrº   r  r   r   rL   r  r
   r   r    r    r    r!   Ú_mainÂ  s    
r  Ú__main__)r   r   r   r   r   r   r   )r#   r$   )r#   r$   )F)r   r   )N)N)CÚ__doc__r(   rW   Zos.pathr   r   Ú__all__rD   rÒ   r  Úsplitrã   rY   rš   rÇ   r   rG   rÔ   rá   Úbase_prefixrä   rÕ   râ   Úbase_exec_prefixrå   rà   Ú
_USER_BASEr"   rÉ   rÈ   r0   ÚgetcwdrE   r  Úendswithr*   r5   r-   r    r/   r2   r˜   rH   r:   rB   rK   rL   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æ    

	
|	?
 M[
