U
    ºÛui¶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mZmZmZ 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)Úlogé   )ÚCommand)ÚDEBUG)ÚDistutilsExecErrorÚDistutilsFileErrorÚDistutilsOptionErrorÚDistutilsPlatformError)Ú
write_file)Úget_python_versionc                )   @   s¸   e Zd ZdZ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)d*g)Zd+d,d-d.d/gZd+d,d-d0œZd1d2„ Zd3d4„ Zd5d6„ Z	d7d8„ Z
d9d:„ Zd;d<„ Zd=d>„ Zd?S )@Ú	bdist_rpmzcreate an RPM distribution)zbdist-base=Nz/base directory for creating built distributions)z	rpm-base=Nzdbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2))z	dist-dir=ÚdzDdirectory to put final RPM files in (and .spec files if --spec-only))zpython=NzMpath to Python interpreter to hard-code in the .spec file [default: "python"])z
fix-pythonNzLhard-code the exact path to the current Python interpreter in the .spec file)z	spec-onlyNzonly regenerate spec file)zsource-onlyNzonly generate source RPM)zbinary-onlyNzonly generate binary RPM)z	use-bzip2Nz7use bzip2 instead of gzip to create source distribution)zdistribution-name=Nzgname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!))zgroup=Nz9package classification [default: "Development/Libraries"])zrelease=NzRPM release number)zserial=NzRPM serial number)zvendor=NzaRPM "vendor" (eg. "Joe Blow <joe@example.com>") [default: maintainer or author from setup script])z	packager=NzBRPM packager (eg. "Jane Doe <jane@example.net>") [default: vendor])z
doc-files=Nz6list of documentation files (space or comma-separated))z
changelog=NzRPM changelog)zicon=Nzname of icon file)z	provides=Nz%capabilities provided by this package)z	requires=Nz%capabilities required by this package)z
conflicts=Nz-capabilities which conflict with this package)zbuild-requires=Nz+capabilities required to build this package)z
obsoletes=Nz*capabilities made obsolete by this package)ú
no-autoreqNz+do not automatically calculate dependencies)ú	keep-tempÚkz"don't clean up RPM build directory)úno-keep-tempNz&clean up RPM build directory [default])úuse-rpm-opt-flagsNz8compile with RPM_OPT_FLAGS when building from source RPM)úno-rpm-opt-flagsNz&do not pass any RPM CFLAGS to compiler)ú	rpm3-modeNz"RPM 3 compatibility mode (default))ú	rpm2-modeNzRPM 2 compatibility mode)zprep-script=Nz3Specify a script for the PREP phase of RPM building)zbuild-script=Nz4Specify a script for the BUILD phase of RPM building)zpre-install=Nz:Specify a script for the pre-INSTALL phase of RPM building)zinstall-script=Nz6Specify a script for the INSTALL phase of RPM building)zpost-install=Nz;Specify a script for the post-INSTALL phase of RPM building)zpre-uninstall=Nz<Specify a script for the pre-UNINSTALL phase of RPM building)zpost-uninstall=Nz=Specify a script for the post-UNINSTALL phase of RPM building)zclean-script=Nz4Specify a script for the CLEAN phase of RPM building)zverify-script=Nz6Specify a script for the VERIFY phase of the RPM build)zforce-arch=Nz0Force an architecture onto the RPM build process)ÚquietÚqz3Run the INSTALL phase of RPM building in quiet moder   r   r   r   r   )r   r   r   c                 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 )NFT)'Ú
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@   úK/tmp/pip-unpacked-wheel-9osl9suo/setuptools/_distutils/command/bdist_rpm.pyÚinitialize_options™   sN    zbdist_rpm.initialize_optionsc                 C   s¼   |   dd¡ | jd kr6| js$tdƒ‚t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r”td	ƒ‚| j ¡ s¤d
| _|   dd¡ |  ¡  d S )NÚbdist)r   r   z)you must specify --rpm-base in RPM 2 modeÚrpmÚpython3z8--python and --fix-python are mutually exclusive optionsÚposixz7don't know how to create RPM distributions on platform z6cannot supply both '--source-only' and '--binary-only'F)r   r   )Úset_undefined_optionsr   r;   r   ÚosÚpathÚjoinr   r   r   ÚsysÚ
executableÚnamer	   r   r   ÚdistributionÚhas_ext_modulesr:   Úfinalize_package_datar>   r@   r@   rA   Úfinalize_optionsÆ   s2    


