Current File : //proc/self/root/kunden/lib/python3.9/site-packages/dnf-plugins/__pycache__/builddep.cpython-39.pyc
a

�&c�$�@s�ddlmZddlmZddlmZmZddlZddlZddlZddl	Zddl
ZddlZddlZ
ddlZddlZddlZddlZejjGdd�dejj��ZdS)�)�absolute_import)�unicode_literals)�_�loggerNcs�eZdZdZdZee�Zed�Z�fdd�Zdd�Z	dd	�Z
ed
d��Zdd
�Z
dd�Zdd�Zedd��Zdd�Zdd�Zdd�Zdd�Z�ZS)�BuildDepCommand)Zbuilddepz	build-depz3Install build dependencies for package or spec filez[PACKAGE|PACKAGE.spec]cs(tt|��|�tjj��|_g|_dS�N)	�superr�__init__�dnf�rpmZtransactionZinitReadOnlyTransaction�_rpm_ts�tempdirs)�self�cli��	__class__��8/usr/lib/python3.9/site-packages/dnf-plugins/builddep.pyr	/szBuildDepCommand.__init__cCs|jD]}t�|�qdSr)r
�shutil�rmtree)r�temp_dirrrr�__del__4s
zBuildDepCommand.__del__c
Cs�tjj�|�}|ddvr |jStj��}tjdd�}t	j�
|t	j�|��}|j�
|�t|d�}zPz|�|jjj||���Wn&ty�}z�WYd}~n
d}~00W|��n
|��0|S)z�
        In case pkgspec is a remote URL, download it to a temporary location
        and use the temporary file instead.
        r)�file�Z
dnf_builddep_)�prefixzwb+N)r
Zpycomp�urlparse�path�libdnfZrepoZ
Downloader�tempfileZmkdtemp�os�join�basenamer
�append�openZdownloadURL�baseZconfZ_config�fileno�RuntimeError�close)r�pkgspec�locationZ
downloaderrZ	temp_fileZtemp_fo�exrrr�_download_remote_file8s

z%BuildDepCommand._download_remote_filec	Cs�dd�}|jdddtd�d�|jdd	d
gd|td�d
�|jdddtd�d�|��}|jddtd�d�|jddtd�d�dS)NcSs:|r|�dd�ng}t|�dkr6td�|}t�|��|S)N��z&'%s' is not of the format 'MACRO EXPR')�split�lenr�argparse�ArgumentTypeError)�argZarglist�msgrrr�	macro_defRs

z0BuildDepCommand.set_argparser.<locals>.macro_def�packages�+�packagez"packages with builddeps to install)�nargs�metavar�helpz-Dz--definer"z'MACRO EXPR'z$define a macro for spec file parsing)�action�defaultr9�typer:z--skip-unavailable�
store_trueFz5skip build dependencies not available in repositories)r;r<r:z--specz)treat commandline arguments as spec files)r;r:z--srpmz)treat commandline arguments as source rpm)�add_argumentr�add_mutually_exclusive_group)�parserr4Zptyperrr�
set_argparserPs$
��
���zBuildDepCommand.set_argparsercCs|jjsd|j_dS)N�error)�optsZrpmverbosity)rrrr�
pre_configurefszBuildDepCommand.pre_configurecCsp|jj}d|_d|_d|_d|_|jjsl|jjsl|jj	D]2}|�
d�s8|�
d�s8|�
d�s8|jj�
�qlq8dS)NT�.src.rpmz
.nosrc.rpm�.spec)r�demandsZavailable_reposZ	resolvingZ	root_userZsack_activationrD�spec�srpmr5�endswithr$ZreposZenable_source_repos)rrHr(rrr�	configurejs
��zBuildDepCommand.configurecCsNtjj�|j�}|jjD]}t�|d|d�qd}|jj	D]�}|�
|�}zl|jjrb|�|�nT|jj
rv|�|�n@|�d�s�|�d�r�|�|�n |�d�r�|�|�n
|�|�Wq>tjj�y}z<|��D]}t�td��|��q�t�|�d}WYd}~q>d}~00q>|jjD]}t�|d��q|�rJtj�td	���dS)
Nrr,FrFz	nosrc.rpmrGzRPM: {}Tz!Some packages could not be found.)r
ZyumZrpmtransZRPMTransactionr$rD�definerZaddMacror5r+rJ�	_src_depsrI�
_spec_depsrK�_remote_deps�
exceptions�Error�messagesrrCr�formatZdelMacro)rZrpmlogZmacroZ
pkg_errorsr(�e�linerrr�runzs2


zBuildDepCommand.runcCs|��dd�S)Nr-)ZDNEVR)Zrpm_deprrr�_rpm_dep2reldep_str�sz#BuildDepCommand._rpm_dep2reldep_strcCs�tj�|jj�}|j|d�|��}|sV|�d�rVtj�|jj�}|j|d�|��}|s�|�d�s�td�}t	�
||�|jjduS|r�|j�
|�}|r�|D]}tj�|�q�|jjj|dd�dS)	N)Zprovides�/)r�(z$No matching package to install: '%s'TF)ZselectZoptional)r
�selectorZSelectorr$�sack�set�matches�
startswithrr�warningrDZskip_unavailableZ_sltr_matches_installedZ_msg_installedZ_goal�install)r�
reldep_strZsltr�foundr3Zalready_instr7rrr�_install�s$zBuildDepCommand._installc

