
    
_d                         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Z ej                   d
      Z	 eZ G d de      Zy)zRdistutils.command.build_scripts

Implements the Distutils 'build_scripts' command.    N)ST_MODE)	sysconfig   )Command)newer)convert_path)logz^#!.*python[0-9.]*([ 	].*)?$c                   ^    e Zd ZdZg dZdgZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zed        Zy)build_scriptsz("build" scripts (copy and fixup #! line)))z
build-dir=dzdirectory to "build" (copy) to)forcefz1forcibly build everything (ignore file timestamps)zexecutable=ez*specify final destination interpreter pathr   c                 <    d | _         d | _        d | _        d | _        y N)	build_dirscriptsr   
executableselfs    M/usr/lib/python3/dist-packages/setuptools/_distutils/command/build_scripts.pyinitialize_optionsz build_scripts.initialize_options#   s    
    c                 b    | j                  dddd       | j                  j                  | _        y )Nbuild)r   r   )r   r   )r   r   )set_undefined_optionsdistributionr   r   s    r   finalize_optionszbuild_scripts.finalize_options)   s1    ""*(		
 ((00r   c                     | j                   S r   )r   r   s    r   get_source_fileszbuild_scripts.get_source_files2   s    ||r   c                 >    | j                   sy | j                          y r   )r   copy_scriptsr   s    r   runzbuild_scripts.run5   s    ||r   c                     | j                  | j                         g }g }| j                  D ]  }| j                  |||        | j	                  |       ||fS )a2  
        Copy each script listed in ``self.scripts``.

        If a script is marked as a Python script (first line matches
        'shebang_pattern', i.e. starts with ``#!`` and contains
        "python"), then adjust in the copy the first line to refer to
        the current Python interpreter.
        )mkpathr   r   _copy_script_change_modes)r   outfilesupdated_filesscripts       r   r"   zbuild_scripts.copy_scripts:   s^     	DNN#ll 	?Ffh>	? 	8$&&r   c                 *   d }t        |      }t        j                  j                  | j                  t        j                  j                  |            }|j                  |       | j                  s#t        ||      st        j                  d|       y 	 t        j                  |      }|j                         }|s| j                  d|z         y t        j!                  |      }|j                  |       |rJt        j&                  d|| j                         | j$                  st(        j*                  s| j,                  }n^t        j                  j                  t)        j.                  d      dt)        j.                  d      t)        j.                  d            }|j1                  d      xs d	}	d
|z   |	z   dz   }
| j3                  |
|j4                         t        |d|j4                        5 }|j7                  |
       |j9                  |j;                                d d d        |r|j=                          y y |r|j=                          | j?                  ||       y # t"        $ r | j$                  s d }Y w xY w# 1 sw Y   axY w)Nznot copying %s (up-to-date)z%s is an empty file (skipping)zcopying and adjusting %s -> %sBINDIRpythonVERSIONEXE    z#!
w)encoding) r   ospathjoinr   basenameappendr   r   r	   debugtokenizeopenreadlinewarnshebang_patternmatchOSErrordry_runinfor   python_buildr   get_config_vargroup_validate_shebangr4   write
writelines	readlinesclose	copy_file)r   r*   r(   r)   shebang_matchoutfiler   
first_liner   post_interpshebangoutfs               r   r&   zbuild_scripts._copy_scriptM   s   f%'',,t~~rww/?/?/GH zz%"8II3V<	>f%A J		:VCD+11*=MW%HH5vt~~N<< --!%J!#!00: &44Y?%44U;"J ,11!4:+k9D@&&w

;'3< 3JJw'OOAKKM23 	  	NN67+M  	<<A	<3 3s   I* 81J	*JJ	Jc                 \    t         j                  dk7  ry |D ]  }| j                  |        y )Nposix)r5   name_change_mode)r   r(   files      r   r'   zbuild_scripts._change_modes   s.    77g 	$Dd#	$r   c                     | j                   rt        j                  d|       y t        j                  |      t
           dz  }|dz  dz  }||k7  r/t        j                  d|||       t        j                  ||       y y )Nzchanging mode of %si  im  z!changing mode of %s from %o to %o)rB   r	   rC   r5   statr   chmod)r   rW   oldmodenewmodes       r   rV   zbuild_scripts._change_mode   sn    <<HH*D1''$-(61U?f,gHH8$QHHT7# r   c                     	 | j                  d       	 | j                  |       y # t        $ r t        dj                  |             w xY w# t        $ r t        dj                  | |            w xY w)Nzutf-8z,The shebang ({!r}) is not encodable to utf-8z?The shebang ({!r}) is not encodable to the script encoding ({}))encodeUnicodeEncodeError
ValueErrorformat)rQ   r4   s     r   rG   zbuild_scripts._validate_shebang   s~    	NN7#	NN8$ " 	AHHQ 	 " 	..4fWh.G 	s   & A $A
%A2N)__name__
__module____qualname__descriptionuser_optionsboolean_optionsr   r   r    r#   r"   r&   r'   rV   staticmethodrG    r   r   r   r      sT    >KL iO1
'&4,l$	$  r   r   )__doc__r5   rerY   r   	distutilsr   corer   dep_utilr   utilr   distutils._logr	   r;   compiler?   first_line_rer   ri   r   r   <module>rs      sR   5 
 	       "**<=
  TG Tr   