add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
U

�AT^�U�@s�ddlZddlZddlZddlZddlZddlmZmZmZm	Z	m
Z
ddlmZm
Z
ddlmZddlmZddlmZdd�Zd	d
�Zddd
dd�Zdd�Zdd�Zddd�Zddddd�Zedg�ZGdd�de�ZdS)�N)�DistutilsExecError�DistutilsPlatformError�CompileError�LibError�	LinkError)�	CCompiler�gen_lib_options)�log)�get_platform)�countcCsztjtjdtjtjBd�}Wn tk
r>t�d�YdSXd}d}|��t�D]�}zt�	||�\}}}Wntk
r�Yq�YnX|rT|tj
krTtj�
|�rTztt|��}Wnttfk
r�YqTYnX|dkrT||krT||}}qTW5QRX||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)�accesszVisual C++ is not registered�NNr�)�winregZ	OpenKeyEx�HKEY_LOCAL_MACHINEZKEY_READZKEY_WOW64_32KEY�OSErrorr	�debugrZ	EnumValueZREG_SZ�os�path�isdir�int�float�
ValueError�	TypeError)�key�best_version�best_dir�i�vZvc_dirZvt�version�r �//usr/lib64/python3.8/distutils/_msvccompiler.py�_find_vc2015s2
�



r"c
Cs�ddl}tj�d�ptj�d�}|s(dSz8tjtj�|ddd�dd	d
ddd
ddg	ddd���}Wntj	t
tfk
r~YdSXtj�|ddd�}tj�|�r�d|fSdS)NrzProgramFiles(x86)ZProgramFilesr
zMicrosoft Visual StudioZ	Installerzvswhere.exez-latestz-prereleasez	-requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z	-propertyZinstallationPathz	-products�*�mbcs�strict)�encoding�errorsZVCZ	AuxiliaryZBuild�)
�jsonr�environ�get�
subprocess�check_outputr�join�strip�CalledProcessErrorr�UnicodeDecodeErrorr)r)�rootrr r r!�_find_vc2017:s2
��r3�x86�x64ZarmZarm64)r4�	x86_amd64�x86_arm�	x86_arm64c	Cst�\}}d}|tkr t|}nd|kr,dnd}|r�tj�|ddddd|dd	�	}zd
dl}|j|dd�d
}Wntttfk
r�d}YnX|s�t	�\}}|r�tj�|d|dd	�}|s�t
�d�dStj�|d�}tj�|�s�t
�d|�dS|�rtj�|��st
�d|�d}||fS)NZamd64r5r4z..ZredistZMSVCz**zMicrosoft.VC14*.CRT�vcruntime140.dllrT)�	recursive�����zMicrosoft.VC140.CRTz$No suitable Visual C++ version foundr
z
vcvarsall.batz%s cannot be found)
r3�PLAT_SPEC_TO_RUNTIMErrr.�glob�ImportErrorr�LookupErrorr"r	r�isfile)	�	plat_spec�_r�	vcruntimeZvcruntime_platZvcredistr=r�	vcvarsallr r r!�_find_vcvarsallcsD

�

