
(hZk                 @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z d d l m Z d d l	 m
 Z
 d d l m Z d d l m Z d d	 l m Z m Z m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d Z d d d d d d d d d d i Z d d d d d d d d d d d i d d d d d d d  d d d d i d! e d" d d# d d# d d$ d d d d i d% d d# d d# d d$ d d d d i i Z e rd d& d d& d d' d d( d d) i e d* <d d& d d& d d+ d d, d d) i e d- <d0 Z Gd. d/   d/ e  Z d S)1zFdistutils.command.install

Implements the Distutils 'install' command.    N)log)Command)DEBUG)get_config_vars)DistutilsPlatformError)
write_file)convert_path
subst_varschange_root)get_platform)DistutilsOptionError)	USER_BASE)	USER_SITETpurelibz$base/Lib/site-packagesplatlibheadersz$base/Include/$dist_namescriptsz$base/Scriptsdataz$baseunix_prefixz/$base/lib/python$py_version_short/site-packagesz;$platbase/$platlibdir/python$py_version_short/site-packagesz9$base/include/python$py_version_short$abiflags/$dist_namez	$base/bin	unix_homez$base/lib/pythonz$base/$platlibdir/pythonz$base/include/python/$dist_namentpypyz$base/site-packagesz$base/include/$dist_namepypy_ntz	$usersitez4$userbase/Python$py_version_nodot/Include/$dist_namez)$userbase/Python$py_version_nodot/Scriptsz	$userbasent_userz=$userbase/include/python$py_version_short$abiflags/$dist_namez$userbase/bin	unix_userc               @   s  e  Z d  Z d Z d_ d` da db d d d d f dc dd de d d d d f df dg dh di dj dk dl dm dn g Z d d% d( g Z e r e j d, d d- e f  e j d,  d  d i Z	 d. d/   Z
 d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z d< d=   Z d> d?   Z d@ dA   Z dB dC   Z dD dE   Z dF dG   Z dH dI   Z dJ dK   Z dL dM   Z dN dO   Z dP dQ   Z dR dS   Z dT dU   Z dV dW   Z dX e f dY e f dZ e f d[ e f d\ d] d^   f g Z d S)oinstallz'install everything from build directoryprefix=Ninstallation prefixexec-prefix=.(Unix only) prefix for platform-specific fileshome=+(Unix only) home directory to install underinstall-base=;base installation directory (instead of --prefix or --home)zinstall-platbase=z8base installation directory for platform-specific files z$(instead of --exec-prefix or --home)root=<install everything relative to this alternate root directoryinstall-purelib=;installation directory for pure Python module distributionsinstall-platlib=8installation directory for non-pure module distributionszinstall-lib=z4installation directory for all module distributions z3(overrides --install-purelib and --install-platlib)install-headers=(installation directory for C/C++ headersinstall-scripts=)installation directory for Python scriptsinstall-data=%installation directory for data filescompileccompile .py to .pyc [default]
no-compiledon't compile .py files	optimize=Olalso compile with optimization: -O1 for "python -O", -O2 for "python -OO", and -O0 to disable [default: -O0]forcef1force installation (overwrite any existing files)
skip-build2skip rebuilding everything (for testing/debugging)record=3filename in which to record list of installed filesuserz!install in user site-package '%s'c             C   s   d |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d |  _ t |  _ t |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d S)zInitializes options.Nr      )prefixexec_prefixhomer?   install_baseinstall_platbaserootinstall_purelibinstall_platlibinstall_headersinstall_libinstall_scriptsinstall_datar   install_userbaser   install_usersiter0   optimize
extra_pathinstall_path_filer8   
skip_buildwarn_dir
build_base	build_librecord)self rX   K/tmp/pip-build-kmztzv_d/setuptools/setuptools/_distutils/command/install.pyinitialize_options   s2    																								zinstall.initialize_optionsc          #   C   s  |  j  s |  j s |  j r= |  j s- |  j r= t d d   |  j rd |  j  sX |  j rd t d   |  j r |  j  s |  j s |  j s |  j s |  j r t d   t j d k r |  j r |  j	 d  d |  _ |  j
 d  t j d k r |  j   n
 |  j   |  j
 d	  t j j   d
 } t d d  \ } } y t j } Wn t k
 rcd } Yn Xd |  j j   d |  j j   d |  j j   d | d d t j d d  d d t j d d  d | d | d | d | d | d t t d d  i |  _ t r$|  j |  j d <|  j |  j d <|  j   |  j
 d  |  j |  j d <|  j |  j d  <t rd
 d! l m } t  d"  | |  j  |  j!   |  j
 d#  |  j r|  j"   |  j# d k r|  j j$ r|  j% |  _# n |  j& |  _# |  j' d d$ d% d& d' d( d d  |  j(   |  j# |  _) t j* j+ |  j# |  j,  |  _# |  j- d k	 rl|  j. d) d d$ d% d& d' d(  |  j
 d*  |  j/ d+ d. d/  d S)0zFinalizes options.z.must supply either prefix/exec-prefix/home or z)install-base/install-platbase -- not bothz9must supply either home or prefix/exec-prefix -- not bothzGcan't combine user with prefix, exec_prefix/home, or install_(plat)baseposixz+exec-prefix option ignored on this platformNzpre-finalize_{unix,other}zpost-finalize_{unix,other}()r   rA   rB    	dist_namedist_versiondist_fullname
py_versionpy_version_shortz%d.%d   py_version_nodotz%d%d
sys_prefixsys_exec_prefixabiflagsZ
platlibdirlibuserbaseusersitezpost-expand_basedirs()baseplatbase)pprintzconfig vars:zpost-expand_dirs()r   r   r   r   r   libbasezafter prepending rootbuildrT   rU   )
build_basero   )	build_librp   )0rA   rB   rC   rD   rE   r   r?   osnamewarn	dump_dirsfinalize_unixfinalize_othersysversionsplitr   rf   AttributeErrordistributionget_nameget_versionget_fullnameversion_infogetattrconfig_varsHAS_USER_SITErM   rN   expand_basedirsr   rl   printexpand_dirscreate_home_pathrJ   ext_modulesrH   rG   convert_pathshandle_extra_pathinstall_libbasepathjoin
extra_dirsrF   change_rootsset_undefined_options)rW   r`   rA   rB   rf   rl   rX   rX   rY   finalize_options   s    
	$		




	
	

	zinstall.finalize_optionsc             C   s   t  s
 d Sd d l m } t j | d  x |  j D] } | d } | d d k re | d d	  } | |  j k r |  j | } | j |  } t |  |  } n | j |  } t |  |  } t j d | |  q5 Wd S)
