B
    @)H[hl  ã               @   s¢  d Z ddlZddlZddlZddlZddlmZmZ yddlZW n e	k
r\   ddl
ZY nX dddddd	d
ddddgZdd„ Zejršej eejƒ¡Znee ¡ ƒZejdkrÖdedd…  ¡ krÖeej ee¡ƒZejdk�rdedd…  ¡ k�reej eee¡ƒZejdk�rBdedd…  ¡ k�rBeej eee¡ƒZdd„ Zeƒ Zdadd„ Ze ¡ Ze d¡Zdd„ Zej ¡ d Z ejdd … Z!e d e d!  Z"ej #ej$¡Z%ej #ej&¡Z'da(dZ)d"d#„ Z*d$d%„ Z+d&d'„ Z,d(d)„ Z-d*d+„ Z.d,d-„ Z/dEd.d/„Z0d0d„ Z1d1d2„ Z2d3d4„ Z3dFd5d„Z4d6d„ Z5d7d„ Z6d8d	„ Z7e.ƒ dd9fd:d
„Z8e.ƒ dd9fd;d„Z9d<d„ Z:d=d„ Z;d>d„ Z<d?d„ Z=d@dA„ Z>dBdC„ Z?e@dDk�rže?ƒ  dS )Gz-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_hc             C   s"   yt | ƒS  tk
r   | S X d S )N)r   ÚOSError)Úpath© r   úhC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\pip\pip\_vendor\distlib\_backport\sysconfig.pyÚ_safe_realpath"   s    r   ÚntZpcbuildiøÿÿÿz\pc\viöÿÿÿz\pcbuild\amd64iòÿÿÿc              C   s.   x(dD ] } t j t j td| ¡¡rdS qW dS )N)z
Setup.distzSetup.localÚModulesTF)Úosr   ÚisfileÚjoinÚ_PROJECT_BASE)Úfnr   r   r   Úis_python_build:   s    
r   Fc           	   C   s’   t sŽddlm}  t dd¡d }| |ƒ}| d¡}|s>tdƒ‚| ¡ �}t 	|¡ W d Q R X t
rŠx(dD ] }t |d	d
¡ t |dd¡ qfW da d S )Né   )ÚfinderÚ.é   r   zsysconfig.cfgzsysconfig.cfg exists)Úposix_prefixÚ
posix_homeÚincludez{srcdir}/IncludeÚplatincludez{projectbase}/.T)Ú	_cfg_readÚ	resourcesr   Ú__name__ÚrsplitÚfindÚAssertionErrorÚ	as_streamÚ_SCHEMESÚreadfpÚ_PYTHON_BUILDÚset)r   Zbackport_packageZ_finderZ_cfgfileÚsÚschemer   r   r   Ú_ensure_cfg_readD   s    


r1   z\{([^{]*?)\}c          
      sØ   t ƒ  |  d¡r|  d¡}ntƒ }|  ¡ }xD|D ]<}|dkr>q0x,|D ]$\}}|  ||¡rZqD|  |||¡ qDW q0W |  d¡ xX|  ¡ D ]L}t|  |¡ƒ‰ ‡ fdd„}x,|  |¡D ]\}}|  ||t	 
||¡¡ q®W q„W d S )NÚglobalsc                s$   |   d¡}|ˆ krˆ | S |   d¡S )Nr   r   )Úgroup)ÚmatchobjÚname)Ú	variablesr   r   Ú	_replacero   s    
z"_expand_globals.<locals>._replacer)r1   Úhas_sectionÚitemsÚtupleÚsectionsÚ
has_optionr.   Úremove_sectionÚdictÚ	_VAR_REPLÚsub)Úconfigr2   r;   ÚsectionÚoptionÚvaluer7   r   )r6   r   Ú_expand_globalsY   s$    


rE   é   r   c                s   ‡ fdd„}t  || ¡S )z»In the string `path`, replace tokens like {some.thing} with the
    corresponding value from the map `local_vars`.

    If there is no corresponding value, leave the token unchanged.
    c                s8   |   d¡}|ˆ krˆ | S |tjkr.tj| S |   d¡S )Nr   r   )r3   r   Úenviron)r4   r5   )Ú
local_varsr   r   r7   ‹   s    