ÿ

ÿÿ
zbdist_rpm.finalize_optionsc                 C   sX  |   dd¡ |   d| j ¡ › d| j ¡ › d¡ |   d¡ |  d¡ t| jtƒr|dD ]&}tj	 
|¡rT|| jkrT| j |¡ qT|   d	d
¡ |   d¡ |   d¡ |   d¡ |  | j¡| _|  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |   d¡ d S )Nr"   zDevelopment/Librariesr%   z <ú>r&   r'   )ZREADMEz
README.txtr#   Ú1r$   r!   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r4   r5   r6   r7   r8   r=   )Úensure_stringrN   Úget_contactÚget_contact_emailÚensure_string_listÚ
isinstancer'   ÚlistrH   rI   ÚexistsÚappendÚ_format_changelogr(   Úensure_filename)r?   Zreadmer@   r@   rA   rP   ç   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}|  |¡ n8i }dD ]&}t	j
 | j|¡||< |  || ¡ q\|d }t	j
 || j ¡ › d¡}|  t||  ¡ fd	|› d
¡ | jrÎd S | jjd d … }|  d¡}| jrødg|_ndg|_|  d¡ || j_| ¡ d }|d }|  ||¡ | jrlt	j
 | j¡rZ|  | j|¡ ntd| j› dƒ‚t d¡ dg}	| jr|	 d¡ n| j r¤|	 d¡ n
|	 d¡ |	 !dd| j"› g¡ | j#rê|	 !ddt	j
 $| j¡› g¡ | j%sü|	 d¡ | j&r|	 d¡ |	 |¡ d}
