
    df                         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    d/home/api-vastappli/venv/lib/python3.12/site-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_files3   s    ||r   c                 >    | j                   sy | j                          y r   )r   copy_scriptsr   s    r   runzbuild_scripts.run6   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_shebangr3   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_scriptN   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)r4   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)rA   r   rB   r4   statr   chmod)r   rV   oldmodenewmodes       r   rU   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)rP   r3   s     r   rF   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&   rU   staticmethodrF    r   r   r
   r
      sT    >KL iO1
'&4,l$	$  r   r
   )__doc__r4   rerX   r   	distutilsr   distutils.corer   distutils.dep_utilr   distutils.utilr   r   r:   compiler>   first_line_rer
   rh   r   r   <module>rq      sR   5 
 	   " $ '  "**<=
  UG Ur   