???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \T                 @   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T ddlmZ dd	lmZ G d
d deZdS )zwdistutils.command.bdist_rpm

Implements the Distutils 'bdist_rpm' command (create RPM source and binary
distributions).    N)Command)DEBUG)get_platform)
write_file)*)get_python_version)logc            +   @   s   e Zd ZdZdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddg)Zd4d9d=d2dUgZd4d9d=dXZdYdZ Zd[d\ Zd]d^ Z	d_d` Z
dadb Zdcdd Zdedf ZdS )	bdist_rpmzcreate an RPM distributionbdist-base=N/base directory for creating built distributions	rpm-base=dbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2)	dist-dir=dDdirectory to put final RPM files in (and .spec files if --spec-only)python=Mpath to Python interpreter to hard-code in the .spec file (default: "python")
fix-pythonLhard-code the exact path to the current Python interpreter in the .spec file	spec-onlyonly regenerate spec filesource-onlyonly generate source RPMbinary-onlyonly generate binary RPM	use-bzip27use bzip2 instead of gzip to create source distributiondistribution-name=gname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)group=9package classification [default: "Development/Libraries"]release=RPM release numberserial=RPM serial numbervendor=aRPM "vendor" (eg. "Joe Blow <joe@example.com>") [default: maintainer or author from setup script]	packager=BRPM packager (eg. "Jane Doe <jane@example.net>") [default: vendor]
doc-files=6list of documentation files (space or comma-separated)
changelog=RPM changelogicon=name of icon file	provides=%capabilities provided by this package	requires=%capabilities required by this package
conflicts=-capabilities which conflict with this packagebuild-requires=+capabilities required to build this package
obsoletes=*capabilities made obsolete by this package
no-autoreq+do not automatically calculate dependencies	keep-tempk"don't clean up RPM build directoryno-keep-temp&clean up RPM build directory [default]use-rpm-opt-flags8compile with RPM_OPT_FLAGS when building from source RPMno-rpm-opt-flags&do not pass any RPM CFLAGS to compiler	rpm3-mode"RPM 3 compatibility mode (default)	rpm2-modeRPM 2 compatibility modeprep-script=3Specify a script for the PREP phase of RPM buildingbuild-script=4Specify a script for the BUILD phase of RPM buildingpre-install=:Specify a script for the pre-INSTALL phase of RPM buildinginstall-script=6Specify a script for the INSTALL phase of RPM buildingpost-install=;Specify a script for the post-INSTALL phase of RPM buildingpre-uninstall=<Specify a script for the pre-UNINSTALL phase of RPM buildingpost-uninstall==Specify a script for the post-UNINSTALL phase of RPM buildingclean-script=4Specify a script for the CLEAN phase of RPM buildingverify-script=6Specify a script for the VERIFY phase of the RPM buildforce-arch=0Force an architecture onto the RPM build processquietq3Run the INSTALL phase of RPM building in quiet mode)zno-keep-tempzno-rpm-opt-flagsz	rpm2-modec             C   s   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _ d| _!d| _"d| _#d| _$d | _%d| _&d S )Nr      )'
bdist_baserpm_basedist_dirpython
fix_python	spec_onlybinary_onlysource_only	use_bzip2distribution_namegroupreleaseserialvendorpackager	doc_files	changelogiconprep_scriptbuild_scriptinstall_scriptclean_scriptverify_scriptpre_installpost_installpre_uninstallpost_uninstallprepprovidesrequires	conflictsbuild_requires	obsoletes	keep_tempuse_rpm_opt_flags	rpm3_mode
no_autoreq
force_archr\   )self r   3/usr/lib64/python3.6/distutils/command/bdist_rpm.pyinitialize_options   sN    zbdist_rpm.initialize_optionsc             C   s   | j dd | jd kr6| js$tdtjj| jd| _| jd krX| j	rPt
j| _qfd| _n| j	rftdtjdkr~tdtj | jr| jrtd	| jj sd
| _| j dd | j  d S )NZbdistr`   z)you must specify --rpm-base in RPM 2 moderpmZpython3z8--python and --fix-python are mutually exclusive optionsposixz9don't know how to create RPM distributions on platform %sz6cannot supply both '--source-only' and '--binary-only'r   rb   )r`   r`   )rb   rb   )Zset_undefined_optionsra   r   ZDistutilsOptionErrorospathjoinr`   rc   rd   sys
executablenameZDistutilsPlatformErrorrf   rg   distributionhas_ext_modulesr   finalize_package_data)r   r   r   r   finalize_options   s.    





