
[[\`                 @   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 i i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d 6i d  d 6d! d 6d! d 6d! d 6d" d 6d" d 6d d 6d d 6d# 6i d$ d 6d% d 6d& d 6d& d 6d' d 6d' d 6d( d 6d d 6d) 6i d* d 6d* d 6d+ d 6d+ d 6d, d 6d- d 6d. d 6d/ 6i d0 d 6d0 d 6d1 d 6d1 d 6d2 d 6d3 d 6d. d 6d4 6i d5 d 6d5 d 6d6 d 6d6 d 6d7 d 6d3 d 6d. d 6d8 6Z dp Z e j	 j
   d Z e j	 d d9  Z e d e d: 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 d; d<   Z e j re j j e e j   Z n e e j    Z e j d) k rd= e dq d  j    k re e j j! e e   Z n  e j d) k r>d? e dr d  j    k r>e e j j! e e e   Z n  e j d) k rdA e ds d  j    k re e j j! e e e   Z n  dC e j" k re e j" dC  Z n  dD dE   Z# e$ e dF d  Z% e% r0e j d) k r0e% j    j& dt  r0e j j e%  Z% e% j& d=  r0e j j e%  Z% q0n  dH dI dJ  Z' e' dK  Z( e( rx- du D]" Z) dL e e) d <dM e e) d <qXWn  dN dO   Z* dP dQ   Z+ dR dS   Z, dT dU   Z- dV dW   Z. d dX dY  Z/ dZ d   Z0 d[ d\   Z1 d] d^   Z2 d_ d`   Z3 d da d  Z4 db d   Z5 dc d   Z6 dd d	   Z7 e-   d dK de d
  Z8 e-   d dK df d  Z9 dg d   Z: dh d   Z; di d   Z< dj d   Z= dk dl   Z> dm dn   Z? e@ do k re?   n  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}/lib/python{py_version_short}stdlibz'{platbase}/lib/python{py_version_short}
platstdlibz1{base}/lib/python{py_version_short}/site-packagespurelibz5{platbase}/lib/python{py_version_short}/site-packagesplatlibz;{installed_base}/include/python{py_version_short}{abiflags}includez?{installed_platbase}/include/python{py_version_short}{abiflags}platincludez
{base}/binscriptsz{base}dataposix_prefixz{installed_base}/lib/pythonz{base}/lib/pythonz{installed_base}/include/python
posix_homez{installed_base}/Libz
{base}/Libz{base}/Lib/site-packagesz{installed_base}/Includez{base}/Scriptsntz#{userbase}/Python{py_version_nodot}z1{userbase}/Python{py_version_nodot}/site-packagesz+{userbase}/Python{py_version_nodot}/Includez{userbase}/Scriptsz
{userbase}Znt_userz'{userbase}/lib/python{py_version_short}z5{userbase}/lib/python{py_version_short}/site-packagesz+{userbase}/include/python{py_version_short}z{userbase}/binZ
posix_userz{userbase}/lib/pythonz#{userbase}/lib/python/site-packagesz{userbase}/includeZosx_framework_user      c             C   s+   y t  |   SWn t k
 r& |  SYn Xd  S)N)r   OSError)path r   /usr/lib/python3.4/sysconfig.py_safe_realpathc   s    r    pcbuild   z\pc\v
   z\pcbuild\amd64   Z_PYTHON_PROJECT_BASEc             C   s=   x6 d D]. } t  j j t  j j |  d |   r d Sq Wd S)N
Setup.distSetup.localZModulesTF)r%   r&   )osr   isfilejoin)dfnr   r   r   _is_python_source_dir}   s    $r,   Z_homepcbuild\amd64Fc             C   s    |  r t  r t t   St t  S)N)	_sys_homer,   _PROJECT_BASE)Z
check_homer   r   r   is_python_build   s    
r0   Tz{srcdir}/Includez{projectbase}/.c             C   sv   y |  j  |   SWn^ t k
 rq y |  j  t j   SWn5 t k
 rl } z t d |   WYd  d  } ~ Xn XYn Xd  S)Nz{%s})formatKeyErrorr'   environAttributeError)sZ
local_varsZvarr   r   r   _subst_vars   s    r6   c             C   sI   |  j    } x6 | j   D]( \ } } | | k r7 q n  | |  | <q Wd  S)N)keysitems)Ztarget_dictZ
other_dictZtarget_keyskeyvaluer   r   r   _extend_dict   s
    r;   c             C   s   i  } | d  k r i  } n  t  | t    xa t |  j   D]O \ } } t j d k rl t j j |  } n  t j j t	 | |   | | <q< W| S)Nposixr   )zposixznt)
