<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
PfKi                 @   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rejjeejZneej ZejdkrdedEd j kreejjeeZejdkodedFd j kr
eejjeeeZejdkr@dedGd j kr@eejjeeeZdd Ze Zdadd Zej ZejdZdd Zejj d Z ejdd  Z!e d e d!  Z"ejj#ej$Z%ej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/dHd.d/Z0d0d Z1d1d2 Z2d3d4 Z3dId5d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 )Jz-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   /usr/lib/python3.6/sysconfig.py_safe_realpath"   s    r   ntZpcbuild   z\pc\v
   z\pcbuild\amd64   c              C   s.   x(dD ] } t jjt jjtd| rdS qW dS )N
Setup.distSetup.localModulesTF)r   r   )osr   isfilejoin_PROJECT_BASE)fnr   r   r   is_python_build:   s    
r    Fc              C   s   t sddlm}  tjddd }| |}|jd}|j }tj| W d Q R X t	r~x(dD ] }tj
|d	d
 tj
|dd qZW da d S )N   )finder.   r   zsysconfig.cfgposix_prefix
posix_homeincludez{srcdir}/Includeplatincludez{projectbase}/.T)r%   r&   )	_cfg_readZ	resourcesr"   __name__rsplitfindZ	as_stream_SCHEMESZreadfp_PYTHON_BUILDset)r"   Zbackport_packageZ_finderZ_cfgfilesschemer   r   r   _ensure_cfg_readD   s    


r2   z\{([^{]*?)\}c                s   t   | jdr| jd}nt }| j }xD|D ]<}|dkr>q0x,|D ]$\}}| j||rZqD| j||| qDW q0W | jd xX| j D ]L}t| j|  fdd}x,| j|D ]\}}| j||t	j
|| qW qW d S )Nglobalsc                s$   | j d}| kr | S | j dS )Nr$   r   )group)matchobjname)	variablesr   r   	_replacero   s    
z"_expand_globals.<locals>._replacer)r2   Zhas_sectionitemstuplesectionsZ
has_optionr/   Zremove_sectiondict	_VAR_REPLsub)configr3   r;   ZsectionZoptionvaluer8   r   )r7   r   _expand_globalsY   s$    


rA      r!   c                s    fdd}t j|| 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   | j d}| kr | S |tjkr.tj| S | j dS )Nr$   r   )r4   r   environ)r5   r6   )
local_varsr   r   r8      s    


z_subst_vars.<locals>._replacer)r=   r>   )r   rD   r8   r   )rD   r   _subst_vars   s    rE   c             C   s4   | j  }x&|j D ]\}}||kr$q|| |< qW d S )N)keysr9   )target_dict
other_dicttarget_keyskeyr@   r   r   r   _extend_dict   s
    rK   c             C   sd   i }|d kri }t |t  xBtj| D ]4\}}tjdkrFtjj|}tjjt	||||< q(W |S )Nposixr   )rL   r   )
rK   r   r-   r9   r   r6   r   
expandusernormpathrE   )r1   varsresrJ   r@   r   r   r   _expand_vars   s    
rQ   c                s    fdd}t j|| S )Nc                s$   | j d}| kr | S | j dS )Nr$   r   )r4   )r5   r6   )rO   r   r   r8      s    
zformat_value.<locals>._replacer)r=   r>   )r@   rO   r8   r   )rO   r   format_value   s    rR   c               C   s   t jdkrdS t jS )NrL   r%   )r   r6   r   r   r   r   _get_default_scheme   s    
rS   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   rM   r   )argsr   r   r   joinuser   s    z_getuserbase.<locals>.joinuserr   APPDATA~PythondarwinPYTHONFRAMEWORKLibraryz%d.%dr!   z.local)r   rC   getr6   sysplatformr   version_info)env_baserV   base	frameworkr   r   r   _getuserbase   s"    



