* added "pear makerpm" command for wrapping PEAR packages in RPMs

This commit is contained in:
Stig Bakken 2002-10-12 14:19:50 +00:00
parent 846ad56a13
commit 6fc63bbdd8
3 changed files with 162 additions and 1 deletions

View File

@ -106,6 +106,36 @@ List all depencies the package has.'
'doc' => '<package-file>
Signs a package distribution (.tar or .tgz) file with GnuPG.',
),
'makerpm' => array(
'summary' => 'Builds an RPM package from a PEAR package',
'function' => 'doMakeRPM',
'shortcut' => 'rpm',
'options' => array(
'spec-template' => array(
'shortopt' => 't',
'arg' => 'FILE',
'doc' => 'Use FILE as RPM spec file template'
),
'rpm-pkgname' => array(
'shortopt' => 'p',
'arg' => 'FORMAT',
'doc' => 'Use FORMAT as format string for RPM package name, %s is replaced
by the PEAR package name, defaults to "PEAR::%s".',
),
),
'doc' => '<package-file>
Creates an RPM .spec file for wrapping a PEAR package inside an RPM
package. Intended to be used from the SPECS directory, with the PEAR
package tarball in the SOURCES directory:
$ pear makerpm ../SOURCES/Net_Socket-1.0.tgz
Wrote RPM spec file PEAR::Net_Geo-1.0.spec
$ rpm -bb PEAR::Net_Socket-1.0.spec
...
Wrote: /usr/src/redhat/RPMS/i386/PEAR::Net_Socket-1.0-1.i386.rpm
',
),
);
var $output;
@ -374,6 +404,93 @@ Signs a package distribution (.tar or .tgz) file with GnuPG.',
$tar->addModify("$tmpdir/package.sig", '', $tmpdir);
return true;
}
function doMakeRPM($command, $options, $params)
{
if (sizeof($params) != 1) {
return $this->raiseError("bad parameter(s), try \"help $command\"");
}
if (!file_exists($params[0])) {
return $this->raiseError("file does not exist: $params[0]");
}
include_once "Archive/Tar.php";
include_once "PEAR/Installer.php";
include_once "System.php";
$tar = new Archive_Tar($params[0]);
$tmpdir = System::mktemp('-d pear2rpm');
$instroot = System::mktemp('-d pear2rpm');
$tmp = $this->config->get('verbose');
$this->config->set('verbose', 0);
$installer = new PEAR_Installer($this->ui);
$info = $installer->install($params[0],
array('installroot' => $instroot,
'nodeps' => true));
$pkgdir = "$info[package]-$info[version]";
// print "instroot=$instroot\n";
// print_r($info);
// return true;
$info['rpm_xml_dir'] = '/var/lib/pear';
$this->config->set('verbose', $tmp);
if (!$tar->extractList("$pkgdir/package.xml", $tmpdir, $pkgdir)) {
return $this->raiseError("failed to extract $params[0]");
}
if (!file_exists("$tmpdir/package.xml")) {
return $this->raiseError("no package.xml found in $params[0]");
}
// System::mkdir("-p $instroot$info[rpm_xml_dir]");
// if (!@copy("$tmpdir/package.xml", "$instroot$info[rpm_xml_dir]/$info[package].xml")) {
// return $this->raiseError("could not copy package.xml file: $php_errormsg");
// }
if (isset($options['spec-template'])) {
$spec_template = $options['spec-template'];
} else {
$spec_template = $this->config->get('data_dir') .
'/PEAR/template.spec';
}
if (isset($options['rpm-pkgname'])) {
$rpm_pkgname_format = $options['rpm-pkgname'];
} else {
$rpm_pkgname_format = "PEAR::%s";
}
$info['extra_headers'] = '';
$info['doc_files'] = '';
$info['files'] = '';
$info['rpm_package'] = sprintf($rpm_pkgname_format, $info['package']);
$srcfiles = 0;
foreach ($info['filelist'] as $name => $attr) {
if ($attr['role'] == 'doc') {
$info['doc_files'] .= " $name";
} elseif ($attr['role'] == 'src') {
$srcfiles++;
}
$info['files'] .= "$attr[installed_as]\n";
}
if ($srcfiles > 0) {
include_once "OS/Guess.php";
$os = new OS_Guess;
$arch = $os->getCpu();
} else {
$arch = 'noarch';
}
$fp = @fopen($spec_template, "r");
if (!$fp) {
return $this->raiseError("could not open RPM spec file template $spec_template: $php_errormsg");
}
$spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]', fread($fp, filesize($spec_template)));
fclose($fp);
$spec_file = "$info[rpm_package]-$info[version].spec";
$wp = fopen($spec_file, "w");
if (!$wp) {
return $this->raiseError("could not write RPM spec file $spec_file: $php_errormsg");
}
fwrite($wp, $spec_contents);
fclose($wp);
$this->ui->outputData("Wrote RPM spec file $spec_file", $command);
return true;
}
}
?>

View File

@ -31,7 +31,7 @@
</maintainer>
</maintainers>
<release>
<version>1.0RC1</version>
<version>1.0b1</version>
<state>stable</state>
<date>2002-10-13</date>
<notes>
@ -77,6 +77,7 @@ Bugfixes, PEAR Library:
</notes>
<filelist>
<file role="data" name="package.dtd"/>
<file role="data" name="template.spec"/>
<file role="php" name="PEAR.php"/>
<file role="php" name="System.php"/>
<dir name="PEAR">

43
pear/template.spec Normal file
View File

@ -0,0 +1,43 @@
Summary: PEAR: @summary@
Name: @rpm_package@
Version: @version@
Release: 1
License: @release_license@
Group: Development/Libraries
Source: http://pear.php.net/get/@package@-%{version}.tgz
BuildRoot: %{_tmppath}/%{name}-root
URL: http://pear.php.net/
Prefix: %{_prefix}
Docdir: %{_docdir}
@extra_headers@
%description
@description@
%prep
#rm -rf Console_Getopt-%{version} package.xml
#mkdir -p Console_Getopt-%{version}
#ln -s Console_Getopt-%{version}/package.xml package.xml
%setup -q -D -n @package@-%{version}
mv ../package.xml .
%build
echo BuildRoot=%{buildroot}
%post
pear uninstall --nodeps -r @package@
%postun
pear install --nodeps -r @rpm_xml_dir@/@package@.xml
%install
rm -rf %{buildroot}/*
pear -q install -R %{buildroot} -n package.xml
mkdir -p %{buildroot}@rpm_xml_dir@
cp -p package.xml %{buildroot}@rpm_xml_dir@/@package@.xml
%files
%defattr(-,root,root)
%doc @doc_files@
@files@
@rpm_xml_dir@/@package@.xml