U
    Ïvagå  ã                   @   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                   @   sl   e Zd ZdZdddg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   ú_/var/www/html/myvenv/lib/python3.8/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_files2   s    zbuild_scripts.get_source_filesc                 C   s   | j s
d S |  ¡  d S r   )r   Úcopy_scriptsr   r   r   r   Úrun5   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sNt||ƒsNt	 
d|¡ d S zt |¡}W n  tk
r|   | jst‚ d }Y n*X | ¡ }|sœ|  d| ¡ d S t |¡}| |¡ |�rvt	 d|| j¡ | j�sftjsÜ| j}n(tj t d¡dt d¡t d¡f ¡}| d¡�pd	}	d
| |	 d }
|  |
|j¡ t|d|jd��}| |
¡ | | ¡ ¡ W 5 Q R X |�r�| ¡  n|�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ÚshebangZoutfr   r   r   r   M   sV    



þÿþ

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rXt d|||¡ t ||¡ d S )Nzchanging mode of %siÿ  im  z!changing mode of %s from %o to %o)r5   r   r:   r,   Ústatr   Úchmod)r   rJ   ZoldmodeZnewmoder   r   r   rI   Š   s    zbuild_scripts._change_modec                 C   sj   z|   d¡ W n" tk
r0   td | ¡ƒ‚Y nX z|   |¡ W n$ tk
rd   td | |¡ƒ‚Y nX d S )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    rI   Ústaticmethodr>   r   r   r   r   r	      s    ý	6r	   )Ú__doc__r,   ÚrerK   r   Ú	distutilsr   Úcorer   Ú	_modifiedr   Úutilr   Zdistutils._logr   r2   Úcompiler8   Zfirst_line_rer	   r   r   r   r   Ú<module>   s   