zbdist_rpm.finalize_optionsc             C   sX  | j dd | j dd| jj | jj f  | j d | jd t| jtr|x.dD ]&}tj	j
|rR|| jkrR| jj| qRW | j d	d
 | j d | j d | j d | j| j| _| jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | jd | j d d S )Nrj   zDevelopment/Librariesrm   z%s <%s>rn   ro   README
README.txtrk   1rl   ri   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r|   r}   r~   r   r   r   )r   r   )Zensure_stringr   Zget_contactZget_contact_emailZensure_string_list
isinstancero   listr   r   existsappend_format_changelogrp   Zensure_filename)r   Zreadmer   r   r   r      s>    





















zbdist_rpm.finalize_package_datac             C   s  t r<td td| j td| j td| j td| j | jrT| j}| j| n<i }x.d)D ]&}t	j
j| j|||< | j||  q^W |d }t	j
j|d| jj  }| jt|| j fd|  | jrd S | jjd d  }| jd}| j rdg|_ndg|_| jd || j_|j d }|d }| j|| | jrht	j
j| jrZ| j| j| ntd| j tjd dg}	t	j
jdst	j
jdrdg}	| jr|	jd n| j r|	jd n
|	jd |	j!dd| j" g | j#r|	j!ddt	j
j$| j g | j%s|	jd | j&r(|	jd |	j| d}
|
d  }d!|
 d" }d#|||f }t	j'|}zg }d }xT|j( }|s~P |j) j* }t+|d$kst,|j|d%  |d krn|d }qnW |j- }|rt.d&t/| W d |j-  X | j0|	 | j1s| jj2 rt3 }nd'}| j svt	j
j|d
 |}t	j
j|sDt,| j4|| j t	j
j| j|}| jjjd(||f | jsxh|D ]`}t	j
j|d	 |}t	j
j|r| j4|| j t	j
j| jt	j
j5|}| jjjd(||f qW d S )*Nzbefore _get_package_data():zvendor =z
packager =zdoc_files =zchangelog =SOURCESSPECSBUILDRPMSSRPMSz%s.speczwriting '%s'sdistZbztarZgztarr   zicon file '%s' does not existzbuilding RPMsr   z/usr/bin/rpmbuildz/bin/rpmbuildZrpmbuildz-bsz-bbz-baz--definez__python %sz
_topdir %sz--cleanz--quietz%{name}-%{version}-%{release}z.src.rpmz%{arch}/z.%{arch}.rpmz%rpm -q --qf '%s %s\n' --specfile '%s'   r_   zFailed to execute: %sanyr	   )r   r   r   r   r   )6r   printrm   rn   ro   rp   re   rb   Zmkpathr   r   r   ra   r   get_nameZexecuter   _make_spec_fileZ
dist_filesZreinitialize_commandrh   ZformatsZrun_commandZget_archive_filesZ	copy_filerq   r   ZDistutilsFileErrorr   inforg   r   rf   extendrc   r   abspathr   r\   popenreadlinestripsplitlenAssertionErrorcloseZDistutilsExecErrorreprZspawnZdry_runr   r   Z	move_filebasename)r   Zspec_dirZrpm_dirr   Z	spec_pathZsaved_dist_filesr   sourceZ
source_dirZrpm_cmdZ
nvr_stringZsrc_rpmZnon_src_rpmZq_cmdoutZbinary_rpmsZ
source_rpmlinelZstatusZ	pyversionZsrpmfilenamer   r   r   r   run  s    















zbdist_rpm.runc             C   s   t jj| jt jj|S )N)r   r   r   rb   r   )r   r   r   r   r   
_dist_path  s    zbdist_rpm._dist_pathc             C   sD  d| j j  d| j j jdd d| j j  d| jjdd dd| j j  g}tjd	}d
jdd |j	 D }d}d}|j||}||kr|j
d |j
d| d
  |jdddg | jr|j
d n
|j
d |jd| j j  d| j ddg | js| j j s&|j
d n|j
d| j  x^dKD ]V}t| |j }t|trd|j
d"|d#j|f  n|d$k	r,|j
d"||f  q,W | j j d%kr|j
d&| j j   | jr|j
d'| j  | jr|j
d(d#j| j  | jr |j
d)tjj| j  | jr|j
d* |jdd+| j j g d,| jtjjtj d- f }d.| }	| j!r\d/|	 }	d0| }
dLd4d5|	fd6d7|
fdMdNdOdPdQdRg	}xh|D ]`\}}}t| |}|s|r|jddE| g |r|jt"|dFj# j$d
 n
