£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
U
    .eTi                     @   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 z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rejeejZnee Zejdkrdedd  kre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re?  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(   z
t | W S  tk
r"   |  Y S X d S N)r   OSError)path r   K/usr/lib/python3.8/site-packages/pip/_vendor/distlib/_backport/sysconfig.py_safe_realpath"   s    
r   ntZpcbuildiz\pc\viz\pcbuild\amd64ic                  C   s,   dD ]"} t jt jtd| r dS qdS )N)z
Setup.distzSetup.localZModulesTF)osr   isfilejoin_PROJECT_BASE)fnr   r   r   is_python_build:   s    r   Fc               	   C   s   t sddlm}  tddd }| |}|d}|s>td| }t	| W 5 Q R X t
rdD ] }t|d	d
 t|dd qdda d S )N   )finder.   r   zsysconfig.cfgzsysconfig.cfg exists)posix_prefixZ
posix_homeincludez{srcdir}/Includeplatincludez{projectbase}/.T)	_cfg_readZ	resourcesr   __name__rsplitfindAssertionErrorZ	as_stream_SCHEMESZreadfp_PYTHON_BUILDset)r   Zbackport_packageZ_finderZ_cfgfilesschemer   r   r   _ensure_cfg_readD   s    

r-   z\{([^{]*?)\}c              
      s   t   | dr| d}nt }|  }|D ]8}|dkr<q.|D ]$\}}| ||rVq@| ||| q@q.| d |  D ]H}t| |  fdd}| |D ]\}}| ||t	
|| qqzd S )Nglobalsc                    s$   |  d}| kr | S |  dS Nr   r   groupZmatchobjname	variablesr   r   	_replacero   s    
z"_expand_globals.<locals>._replacer)r-   Zhas_sectionitemstuplesectionsZ
has_optionr*   Zremove_sectiondict	_VAR_REPLsub)configr.   r9   ZsectionZoptionvaluer6   r   r4   r   _expand_globalsY   s$    

r?      r   c                    s    fdd}t || S )zIn 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 r/   )r1   r   environr2   
local_varsr   r   r6      s    


z_subst_vars.<locals>._replacerr;   r<   )r   rC   r6   r   rB   r   _subst_vars   s    rE   c                 C   s0   |   }| D ]\}}||kr"q|| |< qd S r   )keysr7   )Ztarget_dictZ
other_dictZtarget_keyskeyr>   r   r   r   _extend_dict   s
    rH   c                 C   s`   i }|d kri }t |t  t| D ]4\}}tjdkrDtj|}tjt	||||< q&|S )N)posixr   )
rH   r   r(   r7   r   r3   r   
expandusernormpathrE   )r,   varsresrG   r>   r   r   r   _expand_vars   s    
rN   c                    s    fdd}t || S )Nc                    s$   |  d}| kr | S |  dS r/   r0   r2   rL   r   r   r6      s    
zformat_value.<locals>._replacerrD   )r>   rL   r6   r   rO   r   format_value   s    rP   c                   C   s   t jdkrdS t jS )NrI   r    )r   r3   r   r   r   r   _get_default_scheme   s    
rQ   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 r   )r   r   rJ   r   )argsr   r   r   joinuser   s    z_getuserbase.<locals>.joinuserr   APPDATA~PythondarwinZPYTHONFRAMEWORKLibraryz%d.%dr   z.local)r   rA   getr3   sysplatformr   version_info)env_baserT   baseZ	frameworkr   r   r   _getuserbase   s$    



r`   c              	   C   s  t d}t d}t d}|dkr*i }i }i }tj| ddd}| }W 5 Q R X |D ]}	|	dsZ|	 d	krvqZ||	}
|
rZ|
d
d\}}| }|	dd	}d|kr|||< qZzt
|}W n$ tk
r   |	dd||< Y qZX |||< qZt| }d}t|dkrt|D ]}|| }||p>||}
|
dk	r|
d
}d}||krpt|| }n||krd}nx|tjkrtj| }n`||kr|dr|dd |krd	}n$d| |krd}nt|d|  }nd	 ||< }|r||
 d }|d|
  | | }d|kr:|||< n~zt
|}W n" tk
rh   | ||< Y n
X |||< || |dr|dd |kr|dd }||kr|||< n|||< || qq| D ]"\}}t|tr| ||< q|| |S )zParse 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LDFLAGSZCPPFLAGSr   TFZPY_r@   )recompilecodecsopen	readlines
startswithstripmatchr1   replaceint
ValueErrorlistrF   lenr8   searchstrr   rA   endstartremover7   
isinstanceupdate)filenamerL   Z_variable_rxZ_findvar1_rxZ_findvar2_rxZdoneZnotdoneflineslinemnvZtmpvr5   Zrenamed_variablesr3   r>   founditemZ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.ZMakefileabiflagszconfig-%s%sr=   stdlib)
r)   r   r   r   r   hasattrr[   _PY_VERSION_SHORTr   r   )Zconfig_dir_namer   r   r   r   M  s    
c              
   C   s   t  }zt||  W nJ tk
r^ } z,d| }t|drF|d|j  }t|W 5 d}~X Y nX t }z"t|}t||  W 5 Q R X W nJ tk
r } z,d| }t|dr|d|j  }t|W 5 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	BLDSHAREDZLDSHARED)	r   r   IOErrorr   r   r   rl   r   r)   )rL   ZmakefileemsgZ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   ZLIBDESTZ
platstdlibZ
BINLIBDESTr!   Z	INCLUDEPYz.pydZSOz.exeZEXEZVERSIONZBINDIRN)r   _PY_VERSION_SHORT_NO_DOTr   r   dirnamer   r[   
executablerO   r   r   r   _init_non_posixt  s    r   c                 C   s   |dkri }t d}t d}|  }|s.q||}|rx|dd\}}zt|}W n tk
rl   Y nX |||< q ||}|r d||d< q |S )zParse 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   )ri   rj   readlinerp   r1   rr   rs   )fprL   Z	define_rxZ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   ZPCr"   z
pyconfig.h)r)   r   r3   r   r   r   r   )Zinc_dirr   r   r   r     s    
c                   C   s   t tt S )z,Return a tuple containing the schemes names.)r8   sortedr(   r9   r   r   r   r   r     s    c                   C   s
   t dS )z*Return a tuple containing the paths names.r    )r(   Zoptionsr   r   r   r   r	     s    Tc                 C   s&   t   |rt| |S tt| S dS )zReturn 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)r-   rN   r:   r(   r7   )r,   rL   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
   )r3   r,   rL   r   r   r   r   r     s    c                  G   s  t dkrzi 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< ztjt d< W n tk
r   dt d< Y nX t	j
dkrtt  t	j
dkrtt  tjdkrt t d< dt krtt d< ntt d t d< tr\t	j
dkr\t}z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rzt	 d }t|dd }|dk rdD ]2}t | }tdd|}tdd|}|t |< qndt	jkrt	jd }dD ]0}t | }tdd|}|d | }|t |< qt dd}	td|	}
|
dk	rz|
 d}t	j!|szdD ]$}t | }tdd|}|t |< qT| rg }| D ]}|"t | q|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_prefixZ
py_versionZpy_version_shortr   r   Zpy_version_nodotr_   ZplatbaseZprojectbaser   re   )r   Zos2rI   z2.6userbasesrcdirrX   r      )rh   Z
BASECFLAGSrg   Z	PY_CFLAGSr   z-arch\s+\w+\s z-isysroot [^ 	]*Z	ARCHFLAGSrg   z-isysroot\s+(\S+)r   z-isysroot\s+\S+(\s|$))#_CONFIG_VARS_PREFIX_EXEC_PREFIX_PY_VERSIONr   r   r[   r   AttributeErrorr   r3   r   r   versionr`   r   r)   getcwdr   r   isabsr   rK   r\   unamerr   splitri   r<   rA   rZ   rv   r1   existsappend)rS   r_   cwdr   Zkernel_versionZmajor_versionrG   flagsZarchrg   r   ZsdkZvalsr3   r   r   r   r     s    