zDumps the list of user options.Nr   )longopt_xlate:r@   =z  %s: %sr   )	r   distutils.fancy_getoptr   r   debuguser_optionsnegative_opt	translater   )rW   msgr   optopt_namevalrX   rX   rY   rt     s    
zinstall.dump_dirsc             C   s  |  j  d k	 s |  j d k	 r |  j d k rK |  j d k rK |  j d k sx |  j d k sx |  j d k sx |  j d k r t d   d S|  j	 r |  j
 d k r t d   |  j
 |  _  |  _ |  j d  n |  j d k	 r|  j |  _  |  _ |  j d  n |  j d k r^|  j d k	 r+t d   t j j t j  |  _ t j j t j  |  _ n |  j d k ry|  j |  _ |  j |  _  |  j |  _ |  j d  d S)z&Finalizes options for posix platforms.NzPinstall-base or install-platbase supplied, but installation scheme is incompletez$User base directory is not specifiedr   r   z*must not supply exec-prefix without prefixr   )rD   rE   rJ   rG   rH   rI   rK   rL   r   r?   rM   r   select_schemerC   rA   rB   rq   r   normpathrw   )rW   rX   rX   rY   ru     s<    				zinstall.finalize_unixc             C   s   |  j  rN |  j d k r$ t d   |  j |  _ |  _ |  j t j d  n |  j d k	 r |  j |  _ |  _ |  j d  nv |  j	 d k r t j
 j t j	  |  _	 |  j	 |  _ |  _ y |  j t j  Wn% t k
 r t d t j   Yn Xd S)z)Finalizes options for non-posix platformsNz$User base directory is not specified_userr   z)I don't know how to install stuff on '%s')r?   rM   r   rD   rE   r   rq   rr   rC   rA   r   r   rw   KeyError)rW   rX   rX   rY   rv     s"    		zinstall.finalize_otherc             C   s   t  t d  r= | j d	  r= t j d k r7 d } n d } t | } xA t D]9 } d | } t |  |  d k rN t |  | | |  qN Wd S)
z=Sets the install directories by applying the install schemes.pypy_version_infor   _homer   r   r   install_N)z_userz_home)	hasattrrw   endswithrq   rr   INSTALL_SCHEMESSCHEME_KEYSr   setattr)rW   rr   schemekeyattrnamerX   rX   rY   r     s    	

zinstall.select_schemec             C   s   x{ | D]s } t  |  |  } | d  k	 r t j d k sF t j d k rX t j j |  } t | |  j  } t |  | |  q Wd  S)Nr[   r   )r   rq   rr   r   
expanduserr	   r   r   )rW   attrsattrr   rX   rX   rY   _expand_attrs  s    zinstall._expand_attrsc             C   s   |  j  d d d g  d S)zNCalls `os.path.expanduser` on install_base, install_platbase and
        root.rD   rE   rF   N)r   )rW   rX   rX   rY   r     s    zinstall.expand_basedirsc             C   s#   |  j  d d d d d d g  d S)z+Calls `os.path.expanduser` on install dirs.rG   rH   rJ   rI   rK   rL   N)r   )rW   rX   rX   rY   r     s    zinstall.expand_dirsc             G   s>   x7 | D]/ } d | } t  |  | t t |  |    q Wd S)z!Call `convert_path` over `names`.r   N)r   r   r   )rW   namesrr   r   rX   rX   rY   r     s    