z_subst_vars.<locals>._replacer)r?   r@   )r   rH   r7   r   )rH   r   Ú_subst_vars…   s    rI   c             C   s4   |   ¡ }x&| ¡ D ]\}}||kr$q|| |< qW d S )N)Úkeysr9   )Útarget_dictÚ
other_dictÚtarget_keysÚkeyrD   r   r   r   Ú_extend_dict•   s
    rO   c             C   sd   i }|d kri }t |tƒ ƒ xBt | ¡D ]4\}}tjdkrFtj |¡}tj t	||ƒ¡||< q(W |S )N)Úposixr   )
rO   r   r+   r9   r   r5   r   Ú
expanduserÚnormpathrI   )r0   ÚvarsÚresrN   rD   r   r   r   Ú_expand_vars�   s    
rU   c                s   ‡ fdd„}t  || ¡S )Nc                s$   |   d¡}|ˆ krˆ | S |   d¡S )Nr   r   )r3   )r4   r5   )rS   r   r   r7   «   s    
zformat_value.<locals>._replacer)r?   r@   )rD   rS   r7   r   )rS   r   Úformat_valueª   s    rV   c               C   s   t jdkrdS t jS )NrP   r    )r   r5   r   r   r   r   Ú_get_default_scheme³   s    
rW   c              C   s’   t j dd ¡} dd„ }t jdkrBt 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 t jj| Ž ¡S )N)r   r   rQ   r   )Úargsr   r   r   Újoinuser½   s    z_getuserbase.<locals>.joinuserr   ÚAPPDATAú~ÚPythonÚdarwinZPYTHONFRAMEWORKÚLibraryz%d.%dr   z.local)r   rG   Úgetr5   ÚsysÚplatformr   Úversion_info)Úenv_baserZ   ÚbaseZ	frameworkr   r   r   Ú_getuserbaseº   s"    



rf   c          	   C   s"  t  d¡}t  d¡}t  d¡}|dkr*i }i }i }tj| ddd��}| ¡ }W dQ R X x¢|D ]š}	|	 d¡s\|	 ¡ d	krxq\| |	¡}
|
r\|
 d
d¡\}}| ¡ }| 	dd	¡}d|kr¼|||< q\yt
|ƒ}W n$ tk
rì   | 	dd¡||< Y q\X |||< q\W t| ¡ ƒ}d}�xÖt|ƒdk�râ�x¾t|ƒD �]°}|| }| |¡�pJ| |¡}
|
dk	�rÆ|
 d
