From: Stig Bakken Date: Mon, 20 May 2002 10:46:01 +0000 (+0000) Subject: * new installer rule that does not depend on bash X-Git-Tag: RELEASE_0_10~84 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=344ba505b9695b7d26fd95458748db5cc91fa5e6;p=php * new installer rule that does not depend on bash --- diff --git a/pear/Makefile.frag b/pear/Makefile.frag index f49b7d7650..ca171320c5 100644 --- a/pear/Makefile.frag +++ b/pear/Makefile.frag @@ -98,33 +98,10 @@ peardir=$(PEAR_INSTALLDIR) 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 '' $$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 \ diff --git a/pear/install-pear.php b/pear/install-pear.php new file mode 100644 index 0000000000..39ded5ea9f --- /dev/null +++ b/pear/install-pear.php @@ -0,0 +1,93 @@ + 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