
][\lo                 @   sA  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 i d d 6d d 6d d 6d d 6d d 6Z i i d d 6d d 6d d 6d d 6d d 6d 6i d d 6d d 6d d 6d  d 6d! d 6d" 6i d# d 6d$ d 6d% d 6d d 6d d 6d& 6i d' d 6d' d 6d( d 6d d 6d d 6d) 6e d* 6Z e r!i d+ d 6d+ d 6d, d 6d- d 6d. d 6e d/ <i d+ d 6d+ d 6d0 d 6d1 d 6d. d 6e d2 <n  d5 Z Gd3 d4   d4 e  Z d S)6zFdistutils.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_SITETz$base/Lib/site-packagespurelibplatlibz$base/Include/$dist_nameheadersz$base/Scriptsscriptsz$basedataz/$base/lib/python$py_version_short/site-packagesz3$platbase/lib/python$py_version_short/site-packagesz9$base/include/python$py_version_short$abiflags/$dist_namez	$base/binunix_prefixz5$base/local/lib/python$py_version_short/dist-packagesz9$platbase/local/lib/python$py_version_short/dist-packagesz6$base/local/include/python$py_version_short/$dist_namez$base/local/binz$base/local
unix_localz$base/lib/python3/dist-packagesz#$platbase/lib/python3/dist-packagesz0$base/include/python$py_version_short/$dist_name
deb_systemz$base/lib/pythonz$base/include/python/$dist_name	unix_homentz	$usersitez4$userbase/Python$py_version_nodot/Include/$dist_namez$userbase/Scriptsz	$userbaseZnt_userz=$userbase/include/python$py_version_short$abiflags/$dist_namez$userbase/bin	unix_userc               @   s  e  Z d  Z d Z da db dc dd d d d d f de df dg d d d d f dh di dj dk dl dm dn do dp dq g Z d d% d( g Z e r e j d. d d/ e f  e j d.  n  i d d  6Z	 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 dY   Z dZ e f d[ e f d\ e f d] e f d^ d_ d`   f g Z d S)r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install-layout=7installation layout to choose (known values: deb, unix)userz!install in user site-package '%s'c             C   s   d |  _  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 |  _ d |  _ d S)zInitializes options.Nr      )prefixexec_prefixhomer@   prefix_optioninstall_baseinstall_platbaserootinstall_purelibinstall_platlibinstall_headersinstall_libinstall_scriptsinstall_datar   install_userbaser   install_usersiteinstall_layout	multiarchr/   optimize
extra_pathinstall_path_filer7   
skip_buildwarn_dir
build_base	build_librecord)self r\   //usr/lib/python3.4/distutils/command/install.pyinitialize_options   s8    																				
							zinstall.initialize_optionsc             C   s  |  j  s |  j s |  j r@ |  j s- |  j r@ t d d   n  |  j rj |  j  s[ |  j rj t d   n  |  j r |  j  s |  j s |  j s |  j s |  j r t d   n  t j d k r |  j r |  j	 d  d |  _ q n  |  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
 rrd } Yn Xi |  j j   d 6|  j j   d 6|  j j   d 6| d 6| d
 d  d 6| d
 | d d 6| d 6| d 6| d 6| d 6| d 6|  _ t r#|  j |  j d <|  j |  j d <n  |  j   |  j
 d  |  j |  j d <|  j |  j d <t rd
 d l m } t d  | |  j  n  |  j   |  j
 d   |  j r|  j    n  |  j! d k r|  j j" r|  j# |  _! q|  j$ |  _! n  |  j% d! d" d# d$ d% d& d d  |  j&   |  j! |  _' t j( j) |  j! |  j*  |  _! |  j+ d k	 rw|  j, d' d! d" d# d$ d% d&  n  |  j
 d(  |  j- d) d, d-  d S).z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   rB   rC    Z	dist_nameZdist_versionZdist_fullname
py_version   Zpy_version_short   Zpy_version_nodotZ
sys_prefixZsys_exec_prefixabiflagsZuserbaseZusersitezpost-expand_basedirs()baseZplatbase)pprintzconfig vars:zpost-expand_dirs()Zlibr   r   r   r   r   Zlibbasezafter prepending rootbuildrX   rY   )
build_baserh   )	build_libri   ).rB   rC   rD   rF   rG   r   r@   osnamewarn	dump_dirsfinalize_unixfinalize_othersysversionsplitr   rd   AttributeErrordistributionZget_nameZget_versionZget_fullnameconfig_varsHAS_USER_SITErO   rP   expand_basedirsr   rf   printexpand_dirscreate_home_pathrL   Zext_modulesrJ   rI   convert_pathshandle_extra_pathinstall_libbasepathjoin
extra_dirsrH   change_rootsZset_undefined_options)r[   ra   rB   rC   rd   rf   r\   r\   r]   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 rh | d d	  } n  | |  j k r |  j | } | j |  } t |  |  } n | j |  } t |  |  } t j d | | f  q5 Wd S)
zDumps the list of user options.Nr   )longopt_xlate:rA   =z  %s: %sr   )	r   Zdistutils.fancy_getoptr   r   debuguser_optionsnegative_opt	translategetattr)r[   msgr   ZoptZopt_namevalr\   r\   r]   rm     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   n  d S|  j	 r |  j
 d k r t d   n  |  j
 |  _  |  _ |  j d  n|  j d k	 r|  j |  _  |  _ |  j d  n|  j |  _ |  j d k rs|  j d k	 r@t d   n  t j j t j  |  _ t j j t j  |  _ n |  j d k r|  j |  _ n  |  j |  _  |  j |  _ |  j r)|  j j   d k rd d l } | j d	  |  _ |  j d
  q|  j j   d k r|  j d  qt d   n |  j rMt j j |  j  d k st j t j k sd t j k sd t j k sd t j k r|  j d  nK t j j |  j  d k rd |  _ |  _ d |  _  |  _ n  |  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 prefixdebr   Z	MULTIARCHr   unixr   z"unknown value for --install-layoutz
/usr/localZPYTHONUSERBASEZVIRTUAL_ENVZreal_prefixz/usrr   )r   )r   )rF   rG   rL   rI   rJ   rK   rM   rN   r   r@   rO   r   select_schemerD   rB   rE   rC   rj   r~   normpathrp   rQ   lower	sysconfigZget_config_varrR   base_prefixenviron__dict__)r[   r   r\   r\   r]   rn     sd    			zinstall.finalize_unixc             C   s   |  j  rQ |  j d k r' t d   n  |  j |  _ |  _ |  j t j d  n |  j d k	 r |  j |  _ |  _ |  j d  ny |  j	 d k r t j
 j t j	  |  _	 n  |  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 specifiedZ_userr   z)I don't know how to install stuff on '%s')r@   rO   r   rF   rG   r   rj   rk   rD   rB   r~   r   rp   KeyError)r[   r\   r\   r]   ro     s"    	zinstall.finalize_otherc             C   sU   t  | } xD t D]< } d | } t |  |  d k r t |  | | |  q q Wd S)z=Sets the install directories by applying the install schemes.install_N)INSTALL_SCHEMESSCHEME_KEYSr   setattr)r[   rk   ZschemekeyZattrnamer\   r\   r]   r     s
    

zinstall.select_schemec             C   s   x | D]y } t  |  |  } | d  k	 r t j d k sF t j d k r[ t j j |  } n  t | |  j  } t |  | |  q q Wd  S)Nr_   r   )r   rj   rk   r~   
expanduserr	   ru   r   )r[   Zattrsattrr   r\   r\   r]   _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.rF   rG   rH   N)r   )r[   r\   r\   r]   rw     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.rI   rJ   rL   rK   rM   rN   N)r   )r[   r\   r\   r]   ry     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   )r[   namesrk   r   r\   r\   r]   r{     s    
zinstall.convert_pathsc             C   s   |  j  d k r! |  j j  |  _  n  |  j  d k	 r t |  j  t  rZ |  j  j d  |  _  n  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`.N,rA   r   rc   zY'extra_path' option must be a list, tuple, or comma-separated string with 1 or 2 elementsr`   )
rT   rt   
isinstancestrrr   lenr   r   	path_filer   )r[   r   r   r\   r\   r]   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
   rH   r   )r[   r   rk   r   r\   r\   r]   r   1  s    
zinstall.change_rootsc             C   s   |  j  s d St t j j d   } xc |  j j   D]R \ } } | j |  r5 t j j |  r5 |  j	 d |  t j
 | d  q5 q5 Wd S)zCreate directories under ~.N~zos.makedirs('%s', 0o700)i  )r@   r   rj   r~   r   ru   items
startswithisdirZdebug_printmakedirs)r[   rD   rk   r~   r\   r\   r]   rz   7  s    	"zinstall.create_home_pathc             C   s  |  j  sU |  j d  |  j j d  j } |  j rU | t   k rU t d   qU n  x! |  j   D] } |  j |  qb W|  j	 r |  j
   n  |  j r|  j   } |  j r t |  j  } x5 t t |   D] } | | | d  | | <q Wn  |  j t |  j | f d |  j  n  t t j j t j  } t t j j |  } t j j t j j |  j   } |  j r|  j	 o|  j r| | k rt j d |  j  n  d S)zRuns the command.rg   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)rV   Zrun_commandrt   Zget_command_objZ	plat_namerW   r   r   get_sub_commandsr   create_path_filerZ   get_outputsrH   r   rangeexecuter   maprj   r~   r   rp   normcaserL   rU   r   r   )r[   Z
build_platcmd_nameoutputsZroot_lenZcounterZsys_pathrL   r\   r\   r]   runC  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)
rj   r~   r   r}   r   rU   r   r   r   rl   )r[   filenamer\   r\   r]   r   o  s    		zinstall.create_path_filec             C   s   g  } xV |  j    D]H } |  j |  } x0 | j   D]" } | | k r5 | j |  q5 q5 Wq W|  j r |  j r | j t j j |  j	 |  j d   n  | S)z.Assembles the outputs of all the sub-commands.z.pth)
r   get_finalized_commandr   appendr   rU   rj   r~   r   r}   )r[   r   r   cmdr   r\   r\   r]   r   }  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)r[   Zinputsr   r   r\   r\   r]   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.)rt   Zhas_pure_modulesZhas_ext_modules)r[   r\   r\   r]   has_lib  s    zinstall.has_libc             C   s   |  j  j   S)zLReturns true if the current distribution has any headers to
        install.)rt   has_headers)r[   r\   r\   r]   r     s    zinstall.has_headersc             C   s   |  j  j   S)zMReturns true if the current distribution has any scripts to.
        install.)rt   has_scripts)r[   r\   r\   r]   r     s    zinstall.has_scriptsc             C   s   |  j  j   S)zJReturns true if the current distribution has any data to.
        install.)rt   Zhas_data_files)r[   r\   r\   r]   has_data  s    zinstall.has_datarL   rK   rM   rN   Zinstall_egg_infoc             C   s   d S)NTr\   )r[   r\   r\   r]   <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compiler0   r1   )r2   Nr3   )r4   r5   r6   )zforcer8   r9   )r:   Nr;   )r<   Nr=   )r>   Nr?   ) __name__
__module____qualname__Zdescriptionr   Zboolean_optionsrv   r   r   r   r^   r   rm   rn   ro   r   r   rw   ry   r{   r|   r   rz   r   r   r   r   r   r   r   r   Zsub_commandsr\   r\   r\   r]   r   W   s                  	R>		,				r   )zpurelibzplatlibzheaderszscriptszdata)__doc__rp   rj   Z	distutilsr   Zdistutils.corer   Zdistutils.debugr   Zdistutils.sysconfigr   Zdistutils.errorsr   Zdistutils.file_utilr   Zdistutils.utilr   r	   r
   r   r   Zsiter   r   rv   ZWINDOWS_SCHEMEr   r   r   r\   r\   r\   r]   <module>   sz   