|j
| qW |jddGdHg | j%r|j
dId#j| j%  | j&r@|jddJg |j| j& |S )SziGenerate the text of an RPM spec file and return it as a
        list of strings (one per line).
        z%define name z%define version -_z%define unmangled_version z%define release  z	Summary: zrpm --eval %{__os_install_post}
c             S   s   g | ]}d |j   qS )z  %s \)r   ).0r   r   r   r   
<listcomp>  s   z-bdist_rpm._make_spec_file.<locals>.<listcomp>zbrp-python-bytecompile \
z%brp-python-bytecompile %{__python} \
z2# Workaround for http://bugs.python.org/issue14443z%define __os_install_post zName: %{name}zVersion: %{version}zRelease: %{release}z-Source0: %{name}-%{unmangled_version}.tar.bz2z,Source0: %{name}-%{unmangled_version}.tar.gzz	License: zGroup: z>BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildrootzPrefix: %{_prefix}zBuildArch: noarchzBuildArch: %sVendorPackagerProvidesRequires	Conflicts	Obsoletesz%s: %s NZUNKNOWNzUrl: zDistribution: zBuildRequires: zIcon: z
AutoReq: 0z%descriptionz%s %sr   z%s buildzenv CFLAGS="$RPM_OPT_FLAGS" z>%s install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILESr{   rr   &%setup -n %{name}-%{unmangled_version}Zbuildrs   Zinstallrt   cleanru   rm -rf $RPM_BUILD_ROOTverifyscriptrv   prerw   postrx   preunry   postunrz   %rz%files -f INSTALLED_FILESz%defattr(-,root,root)z%doc z
%changelog)r   r   r   r   r   r   )r{   rr   r   )r   ru   r   )r   rv   N)r   rw   N)r   rx   N)r   ry   N)r   rz   N)'r   r   Zget_versionreplacerk   Zget_description
subprocessZ	getoutputr   
splitlinesr   r   rh   Zget_licenserj   r   r   getattrlowerr   r   Zget_urlri   r   rq   r   r   r   r   Zget_long_descriptionrc   r   argvr   openreadr   ro   rp   )r   Z	spec_fileZvendor_hookZproblemZfixedZ
fixed_hookZfieldvalZdef_setup_callZ	def_buildZinstall_cmdZscript_optionsZrpm_optattrdefaultr   r   r   r     s    


	
    


zbdist_rpm._make_spec_filec             C   s   |s|S g }x`|j  jdD ]N}|j  }|d dkrD|jd|g q|d dkr\|j| q|jd|  qW |d s||d= |S )zKFormat the changelog correctly and convert it to a list of strings
        r   r   r   r   r   z  )r   r   r   r   )r   rp   Znew_changelogr   r   r   r   r   3  s    zbdist_rpm._format_changelog)r
   Nr   )r   Nr   )r   r   r   )r   Nr   )r   Nr   )r   Nr   )r   Nr   )r   Nr   )r   Nr   )r   Nr   )r   Nr    )r!   Nr"   )r#   Nr$   )r%   Nr&   )r'   Nr(   )r)   Nr*   )r+   Nr,   )r-   Nr.   )r/   Nr0   )r1   Nr2   )r3   Nr4   )r5   Nr6   )r7   Nr8   )r9   Nr:   )r;   r<   r=   )r>   Nr?   )r@   NrA   )rB   NrC   )rD   NrE   )rF   NrG   )rH   NrI   )rJ   NrK   )rL   NrM   )rN   NrO   )rP   NrQ   )rR   NrS   )rT   NrU   )rV   NrW   )rX   NrY   )rZ   Nr[   )r\   r]   r^   )__name__
__module____qualname__ZdescriptionZuser_optionsZboolean_optionsZnegative_optr   r   r   r   r   r   r   r   r   r   r   r	      s                                            --  )r	   )__doc__r   r   r   Zdistutils.corer   Zdistutils.debugr   Zdistutils.utilr   Zdistutils.file_utilr   Zdistutils.errorsZdistutils.sysconfigr   Z	distutilsr   r	   r   r   r   r   <module>   s   