Subversion Repositories Applications.gtt

Compare Revisions

Ignore whitespace Rev 94 → Rev 187

/trunk/bibliotheque/pear/PEAR/Dependency2.php
4,18 → 4,11
*
* PHP versions 4 and 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* http://www.php.net/license/3_0.txt. If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
*
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version CVS: $Id: Dependency2.php,v 1.54 2007/02/13 04:16:25 cellog Exp $
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @link http://pear.php.net/package/PEAR
* @since File available since Release 1.4.0a1
*/
35,9 → 28,9
* @category pear
* @package PEAR
* @author Greg Beaver <cellog@php.net>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_0.txt PHP License 3.0
* @version Release: 1.5.1
* @copyright 1997-2009 The Authors
* @license http://opensource.org/licenses/bsd-license.php New BSD License
* @version Release: 1.10.1
* @link http://pear.php.net/package/PEAR
* @since Class available since Release 1.4.0a1
*/
49,32 → 42,39
* @var integer
*/
var $_state;
 
/**
* Command-line options to install/upgrade/uninstall commands
* @param array
*/
var $_options;
 
/**
* @var OS_Guess
*/
var $_os;
 
/**
* @var PEAR_Registry
*/
var $_registry;
 
/**
* @var PEAR_Config
*/
var $_config;
 
/**
* @var PEAR_DependencyDB
*/
var $_dependencydb;
 
/**
* Output of PEAR_Registry::parsedPackageName()
* @var array
*/
var $_currentPackage;
 
/**
* @param PEAR_Config
* @param array installation options
81,7 → 81,7
* @param array format of PEAR_Registry::parsedPackageName()
* @param int installation state (one of PEAR_VALIDATE_*)
*/
function PEAR_Dependency2(&$config, $installoptions, $package,
function __construct(&$config, $installoptions, $package,
$state = PEAR_VALIDATE_INSTALLING)
{
$this->_config = &$config;
88,20 → 88,24
if (!class_exists('PEAR_DependencyDB')) {
require_once 'PEAR/DependencyDB.php';
}
 
if (isset($installoptions['packagingroot'])) {
// make sure depdb is in the right location
$config->setInstallRoot($installoptions['packagingroot']);
}
 
$this->_registry = &$config->getRegistry();
$this->_dependencydb = &PEAR_DependencyDB::singleton($config);
if (isset($installoptions['packagingroot'])) {
$config->setInstallRoot(false);
}
 
$this->_options = $installoptions;
$this->_state = $state;
if (!class_exists('OS_Guess')) {
require_once 'OS/Guess.php';
}
 
$this->_os = new OS_Guess;
$this->_currentPackage = $package;
}
112,6 → 116,7
if (isset($dep['uri'])) {
return '';
}
 
if (isset($dep['recommended'])) {
$extra .= 'recommended version ' . $dep['recommended'];
} else {
118,6 → 123,7
if (isset($dep['min'])) {
$extra .= 'version >= ' . $dep['min'];
}
 
if (isset($dep['max'])) {
if ($extra != ' (') {
$extra .= ', ';
124,13 → 130,16
}
$extra .= 'version <= ' . $dep['max'];
}
 
if (isset($dep['exclude'])) {
if (!is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
 
if ($extra != ' (') {
$extra .= ', ';
}
 
$extra .= 'excluded versions: ';
foreach ($dep['exclude'] as $i => $exclude) {
if ($i) {
140,10 → 149,12
}
}
}
 
$extra .= ')';
if ($extra == ' ()') {
$extra = '';
}
 
return $extra;
}
 
171,37 → 182,32
*/
function validateOsDependency($dep)
{
if ($this->_state != PEAR_VALIDATE_INSTALLING &&
$this->_state != PEAR_VALIDATE_DOWNLOADING) {
if ($this->_state != PEAR_VALIDATE_INSTALLING && $this->_state != PEAR_VALIDATE_DOWNLOADING) {
return true;
}
if (isset($dep['conflicts'])) {
$not = true;
} else {
$not = false;
}
 
if ($dep['name'] == '*') {
return true;
}
 
$not = isset($dep['conflicts']) ? true : false;
switch (strtolower($dep['name'])) {
case 'windows' :
if ($not) {
if (strtolower(substr($this->getPHP_OS(), 0, 3)) == 'win') {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError("Cannot install %s on Windows");
} else {
return $this->warning("warning: Cannot install %s on Windows");
}
 
return $this->warning("warning: Cannot install %s on Windows");
}
} else {
if (strtolower(substr($this->getPHP_OS(), 0, 3)) != 'win') {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError("Can only install %s on Windows");
} else {
return $this->warning("warning: Can only install %s on Windows");
}
 
return $this->warning("warning: Can only install %s on Windows");
}
}
break;
209,23 → 215,19
$unices = array('linux', 'freebsd', 'darwin', 'sunos', 'irix', 'hpux', 'aix');
if ($not) {
if (in_array($this->getSysname(), $unices)) {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError("Cannot install %s on any Unix system");
} else {
return $this->warning(
"warning: Cannot install %s on any Unix system");
}
 
return $this->warning( "warning: Cannot install %s on any Unix system");
}
} else {
if (!in_array($this->getSysname(), $unices)) {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError("Can only install %s on a Unix system");
} else {
return $this->warning(
"warning: Can only install %s on a Unix system");
}
 
return $this->warning("warning: Can only install %s on a Unix system");
}
}
break;
236,23 → 238,22
!isset($this->_options['force'])) {
return $this->raiseError('Cannot install %s on ' . $dep['name'] .
' operating system');
} else {
return $this->warning('warning: Cannot install %s on ' .
$dep['name'] . ' operating system');
}
 