c                 C   s   t  | S )zReturn the value of a single variable using the dictionary returned by
    'get_config_vars()'.

    Equivalent to get_config_vars().get(name)
    )r   rZ   )r3   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stt d
stjS t 	 \}}}}}| 
dd}|
dd}|
dd}|dd dkrd||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rd }td!}	|	|}
|
rP|
 }n|dd d"krPt }|d#}|}ztd$}W n tk
r   Y nJX ztd%| }
W 5 |  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rd,}nN|d/krd0}n>|d1krd2}n.|d3krd4}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 ()Zamd64z	win-amd64Zitaniumzwin-ia64rI   r   /re   r   _-N   Zlinuxz%s-%sZsunosr   5Zsolarisz%d.%sr@   r      ZirixZaixz%s-%s.%s   cygwinz[\d.]+rX   ZMACOSX_DEPLOYMENT_TARGETz0/System/Library/CoreServices/SystemVersion.plistz=<key>ProductUserVisibleVersion</key>\s*<string>(.*?)</string>r   r   Zmacosxz10.4.z-archrg   Zfatz-arch\s+(\S+))i386ppc)r   x86_64Zintel)r   r   r   Zfat3)ppc64r   Zfat64)r   r   r   r   Z	universalz%Don't know machine value for archs=%rr   l        r   )ZPowerPCZPower_Macintoshr   r   z%s-%s-%s) r   r3   r[   r   r&   r\   ru   lowerr   r   rq   rr   ri   rj   rp   r1   r   rZ   rl   r   closerv   readr   r   ro   findallr8   r   r*   rs   maxsize)r   ijZlookZosnameZhostreleaser   machineZrel_rer   ZcfgvarsZmacverZ
macreleaser~   ZcflagsZarchsr   r   r   r   [  s    
$












c                   C   s   t S r   )r   r   r   r   r   r     s    c                 C   sF   t t| D ]0\}\}}|dkr0td|   td||f  qd S )Nr   z%s: z
	%s = "%s")	enumerater   r7   print)titledataindexrG   r>   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"ZPathsZ	VariablesN)r   r   r   rQ   r   r
   r   r   r   r   r   _main  s    r   __main__)N)N)A__doc__rk   r   ri   r[   Zos.pathr   r   ZconfigparserImportErrorZConfigParser__all__r   r   r   r   r   r   r3   r   r   r   r)   r#   r-   ZRawConfigParserr(   rj   r;   r?   r   r   r   r   r   rK   r   r   r   r   r   Z
_USER_BASErE   rH   rN   rP   rQ   r`   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r$   r   r   r   r   <module>   s   ""
#	
v
 	 #
