3 \X�@s�dZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z m Z ddlmZddlZejd �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@sHeZdZdZdddgZdgZd d �Zd d�Zdd�Zdd�Z dd�Z dS)� build_scriptsz("build" scripts (copy and fixup #! line)� build-dir=�d�directory to "build" (copy) to�force�f�1forcibly build everything (ignore file timestamps� executable=�e�*specify final destination interpreter pathcCs"d|_d|_d|_d|_d|_dS)N)� build_dir�scriptsr � executable�outfiles)�self�r�7/usr/lib64/python3.6/distutils/command/build_scripts.py�initialize_optionss z build_scripts.initialize_optionscCs|jdddd�|jj|_dS) NZbuildr rr r)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|j�dS)N)r� copy_scripts)rrrr�run/szbuild_scripts.runc"Cs�|j|j�g}g}�x,|jD�] }d}t|�}tjj|jtjj|��}|j|�|j rtt ||� rtt j d|�qyt |d�}Wn tk r�|js��d}YnXXtj|j�\}}|jd�|j�} | s�|jd|�qtj| �} | r�d}| jd�p�d } |�rt jd ||j�|j|�|j�s tj�s2|j} n(tjjtjd �d tjd �tjd�f�} tj| �} d| | d} y| jd�Wn$tk �r�t dj!| ���YnXy| j|�Wn&tk �r�t dj!| |���YnXt |d��}|j"| �|j#|j$��WdQRX|�r@|j%�q|�r*|j%�|j|�|j&||�qWtj'dk�r�xh|D]`}|j�rpt jd|�nDtj(|�t)d@}|dBd@}||k�rVt jd|||�tj*||��qVW||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 -> %s�BINDIRz python%s%s�VERSION�EXEs#!� 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_buildr�get_config_var�fsencode�decode�UnicodeDecodeError� ValueError�format�write� writelines� readlines�closeZ copy_file�name�statr�chmod)rr� updated_filesZscriptZadjustZoutfiler�encoding�linesZ first_liner7Z post_interprZshebangZoutf�fileZoldmodeZnewmoderrrr5s�                  zbuild_scripts.copy_scriptsN)r r r )r rr)rrr) �__name__� __module__� __qualname__Z descriptionZ user_optionsZboolean_optionsrrrrrrrrrr sr c@seZdZdd�ZdS)�build_scripts_2to3cCs&tj|�\}}|js|j|�||fS)N)r rr0Zrun_2to3)rrrGrrrr�s zbuild_scripts_2to3.copy_scriptsN)rKrLrMrrrrrrN�srN)�__doc__r(�rerErZ distutilsrZdistutils.corerZdistutils.dep_utilrZdistutils.utilrrrr1�compiler6r rNrrrr�s