r;   r   _INSTALL_SCHEMESr8   r'   namer   
expandusernormpathr6   )schemevarsZresr9   r:   r   r   r   _expand_vars   s    	#rC   c               C   s   t  j d k r d St  j S)Nr<   r   )r'   r>   r   r   r   r   _get_default_scheme   s    rD   c              C   s   t  j j d d   }  d d   } t  j d k rb t  j j d  pE d } |  rR |  S| | d  Sn  t j d k r t d	  } | r |  r |  S| d d
 | d t j d  d   Sq n  |  r |  S| d d  Sd  S)NZPYTHONUSERBASEc              W   s   t  j j t  j j |     S)N)r'   r   r?   r)   )argsr   r   r   joinuser   s    z_getuserbase.<locals>.joinuserr   ZAPPDATA~ZPythondarwinZPYTHONFRAMEWORKZLibraryz%d.%dr   z.local)r'   r3   getr>   sysplatformr   version_info)Zenv_baserF   baseZ	frameworkr   r   r   _getuserbase   s"    rN   c             C   s  d d l  } | j d  } | j d  } | j d  } | d k rN i  } n  i  } i  } t |  d d  } | j   }	 Wd QXx |	 D] }
 |
 j d  s |
 j   d	 k r q n  | j |
  } | r | j d
 d  \ } } | j   } | j d d	  } d | k r| | | <qay t	 |  } Wn( t
 k
 rS| j d d  | | <YqaX| | | <q q Wt | j    } d } xNt |  d k rx5t |  D]'} | | } | j |  p| j |  } | d k	 r| j d
  } d } | | k rt | |  } n | | k r"d } n | t j k rAt j | } nx | | k r| j d  r{| d d  | k r{d	 } qd | | k rd } qt | d |  } n d	 | | <} | r| | j   d  } | d | j    | | } d | k r| | | <qy t	 |  } Wn" t
 k
 r@| j   | | <Yn X| | | <| j |  | j d  r| d d  | k r| d d  } | | k r| | | <qqqq| | | <| j |  qWqWx< | j   D]. \ } } t | t  r| j   | | <qqW| 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.
    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_]*)}errorssurrogateescape#    r   z$$$CFLAGSLDFLAGSCPPFLAGSTFZPY_r   )rU   rV   rW   )recompileopen	readlines
startswithstripmatchgroupreplaceint
ValueErrorlistr7   lentuplesearchstrr'   r3   endstartremover8   
isinstanceupdate)filenamerB   rX   Z_variable_rxZ_findvar1_rxZ_findvar2_rxZdoneZnotdoneflineslinemnvZtmpvZ	variablesZrenamed_variablesr>   r:   founditemZafterkr   r   r   _parse_makefile   s    		!
			

rw   c              C   s   t  r t j j t p t d  St t d  rD d t t j	 f }  n d }  t t j
 d  rs |  d t j
 j 7}  n  t j j t d  |  d  S)z Return the path of the Makefile.ZMakefileabiflagszconfig-%s%sZconfig
_multiarchz-%sr   )_PYTHON_BUILDr'   r   r)   r.   r/   hasattrrJ   _PY_VERSION_SHORTrx   implementationry   r   )Zconfig_dir_namer   r   r   r   N  s    c           +   C   s_  d d l  }  i  } t   } y t | |  Wn^ t k
 r } z> d | } t | d  rn | d | j } n  t |   WYd d } ~ Xn Xt   } y& t |   } t | |  Wd QXWn^ t k
 r} z> d | } t | d  r | d | j } n  t |   WYd d } ~ Xn Xt	 r4| d | d <n  d } d	 t
 j k r}d d l } | j |  }	 | |	 _ |	 t
 j | <n  d
 t   t
 j d d  f }
 t t
 d  r|
 d 7}
 n  t j |
 d d t j j |
 | d  } t | d d d 4 } | j d  | j d  |  j  | d | Wd QXt d d d d  } | j |
  Wd QXd S)z;Generate the Python module containing build-time variables.r   Nz.invalid Python installation: unable to open %sstrerrorz (%s)ZLDSHAREDZ	BLDSHARED_sysconfigdatarH   zbuild/lib.%s-%sr   Zgettotalrefcountz-pydebugexist_okTz.pywencodingutf8zB# system configuration generated and used by the sysconfig module
zbuild_time_vars = streamzpybuilddir.txtascii)pprintr   rw   r   r{   r~   r   rZ   r   rz   rJ   rK   types
ModuleTypebuild_time_varsmodulesr   versionr'   makedirsr   r)   write)r   rB   ZmakefileemsgZconfig_hrn   r>   r   moduleZ
pybuilddirZdestfiler   r   r   _generate_posix_varsZ  sL    	
	
	 r   c             C   s!   d d l  m } |  j |  d S)z7Initialize the module as appropriate for POSIX systems.r   )r   N)r   r   rl   )rB   r   r   r   r   _init_posix  s    r   c             C   sq   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   ZLIBDESTr   Z
BINLIBDESTr   Z	INCLUDEPYz.pyd
EXT_SUFFIXz.exeZEXEZVERSIONZBINDIRN)r   _PY_VERSION_SHORT_NO_DOTr'   r   dirnamer    rJ   
executable)rB   r   r   r   _init_non_posix  s    