return $this->warning('warning: Cannot install %s on ' .
$dep['name'] . ' operating system');
}
} else {
if (strtolower($dep['name']) != strtolower($this->getSysname())) {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('Cannot install %s on ' .
$this->getSysname() .
' operating system, can only install on ' . $dep['name']);
} else {
return $this->warning('warning: Cannot install %s on ' .
$this->getSysname() .
' operating system, can only install on ' . $dep['name']);
}
 
return $this->warning('warning: Cannot install %s on ' .
$this->getSysname() .
' operating system, can only install on ' . $dep['name']);
}
}
}
279,34 → 280,33
if ($this->_state != PEAR_VALIDATE_INSTALLING) {
return true;
}
if (isset($dep['conflicts'])) {
$not = true;
} else {
$not = false;
}
 
$not = isset($dep['conflicts']) ? true : false;
if (!$this->matchSignature($dep['pattern'])) {
if (!$not) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s Architecture dependency failed, does not ' .
'match "' . $dep['pattern'] . '"');
} else {
return $this->warning('warning: %s Architecture dependency failed, does ' .
'not match "' . $dep['pattern'] . '"');
}
 
return $this->warning('warning: %s Architecture dependency failed, does ' .
'not match "' . $dep['pattern'] . '"');
}
 
return true;
} else {
if ($not) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s Architecture dependency failed, required "' .
$dep['pattern'] . '"');
} else {
return $this->warning('warning: %s Architecture dependency failed, ' .
'required "' . $dep['pattern'] . '"');
}
}
 
if ($not) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s Architecture dependency failed, required "' .
$dep['pattern'] . '"');
}
return true;
 
return $this->warning('warning: %s Architecture dependency failed, ' .
'required "' . $dep['pattern'] . '"');
}
 
return true;
}
 
