Re: [Patch] for template.spec in PHP/PEAR dist
| From: | Greg Beaver | Date: | Wed, 07 Apr 2004 17:38:18 +0000 |
| Subject: | Re: [Patch] for template.spec in PHP/PEAR dist | ||
| References: | 1 | Groups: | php.pear.dev |
| Request: | Send a blank email to pear-dev+get-27136@lists.php.net to get a copy of this message | ||
This is fantastic work. Could you please open a bug for the PEAR package containing the contents of this message?
Thank you,
Greg
Daichi Shinozaki wrote:
Hi, I've found minor problems in template.spec which is a part of PEAR/PHP distribution. o When trying to build rpms from pear packages(.tgz) by issuing command '/usr/bin/pear makerpm <package.tgz>', document files listed in packages.xml was not added to rpm as expected in some packages. For example, ==snip root@mantra /tmp/pear# pear makerpm Archive_Tar-1.1.tgz Notice: Undefined index: role in Package.php on line 645 Notice: Undefined index: role in Package.php on line 654 Wrote RPM spec file PEAR::Archive_Tar-1.1.spec root@mantra /tmp/pear# rpmbuild -bb PEAR\:\:Archive_Tar-1.1.spec (...) Processing files: PEAR::Archive_Tar-1.1-1 Executing(%doc): /sbin/bash -e /var/tmp/rpm-tmp.55483 + umask 022 + cd /usr/src/trustix/build + DOCDIR=/var/tmp/PEAR::Archive_Tar-root/usr/share/doc/PEAR::Archive_Tar-1.1 + export DOCDIR + rm -rf /var/tmp/PEAR::Archive_Tar-root/usr/share/doc/PEAR::Archive_Tar-1.1 + /bin/mkdir -p /var/tmp/PEAR::Archive_Tar-root/usr/share/doc/PEAR::Archive_Tar-1.1 + cp -pr docs/Archive_Tar.txt /var/tmp/PEAR::Archive_Tar-root/usr/share/doc/PEAR::Archive_Tar-1.1 cp: cannot stat `docs/Archive_Tar.txt': No such file or directory error: Bad exit status from /var/tmp/rpm-tmp.55483 (%doc) (...) Wrote: /usr/src/trustix/rpms/noarch/PEAR::Archive_Tar-1.1-1.noarch.rpm root@mantra /tmp/pear# ==snip (package_root)/docs/Archive_Tar.txt listed in package.xml was not added to PEAR::Archive_Tar-1.1-1.noarch.rpm) Reason: template.spec only care (package_root)/doc for documentation directory, but Archive_Tar and other packages use diffirent directory name for doc dir -- (package_root)/docs, and (package_root)/examples, and so on. o Due to other reason, documentations of DB-1.6.1.tgz also not added to rpm. From packages.xml of DB-1.6.1: (...)<file role="doc" name="doc\IDEAS"/> <file role="doc" name="doc\MAINTAINERS"/> <file role="doc" name="doc\STATUS"/> <file role="doc" name="doc\TESTERS"/>(...) '\' used for directory separator, but no translation was done when generating the spec file so resulting spec file contains '\' as directory separator. This is not good on unix platform. I think '\' should be replaced to php constant DIRECTORY_SEPARATOR in PEAR/Command/Package.php. o When trying to uninstall rpms, following error occurred. ==snip root@mantra /tmp/pear# rpm -ivh PEAR::HTML_QuickForm-3.2.2-1.noarch.rpm 1:PEAR::HTML_QuickForm #################################### [100%] install ok: HTML_QuickForm 3.2.2 root@mantra /tmp/pear# rpm -e PEAR\:\:HTML_QuickForm uninstall ok: HTML_QuickForm rm: cannot remove `/var/lib/pear/HTML_QuickForm.xml': No such file or directory error: execution of %postun scriptlet from PEAR::HTML_QuickForm-3.2.2-1 failed, exit status 1 ==snip in template.spec: %postun pear uninstall --nodeps -r @package@ rm @rpm_xml_\dir@/@package@.xml Simply, a line 'rm @rpm_xml_dir@/@package@.xml' not needed? My testing environment is following: Trustix-2.0(based on RH72), rpm-4.0.4, php-4.3.5 Regards, Daichi Shinozaki ------------------------------------------------------------------------ --- PEAR-1.3.1/template.spec.orig 2003-06-16 17:27:47.000000000 +0900 +++ PEAR-1.3.1/template.spec 2004-04-07 23:56:52.000000000 +0900 @@ -30,9 +30,11 @@ %build echo BuildRoot=%{buildroot} +%clean +[ -n "%{buildroot}" -a "%{buildroot}" != / ] && rm -rf %{buildroot} + %postun pear uninstall --nodeps -r @package@ -rm @rpm_xml_dir@/@package@.xml %post pear install --nodeps -r @rpm_xml_dir@/@package@.xml @@ -44,11 +46,13 @@ rm %{buildroot}/%{_libdir}/php/pear/.filemap rm %{buildroot}/%{_libdir}/php/pear/.lock rm -rf %{buildroot}/%{_libdir}/php/pear/.registry -if [ -d "%{buildroot}/docs/@package@/doc" ]; then- rm -rf $RPM_BUILD_DIR/doc - mv %{buildroot}/docs/@package@/doc $RPM_BUILD_DIR - rm -rf %{buildroot}/docs-fi +for DOCDIR in doc docs examples; do+ if [ -d "%{buildroot}/docs/@package@/$DOCDIR" ]; then + rm -rf $RPM_BUILD_DIR/$DOCDIR + mv %{buildroot}/docs/@package@/$DOCDIR $RPM_BUILD_DIR + rm -rf %{buildroot}/docs + fi+done mkdir -p %{buildroot}@rpm_xml_dir@ tar -xzf $RPM_SOURCE_DIR/@package@-%{version}.tgz package.xml cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml ------------------------------------------------------------------------ --- PEAR-1.3.1/PEAR/Command/Package.php.orig 2004-02-01 07:39:25.000000000 +0900 +++ PEAR-1.3.1/PEAR/Command/Package.php 2004-04-08 00:49:05.000000000 +0900 @@ -638,8 +638,12 @@$info['rpm_package'] = sprintf($rpm_pkgname_format, $info['package']); $srcfiles = 0; foreach ($info['filelist'] as $name => $attr) {-+ if (!array_key_exists('role', $info)) { + continue; + } + if ($attr['role'] == 'doc') { + $name = preg_replace('![/:\\\\]!', DIRECTORY_SEPARATOR, $name); $info['doc_files'] .= " $name"; // Map role to the rpm vars