rd   c             C   s"  t jd}t jd}t jd}|dkr*i }i }i }tj| ddd}|j }W dQ R X x|D ]}	|	jds\|	j d	krxq\|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}xt|dkrxt|D ]}|| }|j|pJ|j|}
|
dk	r|
jd
}d}||kr|t|| }n||krd}nx|tjkrtj| }n`||kr|jdr|dd |krd	}n$d| |krd}nt|d|  }nd	 ||< }|r||
j d }|d|
j  | | }d|krF|||< n~yt
|}W n" tk
rt   |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 ||< qW |j| |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LDFLAGSCPPFLAGSr   TFPY_rB   )rk   rl   rm   )recompilecodecsopen	readlines
startswithstripmatchr4   replaceint
ValueErrorlistrF   lenr:   searchstrr   rC   endstartremover9   
isinstanceupdate)filenamerO   _variable_rx_findvar1_rx_findvar2_rxdonenotdoneflineslinemnvtmpvr7   renamed_variablesr6   r@   founditemafterkr   r   r   _parse_makefile   s    	
















r   c              C   sD   t rtjjtdS ttdr,dttjf } nd} tjjt	d| dS )z Return the path of the Makefile.Makefileabiflagszconfig-%s%sr?   stdlib)
r.   r   r   r   r   hasattrr^   _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 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< 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   rr   r   r.   )rO   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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   r^   
executable)rO   r   r   r   _init_non_posixt  s    r   c             C   s   |dkri }t jd}t jd}xx| j }|s0P |j|}|rz|jdd\}}yt|}W n tk
rn   Y nX |||< q"|j|}|r"d||jd< q"W |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   )ro   rp   readlinerv   r4   rx   ry   )fprO   	define_rxundef_rxr   r   r   r   r   r   r   r     s(    




c              C   s:   t r$tjdkrtjjtd} q,t} ntd} tjj| dS )zReturn the path of pyconfig.h.r   PCr(   z
pyconfig.h)r.   r   r6   r   r   r   r   )inc_dirr   r   r   r     s    
c               C   s   t ttj S )z,Return a tuple containing the schemes names.)r:   sortedr-   r;   r   r   r   r   r     s    c               C   s
   t j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j| 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)r2   rQ   r<   r-   r9   )r1   rO   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
   )r6   r1   rO   r   r   r   r   r     s    c              G   s  t dkri 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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ot	j
dkr\t}yt	j }W n tk
r   d}Y nX t	jjt d  r\||kr\t	jj|t d }t	jj|t d< tjdkrt	j d }t|jdd }|dk rx:d$D ]2}t | }tjdd|}tjdd|}|t |< qW ndt	jkrt	jd }x8d%D ]0}t | }tjdd|}|d | }|t |< qW t jdd}	tjd |	}
|
dk	r|
j d!}t	jj!|sx,d&D ]$}t | }tjd"d|}|t |< q^W | rg }x| D ]}|j"t j| qW |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_nodotrb   platbaseprojectbaser   ri   r   os2rL   z2.6userbasesrcdirrZ   r#   r   rl   
BASECFLAGSrk   	PY_CFLAGSr   z-arch\s+\w+\s z-isysroot [^ 	]*Z	ARCHFLAGSz-isysroot\s+(\S+)r$   z-isysroot\s+\S+(\s|$))r   r   )rl   r   rk   r   r   )rl   r   rk   r   r   )rl   r   rk   r   r   )#_CONFIG_VARS_PREFIX_EXEC_PREFIX_PY_VERSIONr   r   r^   r   AttributeErrorr   r6   r   r   versionrd   r   r.   getcwdr   r   isabsr   rN   r_   unamerx   splitro   r>   rC   r]   r|   r4   existsappend)rU   rb   cwdr   Zkernel_versionZmajor_versionrJ   flagsZarchrk   r   Zsdkvalsr6   r   r   r   r     s    












c             C   s   t  j| S )zReturn the value of a single variable using the dictionary returned by
    'get_config_vars()'.

    Equivalent to get_config_vars().get(name)
    )r   r]   )r6   r   r   r   r   R  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stt d
 rtjS t j	 \}}}}}|j j
dd}|j
dd}|j
dd}|dd dkrd||f S |dd dkr(|d dkrRd}dt|d d |dd f }n*|dd dkrFd||f S |dd dkrfd|||f S |dd d krd }tjd!}	|	j|}
|
rR|
j }n|dd d"krRt }|jd#}|}ytd$}W n tk
r   Y nJX ztjd%|j }
W d|j  X |
dk	r4d&j|
jdjd&dd }|s>|}|rR|}d'}|d& d(krd)t jd*dj krd+}t jd*}tjd,|}ttt|}t|dkr|d }n^|d;krd+}nN|d<krd0}n>|d=krd1}n.|d>krd3}n|d?krd4}ntd5|f n<|d-kr2tjd@krRd/}n |dAkrRtjdBkrNd2}nd.}d9|||f S )Ca  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 (r$   )amd64z	win-amd64itaniumzwin-ia64rL   r   /ri   r   _-N   linuxz%s-%ssunosr   5solarisz%d.%srB   r!      irixaixz%s-%s.%s   cygwinz[\d.]+rZ   MACOSX_DEPLOYMENT_TARGETz0/System/Library/CoreServices/SystemVersion.plistz=<key>ProductUserVisibleVersion</key>\s*<string>(.*?)</string>r#   Zmacosxz10.4.z-archrk   Zfatz-arch\s+(\S+)i386ppcx86_64ZintelZfat3ppc64Zfat64Z	universalz%Don't know machine value for archs=%r    PowerPCPower_Macintoshz%s-%s-%s)r   r   )r   r   )r   r   r   )r   r   )r   r   r   r   l        )r   r   l        ) r   r6   r^   r   r,   r_   r{   lowerr   r   rw   rx   ro   rp   rv   r4   r   r]   rr   r   r|   readcloser   r   ru   findallr:   r   r/   ry   maxsize)r   ijlookosnamehostreleaser   machinerel_rer   ZcfgvarsZmacverZ
macreleaser   ZcflagsZarchsr   r   r   r   [  s    
$












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   r9   print)titledataindexrJ   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"Paths	VariablesN)r   r   r   rS   r   r
   r   r   r   r   r   _main  s    r  __main__iii)N)N)A__doc__rq   r   ro   r^   Zos.pathr   r   ZconfigparserImportErrorZConfigParser__all__r   r   r   r   r   r   r6   r   r   r    r.   r)   r2   ZRawConfigParserr-   rp   r=   rA   r   r   r   r   r   rN   r   r   r   r   r   
_USER_BASErE   rK   rQ   rR   rS   rd   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r  r*   r   r   r   r   <module>   s    "
#	
v
 	 #