/**
324,9 → 324,9
{
if ($name !== null) {
return phpversion($name);
} else {
return phpversion();
}
 
return phpversion();
}
 
function validateExtensionDependency($dep, $required = true)
335,92 → 335,101
$this->_state != PEAR_VALIDATE_DOWNLOADING) {
return true;
}
 
$loaded = $this->extension_loaded($dep['name']);
$extra = $this->_getExtraString($dep);
$extra = $this->_getExtraString($dep);
if (isset($dep['exclude'])) {
if (!is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
}
 
if (!isset($dep['min']) && !isset($dep['max']) &&
!isset($dep['recommended']) && !isset($dep['exclude'])) {
!isset($dep['recommended']) && !isset($dep['exclude'])
) {
if ($loaded) {
if (isset($dep['conflicts'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra);
} else {
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra);
}
 
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra);
}
 
return true;
} else {
if (isset($dep['conflicts'])) {
return true;
}
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP extension "' .
$dep['name'] . '"' . $extra);
} else {
return $this->warning('warning: %s requires PHP extension "' .
$dep['name'] . '"' . $extra);
}
} else {
return $this->warning('%s can optionally use PHP extension "' .
}
 
if (isset($dep['conflicts'])) {
return true;
}
 
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP extension "' .
$dep['name'] . '"' . $extra);
}
 
return $this->warning('warning: %s requires PHP extension "' .
$dep['name'] . '"' . $extra);
}
 
return $this->warning('%s can optionally use PHP extension "' .
$dep['name'] . '"' . $extra);
}
 
if (!$loaded) {
if (isset($dep['conflicts'])) {
return true;
}
 
if (!$required) {
return $this->warning('%s can optionally use PHP extension "' .
$dep['name'] . '"' . $extra);
} else {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
'"' . $extra);
}
return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
'"' . $extra);
}
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
'"' . $extra);
}
 
return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
'"' . $extra);
}
 
$version = (string) $this->phpversion($dep['name']);
if (empty($version)) {
$version = '0';
}
 
$fail = false;
if (isset($dep['min'])) {
if (!version_compare($version, $dep['min'], '>=')) {
$fail = true;
}
if (isset($dep['min']) && !version_compare($version, $dep['min'], '>=')) {
$fail = true;
}
if (isset($dep['max'])) {
if (!version_compare($version, $dep['max'], '<=')) {
$fail = true;
}
 
if (isset($dep['max']) && !version_compare($version, $dep['max'], '<=')) {
$fail = true;
}
 
if ($fail && !isset($dep['conflicts'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP extension "' . $dep['name'] .
'"' . $extra . ', installed version is ' . $version);
} else {
return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
'"' . $extra . ', installed version is ' . $version);
}
 
return $this->warning('warning: %s requires PHP extension "' . $dep['name'] .
'"' . $extra . ', installed version is ' . $version);
} elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail && isset($dep['conflicts'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
} else {
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
}
 
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
}
 
if (isset($dep['exclude'])) {
foreach ($dep['exclude'] as $exclude) {
if (version_compare($version, $exclude, '==')) {
427,43 → 436,45
if (isset($dep['conflicts'])) {
continue;
}
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s is not compatible with PHP extension "' .
$dep['name'] . '" version ' .
$exclude);
} else {
return $this->warning('warning: %s is not compatible with PHP extension "' .
$dep['name'] . '" version ' .
$exclude);
}
 
return $this->warning('warning: %s is not compatible with PHP extension "' .
$dep['name'] . '" version ' .
$exclude);
} elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
} else {
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
}
 
return $this->warning('warning: %s conflicts with PHP extension "' .
$dep['name'] . '"' . $extra . ', installed version is ' . $version);
}
}
}
 
if (isset($dep['recommended'])) {
if (version_compare($version, $dep['recommended'], '==')) {
return true;
} else {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
' version "' . $version . '"' .
' is not the recommended version "' . $dep['recommended'] .
'", but may be compatible, use --force to install');
} else {
return $this->warning('warning: %s dependency: PHP extension ' .
$dep['name'] . ' version "' . $version . '"' .
' is not the recommended version "' . $dep['recommended'].'"');
}
}
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s dependency: PHP extension ' . $dep['name'] .
' version "' . $version . '"' .
' is not the recommended version "' . $dep['recommended'] .
'", but may be compatible, use --force to install');
}
 
return $this->warning('warning: %s dependency: PHP extension ' .
$dep['name'] . ' version "' . $version . '"' .
' is not the recommended version "' . $dep['recommended'].'"');
}
 
return true;
}
 
473,50 → 484,54
$this->_state != PEAR_VALIDATE_DOWNLOADING) {
return true;
}
 
$version = $this->phpversion();
$extra = $this->_getExtraString($dep);
$extra = $this->_getExtraString($dep);
if (isset($dep['exclude'])) {
if (!is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
}
 
if (isset($dep['min'])) {
if (!version_compare($version, $dep['min'], '>=')) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP' .
$extra . ', installed version is ' . $version);
} else {
return $this->warning('warning: %s requires PHP' .
$extra . ', installed version is ' . $version);
}
 
return $this->warning('warning: %s requires PHP' .
$extra . ', installed version is ' . $version);
}
}
 
if (isset($dep['max'])) {
if (!version_compare($version, $dep['max'], '<=')) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PHP' .
$extra . ', installed version is ' . $version);
} else {
return $this->warning('warning: %s requires PHP' .
$extra . ', installed version is ' . $version);
}
 
return $this->warning('warning: %s requires PHP' .
$extra . ', installed version is ' . $version);
}
}
 
if (isset($dep['exclude'])) {
foreach ($dep['exclude'] as $exclude) {
if (version_compare($version, $exclude, '==')) {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s is not compatible with PHP version ' .
$exclude);
} else {
return $this->warning(
'warning: %s is not compatible with PHP version ' .
$exclude);
}
 
return $this->warning(
'warning: %s is not compatible with PHP version ' .
$exclude);
}
}
}
 
return true;
}
 
525,7 → 540,7
*/
function getPEARVersion()
{
return '1.5.1';
return '1.10.1';
}
 
