o
    Ë>eå  ã                   @   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Ze d
¡Z	 eZG dd„ deƒZdS )zRdistutils.command.build_scripts

Implements the Distutils 'build_scripts' command.é    N)ÚST_MODE)Ú	sysconfigé   )ÚCommand)Únewer)Úconvert_path)Úlogz^#!.*python[0-9.]*([ 	].*)?$c                   @   sj   e Zd ZdZg d¢ZdgZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zedd„ ƒZdS )Ú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                 C   s   d | _ d | _d | _d | _d S ©N)Ú	build_dirÚscriptsr   Ú
executable©Úself© r   úl/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/setuptools/_distutils/command/build_scripts.pyÚinitialize_options$   s   
z build_scripts.initialize_optionsc                 C   s   |   dddd¡ | jj| _d S )NÚbuild)r	   r   )r   r   )r   r   )Úset_undefined_optionsÚdistributionr   r   r   r   r   Úfinalize_options*   s   üzbuild_scripts.finalize_optionsc                 C   s   | j S r   )r   r   r   r   r   Úget_source_files3   s   zbuild_scripts.get_source_filesc                 C   s   | j sd S |  ¡  d S r   )r   Úcopy_scriptsr   r   r   r   Úrun6   s   zbuild_scripts.runc                 C   s@   |   | j¡ g }g }| jD ]	}|  |||¡ q|  |¡ ||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Úscriptr   r   r   r   ;   s   	

zbuild_scripts.copy_scriptsc                 C   s¢  d }t |ƒ}tj | jtj |¡¡}| |¡ | js't||ƒs't	 
d|¡ d S zt |¡}W n ty=   | js9‚ d }Y nw | ¡ }|sM|  d| ¡ d S t |¡}| |¡ |rÃt	 d|| j¡ | js¹tjsk| j}ntj t d¡dt d¡t d¡f ¡}| d¡p…d	}	d
| |	 d }
|  |
|j¡ t|d|jd}| |
¡ | | ¡ ¡ W d   ƒ n1 s´w   Y  |rÁ| ¡  d S d S |rÉ| ¡  |  ||¡ d S )Nznot copying %s (up-to-date)z%s is an empty file (skipping)zcopying and adjusting %s -> %sÚBINDIRz
python%s%sÚVERSIONÚEXEé   Ú z#!Ú
Úw)Úencoding) r   ÚosÚpathÚjoinr   ÚbasenameÚappendr   r   r   ÚdebugÚtokenizeÚopenÚOSErrorÚdry_runÚreadlineÚwarnÚshebang_patternÚmatchÚinfor   Úpython_buildr   Úget_config_varÚgroupÚ_validate_shebangr+   ÚwriteÚ
writelinesÚ	readlinesÚcloseÚ	copy_file)r   r#   r!   r"   Zshebang_matchÚoutfiler   Ú
first_liner   Zpost_interpÚshebangÚoutfr   r   r   r   N   s\   
ý

þÿþ
þÿzbuild_scripts._copy_scriptc                 C   s&   t jdkrd S |D ]}|  |¡ q	d S )NÚposix)r,   ÚnameÚ_change_mode)r   r!   Úfiler   r   r   r    „   s
   
ÿzbuild_scripts._change_modesc                 C   s`   | j rt d|¡ d S t |¡t d@ }|dB d@ }||kr.t d|||¡ t ||¡ d S d S )Nzchanging mode of %siÿ  im  z!changing mode of %s from %o to %o)r5   r   r:   r,   Ústatr   Úchmod)r   rK   ZoldmodeZnewmoder   r   r   rJ   ‹   s   þzbuild_scripts._change_modec                 C   s\   z|   d¡ W n ty   td | ¡ƒ‚w z|   |¡ W d S  ty-   td | |¡ƒ‚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)rF   r+   r   r   r   r>   –   s   ÿÿþÿzbuild_scripts._validate_shebangN)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsr   r   r   r   r   r   r    rJ   Ústaticmethodr>   r   r   r   r   r	      s    	6r	   )Ú__doc__r,   ÚrerL   r   Ú	distutilsr   Úcorer   Údep_utilr   Úutilr   Zdistutils._logr   r2   Úcompiler8   Zfirst_line_rer	   r   r   r   r   Ú<module>   s    