zinstall.convert_pathsc             C   s   |  j  d k r |  j j  |  _  |  j  d k	 r t j d  t |  j  t  ra |  j  j d  |  _  t |  j   d k r |  j  d } } n3 t |  j   d k r |  j  \ } } n t d   t	 |  } n d } d } | |  _
 | |  _ d S)	z4Set `path_file` and `extra_dirs` using `extra_path`.NzIDistribution option extra_path is deprecated. See issue27919 for details.,r@   r   rb   zY'extra_path' option must be a list, tuple, or comma-separated string with 1 or 2 elementsr\   )rP   r{   r   rs   
isinstancestrry   lenr   r   	path_filer   )rW   r   r   rX   rX   rY   r     s$    		zinstall.handle_extra_pathc          	   G   sD   x= | D]5 } d | } t  |  | t |  j t |  |    q Wd S)z:Change the install directories pointed by name using root.r   N)r   r
   rF   r   )rW   r   rr   r   rX   rX   rY   r      s    
zinstall.change_rootsc             C   s   |  j  s d St t j j d   } x` |  j j   D]O \ } } | j |  r5 t j j |  r5 |  j	 d |  t j
 | d  q5 Wd S)zCreate directories under ~.N~zos.makedirs('%s', 0o700)i  )r?   r   rq   r   r   r   items
startswithisdirdebug_printmakedirs)rW   rC   rr   r   rX   rX   rY   r   &  s    	"zinstall.create_home_pathc             C   s  |  j  sO |  j d  |  j j d  j } |  j rO | t   k rO t d   x! |  j   D] } |  j |  q\ W|  j	 r |  j
   |  j r|  j   } |  j r t |  j  } x2 t t |   D] } | | | d  | | <q W|  j t |  j | f d |  j  t t j j t j  } t t j j |  } t j j t j j |  j   } |  j r|  j	 oq|  j r| | k rt j d |  j  d S)zRuns the command.rn   z"Can't install when cross-compilingNz'writing list of installed files to '%s'zmodules installed to '%s', which is not in Python's module search path (sys.path) -- you'll have to change the search path yourself)rR   run_commandr{   get_command_obj	plat_namerS   r   r   get_sub_commandsr   create_path_filerV   get_outputsrF   r   rangeexecuter   maprq   r   r   rw   normcaserJ   rQ   r   r   )rW   
build_platcmd_nameoutputsroot_lencountersys_pathrJ   rX   rX   rY   run2  s6    		
			!		zinstall.runc             C   sc   t  j j |  j |  j d  } |  j rN |  j t | |  j g f d |  n |  j	 d |  d S)zCreates the .pth filez.pthzcreating %szpath file '%s' not createdN)
rq   r   r   r   r   rQ   r   r   r   rs   )rW   filenamerX   rX   rY   r   ^  s    		zinstall.create_path_filec             C   s   g  } xS |  j    D]E } |  j |  } x- | j   D] } | | k r5 | j |  q5 Wq W|  j r |  j r | j t j j |  j	 |  j d   | S)z.Assembles the outputs of all the sub-commands.z.pth)
r   get_finalized_commandr   appendr   rQ   rq   r   r   r   )rW   r   r   cmdr   rX   rX   rY   r   l  s    zinstall.get_outputsc             C   sC   g  } x6 |  j    D]( } |  j |  } | j | j    q W| S)z*Returns the inputs of all the sub-commands)r   r   extend
get_inputs)rW   inputsr   r   rX   rX   rY   r   }  s
    zinstall.get_inputsc             C   s   |  j  j   p |  j  j   S)zSReturns true if the current distribution has any Python
        modules to install.)r{   has_pure_moduleshas_ext_modules)rW   rX   rX   rY   has_lib  s    zinstall.has_libc             C   s   |  j  j   S)zLReturns true if the current distribution has any headers to
        install.)r{   has_headers)rW   rX   rX   rY   r     s    zinstall.has_headersc             C   s   |  j  j   S)zMReturns true if the current distribution has any scripts to.
        install.)r{   has_scripts)rW   rX   rX   rY   r     s    zinstall.has_scriptsc             C   s   |  j  j   S)zJReturns true if the current distribution has any data to.
        install.)r{   has_data_files)rW   rX   rX   rY   has_data  s    zinstall.has_datarJ   rI   rK   rL   install_egg_infoc             C   s   d S)NTrX   )rW   rX   rX   rY   <lambda>  s    zinstall.<lambda>)r   Nr   )r   Nr   )r    Nr!   )r"   Nr#   )r$   Nr%   )r&   Nr'   )r(   Nr)   )r*   Nr+   )r,   Nr-   )r.   Nr/   )zcompiler1   r2   )r3   Nr4   )r5   r6   r7   )zforcer9   r:   )r;   Nr<   )r=   Nr>   ) __name__
__module____qualname__descriptionr   boolean_optionsr   r   r   r   rZ   r   rt   ru   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sub_commandsrX   rX   rX   rY   r   W   s                 	N(	",				r   )zpurelibzplatlibzheaderszscriptszdata)__doc__rw   rq   	distutilsr   distutils.corer   distutils.debugr   distutils.sysconfigr   Zdistutils.errorsr   distutils.file_utilr   distutils.utilr   r	   r
   r   r   siter   r   r   WINDOWS_SCHEMEr   r   r   rX   rX   rX   rY   <module>   st   			