PEARCMD=$(top_builddir)/sapi/cli/php -d include_path=$(top_srcdir)/pear pear/scripts/pear.in
install-pear-installer: $(top_builddir)/sapi/cli/php
- @for descfile in $(srcdir)/package-*.xml; do \
- tmp="$${descfile%.xml}"; \
- pkgname="$${tmp#*-}"; \
- pkgver=`grep '<version>' $$descfile|head -1|cut -d\> -f2|cut -d\< -f1`; \
- if $(PEARCMD) shell-test $$pkgname; then \
- if ! $(PEARCMD) shell-test $$pkgname $$pkgver; then \
- $(PEARCMD) -q upgrade $$descfile | sed -e "s/^/$$pkgname $$pkgver: /"; \
- fi; \
- else \
- $(PEARCMD) -q install $$descfile | sed -e "s/^/$$pkgname $$pkgver: /"; \
- fi; \
- done
+ $(top_builddir)/sapi/cli/php $(srcdir)/install-pear.php $(srcdir)/package-*.xml
-install-pear-packages: # requires cli installed
- @/bin/ls -1 $(srcdir)/packages | while read package; do \
- case $$package in \
- *.tgz) pkg=$${package%.tgz};; \
- *.tar) pkg=$${package%.tar};; \
- *) continue;; \
- esac; \
- pkgname="$${pkg%-*}"; pkgver="$${pkg#*-}"; \
- if $(INSTALL_ROOT)$(bindir)/pear -d php_dir=$(INSTALL_ROOT)$(PEAR_INSTALLDIR) shell-test $$pkgname $$pkgver; then \
- echo "$$pkgname $$pkgver: already installed"; \
- else \
- $(INSTALL_ROOT)$(bindir)/pear -q -d php_dir=$(INSTALL_ROOT)$(PEAR_INSTALLDIR) -d bin_dir=$(INSTALL_ROOT)$(bindir) -d doc_dir=$(INSTALL_ROOT)$(datadir)/doc/pear -d ext_dir=$(INSTALL_ROOT)$(EXTENSION_DIR) install $(srcdir)/packages/$$package 2>&1 | sed -e "s/^/$$pkgname $$pkgver: /"; \
- fi; \
- done
+install-pear-packages: $(top_builddir)/sapi/cli/php
+ $(top_builddir)/sapi/cli/php $(srcdir)/install-pear.php $(srcdir)/packages/*.tar
install-pear:
@if $(mkinstalldirs) $(INSTALL_ROOT)$(peardir); then \
--- /dev/null
+<?php
+
+$pear_dir = dirname(__FILE__);
+ini_set('include_path', $pear_dir);
+##//include_once 'PEAR/Config.php';
+include_once 'PEAR.php';
+include_once 'PEAR/Installer.php';
+include_once 'PEAR/Registry.php';
+include_once 'PEAR/Frontend/CLI.php';
+
+##//$config = &PEAR_Config::singleton();
+
+array_shift($argv);
+if ($argv[0] == '--force') {
+ array_shift($argv);
+ $force = true;
+} else {
+ $force = false;
+}
+// package => install_file
+$install_files = array();
+
+/*
+$dp = opendir($pear_dir);
+while ($ent = readdir($dp)) {
+ if (ereg('^package-(.*)\.xml$', $ent, $matches)) {
+ $install_files[$matches[1]] = $ent;
+ }
+}
+closedir($dp);
+*/
+foreach ($argv as $arg) {
+ $bn = basename($arg);
+ if (ereg('^package-(.*)\.xml$', $bn, $matches) ||
+ ereg('^([A-Za-z0-9_:]+)-.*\.(tar|tgz)$', $bn, $matches)) {
+ $install_files[$matches[1]] = $arg;
+ }
+}
+
+$config = &PEAR_Config::singleton();
+
+// make sure we use only default values
+$config_layers = $config->getLayers();
+foreach ($config_layers as $layer) {
+ if ($layer == 'default') continue;
+ $config->removeLayer($layer);
+}
+$config->set('verbose', 0, 'default');
+
+$reg = &new PEAR_Registry($config->get('php_dir'));
+$ui = &new PEAR_Frontend_CLI();
+$installer = &new PEAR_Installer($ui);
+
+foreach ($install_files as $package => $instfile) {
+ if ($reg->packageExists($package)) {
+ $info = $installer->infoFromAny($instfile);
+ if (PEAR::isError($info)) {
+ $ui->displayLine(sprintf("[PEAR] %s: %s", $package, $info->getMessage()));
+ continue;
+ }
+ $new_ver = $info['version'];
+ $old_ver = $reg->packageInfo($package, 'version');
+ if (version_compare($new_ver, $old_ver, 'gt')) {
+ $err = $installer->install($instfile, array('upgrade' => true));
+ if (PEAR::isError($err)) {
+ $ui->displayLine(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+ continue;
+ }
+ $ui->displayLine(sprintf("[PEAR] %-15s- upgraded: %s", $package, $new_ver));
+ } else {
+ if (@$argv[1] == '--force') {
+ $err = $installer->install($instfile, array('force' => true));
+ if (PEAR::isError($err)) {
+ $ui->displayLine(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+ continue;
+ }
+ $ui->displayLine(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
+ } else {
+ $ui->displayLine(sprintf("[PEAR] %-15s- not installed (already have %s)", $package, $old_ver));
+ }
+ }
+ } else {
+ $err = $installer->install($instfile);
+ if (PEAR::isError($err)) {
+ $ui->displayLine(sprintf("[PEAR] %s: %s", $package, $err->getMessage()));
+ continue;
+ }
+ $new_ver = $reg->packageInfo($package, 'version');
+ $ui->displayLine(sprintf("[PEAR] %-15s- installed: %s", $package, $new_ver));
+ }
+}
+
+?>
\ No newline at end of file