summaryrefslogtreecommitdiff
path: root/pear/PEAR/Installer.php
diff options
context:
space:
mode:
Diffstat (limited to 'pear/PEAR/Installer.php')
-rw-r--r--pear/PEAR/Installer.php242
1 files changed, 0 insertions, 242 deletions
diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php
deleted file mode 100644
index a4c595691a..0000000000
--- a/pear/PEAR/Installer.php
+++ /dev/null
@@ -1,242 +0,0 @@
-<?php
-//
-// +----------------------------------------------------------------------+
-// | PHP version 4.0 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2001 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Stig Bakken <ssb@fast.no> |
-// | Tomas V.V.Cox <cox@idecnet.com> |
-// | |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-
-require_once "PEAR/Common.php";
-
-/**
- * Administration class used to install PEAR packages and maintain the
- * installed package database.
- *
- * TODO:
- * - maintain file perms (look at umask or fileperms+chmod), ideas are welcome
- *
- * @since PHP 4.0.2
- * @author Stig Bakken <ssb@fast.no>
- */
-class PEAR_Installer extends PEAR_Common
-{
- // {{{ properties
-
- /** name of the package directory, for example Foo-1.0 */
- var $pkgdir;
-
- /** directory where PHP code files go */
- var $phpdir;
-
- /** directory where PHP extension files go */
- var $extdir;
-
- /** directory where documentation goes */
- var $docdir;
-
- /** directory where the package wants to put files, relative
- * to one of the three previous dirs
- */
- var $destdir = '';
-
- /** debug level (integer) */
- var $debug = 1;
-
- /** temporary directory */
- var $tmpdir;
-
- // }}}
-
- // {{{ constructor
-
- function PEAR_Installer($phpdir = PEAR_INSTALL_DIR,
- $extdir = PEAR_EXTENSION_DIR,
- $docdir = '')
- {
- $this->PEAR();
- $this->phpdir = $phpdir;
- $this->extdir = $extdir;
- $this->docdir = $docdir;
- $this->statedir = "/var/lib/php"; // XXX FIXME Windows
- }
-
- // }}}
- // {{{ destructor
-
- function _PEAR_Installer()
- {
- chdir($this->pwd);
- if ($this->tmpdir && is_dir($this->tmpdir)) {
- system("rm -rf $this->tmpdir"); // XXX FIXME Windows
- }
- $this->tmpdir = null;
- $this->_PEAR_Common();
- }
-
- // }}}
- // {{{ install()
-
- /**
- * Installs the files within the package file specified.
- *
- * @param $pkgfile path to the package file
- *
- * @return bool true if successful, false if not
- */
-
- function install($pkgfile)
- {
- // XXX FIXME Add here code to manage packages database
- //$this->loadPackageList("$this->statedir/packages.lst");
- $this->pwd = getcwd();
- $need_download = false;
- if (preg_match('#^(http|ftp)://#', $pkgfile)) {
- $need_download = true;
- } elseif (!@is_file($pkgfile)) {
- return $this->raiseError("Could not open the package file: $pkgfile");
- }
- // Download package -----------------------------------------------
- if ($need_download) {
- $file = basename($pkgfile);
- // XXX FIXME use ??? on Windows, use $TMPDIR on unix (use tmpnames?)
- $downloaddir = '/tmp/pearinstall';
- if (!$this->mkDirHier($downloaddir)) {
- return $this->raiseError("Failed to create tmp dir: $downloaddir");
- }
- $downloadfile = $downloaddir.DIRECTORY_SEPARATOR.$file;
- $this->log(1, "downloading $pkgfile ...");
- if (!$fp = @fopen($pkgfile, 'r')) {
- return $this->raiseError("$pkgfile: failed to download ($php_errormsg)");
- }
- if (!$wp = @fopen($downloadfile, 'w')) {
- return $this->raiseError("$downloadfile: write failed ($php_errormsg)");
- }
- $this->addTempFile($downloadfile);
- $bytes = 0;
- while ($data = @fread($fp, 16384)) {
- $bytes += strlen($data);
- if (!@fwrite($wp, $data)) {
- return $this->raiseError("$downloadfile: write failed ($php_errormsg)");
- }
- }
- $pkgfile = $downloadfile;
- fclose($fp);
- fclose($wp);
- $this->log(1, '...done: ' . number_format($bytes, 0, '', ',') . ' bytes');
- }
-
- // Decompress pack in tmp dir -------------------------------------
-
- // To allow relative package file calls
- if (!chdir(dirname($pkgfile))) {
- return $this->raiseError('Unable to chdir to pakage directory');
- }
- $pkgfile = getcwd() . DIRECTORY_SEPARATOR . basename($pkgfile);
-
- // XXX FIXME Windows
- $this->tmpdir = tempnam('/tmp', 'pear');
- unlink($this->tmpdir);
- if (!mkdir($this->tmpdir, 0755)) {
- return $this->raiseError("Unable to create temporary directory $this->tmpdir.");
- } else {
- $this->log(2, '+ tmp dir created at ' . $this->tmpdir);
- }
- $this->addTempFile($this->tmpdir);
- if (!chdir($this->tmpdir)) {
- return $this->raiseError("Unable to chdir to $this->tmpdir.");
- }
- // XXX FIXME Windows
- $fp = popen("gzip -dc $pkgfile | tar -xvf -", 'r');
- $this->log(2, "+ launched command: gzip -dc $pkgfile | tar -xvf -");
- if (!is_resource($fp)) {
- return $this->raiseError("Unable to examine $pkgfile (gzip or tar failed)");
- }
- while ($line = fgets($fp, 4096)) {
- $line = rtrim($line);
- if (preg_match('!^[^/]+/package.xml$!', $line)) {
- if (isset($descfile)) {
- return $this->raiseError("Invalid package: multiple package.xml files at depth one!");
- }
- $descfile = $line;
- }
- }
- pclose($fp);
- if (!isset($descfile) || !is_file($descfile)) {
- return $this->raiseError("No package.xml file after extracting the archive.");
- }
-
- // Parse xml file -----------------------------------------------
- $pkginfo = $this->infoFromDescriptionFile($descfile);
- if (PEAR::isError($pkginfo)) {
- return $pkginfo;
- }
-
- // Copy files to dest dir ---------------------------------------
- if (!is_dir($this->phpdir)) {
- return $this->raiseError("No script destination directory found\n",
- null, PEAR_ERROR_DIE);
- }
- $tmp_path = dirname($descfile);
- foreach ($pkginfo['filelist'] as $fname => $atts) {
- $dest_dir = $this->phpdir . DIRECTORY_SEPARATOR;
- if (isset($atts['BaseInstallDir'])) {
- $dest_dir .= $atts['BaseInstallDir'] . DIRECTORY_SEPARATOR;
- }
- if (dirname($fname) != '.') {
- $dest_dir .= dirname($fname) . DIRECTORY_SEPARATOR;
- }
- $fname = $tmp_path . DIRECTORY_SEPARATOR . $fname;
- $this->_installFile($fname, $dest_dir, $atts);
- }
- return true;
- }
-
- function _installFile($file, $dest_dir, $atts)
- {
- $type = strtolower($atts['Role']);
- switch ($type) {
- case "test":
- // don't install test files for now
- $this->log(2, "+ Test file $file won't be installed yet");
- return true;
- break;
- case 'doc':
- case 'php':
- default:
- $dest_file = $dest_dir . basename($file);
- break;
- }
- if (!@is_dir($dest_dir)) {
- if (!$this->mkDirHier($dest_dir)) {
- $this->log(0, "failed to mkdir $dest_dir");
- return false;
- }
- $this->log(2, "+ created dir $dest_dir");
- }
- if (!@copy($file, $dest_file)) {
- $this->log(0, "failed to copy $file to $dest_file");
- return false;
- }
- $this->log(2, "+ copy $file to $dest_file");
- // FIXME Update Package database here
- //$this->updatePackageListFrom("$d/$file");
- $this->log(1, "installed file $dest_file");
- return true;
- }
- // }}}
-}
-?> \ No newline at end of file