U
    aÊ¹jž  ã                   @   s†   d Z ddl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 e d
¡ZeZG dd„ deƒZdS )zRdistutils.command.build_scripts

Implements the Distutils 'build_scripts' command.é    N)Ú	sysconfig)Úlog)ÚST_MODEé   )Únewer)ÚCommand)Úconvert_pathz^#!.*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   új/var/www/html/bwave/python/venv/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_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sNt||ƒsNt	 
d|¡ d S zt |¡}W n  tk
r|   | jst‚ d }Y n,X | ¡ }|sž|  |› d�¡ d S t |¡}| |¡ |�rxt	 d|| j¡ | j�shtjsÞ| j}n(tj t d¡d t d¡t d¡¡¡}| 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 is an empty file (skipping)zcopying and adjusting %s -> %sÚBINDIRz
python{}{}Ú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ÚformatÚgroupÚ_validate_shebangr+   ÚwriteÚ
writelinesÚ	readlinesÚcloseÚ	copy_file)r   r#   r!   r"   Zshebang_matchÚoutfiler   Ú
first_liner   Úpost_interpÚshebangÚoutfr   r   r   r   N   sT    



þþ

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   rM   ZoldmodeZnewmoder   r   r   rL   Š   s    zbuild_scripts._change_modec              	   C   sr   z|   d¡ W n$ tk
r2   td| ›d�ƒ‚Y nX z|   |¡ W n* tk
rl   td| ›d|› d�ƒ‚Y nX d S )Nzutf-8zThe shebang (z) is not encodable to utf-8z+) is not encodable to the script encoding (ú))ÚencodeÚUnicodeEncodeErrorÚ
ValueError)rH   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    rL   Ústaticmethodr?   r   r   r   r   r	      s    ý	5r	   )Ú__doc__r,   Úrer2   Ú	distutilsr   Zdistutils._logr   rN   r   Z	_modifiedr   Úcorer   Úutilr   Úcompiler8   Zfirst_line_rer	   r   r   r   r   Ú<module>   s   