function validatePearinstallerDependency($dep)
537,42 → 552,47
$dep['exclude'] = array($dep['exclude']);
}
}
 
if (version_compare($pearversion, $dep['min'], '<')) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
} else {
return $this->warning('warning: %s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
}
 
return $this->warning('warning: %s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
}
 
if (isset($dep['max'])) {
if (version_compare($pearversion, $dep['max'], '>')) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
} else {
return $this->warning('warning: %s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
}
 
return $this->warning('warning: %s requires PEAR Installer' . $extra .
', installed version is ' . $pearversion);
}
}
 
if (isset($dep['exclude'])) {
if (!isset($dep['exclude'][0])) {
$dep['exclude'] = array($dep['exclude']);
}
 
foreach ($dep['exclude'] as $exclude) {
if (version_compare($exclude, $pearversion, '==')) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s is not compatible with PEAR Installer ' .
'version ' . $exclude);
} else {
return $this->warning('warning: %s is not compatible with PEAR ' .
'Installer version ' . $exclude);
}
 
return $this->warning('warning: %s is not compatible with PEAR ' .
'Installer version ' . $exclude);
}
}
}
 
return true;
}
 
586,7 → 606,7
* @param boolean whether this is a required dependency
* @param array a list of downloaded packages to be installed, if any
* @param boolean if true, then deps on pear.php.net that fail will also check
* against pecl.php.net packages to accomodate extensions that have
* against pecl.php.net packages to accommodate extensions that have
* moved to pecl.php.net from pear.php.net
*/
function validatePackageDependency($dep, $required, $params, $depv1 = false)
595,6 → 615,7
$this->_state != PEAR_VALIDATE_DOWNLOADING) {
return true;
}
 
if (isset($dep['providesextension'])) {
if ($this->extension_loaded($dep['providesextension'])) {
$save = $dep;
608,9 → 629,11
}
}
}
 
if ($this->_state == PEAR_VALIDATE_INSTALLING) {
return $this->_validatePackageInstall($dep, $required, $depv1);
}
 
if ($this->_state == PEAR_VALIDATE_DOWNLOADING) {
return $this->_validatePackageDownload($dep, $required, $params, $depv1);
}
622,6 → 645,7
if (isset($dep['uri'])) {
$dep['channel'] = '__uri';
}
 
$depname = $this->_registry->parsedPackageNameToString($dep, true);
$found = false;
foreach ($params as $param) {
631,6 → 655,7
$found = true;
break;
}
 
if ($depv1 && $dep['channel'] == 'pear.php.net') {
if ($param->isEqual(
array('package' => $dep['name'],
640,6 → 665,7
}
}
}
 
if (!$found && isset($dep['providesextension'])) {
foreach ($params as $param) {
if ($param->isExtension($dep['providesextension'])) {
648,6 → 674,7
}
}
}
 
if ($found) {
$version = $param->getVersion();
$installed = false;
672,77 → 699,73
}
}
}
 
