ó q”þfc@s¼dZdZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZmZmZmZdd lmZd efd „ƒYZdS( swdistutils.command.bdist_rpm Implements the Distutils 'bdist_rpm' command (create RPM source and binary distributions).s$Id$iÿÿÿÿN(tCommand(tDEBUG(t write_file(tget_python_version(tDistutilsOptionErrortDistutilsPlatformErrortDistutilsFileErrortDistutilsExecError(tlogt bdist_rpmc+BsþeZdZd^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd€dd‚dƒd„d…d†g)Zd2d7d;d0dSgZid2d56d7d96d;d=6ZdV„ZdW„ZdX„Z dY„Z dZ„Z d[„Z d\„Z RS(‡screate an RPM distributions bdist-base=s/base directory for creating built distributionss rpm-base=sdbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2)s dist-dir=tdsDdirectory to put final RPM files in (and .spec files if --spec-only)spython=sMpath to Python interpreter to hard-code in the .spec file (default: "python")s fix-pythonsLhard-code the exact path to the current Python interpreter in the .spec files spec-onlysonly regenerate spec files source-onlysonly generate source RPMs binary-onlysonly generate binary RPMs use-bzip2s7use bzip2 instead of gzip to create source distributionsdistribution-name=sgname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)sgroup=s9package classification [default: "Development/Libraries"]srelease=sRPM release numbersserial=sRPM serial numbersvendor=saRPM "vendor" (eg. "Joe Blow ") [default: maintainer or author from setup script]s packager=sARPM packager (eg. "Jane Doe ")[default: vendor]s doc-files=s6list of documentation files (space or comma-separated)s changelog=s RPM changelogsicon=sname of icon files provides=s%capabilities provided by this packages requires=s%capabilities required by this packages conflicts=s-capabilities which conflict with this packagesbuild-requires=s+capabilities required to build this packages obsoletes=s*capabilities made obsolete by this packages no-autoreqs+do not automatically calculate dependenciess keep-temptks"don't clean up RPM build directorys no-keep-temps&clean up RPM build directory [default]suse-rpm-opt-flagss8compile with RPM_OPT_FLAGS when building from source RPMsno-rpm-opt-flagss&do not pass any RPM CFLAGS to compilers rpm3-modes"RPM 3 compatibility mode (default)s rpm2-modesRPM 2 compatibility modes prep-script=s3Specify a script for the PREP phase of RPM buildings build-script=s4Specify a script for the BUILD phase of RPM buildings pre-install=s:Specify a script for the pre-INSTALL phase of RPM buildingsinstall-script=s6Specify a script for the INSTALL phase of RPM buildings post-install=s;Specify a script for the post-INSTALL phase of RPM buildingspre-uninstall=s<Specify a script for the pre-UNINSTALL phase of RPM buildingspost-uninstall=s=Specify a script for the post-UNINSTALL phase of RPM buildings clean-script=s4Specify a script for the CLEAN phase of RPM buildingsverify-script=s6Specify a script for the VERIFY phase of the RPM builds force-arch=s0Force an architecture onto the RPM build processtquiettqs3Run 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((tNonet bdist_basetrpm_basetdist_dirtpythont fix_pythont spec_onlyt binary_onlyt source_onlyt use_bzip2tdistribution_nametgrouptreleasetserialtvendortpackagert doc_filest changelogticont prep_scriptt build_scripttinstall_scriptt clean_scriptt verify_scriptt pre_installt post_installt pre_uninstalltpost_uninstalltpreptprovidestrequirest conflictstbuild_requirest obsoletest keep_temptuse_rpm_opt_flagst rpm3_modet no_autoreqt force_archR (tself((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pytinitialize_optionssN                                      cCs|jdd ƒ|jdkrR|js4td‚ntjj|jdƒ|_n|j dkr…|j ryt j |_ qšd|_ n|j rštd‚ntj dkr¼tdtj ‚n|jrÚ|jrÚtd ‚n|jjƒsõd |_n|jdd ƒ|jƒdS(NtbdistRs)you must specify --rpm-base in RPM 2 modetrpmRs8--python and --fix-python are mutually exclusive optionstposixs9don't know how to create RPM distributions on platform %ss6cannot supply both '--source-only' and '--binary-only'iR(s bdist_bases bdist_base(sdist_dirsdist_dir(tset_undefined_optionsRRR2RtostpathtjoinRRRtsyst executabletnameRRRt distributionthas_ext_modulesR1tfinalize_package_data(R5((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pytfinalize_options½s0         cCsÐ|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(NRsDevelopment/LibrariesRs%s <%s>RRtREADMEs README.txtRt1RRRR R!R"R#R$R%R&R'R(R)R+R,R-R.R/R4(REs README.txt(t ensure_stringRAt get_contacttget_contact_emailtensure_string_listt isinstanceRtlistR;R<texiststappendt_format_changelogRtensure_filename(R5treadme((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyRCßs>    !                  cCstr>dGHdG|jGHdG|jGHdG|jGHdG|jGHn|jr`|j}|j|ƒnNi}x;d(D]3}tj j |j |ƒ||<|j||ƒqmW|d}tj j |d |j j ƒƒ}|jt||jƒfd |ƒ|jrdS|j j}|jd ƒ}|jr4dg|_n dg|_|jd ƒ||j _|jƒd}|d}|j||ƒ|jrÊtj j|jƒr·|j|j|ƒqÊtd|j‚ntjdƒdg} tj jdƒstj jdƒrdg} n|jr)| jdƒn&|jrB| jdƒn | jdƒ|j r| j!ddtj j"|j ƒgƒn|j#sš| jdƒn|j$r³| jdƒn| j|ƒd} | d} d | d!} d"| | |f} tj%| ƒ}z±g}d}xs|j'ƒ}|s(Pnt(j)t(j*|ƒƒ}t+|ƒd#ksXt,‚|j|d$ƒ|dkr|d}qq|j-ƒ}|r°t.d%t/| ƒƒ‚nWd|j-ƒX|j0| ƒ|j1s|j j2ƒrðt3ƒ}nd&}|jsztj j |d |ƒ}tj j|ƒs0t,‚|j4||jƒtj j |j|ƒ}|j jjd'||fƒn|jsx’|D]‡}tj j |d |ƒ}tj j|ƒrŠ|j4||jƒtj j |jtj j5|ƒƒ}|j jjd'||fƒqŠqŠWqndS()Nsbefore _get_package_data():svendor =s packager =s doc_files =s changelog =tSOURCEStSPECStBUILDtRPMStSRPMSs%s.specs writing '%s'tsdisttbztartgztarisicon file '%s' does not exists building RPMsR8s/usr/bin/rpmbuilds /bin/rpmbuildtrpmbuilds-bss-bbs-bas--defines _topdir %ss--cleans--quiets%{name}-%{version}-%{release}s.src.rpms%{arch}/s .%{arch}.rpms%rpm -q --qf '%s %s\n' --specfile '%s'iisFailed to execute: %stanyR (RRRSRTRURV(6RRRRRRRtmkpathR;R<R=RRAtget_nametexecuteRt_make_spec_filet dist_filestreinitialize_commandRtformatst run_commandtget_archive_filest copy_fileR RMRRtinfoRRNRR2textendtabspathR0R tpopenRtreadlinetstringtsplittstriptlentAssertionErrortcloseRtreprtspawntdry_runRBRt move_filetbasename(R5tspec_dirtrpm_dirR t spec_pathtsaved_dist_filesRWtsourcet source_dirtrpm_cmdt nvr_stringtsrc_rpmt non_src_rpmtq_cmdtoutt binary_rpmst source_rpmtlinetltstatust pyversiontsrpmtfilenameR8((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pytrunsÄ                                            cCs"tjj|jtjj|ƒƒS(N(R;R<R=RRu(R5R<((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyt _dist_path—sc Csõd|jjƒd|jjƒjddƒd|jjƒd|jjddƒdd|jjƒg}|jd d d gƒ|jrš|jd ƒn |jd ƒ|jd|jj ƒd|j ddgƒ|j sÿ|jj ƒs|jdƒqn|jd|j ƒx~dBD]v}t |tj|ƒƒ}t|tƒrj|jd|tj|ƒfƒq|dCk r|jd||fƒqqW|jjƒdkrÆ|jd|jjƒƒn|jræ|jd|jƒn|jr|jdtj|jƒƒn|jr;|jdtjj|jƒƒn|jrT|jd ƒn|jdd!|jjƒgƒd"|jtjjtjd#ƒf}d$|}|j r¹d%|}nd&|}dDd*d+|fd,d-|fdEdFdGdHdIdJg }xŠ|D]‚\}} } t || ƒ}|s'| rý|jdd;|gƒ|ro|jtj!t"|d<ƒj#ƒd=ƒƒq|j| ƒqýqýW|jdd>d?gƒ|j$rÂ|jd@tj|j$ƒƒn|j%rñ|jddAgƒ|j|j%ƒn|S(KsiGenerate the text of an RPM spec file and return it as a list of strings (one per line). s %define name s%define version t-t_s%define unmangled_version s%define release ts Summary: s Name: %{name}sVersion: %{version}sRelease: %{release}s-Source0: %{name}-%{unmangled_version}.tar.bz2s,Source0: %{name}-%{unmangled_version}.tar.gzs License: sGroup: s>BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildrootsPrefix: %{_prefix}sBuildArch: noarchs BuildArch: %stVendortPackagertProvidestRequirest Conflictst Obsoletess%s: %stUNKNOWNsUrl: sDistribution: sBuildRequires: sIcon: s AutoReq: 0s %descriptions%s %sis%s buildsenv CFLAGS="$RPM_OPT_FLAGS" s>%s install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILESR*R!s&%setup -n %{name}-%{unmangled_version}tbuildR"tinstallR#tcleanR$srm -rf $RPM_BUILD_ROOTt verifyscriptR%tpreR&tpostR'tpreunR(tpostunR)t%trs s%files -f INSTALLED_FILESs%defattr(-,root,root)s%doc s %changelog(RRR‘R’R“R”N(spreps prep_scripts&%setup -n %{name}-%{unmangled_version}(R˜s clean_scriptsrm -rf $RPM_BUILD_ROOT(R™s verify_scriptN(Ršs pre_installN(R›s post_installN(Rœs pre_uninstallN(Rspost_uninstallN(&RAR]t get_versiontreplaceRtget_descriptionRgRRNt get_licenseRR4RBtgetattrRktlowerRKRLR=Rtget_urlRR.R R;R<RuR3tget_long_descriptionRR>targvR1RltopentreadRR( R5t spec_filetfieldtvaltdef_setup_callt def_buildt install_cmdtscript_optionstrpm_opttattrtdefault((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyR_šs¨        #     # &       +     cCs´|s |Sg}x‰tjtj|ƒdƒD]l}tj|ƒ}|ddkrg|jd|gƒq,|ddkr‡|j|ƒq,|jd|ƒq,W|ds°|d=n|S(sKFormat the changelog correctly and convert it to a list of strings s it*RŽRŒs (RkRlRmRgRN(R5Rt new_changelogR„((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyRO5s"  N(s bdist-base=Ns/base directory for creating built distributions(s rpm-base=Nsdbase directory for creating RPMs (defaults to "rpm" under --bdist-base; must be specified for RPM 2)(s dist-dir=R sDdirectory to put final RPM files in (and .spec files if --spec-only)(spython=NsMpath to Python interpreter to hard-code in the .spec file (default: "python")(s fix-pythonNsLhard-code the exact path to the current Python interpreter in the .spec file(s spec-onlyNsonly regenerate spec file(s source-onlyNsonly generate source RPM(s binary-onlyNsonly generate binary RPM(s use-bzip2Ns7use bzip2 instead of gzip to create source distribution(sdistribution-name=Nsgname of the (Linux) distribution to which this RPM applies (*not* the name of the module distribution!)(sgroup=Ns9package classification [default: "Development/Libraries"](srelease=NsRPM release number(sserial=NsRPM serial number(svendor=NsaRPM "vendor" (eg. "Joe Blow ") [default: maintainer or author from setup script](s packager=NsARPM packager (eg. "Jane Doe ")[default: vendor](s doc-files=Ns6list of documentation files (space or comma-separated)(s changelog=Ns RPM changelog(sicon=Nsname of icon file(s provides=Ns%capabilities provided by this package(s requires=Ns%capabilities required by this package(s conflicts=Ns-capabilities which conflict with this package(sbuild-requires=Ns+capabilities required to build this package(s obsoletes=Ns*capabilities made obsolete by this package(s no-autoreqNs+do not automatically calculate dependencies(s keep-tempR s"don't clean up RPM build directory(s no-keep-tempNs&clean up RPM build directory [default](suse-rpm-opt-flagsNs8compile with RPM_OPT_FLAGS when building from source RPM(sno-rpm-opt-flagsNs&do not pass any RPM CFLAGS to compiler(s rpm3-modeNs"RPM 3 compatibility mode (default)(s rpm2-modeNsRPM 2 compatibility mode(s prep-script=Ns3Specify a script for the PREP phase of RPM building(s build-script=Ns4Specify a script for the BUILD phase of RPM building(s pre-install=Ns:Specify a script for the pre-INSTALL phase of RPM building(sinstall-script=Ns6Specify a script for the INSTALL phase of RPM building(s post-install=Ns;Specify a script for the post-INSTALL phase of RPM building(spre-uninstall=Ns<Specify a script for the pre-UNINSTALL phase of RPM building(spost-uninstall=Ns=Specify a script for the post-UNINSTALL phase of RPM building(s clean-script=Ns4Specify a script for the CLEAN phase of RPM building(sverify-script=Ns6Specify a script for the VERIFY phase of the RPM build(s force-arch=Ns0Force an architecture onto the RPM build process(squietR s3Run the INSTALL phase of RPM building in quiet mode(t__name__t __module__t descriptionRt user_optionstboolean_optionst negative_optR6RDRCRŠR‹R_RO(((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyR s¾      0 " / ‰  ›(t__doc__t __revision__R>R;Rktdistutils.coreRtdistutils.debugRtdistutils.file_utilRtdistutils.sysconfigRtdistutils.errorsRRRRt distutilsRR (((s3/usr/lib64/python2.7/distutils/command/bdist_rpm.pyts   "