]> granicus.if.org Git - php/commitdiff
* new installer rule that does not depend on bash
authorStig Bakken <ssb@php.net>
Mon, 20 May 2002 10:46:01 +0000 (10:46 +0000)
committerStig Bakken <ssb@php.net>
Mon, 20 May 2002 10:46:01 +0000 (10:46 +0000)
pear/Makefile.frag
pear/install-pear.php [new file with mode: 0644]

index f49b7d7650a29f97fb4b03d6e3092982351f36fd..ca171320c5daeeabc5b1193afed62dab8ce178bd 100644 (file)
@@ -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 '<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 \
diff --git a/pear/install-pear.php b/pear/install-pear.php
new file mode 100644 (file)
index 0000000..39ded5e
--- /dev/null
@@ -0,0 +1,93 @@
+<?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