$extra = $this->_getExtraString($dep);
if (isset($dep['exclude'])) {
if (!is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
 
if (!isset($dep['min']) && !isset($dep['max']) &&
!isset($dep['recommended']) && !isset($dep['exclude'])) {
!isset($dep['recommended']) && !isset($dep['exclude'])
) {
if ($installed || $downloaded) {
$installed = $installed ? 'installed' : 'downloaded';
if (isset($dep['conflicts'])) {
$rest = '';
if ($version) {
$rest = ", $installed version is " . $version;
} else {
$rest = '';
}
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with package "' . $depname . '"' .
$extra . $rest);
} else {
return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
$extra . $rest);
return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra . $rest);
}
 
return $this->warning('warning: %s conflicts with package "' . $depname . '"' . $extra . $rest);
}
 
return true;
} else {
if (isset($dep['conflicts'])) {
return true;
}
 
if (isset($dep['conflicts'])) {
return true;
}
 
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
}
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires package "' . $depname . '"' .
$extra);
} else {
return $this->warning('warning: %s requires package "' . $depname . '"' .
$extra);
}
} else {
return $this->warning('%s can optionally use package "' . $depname . '"' .
$extra);
}
 
return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
}
 
return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
}
 
if (!$installed && !$downloaded) {
if (isset($dep['conflicts'])) {
return true;
}
 
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires package "' . $depname . '"' .
$extra);
} else {
return $this->warning('warning: %s requires package "' . $depname . '"' .
$extra);
return $this->raiseError('%s requires package "' . $depname . '"' . $extra);
}
} else {
return $this->warning('%s can optionally use package "' . $depname . '"' .
$extra);
 
return $this->warning('warning: %s requires package "' . $depname . '"' . $extra);
}
 
return $this->warning('%s can optionally use package "' . $depname . '"' . $extra);
}
 