¡}d}||k�r|t|| ƒ}nˆ||k�rŒd}nx|tjk�r¤tj| }n`||k�rø| d¡�rÒ|dd… |k�rÒd	}n$d| |k�ræd}nt|d|  ƒ}nd	 ||< }|�rØ||
 ¡ d… }|d|
 ¡ … | | }d|k�rF|||< n~yt
|ƒ}W n" tk
�rt   | ¡ ||< Y n
X |||< | |¡ | d¡�rØ|dd… |k�rØ|dd… }||k�rØ|||< n|||< | |¡ �q(W �qW x.| ¡ D ]"\}}t|tƒ�rî| ¡ ||< �qîW | |¡ |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.
    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_]*)}Nzutf-8Úsurrogateescape)ÚencodingÚerrorsú#Ú r   r   z$$ú$)ÚCFLAGSÚLDFLAGSÚCPPFLAGSr   TFÚPY_rF   )ÚreÚcompileÚcodecsÚopenÚ	readlinesÚ
startswithÚstripÚmatchr3   ÚreplaceÚintÚ
ValueErrorÚlistrJ   Úlenr:   ÚsearchÚstrr   rG   ÚendÚstartÚremover9   Ú
isinstanceÚupdate)ÚfilenamerS   Ú_variable_rxÚ_findvar1_rxÚ_findvar2_rxÚdoneÚnotdoneÚfÚlinesÚlineÚmÚnÚvÚtmpvr6   Úrenamed_variablesr5   rD   ÚfoundÚitemÚafterÚkr   r   r   Ú_parse_makefile×   sŒ    	
















r—   c              C   sD   t rtj td¡S ttdƒr,dttjf } nd} tj t	dƒ| d¡S )z Return the path of the Makefile.ÚMakefileÚabiflagszconfig-%s%srA   Ústdlib)
r-   r   r   r   r   Úhasattrra   Ú_PY_VERSION_SHORTr™   r   )Úconfig_dir_namer   r   r   r   M  s    
c          
   C   sè   t ƒ }yt|| ƒ W nJ tk
r^ } z,d| }t|dƒrF|d|j  }t|ƒ‚W dd}~X Y 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 dd}~X Y nX trä| d | d< dS )z7Initialize the module as appropriate for POSIX systems.z.invalid Python installation: unable to open %sÚstrerrorz (%s)NÚ	BLDSHAREDÚLDSHARED)	r   r—   ÚIOErrorr›   rž   r   rt   r   r-   )rS   ÚmakefileÚeÚmsgÚconfig_hr‹   r   r   r   Ú_init_posixX  s&    


r¦   c             C   sV   t dƒ| d< t dƒ| d< t dƒ| d< d| d< d	| d
< t| d< tj ttjƒ¡| d< dS )z+Initialize the module as appropriate for NTrš   ÚLIBDESTÚ
platstdlibÚ
BINLIBDESTr"   Ú	INCLUDEPYz.pydÚSOz.exeÚEXEÚVERSIONÚBINDIRN)r   Ú_PY_VERSION_SHORT_NO_DOTr   r   Údirnamer   ra   Ú
executable)rS   r   r   r   Ú_init_non_posixt  s    r²   c             C   sž   |dkri }t  d¡}t  d¡}xx|  ¡ }|s0P | |¡}|rz| dd¡\}}yt|ƒ}W n tk
rn   Y nX |||< q"| |¡}|r"d|| 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.
    Nz"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
r   r   r   )rq   rr   Úreadlinerx   r3   rz   r{   )ÚfprS   Ú	define_rxÚundef_rxr�   rŽ   r�   r�   r   r   r   r   „  s(    




c              C   s:   t r$tjdkrtj td¡} q,t} ntdƒ} tj | d¡S )zReturn the path of pyconfig.h.r   ÚPCr#   z
pyconfig.h)r-   r   r5   r   r   r   r   )Úinc_dirr   r   r   r   £  s    
c               C   s   t tt ¡ ƒƒS )z,Return a tuple containing the schemes names.)r:   Úsortedr+   r;   r   r   r   r   r   ¯  s    c               C   s
   t  d¡S )z*Return a tuple containing the paths names.r    )r+   Úoptionsr   r   r   r   r	   ´  s    Tc             C   s&   t ƒ  |rt| |ƒS t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)r1   rU   r>   r+   r9   )r0   rS   Ú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
   )r5   r0   rS   r»   r   r   r   r   Ç  s    c              G   s¼  t dk�r†i a tt d< tt d< tt d< tt d< td td  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kr¾tƒ t d< dt krÐtt d< ntt d ƒt d< t�r\t	j
dk�r\t}yt	 ¡ }W n tk
�r   d}Y nX t	j t d ¡�s\||k�r\t	j |t d ¡}t	j |¡t d< tjdk�r†t	 ¡ d }t| d¡d ƒ}|dk �rÎxôdD ]2}t | }t dd|¡}t dd|¡}|t |< �q–W n¸dt	jk�rt	jd }x8dD ]0}t | }t dd|¡}|d | }|t |< �qêW t  dd¡}	t d|	¡}
|
dk	�r†|
  d¡}t	j !|¡�s†x,dD ]$}t | }t dd|¡}|t |< �q^W | �r´g }x| D ]}| "t  |¡¡ �q–W |S t S dS )ay  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 and Mac OS 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_shortr   r   Úpy_version_nodotre   ÚplatbaseÚprojectbaser™   rk   )r   Zos2rP   z2.6ÚuserbaseÚsrcdirr^   r   é   )rn   Z
BASECFLAGSrm   Z	PY_CFLAGSrŸ   z-arch\s+\w+\sú z-isysroot [^ 	]*Z	ARCHFLAGSrm   z-isysroot\s+(\S+)r   z-isysroot\s+\S+(\s|$))#Ú_CONFIG_VARSÚ_PREFIXÚ_EXEC_PREFIXÚ_PY_VERSIONrœ   r   ra   r™   ÚAttributeErrorr   r5   r²   r¦   Úversionrf   r   r-   Úgetcwdr   r   Úisabsr   rR   rb   Úunamerz   Úsplitrq   r@   rG   r`   r~   r3   ÚexistsÚappend)rY   re   ÚcwdrÄ   Zkernel_versionÚmajor_versionrN   ÚflagsÚarchrm   rŽ   ZsdkÚvalsr5   r   r   r   r   Ï  s€    