Cs�t�|tj�}z|j�|�}WnTtjyr}z:t|�dkrHtd�|}t�	|�t
j�|��WYd}~n
d}~00t�	|�|�
d�}d}|D](}|�|�}|�d�r�q�||�|�M}q�|s�td�}	t
j�|	��|jjr�t�td��dS)Nzerror reading package headerz2Failed to open: '%s', not a valid source rpm file.ZrequirenameTzrpmlib(�Not all dependencies satisfiedzJWarning: -D or --define arguments have no meaning for source rpm packages.)rr#�O_RDONLYrZhdrFromFdnorrC�strrr'r
rQrRZdsFromHeaderrXr_rdrDrMrr`)
rZsrc_fn�fd�hrU�ds�done�deprb�errrrrrN�s*
"



zBuildDepCommand._src_depsc	
Cs�zt�|�}Wn@tyN}z(td�||f}tj�|��WYd}~n
d}~00d}t�|jd�D]}|�	|�}||�
|�M}qb|s�td�}tj�|��dS)Nz/Failed to open: '%s', not a valid spec file: %sT�requiresre)rrI�
ValueErrorrr
rQrRrjZsourceHeaderrXrd)	rZspec_fnrIr*r3rkrlrbrmrrrrO�s�"
zBuildDepCommand._spec_depsc	Cs�tj�|��|jj�jdd�}tdd�|D��}|jj���	�j||gdd��
���}|sptj�
td�|��d}|D]"}|jD]}||�t|��M}q�qx|s�td�}tj�
|��dS)	N�src)Z	arch__neqcSsh|]
}|j�qSr)Zsource_name)�.0�pkgrrr�	<setcomp>��z/BuildDepCommand._remote_deps.<locals>.<setcomp>)�nameZarchzno package matched: %sTre)r
ZsubjectZSubjectZget_best_queryr$r\�filter�list�query�	availableZlatestrWrQrRrrnrdrg)	rr7ryZsourcenamesZpkgsrkrrZreqrmrrrrP�s$��
�
zBuildDepCommand._remote_deps)�__name__�
__module__�__qualname__�aliasesr3rZsummary�usager	rr+�staticmethodrBrErLrWrXrdrNrOrP�
__classcell__rrrrr's$
!
r)Z
__future__rrZdnfpluginscorerrr0r
Zdnf.cliZdnf.exceptionsZdnf.rpm.transactionZdnf.yum.rpmtransZlibdnf.reporrrrrZpluginZregister_commandrZCommandrrrrr�<module>s