r   c       	      C   s   | d k r i  } n  d d l  } | j d  } | j d  } x |  j   } | sX Pn  | j |  } | r | j d d  \ } } y t |  } Wn t k
 r Yn X| | | <qB | j |  } | rB d | | j d  <qB qB | 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.
    Nr   z"#define ([A-Z][A-Za-z0-9_]+) (.*)
z&/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/
rS   r   )rX   rY   readliner^   r_   ra   rb   )	fprB   rX   Z	define_rxZundef_rxrp   rq   rr   rs   r   r   r   r     s*    	c              C   sa   t  rB t j d k r3 t j j t p' t d  }  qN t p< t }  n t d  }  t j j |  d  S)zReturn the path of pyconfig.h.r   ZPCr   z
pyconfig.h)rz   r'   r>   r   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.)re   sortedr=   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  |  |  St |  Sd 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)rC   r=   )rA   rB   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
   )r>   rA   rB   r   r   r   r   r     s    c              G   s5  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 <t t  d <t t  d <y t j	 t  d <Wn t
 k
 r d t  d <Yn Xt j d k r t t   n  t j d k r t t   n  t  j d  } | d k	 r| t  d <n  t   t  d <t d  } | rBd | t  d <n
 d t  d <t  j d t  } t j d k rt rt j j t    } t j j | |  } qt j j t    } n  t |  t  d <t j d k rd d l } | j t   qn  |  r-g  } x$ |  D] } | j t  j |   q	W| St  Sd 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_prefixZ
py_versionZpy_version_shortr   r   Zpy_version_nodotZinstalled_baserM   Zinstalled_platbaseZplatbaseZprojectbaserx   rR   r   r<   r   SOZuserbaseZ	MULTIARCH/ZmultiarchsubdirsrcdirrH   )_CONFIG_VARS_PREFIX_EXEC_PREFIX_PY_VERSIONr|   _BASE_PREFIX_BASE_EXEC_PREFIXr/   rJ   rx   r4   r'   r>   r   r   rI   rN   r   rz   r   r   r   r)   r    rK   _osx_supportZcustomize_config_varsappend)rE   r   Z	multiarchr   rM   r   Zvalsr>   r   r   r   r     sX    









c             C   s>   |  d k r. d d l  } | j d t d  n  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   Nz SO is deprecated, use EXT_SUFFIXr   )warningswarnDeprecationWarningr   rI   )r>   r   r   r   r   r   L  s    c              C   s  t  j d k r d }  t j j |   } | d* k r: t j St j j d |  } t j | t |   |  j   } | d k r d S| d k r d St j St  j d	 k s t t  d
  r t j Sd t  j	 k r t  j	 d St  j
   \ } } } } } | j   j d d  } | j d d  } | j d d  } | d d  d k rTd | | f S| d d  d k r| d d k rd } d t | d  d | d d  f } i d d 6d d 6}	 | d  |	 t j 7} qn | d d!  d" k rd | | f S| d d  d# k r"d$ | | | f S| d d%  d& k rd& } d d l }
 |
 j d'  } | j |  } | r| j   } qnI | d d%  d( k rd d l } | j t   | | |  \ } } } n  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 (rS   )Zamd64z	win-amd64Zitaniumzwin-ia64r<   unameZ_PYTHON_HOST_PLATFORMr   rR    _-N   Zlinuxz%s-%sZsunosr   5Zsolarisz%d.%sr   r   Z32bitiZ64bitl    z.%s   ZirixZaixz%s-%s.%s   cygwinz[\d.]+rH   z%s-%s-%s)r'   r>   rJ   r   findrK   rd   lowerr{   r3   r   r`   ra   maxsizerX   rY   r^   r_   r   Zget_platform_osxr   )r   ijZlookZosnameZhostreleaser   machineZbitnessrX   Zrel_rerq   r   r   r   r   r   X  sZ    #(c               C   s   t  S)N)r|   r   r   r   r   r     s    c             C   sd   x] t  t | j     D]C \ } \ } } | d k rH t d |   n  t d | | f  q Wd  S)Nr   z%s: z
	%s = "%s")	enumerater   r8   print)titler   indexr9   r:   r   r   r   _print_dict  s    +r   c               C   s   d t  j k r t   d St 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"ZPathsZ	Variables)
rJ   argvr   r   r   r   rD   r   r
   r   r   r   r   r   _main  s    r   __main__)zstdlibz
platstdlibr   r   zincluder   zdataiii)r!   r-   )zposix_prefixr   )A__doc__r'   rJ   os.pathr   r   __all__r=   r   r   splitr   r|   r   r   r@   r   r   base_prefixr   r   r   base_exec_prefixr   r   Z
_USER_BASEr    r   r   r/   getcwdr>   r   r)   r3   r,   getattrr.   endswithr0   rz   rA   r6   r;   rC   rD   rN   rw   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   __name__r   r   r   r   <module>   s   	 	++!+!	w? S[