�
rEc
Cs�t�d�rdd�tj��D�St|�\}}|s6td��z&tjd�||�tj	d�j
ddd	�}Wn@tjk
r�}z t�
|j�td
�|j���W5d}~XYnXdd�dd
�|��D�D�}|r�||d<|S)NZDISTUTILS_USE_SDKcSsi|]\}}|��|�qSr ��lower)�.0r�valuer r r!�
<dictcomp>�s�z_get_vc_env.<locals>.<dictcomp>zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)�stderrzutf-16le�replace)r'zError executing {}cSs$i|]\}}}|r|r|��|�qSr rF)rHrrBrIr r r!rJ�s
�css|]}|�d�VqdS)�=N)�	partition)rH�liner r r!�	<genexpr>�sz_get_vc_env.<locals>.<genexpr>�py_vcruntime_redist)r�getenvr*�itemsrErr,r-�format�STDOUT�decoder0r	�error�output�cmd�
splitlines)rArDrC�out�exc�envr r r!�_get_vc_env�s4
�
��
��r^cCsN|st�d��tj�}|D].}tj�tj�|�|�}tj�|�r|Sq|S�Nr)rrR�split�pathseprr.�abspathr@)Zexe�paths�p�fnr r r!�	_find_exe�s	
rfr6r7r8)�win32z	win-amd64z	win-arm32z	win-arm64r9c
s�eZdZdZiZdgZdddgZdgZdgZeeeeZ	dZ
d	Zd
ZdZ
dZZd
Zd)dd�Zd*dd�Zd+dd�Zd,dd�Zd-dd�Zd.dd�Zdd�Z�fdd �Zd!d"�Zd#d$�Zd%d&�Zd/d'd(�Z�ZS)0�MSVCCompilerZmsvcz.cz.ccz.cppz.cxx�.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs t�||||�d|_d|_dS)NF)r�__init__�	plat_name�initialized)�self�verbose�dry_run�forcer r r!rj�szMSVCCompiler.__init__NcCs2|dkrt�}|tkr(td�tt����t|}t|�}|sDtd��|�dd�|_|j�t	j
�}td|�|_td|�|_
td|�|_td|�|_td	|�|_td
|�|_|�dd�|_|�dd��t	j
�D]}|r�|�|�t	j��q�|�d
d��t	j
�D]}|r�|�|�t	j��q�d|_dddddg|_|j�|j�r>dnd�ddddddg|_dddg}|j�sr|�d�ddddg}|d#�|_|d$�|_|d%�|_|d&�|_|�|_ |�|_!t"j#df|jt"j#d!f|jt"j#d"f|jt"j$df|jt"j$d!f|jt"j$d"f|jt"j%df|j t"j%d!f|j t"j%d"f|j!i	|_&d"|_'dS)'Nz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.r�zcl.exezlink.exezlib.exezrc.exezmc.exezmt.exerQZinclude�libz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/MTz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCG)z/nodefaultlib:libucrt.libzucrt.libz/DEBUG:FULL�/MANIFEST:EMBED,ID=1�/DLL�/MANIFEST:EMBED,ID=2�/MANIFESTUAC:NOFT)rs)rs)rtrurv)rtrurv)(r
�PLAT_TO_VCVARSrrT�tupler^r+�_pathsr`rrarf�cc�linkerrr�rc�mc�mt�_vcruntime_redistZadd_include_dir�rstrip�sepZadd_library_dirZpreprocess_options�compile_options�append�compile_options_debug�extendZldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ
EXECUTABLEZ
SHARED_OBJECTZSHARED_LIBRARY�_ldflagsrl)rmrkrAZvc_envrc�dir�ldflagsZ
ldflags_debugr r r!�
initialize�s�����
�



�zMSVCCompiler.initializerqcsT�fdd��jD��fdd��j�jD����p4d����fdd�}tt||��S)Ncsi|]}|�j�qSr )�
obj_extension�rH�ext�rmr r!rJGsz1MSVCCompiler.object_filenames.<locals>.<dictcomp>csi|]}|�j�qSr )�
res_extensionr�r�r r!rJHsrqcs�tj�|�\}}�r"tj�|�}n2tj�|�\}}|�tjjtjjf�rT|dd�}ztj��|�|�WSt	k
r�t
d�|���YnXdS)N�zDon't know how to compile {})rr�splitext�basename�
splitdrive�
startswithr��altsepr.r?rrT)rd�baser�rB)�ext_map�
output_dir�	strip_dirr r!�
make_out_pathMsz4MSVCCompiler.object_filenames.<locals>.make_out_path)�src_extensions�_rc_extensions�_mc_extensions�list�map)rmZsource_filenamesr�r�r�r )r�r�rmr�r!�object_filenamesBs�zMSVCCompiler.object_filenamesc	Cs�|js|��|�||||||�}	|	\}}
}}}|p6g}
|
�d�|rT|
�|j�n|
�|j�d}|
D�]}z||\}}Wntk
r�YqhYnX|r�tj	�
|�}||jkr�d|}�nD||jkr�d|}d}�n*||j
k�r@|}d|}z|�|jg|||g�Wqhtk
�r:}zt|��W5d}~XYqhXqhn�||jk�r�tj	�|�}tj	�|�}z\|�|jd|d||g�tj	�tj	�|��\}}tj	�||d	�}|�|jd||g�Wqhtk
�r�}zt|��W5d}~XYqhXqhntd
�||���|jg|
|}|�r"|�d�|�|�|�d|�|�|�z|�|�Wqhtk
�r~}zt|��W5d}~XYqhXqh|
S)
Nz/cFz/Tcz/TpTz/foz-hz-rriz"Don't know how to compile {} to {}z/EHscz/Fo)rlr�Z_setup_compiler�r�r�r��KeyErrorrrrb�
_c_extensions�_cpp_extensionsr��spawnr|rrr��dirnamer}r�r�r.rTrz)rmZsourcesr�ZmacrosZinclude_dirsr�
extra_preargs�extra_postargsZdependsZcompile_info�objectsZpp_optsZbuildZcompile_optsZadd_cpp_opts�obj�srcr�Z	input_optZ
output_opt�msgZh_dirZrc_dirr�rBZrc_file�argsr r r!�compilecsx
�




�


zMSVCCompiler.compilec	
Cs�|js|��|�||�\}}|j||d�}|�||�r�|d|g}|rJz,t�d|jd�|��|�	|jg|�Wq�t
k
r�}zt|��W5d}~XYq�Xnt�d|�dS)N)r��/OUT:�Executing "%s" %s� �skipping %s (up-to-date))rlr��_fix_object_args�library_filename�
_need_linkr	rrrr.r�rr)	rmr�Zoutput_libnamer�r�target_lang�output_filenameZlib_argsr�r r r!�create_static_lib�s�zMSVCCompiler.create_static_libc
Cs�|js|��|�||�\}}|�|||�}|\}}}|rL|�dt|��t||||�}|dk	rptj�	||�}|�
||��r�|j||	f}dd�|p�gD�}||||d|g}tj�|d�}|dk	�rtj�
tj�|��\}}tj�	||�|��}|�d|�|
�r|
|dd�<|�r.|�|�tj�tj�|��}|�|�z6t�d|jd�	|��|�|jg|�|�|�Wn,tk
�r�}zt|��W5d}~XYnXnt�d	|�dS)
Nz5I don't know what to do with 'runtime_library_dirs': cSsg|]}d|�qS)z/EXPORT:r )rHZsymr r r!�
<listcomp>�sz%MSVCCompiler.link.<locals>.<listcomp>r�rz/IMPLIB:r�r�r�)rlr�r�Z
_fix_lib_args�warn�strrrrr.r�r�r�r�r�r�r�r�rbZmkpathr	rr{r��_copy_vcruntimerr)rmZtarget_descr�r�r�Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsrr�r�Z
build_tempr�Z
fixed_argsZlib_optsr�Zexport_optsZld_argsZdll_nameZdll_extZimplib_filer�r r r!�link�sb�
��
��

��

zMSVCCompiler.linkcCs\|j}|rtj�|�sdStj�|���tkr2dSt�d|�t	�
||�}t�|tj
�dS)NzCopying "%s")rrrr@r�rG�
_BUNDLED_DLLSr	r�shutil�copy�chmod�stat�S_IWRITE)rmr�rCr r r!r�szMSVCCompiler._copy_vcruntimec	s8t�d�}z|jtjd<t��|�W�S|tjd<XdSr_)rrRr*ry�superr�)rmrYZold_path��	__class__r r!r�)s

zMSVCCompiler.spawncCsd|S)Nz	/LIBPATH:r �rmr�r r r!�library_dir_option5szMSVCCompiler.library_dir_optioncCstd��dS)Nz:don't know how to set runtime library search path for MSVC)rr�r r r!�runtime_library_dir_option8s�z'MSVCCompiler.runtime_library_dir_optioncCs
|�|�S)N)r�)rmrrr r r!�library_option<szMSVCCompiler.library_optioncCs\|r|d|g}n|g}|D]:}|D]0}tj�||�|��}tj�|�r$|Sq$qdS)NZ_d)rrr.r�r@)rm�dirsrrrZ	try_namesr��nameZlibfiler r r!�find_library_file?szMSVCCompiler.find_library_file)rrr)N)rrq)NNNrNNN)NrN)
NNNNNrNNNN)r)�__name__�
__module__�__qualname__Z
compiler_typeZexecutablesr�r�r�r�r�r�r�Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ
exe_extensionrjr�r�r�r�r�r�r�r�r�r�r��
__classcell__r r r�r!rh�sf
��

T�
"�
]�
�
Frh)N)rr�r�r,rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ	distutilsr	Zdistutils.utilr
�	itertoolsrr"r3r<rEr^rfrw�	frozensetr�rhr r r r!�<module>s4#�' 