$fail = false;
if (isset($dep['min'])) {
if (version_compare($version, $dep['min'], '<')) {
$fail = true;
}
if (isset($dep['min']) && version_compare($version, $dep['min'], '<')) {
$fail = true;
}
if (isset($dep['max'])) {
if (version_compare($version, $dep['max'], '>')) {
$fail = true;
}
 
if (isset($dep['max']) && version_compare($version, $dep['max'], '>')) {
$fail = true;
}
 
if ($fail && !isset($dep['conflicts'])) {
$installed = $installed ? 'installed' : 'downloaded';
$dep['package'] = $dep['name'];
750,10 → 773,10
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s requires package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
} else {
return $this->warning('warning: %s requires package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
}
 
return $this->warning('warning: %s requires package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
} elseif ((isset($dep['min']) || isset($dep['max'])) && !$fail &&
isset($dep['conflicts']) && !isset($dep['exclude'])) {
$installed = $installed ? 'installed' : 'downloaded';
760,82 → 783,88
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with package "' . $depname . '"' . $extra .
", $installed version is " . $version);
} else {
return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
}
 
return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
}
 
if (isset($dep['exclude'])) {
$installed = $installed ? 'installed' : 'downloaded';
foreach ($dep['exclude'] as $exclude) {
if (version_compare($version, $exclude, '==') && !isset($dep['conflicts'])) {
if (!isset($this->_options['nodeps']) &&
!isset($this->_options['force'])) {
!isset($this->_options['force'])
) {
return $this->raiseError('%s is not compatible with ' .
$installed . ' package "' .
$depname . '" version ' .
$exclude);
} else {
return $this->warning('warning: %s is not compatible with ' .
$installed . ' package "' .
$depname . '" version ' .
$exclude);
}
 
return $this->warning('warning: %s is not compatible with ' .
$installed . ' package "' .
$depname . '" version ' .
$exclude);
} elseif (version_compare($version, $exclude, '!=') && isset($dep['conflicts'])) {
$installed = $installed ? 'installed' : 'downloaded';
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('%s conflicts with package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
} else {
return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
}
 
return $this->warning('warning: %s conflicts with package "' . $depname . '"' .
$extra . ", $installed version is " . $version);
}
}
}
 
if (isset($dep['recommended'])) {
$installed = $installed ? 'installed' : 'downloaded';
if (version_compare($version, $dep['recommended'], '==')) {
return true;
} else {
if (!$found && $installed) {
$param = $this->_registry->getPackage($dep['name'], $dep['channel']);
}
 
if (!$found && $installed) {
$param = $this->_registry->getPackage($dep['name'], $dep['channel']);
}
 
if ($param) {
$found = false;
foreach ($params as $parent) {
if ($parent->isEqual($this->_currentPackage)) {
$found = true;
break;
}
}
if ($param) {
$found = false;
foreach ($params as $parent) {
if ($parent->isEqual($this->_currentPackage)) {
$found = true;
break;
}
 
if ($found) {
if ($param->isCompatible($parent)) {
return true;
}
if ($found) {
if ($param->isCompatible($parent)) {
return true;
}
} else { // this is for validPackage() calls
$parent = $this->_registry->getPackage($this->_currentPackage['package'],
$this->_currentPackage['channel']);
if ($parent !== null) {
if ($param->isCompatible($parent)) {
return true;
}
}
} else { // this is for validPackage() calls
$parent = $this->_registry->getPackage($this->_currentPackage['package'],
$this->_currentPackage['channel']);
if ($parent !== null && $param->isCompatible($parent)) {
return true;
}
}
if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
!isset($this->_options['loose'])) {
return $this->raiseError('%s dependency package "' . $depname .
'" ' . $installed . ' version ' . $version .
' is not the recommended version ' . $dep['recommended'] .
', but may be compatible, use --force to install');
} else {
return $this->warning('warning: %s dependency package "' . $depname .
'" ' . $installed . ' version ' . $version .
' is not the recommended version ' . $dep['recommended']);
}
}
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force']) &&
!isset($this->_options['loose'])
) {
return $this->raiseError('%s dependency package "' . $depname .
'" ' . $installed . ' version ' . $version .
' is not the recommended version ' . $dep['recommended'] .
', but may be compatible, use --force to install');
}
 
return $this->warning('warning: %s dependency package "' . $depname .
'" ' . $installed . ' version ' . $version .
' is not the recommended version ' . $dep['recommended']);
}
 
return true;
}
 
855,6 → 884,7
if (PEAR::isError($this->_dependencydb)) {
return $this->_dependencydb;
}
 
$params = array();
// construct an array of "downloaded" packages to fool the package dependency checker
// into using these to validate uninstalls of circular dependencies
863,10 → 893,11
if (!class_exists('PEAR_Downloader_Package')) {
require_once 'PEAR/Downloader/Package.php';
}
$dp = &new PEAR_Downloader_Package($dl);
$dp = new PEAR_Downloader_Package($dl);
$dp->setPackageFile($downloaded[$i]);
$params[$i] = &$dp;
$params[$i] = $dp;
}
 
// check cache
$memyselfandI = strtolower($this->_currentPackage['channel']) . '/' .
strtolower($this->_currentPackage['package']);
877,27 → 908,38
$dl->log(0, $warning[0]);
}
}
 
if (isset($badpackages[$memyselfandI]['errors'])) {
foreach ($badpackages[$memyselfandI]['errors'] as $error) {
$dl->log(0, $error->getMessage());
if (is_array($error)) {
$dl->log(0, $error[0]);
} else {
$dl->log(0, $error->getMessage());
}
}
 
if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
return $this->warning(
'warning: %s should not be uninstalled, other installed packages depend ' .
'on this package');
} else {
return $this->raiseError(
'%s cannot be uninstalled, other installed packages depend on this package');
}
 
return $this->raiseError(
'%s cannot be uninstalled, other installed packages depend on this package');
}
 
return true;
}
 