|
d }d|
 d }d |› d!|› d"|› d
}t	 '|¡}z|g }d }| )¡ }|snq°| *¡  +¡ }t,|ƒd#ksŒt-‚| |d$ ¡ |d kr\|d }q\| (¡ }|rÌt.d%|›ƒ‚W 5 | (¡  X |  /|	¡ | j0sÐ| j 1¡ r t2ƒ }nd&}| j sbt	j
 |d' |¡}t	j
 |¡s0t-‚|  3|| j¡ t	j
 | j|¡}| jj d(||f¡ | jsÐ|D ]`}t	j
 |d) |¡}t	j
 |¡rn|  3|| j¡ t	j
 | jt	j
 4|¡¡}| jj d(||f¡ qnd S )*Nzbefore _get_package_data():zvendor =z
packager =zdoc_files =zchangelog =)ÚSOURCESÚSPECSÚBUILDÚRPMSÚSRPMSr_   z.specz	writing 'ú'ÚsdistÚbztarÚgztarr   r^   zicon file 'z' does not existzbuilding RPMsZrpmbuildz-bsz-bbz-baz--definez	__python z_topdir z--cleanz--quietz%{name}-%{version}-%{release}z.src.rpmz%{arch}/z.%{arch}.rpmzrpm -q --qf 'ú z\n' --specfile 'r   é   zFailed to execute: Úanyrb   r   ra   )5r   Úprintr%   r&   r'   r(   r   r   ÚmkpathrH   rI   rJ   r   rN   Úget_nameÚexecuter
   Ú_make_spec_fileÚ
dist_filesÚreinitialize_commandr    ÚformatsÚrun_commandZget_archive_filesÚ	copy_filer)   rZ   r   r   Úinfor   r[   r   Úextendr   r;   Úabspathr9   r   ÚpopenÚcloseÚreadlineÚstripÚsplitÚlenÚAssertionErrorr   ÚspawnÚdry_runrO   r   Ú	move_fileÚbasename)r?   Zspec_dirZrpm_dirr   Z	spec_pathZsaved_dist_filesrd   ÚsourceÚ
source_dirZrpm_cmdZ
nvr_stringZsrc_rpmZnon_src_rpmZq_cmdÚoutZbinary_rpmsZ
source_rpmÚlineZellÚstatusZ	pyversionZsrpmÚfilenamerD   r@   r@   rA   Úrun  sº     
 
ÿ











ýzbdist_rpm.runc                 C   s   t j | jt j |¡¡S )N)rH   rI   rJ   r   r   )r?   rI   r@   r@   rA   Ú
_dist_path•  s    zbdist_rpm._dist_pathc              
   C   s^  d| j  ¡  d| j  ¡  dd¡ d| j  ¡  d| j dd¡ dd| j  ¡ pLd	 g}t d
¡}d dd„ | 	¡ D ƒ¡}d}d}| ||¡}||kr¬| 
d¡ | 
d| d ¡ | dddg¡ | jrÎ| 
d¡ n
| 
d¡ | d| j  ¡ pêd	 d| j ddg¡ | js| j  ¡ s0| 
d¡ n| 
d| j› ¡ dD ]X}t| | ¡ ƒ}t|tƒrl| 
d |d |¡¡¡ n|d k	r4| 
|› d!|› ¡ q4| j  ¡ r®| 
d"| j  ¡  ¡ | jrÆ| 
d#| j ¡ | jrä| 
d$d | j¡ ¡ | jr| 
d%tj | j¡ ¡ | jr| 
d&¡ | dd'| j  ¡ p,dg¡ | j› dtj t j!d( ¡› }|› d)}	| j"rjd*|	 }	|› d+}
d,d-d.|	fd/d0|
fd1d2d3d4d5d6g	}|D ]n\}}}t| |ƒ}|sº|rš| dd7| g¡ |rüt#|ƒ}| | $¡  %d¡¡ W 5 Q R X n
| 
|¡ qš| dd8d9g¡ | j&r8| 
d:d | j&¡ ¡ | j'rZ| dd;g¡ | | j'¡ |S )<ziGenerate 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: ÚUNKNOWNzrpm --eval %{__os_install_post}Ú
c                 S   s   g | ]}d |  ¡ › d‘qS )ú  z \)rz   )Ú.0r…   r@   r@   rA   Ú
<listcomp>¬  s    z-bdist_rpm._make_spec_file.<locals>.<listcomp>zbrp-python-bytecompile \
z%brp-python-bytecompile %{__python} \
z3# Workaround for https://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: )ZVendorZPackagerÚProvidesÚRequiresZ	ConflictsÚ	Obsoletesz{}: {}rg   Nz: zUrl: zDistribution: zBuildRequires: zIcon: z
AutoReq: 0z%descriptionr   z buildzenv CFLAGS="$RPM_OPT_FLAGS" z< install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES)r3   r*   z&%setup -n %{name}-%{unmangled_version}Úbuildr+   Úinstallr,   )Úcleanr-   zrm -rf $RPM_BUILD_ROOT)Zverifyscriptr.   N)Úprer/   N)Úpostr0   N)Zpreunr1   N)Zpostunr2   Nú%z%files -f INSTALLED_FILESz%defattr(-,root,root)z%doc z
%changelog)(rN   rl   Úget_versionÚreplacer#   Úget_descriptionÚ
subprocessÚ	getoutputrJ   Ú
splitlinesr[   ru   r    Úget_licenser"   r=   rO   ÚgetattrÚlowerrX   rY   ÚformatÚget_urlr!   r7   r)   rH   rI   r   r<   Úget_long_descriptionr   rK   Úargvr:   ÚopenÚreadr{   r'   r(   )r?   Z	spec_fileZvendor_hookZproblemZfixedZ
fixed_hookÚfieldÚvalZdef_setup_callZ	def_buildZinstall_cmdZscript_optionsZrpm_optÚattrÚdefaultÚfr@   r@   rA   rn   ˜  sÀ    ú

ÿ
	ý	
ü

ý

÷
þ
 ýþzbdist_rpm._make_spec_filec                 C   s|   |s|S g }|  ¡  d¡D ]N}|  ¡ }|d dkrB| d|g¡ q|d dkrZ| |¡ q| d| ¡ q|d sx|d= |S )zBFormat the changelog correctly and convert it to a list of stringsrŽ   r   Ú*rŒ   rŠ   r   )rz   r{   ru   r[   )r?   r(   Znew_changelogr…   r@   r@   rA   r\   C  s    zbdist_rpm._format_changelogN)Ú__name__Ú
__module__Ú__qualname__ÚdescriptionÚuser_optionsÚboolean_optionsÚnegative_optrB   rQ   rP   rˆ   r‰   rn   r\   r@   r@   r@   rA   r      s|   ’rû	ý-!.  ,r   )Ú__doc__rH   rž   rK   Zdistutils._logr   Úcorer   Údebugr   Úerrorsr   r   r   r	   Ú	file_utilr
   Ú	sysconfigr   r   r@   r@   r@   rA   Ú<module>   s   