c             C   s   t ƒ  | ¡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`   )r5   r   r   r   r   R  s    c              C   s^  t jdkrnd} tj | ¡}|dkr(tjS tj d|¡}tj|t| ƒ |…  ¡ }|dkr\dS |dkrhdS tjS t jd	ks‚tt d
ƒsˆtjS t  	¡ \}}}}}| ¡  
dd¡}| 
dd¡}| 
dd¡}|dd… dkrÞd||f S |dd… dk�r&|d dk�rPd}dt|d ƒd |dd… f }�n*|dd… dk�rDd||f S |dd… dk�rdd|||f S |dd… d k�r d }t d!¡}	|	 |¡}
|
�rP|
 ¡ }�n°|dd… d"k�rPtƒ }| d#¡}|}ytd$ƒ}W n tk
�rè   Y nJX zt d%| ¡ ¡}
W d| ¡  X |
dk	�r2d& |
 d'¡ d&¡dd… ¡}|�s<|}|�rP|}d(}|d& d)k�rd*tƒ  d+d¡ ¡ k�rd,}tƒ  d+¡}t d-|¡}ttt|ƒƒƒ}t|ƒd'k�r´|d }n^|d.k�rÄd,}nN|d/k�rÔd0}n>|d1k�räd2}n.|d3k�rôd4}n|d5k�rd6}ntd7|f ƒ‚n<|d8k�r0tjd9k�rPd:}n |d;k�rPtjd9k�rLd<}nd=}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 (éÿÿÿÿú)Úamd64z	win-amd64Zitaniumzwin-ia64rP   rÏ   ú/rk   rÆ   Ú_ú-Né   Úlinuxz%s-%sÚsunosr   Ú5Úsolarisz%d.%srF   r   é   ZirixÚaixz%s-%s.%sé   Úcygwinz[\d.]+r^   ÚMACOSX_DEPLOYMENT_TARGETz0/System/Library/CoreServices/SystemVersion.plistz=<key>ProductUserVisibleVersion</key>\s*<string>(.*?)</string>r   r   Úmacosxz10.4.z-archrm   Úfatz-arch\s+(\S+))Úi386Úppc)rê   Úx86_64Úintel)rê   rë   rì   Zfat3)Úppc64rì   Úfat64)rê   rë   rî   rì   Ú	universalz%Don't know machine value for archs=%rrê   l        rì   )ÚPowerPCÚPower_Macintoshrî   rë   z%s-%s-%s) r   r5   ra   rÌ   r(   rb   r}   Úlowerr›   rÏ   ry   rz   rq   rr   rx   r3   r   r`   rt   r¡   r~   ÚreadÚcloser   rÐ   rw   Úfindallr:   r¹   r.   r{   Úmaxsize)r¼   ÚiÚjZlookÚosnameÚhostÚreleaserÌ   ÚmachineÚrel_rerŽ   ZcfgvarsZmacverZ
macreleaser‹   ÚcflagsZarchsr   r   r   r   [  s¢    
$












c               C   s   t S )N)rœ   r   r   r   r   r   ý  s    c             C   sJ   xDt t| ¡ ƒƒD ]0\}\}}|dkr2td|  ƒ td||f ƒ qW d S )Nr   z%s: z
	%s = "%s")Ú	enumerater¹   r9   Úprint)ÚtitleÚdataÚindexrN   rD   r   r   r   Ú_print_dict  s    r  c               C   sR   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Platform: "%s"zPython version: "%s"z!Current installation scheme: "%s"ÚPathsÚ	VariablesN)r  r   r   rW   r  r
   r   r   r   r   r   Ú_main  s    r  Ú__main__)N)N)AÚ__doc__rs   r   rq   ra   Úos.pathr   r   ÚconfigparserÚImportErrorÚConfigParserÚ__all__r   r±   r   r°   r   rÍ   r5   ró   r   r   r-   r$   r1   ÚRawConfigParserr+   rr   r?   rE   rÌ   rÐ   rÊ   rœ   r¯   rR   r¼   rÈ   r½   rÉ   rÇ   Ú
_USER_BASErI   rO   rU   rV   rW   rf   r—   r   r¦   r²   r   r   r   r	   r
   r   r   r   r   r   r  r  r&   r   r   r   r   Ú<module>   sŒ   ""
#	
v
 	 #