// first, list the immediate parents of each package to be uninstalled
$perpackagelist = array();
$allparents = array();
foreach ($params as $i => $param) {
$a = array('channel' => strtolower($param->getChannel()),
'package' => strtolower($param->getPackage()));
$a = array(
'channel' => strtolower($param->getChannel()),
'package' => strtolower($param->getPackage())
);
 
$deps = $this->_dependencydb->getDependentPackages($a);
if ($deps) {
foreach ($deps as $d) {
924,6 → 966,7
}
}
}
 
// next, remove any packages from the parents list that are not installed
$remove = array();
foreach ($allparents as $parent => $d1) {
934,6 → 977,7
$remove[$parent] = true;
}
}
 
// next remove any packages from the parents list that are not passed in for
// uninstallation
foreach ($allparents as $parent => $d1) {
948,6 → 992,7
$remove[$parent] = true;
}
}
 
// remove all packages whose dependencies fail
// save which ones failed for error reporting
$badchildren = array();
957,6 → 1002,7
if (!isset($allparents[$package])) {
continue;
}
 
foreach ($allparents[$package] as $kid => $d1) {
foreach ($d1 as $depinfo) {
if ($depinfo[1]['type'] != 'optional') {
976,6 → 1022,7
}
}
} while ($fail);
 
// next, construct the list of packages that can't be uninstalled
$badpackages = array();
$save = $this->_currentPackage;
984,6 → 1031,7
if (!isset($remove[$parent[0]])) {
continue;
}
 
$packagename = $this->_registry->parsePackageName($parent[0]);
$packagename['channel'] = $this->_registry->channelAlias($packagename['channel']);
$pa = $this->_registry->getPackage($packagename['package'], $packagename['channel']);
1009,7 → 1057,8
}
}
}
$this->_currentPackage = $save;
 
$this->_currentPackage = $save;
$dl->___uninstall_package_cache = $badpackages;
if (isset($badpackages[$memyselfandI])) {
if (isset($badpackages[$memyselfandI]['warnings'])) {
1017,20 → 1066,27
$dl->log(0, $warning[0]);
}
}
 
if (isset($badpackages[$memyselfandI]['errors'])) {
foreach ($badpackages[$memyselfandI]['errors'] as $error) {
$dl->log(0, $error->getMessage());
if (is_array($error)) {
$dl->log(0, $error[0]);
} else {
$dl->log(0, $error->getMessage());
}
}
 
if (isset($this->_options['nodeps']) || isset($this->_options['force'])) {
return $this->warning(
'warning: %s should not be uninstalled, other installed packages depend ' .
'on this package');
} else {
return $this->raiseError(
'%s cannot be uninstalled, other installed packages depend on this package');
}
 
return $this->raiseError(
'%s cannot be uninstalled, other installed packages depend on this package');
}
}
 
return true;
}
 
