ž |yMaฆTc@sฎdZddlZddlZddlZddlmZddlmZddlm Z ddl m Z ddl Tddl mZdd lmZGd d „d eƒZdS( uwdistutils.command.bdist_rpm Implements the Distutils 'bdist_rpm' command (create RPM source and binary distributions).iN(uCommand(uDEBUG(u get_platform(u write_file(u*(uget_python_version(ulogc+Bs|EeZdZdZdfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€dd‚dƒd„d…d†d‡dˆd‰dŠd‹dŒddŽg)Zd3d8d<d1dTgZid3d66d8d:6d<d>6ZdWdX„ZdYdZ„Z d[d\„Z d]d^„Z d_d`„Z dadb„Z dcdd„ZdeS(u bdist_rpmucreate an RPM distributionu bdist-base=u/base directory for creating built distributionsu rpm-base=udbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2)u dist-dir=uduDdirectory to put final RPM files in (and .spec files if --spec-only)upython=uMpath to Python interpreter to hard-code in the .spec file (default: "python")u fix-pythonuLhard-code the exact path to the current Python interpreter in the .spec fileu spec-onlyuonly regenerate spec fileu source-onlyuonly generate source RPMu binary-onlyuonly generate binary RPMu use-bzip2u7use bzip2 instead of gzip to create source distributionudistribution-name=ugname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)ugroup=u9package classification [default: "Development/Libraries"]urelease=uRPM release numberuserial=uRPM serial numberuvendor=uaRPM "vendor" (eg. "Joe Blow ") [default: maintainer or author from setup script]u packager=uARPM packager (eg. "Jane Doe ")[default: vendor]u doc-files=u6list of documentation files (space or comma-separated)u changelog=u RPM changeloguicon=uname of icon fileu provides=u%capabilities provided by this packageu requires=u%capabilities required by this packageu conflicts=u-capabilities which conflict with this packageubuild-requires=u+capabilities required to build this packageu obsoletes=u*capabilities made obsolete by this packageu no-autorequ+do not automatically calculate dependenciesu keep-tempuku"don't clean up RPM build directoryu no-keep-tempu&clean up RPM build directory [default]uuse-rpm-opt-flagsu8compile with RPM_OPT_FLAGS when building from source RPMuno-rpm-opt-flagsu&do not pass any RPM CFLAGS to compileru rpm3-modeu"RPM 3 compatibility mode (default)u rpm2-modeuRPM 2 compatibility modeu prep-script=u3Specify a script for the PREP phase of RPM buildingu build-script=u4Specify a script for the BUILD phase of RPM buildingu pre-install=u:Specify a script for the pre-INSTALL phase of RPM buildinguinstall-script=u6Specify a script for the INSTALL phase of RPM buildingu post-install=u;Specify a script for the post-INSTALL phase of RPM buildingupre-uninstall=u<Specify a script for the pre-UNINSTALL phase of RPM buildingupost-uninstall=u=Specify a script for the post-UNINSTALL phase of RPM buildingu clean-script=u4Specify a script for the CLEAN phase of RPM buildinguverify-script=u6Specify a script for the VERIFY phase of the RPM buildu force-arch=u0Force an architecture onto the RPM build processuquietuqu3Run the INSTALL phase of RPM building in quiet modecCscd|_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|_'dS(Nii((uNoneu bdist_baseurpm_baseudist_dirupythonu fix_pythonu spec_onlyu binary_onlyu source_onlyu use_bzip2udistribution_nameugroupureleaseuserialuvendorupackageru doc_filesu changeloguiconu prep_scriptu build_scriptuinstall_scriptu clean_scriptu verify_scriptu pre_installu post_installu pre_uninstallupost_uninstalluprepuprovidesurequiresu conflictsubuild_requiresu obsoletesu keep_tempuuse_rpm_opt_flagsu rpm3_modeu no_autorequ force_archuquiet(uself((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyuinitialize_optionsˆsN                                      ubdist_rpm.initialize_optionscCs|jdd ƒ|jdkrU|js7tdƒ‚ntjj|jdƒ|_n|j dkrˆ|j r|t j |_ q d|_ n|j r tdƒ‚ntj dkrลtdtj ƒ‚n|jrๆ|jrๆtd ƒ‚n|jjƒsd |_n|jdd ƒ|jƒdS(Nubdistu bdist_baseu)you must specify --rpm-base in RPM 2 modeurpmupython3u8--python and --fix-python are mutually exclusive optionsuposixu9don't know how to create RPM distributions on platform %su6cannot supply both '--source-only' and '--binary-only'iudist_dir(u bdist_baseu bdist_base(udist_dirudist_dir(uset_undefined_optionsurpm_baseuNoneu rpm3_modeuDistutilsOptionErroruosupathujoinu bdist_baseupythonu fix_pythonusysu executableunameuDistutilsPlatformErroru binary_onlyu source_onlyu distributionuhas_ext_modulesuuse_rpm_opt_flagsufinalize_package_data(uself((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyufinalize_optionsตs.        ubdist_rpm.finalize_optionscCsะ|jddƒ|jdd|jjƒ|jjƒfƒ|jdƒ|jdƒt|jtƒrฐxEdD]:}tj j |ƒro||jkro|jj |ƒqoqoWn|jd d ƒ|jd ƒ|jd ƒ|jd ƒ|j |j ƒ|_ |jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒ|jdƒdS(NugroupuDevelopment/Librariesuvendoru%s <%s>upackageru doc_filesuREADMEu README.txtureleaseu1userialudistribution_nameu changeloguiconu prep_scriptu build_scriptuinstall_scriptu clean_scriptu verify_scriptu pre_installu post_installu pre_uninstallupost_uninstalluprovidesurequiresu conflictsubuild_requiresu obsoletesu force_arch(uREADMEu README.txt(u ensure_stringu distributionu get_contactuget_contact_emailuensure_string_listu isinstanceu doc_filesulistuosupathuexistsuappendu_format_changelogu changeloguensure_filename(uselfureadme((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyufinalize_package_dataิs>    !                  ubdist_rpm.finalize_package_datacCsTtrStdƒtd|jƒtd|jƒtd|jƒtd|jƒn|jru|j}|j|ƒnNi}x;d)D]3}t j j |j |ƒ||<|j||ƒq‚W|d}t j j |d |j jƒƒ}|jt||jƒfd |ƒ|jrdS|j jdd…}|jd ƒ}|jrRdg|_n dg|_|jd ƒ||j _|jƒd}|d}|j||ƒ|jr๋t j j|jƒrี|j|j|ƒq๋td|jƒ‚ntjdƒdg} t j jdƒs%t j jdƒr1dg} n|jrJ| jdƒn&|j rc| jdƒn | jdƒ| j!dd|j"gƒ|j#rผ| j!ddt j j$|j ƒgƒn|j%sี| jdƒn|j&r๎| jdƒn| j|ƒd} | d } d!| d"} d#| | |f} t j'| ƒ}zซg}d}xm|j)ƒ}|scPn|j*ƒj+ƒ}t,|ƒd$kst-‚|j|d%ƒ|dkrM|d}qMqM|j.ƒ}|rๅt/d&t0| ƒƒ‚nWd|j.ƒX|j1| ƒ|j2sP|j j3ƒr%t4ƒ}nd'}|j sฏt j j |d |ƒ}t j j|ƒset-‚|j5||jƒt j j |j|ƒ}|j jjd(||fƒn|jsPx’|D]‡}t j j |d |ƒ}t j j|ƒrฟ|j5||jƒt j j |jt j j6|ƒƒ}|j jjd(||fƒqฟqฟWqPndS(*Nubefore _get_package_data():uvendor =u packager =u doc_files =u changelog =uSOURCESuSPECSuBUILDuRPMSuSRPMSu%s.specu writing '%s'usdistubztarugztariuicon file '%s' does not existu building RPMsurpmu/usr/bin/rpmbuildu /bin/rpmbuildurpmbuildu-bsu-bbu-bau--defineu __python %su _topdir %su--cleanu--quietu%{name}-%{version}-%{release}u.src.rpmu%{arch}/u .%{arch}.rpmu%rpm -q --qf '%s %s\n' --specfile '%s'iiuFailed to execute: %suanyu bdist_rpm(uSOURCESuSPECSuBUILDuRPMSuSRPMS(7uDEBUGuprintuvendorupackageru doc_filesu changelogu spec_onlyudist_dirumkpathuosupathujoinurpm_baseu distributionuget_nameuexecuteu write_fileu_make_spec_fileu dist_filesureinitialize_commandu use_bzip2uformatsu run_commanduget_archive_filesu copy_fileuiconuexistsuDistutilsFileErroruloguinfou source_onlyuappendu binary_onlyuextendupythonu rpm3_modeuabspathu keep_tempuquietupopenuNoneureadlineustripusplitulenuAssertionErrorucloseuDistutilsExecErrorurepruspawnudry_runuhas_ext_modulesuget_python_versionu move_fileubasename(uselfuspec_dirurpm_dirudu spec_pathusaved_dist_filesusdistusourceu source_dirurpm_cmdu nvr_stringusrc_rpmu non_src_rpmuq_cmduoutu binary_rpmsu source_rpmulineulustatusu pyversionusrpmufilenameurpm((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyurunsฦ                                         u bdist_rpm.runcCs"tjj|jtjj|ƒƒS(N(uosupathujoinudist_dirubasename(uselfupath((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyu _dist_pathˆsubdist_rpm._dist_pathc Csod|jjƒd|jjƒjddƒd|jjƒd|jjddƒdd|jjƒg}tjd ƒ}d jd d „|j ƒDƒƒ}d }d}|j||ƒ}||kr๋|j dƒ|j d|d ƒn|j dddgƒ|j r|j dƒn |j dƒ|j d|jj ƒd|jddgƒ|js|jjƒs“|j dƒq“n|j d|jƒx{dJD]s}t||jƒƒ}t|tƒr็|j d"|d#j|ƒfƒqš|dKk rš|j d"||fƒqšqšW|jjƒd$krC|j d%|jjƒƒn|jrc|j d&|jƒn|jrŒ|j d'd#j|jƒƒn|jrธ|j d(tjj|jƒƒn|jrั|j d)ƒn|j dd*|jjƒgƒd+|jtjjt j!d,ƒf}d-|} |j"r6d.| } nd/|} dLd3d4| fd5d6| fdMdNdOdPdQdRg } x‡| D]\} } }t|| ƒ}|sค|rz|j ddD| gƒ|r้|j t#|dEƒj$ƒj%d ƒƒq๙|j |ƒqzqzW|j ddFdGgƒ|j&r<|j dHd#j|j&ƒƒn|j'rk|j ddIgƒ|j |j'ƒn|S(SuiGenerate the text of an RPM spec file and return it as a list of strings (one per line). u %define name u%define version u-u_u%define unmangled_version u%define release uu Summary: urpm --eval %{__os_install_post}u cSs g|]}d|jƒ‘qS(u %s \(ustrip(u.0uline((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyu Ÿs u-bdist_rpm._make_spec_file..ubrp-python-bytecompile \ u%brp-python-bytecompile %{__python} \ u2# Workaround for http://bugs.python.org/issue14443u%define __os_install_post u Name: %{name}uVersion: %{version}uRelease: %{release}u-Source0: %{name}-%{unmangled_version}.tar.bz2u,Source0: %{name}-%{unmangled_version}.tar.gzu License: uGroup: u>BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildrootuPrefix: %{_prefix}uBuildArch: noarchu BuildArch: %suVendoruPackageruProvidesuRequiresu Conflictsu Obsoletesu%s: %su uUNKNOWNuUrl: uDistribution: uBuildRequires: uIcon: u AutoReq: 0u %descriptionu%s %siu%s builduenv CFLAGS="$RPM_OPT_FLAGS" u>%s install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILESuprepu prep_scriptu&%setup -n %{name}-%{unmangled_version}ubuildu build_scriptuinstalluinstall_scriptucleanu clean_scripturm -rf $RPM_BUILD_ROOTu verifyscriptu verify_scriptupreu pre_installupostu post_installupreunu pre_uninstallupostunupost_uninstallu%uru%files -f INSTALLED_FILESu%defattr(-,root,root)u%doc u %changelog(uVendoruPackageruProvidesuRequiresu Conflictsu ObsoletesN(uprepu prep_scriptu&%setup -n %{name}-%{unmangled_version}(ucleanu clean_scripturm -rf $RPM_BUILD_ROOT(u verifyscriptu verify_scriptN(upreu pre_installN(upostu post_installN(upreunu pre_uninstallN(upostunupost_uninstallN((u distributionuget_nameu get_versionureplaceureleaseuget_descriptionu subprocessu getoutputujoinu splitlinesuappenduextendu use_bzip2u get_licenseugroupu force_archuhas_ext_modulesugetattruloweru isinstanceulistuNoneuget_urludistribution_nameubuild_requiresuiconuosupathubasenameu no_autorequget_long_descriptionupythonusysuargvuuse_rpm_opt_flagsuopenureadusplitu doc_filesu changelog(uselfu spec_fileu vendor_hookuproblemufixedu fixed_hookufielduvaludef_setup_callu def_buildu install_cmduscript_optionsurpm_optuattrudefault((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyu_make_spec_file‹sบ          #     # &       (     ubdist_rpm._make_spec_filecCsซ|s |Sg}x€|jƒjdƒD]i}|jƒ}|ddkr^|jd|gƒq&|ddkr~|j|ƒq&|jd|ƒq&W|dsง|d=n|S(uKFormat the changelog correctly and convert it to a list of strings u iu*uu-u (ustripusplituextenduappend(uselfu changelogu new_changeloguline((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyu_format_changelog3s   ubdist_rpm._format_changelogN(u bdist-base=Nu/base directory for creating built distributions(u rpm-base=Nudbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2)(u dist-dir=uduDdirectory to put final RPM files in (and .spec files if --spec-only)(upython=NuMpath to Python interpreter to hard-code in the .spec file (default: "python")(u fix-pythonNuLhard-code the exact path to the current Python interpreter in the .spec file(u spec-onlyNuonly regenerate spec file(u source-onlyNuonly generate source RPM(u binary-onlyNuonly generate binary RPM(u use-bzip2Nu7use bzip2 instead of gzip to create source distribution(udistribution-name=Nugname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)(ugroup=Nu9package classification [default: "Development/Libraries"](urelease=NuRPM release number(userial=NuRPM serial number(uvendor=NuaRPM "vendor" (eg. "Joe Blow ") [default: maintainer or author from setup script](u packager=NuARPM packager (eg. "Jane Doe ")[default: vendor](u doc-files=Nu6list of documentation files (space or comma-separated)(u changelog=Nu RPM changelog(uicon=Nuname of icon file(u provides=Nu%capabilities provided by this package(u requires=Nu%capabilities required by this package(u conflicts=Nu-capabilities which conflict with this package(ubuild-requires=Nu+capabilities required to build this package(u obsoletes=Nu*capabilities made obsolete by this package(u no-autoreqNu+do not automatically calculate dependencies(u keep-tempuku"don't clean up RPM build directory(u no-keep-tempNu&clean up RPM build directory [default](uuse-rpm-opt-flagsNu8compile with RPM_OPT_FLAGS when building from source RPM(uno-rpm-opt-flagsNu&do not pass any RPM CFLAGS to compiler(u rpm3-modeNu"RPM 3 compatibility mode (default)(u rpm2-modeNuRPM 2 compatibility mode(u prep-script=Nu3Specify a script for the PREP phase of RPM building(u build-script=Nu4Specify a script for the BUILD phase of RPM building(u pre-install=Nu:Specify a script for the pre-INSTALL phase of RPM building(uinstall-script=Nu6Specify a script for the INSTALL phase of RPM building(u post-install=Nu;Specify a script for the post-INSTALL phase of RPM building(upre-uninstall=Nu<Specify a script for the pre-UNINSTALL phase of RPM building(upost-uninstall=Nu=Specify a script for the post-UNINSTALL phase of RPM building(u clean-script=Nu4Specify a script for the CLEAN phase of RPM building(uverify-script=Nu6Specify a script for the VERIFY phase of the RPM build(u force-arch=Nu0Force an architecture onto the RPM build process(uquietuqu3Run the INSTALL phase of RPM building in quiet mode(u__name__u __module__u __qualname__u descriptionuNoneu user_optionsuboolean_optionsu negative_optuinitialize_optionsufinalize_optionsufinalize_package_dataurunu _dist_pathu_make_spec_fileu_format_changelog(u __locals__((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyu bdist_rpmsพ      -  - ‡  จu bdist_rpm(u__doc__u subprocessusysuosudistutils.coreuCommandudistutils.debuguDEBUGudistutils.utilu get_platformudistutils.file_utilu write_fileudistutils.errorsudistutils.sysconfiguget_python_versionu distutilsulogu bdist_rpm(((u@/opt/alt/python33/lib64/python3.3/distutils/command/bdist_rpm.pyus$