B � fX�@s�dZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z m Z ddlmZddlZe�d �ZGd d �d e�ZGd d �d ee �ZdS)zRdistutils.command.build_scripts Implements the Distutils 'build_scripts' command.�N)�ST_MODE)� sysconfig)�Command)�newer)� convert_path� Mixin2to3)�logs^#!.*python[0-9.]*([ ].*)?$c@sHeZdZdZdddgZdgZdd�Zdd �Zd d �Zd d �Z dd�Z dS)� build_scriptsz("build" scripts (copy and fixup #! line))z build-dir=�dzdirectory to "build" (copy) to)�force�fz1forcibly build everything (ignore file timestamps)z executable=�ez*specify final destination interpreter pathr cCs"d|_d|_d|_d|_d|_dS)N)� build_dir�scriptsr � executable�outfiles)�self�r�D/opt/alt/python37/lib64/python3.7/distutils/command/build_scripts.py�initialize_optionss z build_scripts.initialize_optionscCs|�dddd�|jj|_dS)NZbuild)r r)r r )rr)Zset_undefined_optionsZ distributionr)rrrr�finalize_options%s zbuild_scripts.finalize_optionscCs|jS)N)r)rrrr�get_source_files,szbuild_scripts.get_source_filescCs|js dS|��dS)N)r� copy_scripts)rrrr�run/szbuild_scripts.runc Cs�|�|j�g}g}�x(|jD�]}d}t|�}tj�|jtj�|��}|�|�|j spt ||�spt � d|�qyt |d�}Wn tk r�|js��d}YnXXt�|j�\}}|�d�|��} | s�|�d|�qt�| �} | r�d}| �d�p�d } |�rt �d ||j�|�|�|j�stj�s.|j} n(tj�t�d �d t�d �t�d�f�} t�| �} d| | d} y| �d�Wn$tk �r�t d�!| ���YnXy| �|�Wn&tk �r�t d�!| |���YnXt |d��}|�"| �|�#|�$��WdQRX|�r<|�%�q|�r&|�%�|�|�|�&||�qWtj'dk�r�xh|D]`}|j�rlt �d|�nDt�(|�t)d@}|dBd@}||k�rRt �d|||�t�*||��qRW||fS)a"Copy each script listed in 'self.scripts'; if it's marked as a Python script in the Unix way (first line matches 'first_line_re', ie. starts with "\#!" and contains "python"), then adjust the first line to refer to the current Python interpreter as we copy. Fznot copying %s (up-to-date)�rbNrz%s is an empty file (skipping)T��zcopying and adjusting %s -> %sZBINDIRz python%s%sZVERSIONZEXEs#!� zutf-8z.The shebang ({!r}) is not decodable from utf-8zAThe shebang ({!r}) is not decodable from the script encoding ({})�wb�posixzchanging mode of %si�imz!changing mode of %s from %o to %o)+Zmkpathrrr�os�path�join�basename�appendr rr�debug�open�OSError�dry_run�tokenize�detect_encoding�readline�seek�warn� first_line_re�match�group�inforZ python_buildrZget_config_var�fsencode�decode�UnicodeDecodeError� ValueError�format�write� writelines� readlines�closeZ copy_file�name�statr�chmod)rr� updated_filesZscriptZadjustZoutfiler �encoding�linesZ first_liner/Z post_interprZshebangZoutf�fileZoldmodeZnewmoderrrr5s�                  zbuild_scripts.copy_scriptsN) �__name__� __module__� __qualname__Z descriptionZ user_optionsZboolean_optionsrrrrrrrrrr sr c@seZdZdd�ZdS)�build_scripts_2to3cCs&t�|�\}}|js|�|�||fS)N)r rr(Zrun_2to3)rrr>rrrr�s zbuild_scripts_2to3.copy_scriptsN)rBrCrDrrrrrrE�srE)�__doc__r �rer<rZ distutilsrZdistutils.corerZdistutils.dep_utilrZdistutils.utilrrrr)�compiler.r rErrrr�s