1037,65 → 1093,63
function _validatePackageUninstall($dep, $required, $dl)
{
$depname = $this->_registry->parsedPackageNameToString($dep, true);
$version = $this->_registry->packageinfo($dep['package'], 'version',
$dep['channel']);
$version = $this->_registry->packageinfo($dep['package'], 'version', $dep['channel']);
if (!$version) {
return true;
}
 
$extra = $this->_getExtraString($dep);
if (isset($dep['exclude'])) {
if (!is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
if (isset($dep['exclude']) && !is_array($dep['exclude'])) {
$dep['exclude'] = array($dep['exclude']);
}
 
if (isset($dep['conflicts'])) {
return true; // uninstall OK - these packages conflict (probably installed with --force)
}
 
if (!isset($dep['min']) && !isset($dep['max'])) {
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('"' . $depname . '" is required by ' .
'installed package %s' . $extra);
} else {
return $this->warning('warning: "' . $depname . '" is required by ' .
'installed package %s' . $extra);
}
} else {
if (!$required) {
return $this->warning('"' . $depname . '" can be optionally used by ' .
'installed package %s' . $extra);
}
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError('"' . $depname . '" is required by ' .
'installed package %s' . $extra);
}
 
return $this->warning('warning: "' . $depname . '" is required by ' .
'installed package %s' . $extra);
}
 
$fail = false;
if (isset($dep['min'])) {
if (version_compare($version, $dep['min'], '>=')) {
$fail = true;
}
if (isset($dep['min']) && version_compare($version, $dep['min'], '>=')) {
$fail = true;
}
if (isset($dep['max'])) {
if (version_compare($version, $dep['max'], '<=')) {
$fail = true;
}
 
if (isset($dep['max']) && version_compare($version, $dep['max'], '<=')) {
$fail = true;
}
 
// we re-use this variable, preserve the original value
$saverequired = $required;
if ($required) {
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError($depname . $extra . ' is required by installed package' .
' "%s"');
} else {
return $this->raiseError('warning: ' . $depname . $extra .
' is required by installed package "%s"');
}
} else {
if (!$required) {
return $this->warning($depname . $extra . ' can be optionally used by installed package' .
' "%s"');
}
return true;
 
if (!isset($this->_options['nodeps']) && !isset($this->_options['force'])) {
return $this->raiseError($depname . $extra . ' is required by installed package' .
' "%s"');
}
 
return $this->raiseError('warning: ' . $depname . $extra .
' is required by installed package "%s"');
}
 
/**
* validate a downloaded package against installed packages
*
*
* As of PEAR 1.4.3, this will only validate
*
* @param array|PEAR_Downloader_Package|PEAR_PackageFile_v1|PEAR_PackageFile_v2
1113,17 → 1167,20
} else {
$deps = $this->_dependencydb->getDependentPackageDependencies($pkg);
}
 
$fail = false;
if ($deps) {
if (!class_exists('PEAR_Downloader_Package')) {
require_once 'PEAR/Downloader/Package.php';
}
$dp = &new PEAR_Downloader_Package($dl);
 
$dp = new PEAR_Downloader_Package($dl);
if (is_object($pkg)) {
$dp->setPackageFile($pkg);
} else {
$dp->setDownloadURL($pkg);
}
 
PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
foreach ($deps as $channel => $info) {
foreach ($info as $package => $ds) {
1139,8 → 1196,9
continue 2; // jump to next package
}
}
 
foreach ($ds as $d) {
$checker = &new PEAR_Dependency2($this->_config, $this->_options,
$checker = new PEAR_Dependency2($this->_config, $this->_options,
array('channel' => $channel, 'package' => $package), $this->_state);
$dep = $d['dep'];
$required = $d['type'] == 'required';
1156,10 → 1214,12
}
PEAR::popErrorHandling();
}
 
if ($fail) {
return $this->raiseError(
'%s cannot be installed, conflicts with installed packages');
}
 
return true;
}
 
1171,10 → 1231,12
if (!isset($dep['optional'])) {
$dep['optional'] = 'no';
}
 
list($newdep, $type) = $this->normalizeDep($dep);
if (!$newdep) {
return $this->raiseError("Invalid Dependency");
}
 
if (method_exists($this, "validate{$type}Dependency")) {
return $this->{"validate{$type}Dependency"}($newdep, $dep['optional'] == 'no',
$params, true);
1192,11 → 1254,13
'os' => 'Os',
'php' => 'Php'
);
if (isset($types[$dep['type']])) {
$type = $types[$dep['type']];
} else {
 
if (!isset($types[$dep['type']])) {
return array(false, false);
}
 
$type = $types[$dep['type']];
 
$newdep = array();
switch ($type) {
case 'Package' :
1206,6 → 1270,7
$newdep['name'] = $dep['name'];
break;
}
 
$dep['rel'] = PEAR_Dependency2::signOperator($dep['rel']);
switch ($dep['rel']) {
case 'has' :
1241,8 → 1306,9
}
if ($type == 'Php') {
if (!isset($newdep['min'])) {
$newdep['min'] = '4.2.0';
$newdep['min'] = '4.4.0';
}
 
if (!isset($newdep['max'])) {
$newdep['max'] = '6.0.0';
}
1278,6 → 1344,7
if (isset($this->_options['ignore-errors'])) {
return $this->warning($msg);
}
 
return PEAR::raiseError(sprintf($msg, $this->_registry->parsedPackageNameToString(
$this->_currentPackage, true)));
}
1288,4 → 1355,3
$this->_currentPackage, true)));
}
}
?>