⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 package.php

📁 php-4.4.7学习linux时下载的源代码
💻 PHP
📖 第 1 页 / 共 3 页
字号:
        if (!file_exists($params[0])) {            return $this->raiseError("file does not exist: $params[0]");        }        $reg = &$this->config->getRegistry();        $pkg = &$this->getPackageFile($this->config, $this->_debug);        $pf = &$pkg->fromAnyFile($params[0], PEAR_VALIDATE_NORMAL);        if (PEAR::isError($pf)) {            $u = $pf->getUserinfo();            if (is_array($u)) {                foreach ($u as $err) {                    if (is_array($err)) {                        $err = $err['message'];                    }                    $this->ui->outputData($err);                }            }            return $this->raiseError("$params[0] is not a valid package");        }        $tmpdir = System::mktemp(array('-d', 'pear2rpm'));        $instroot = System::mktemp(array('-d', 'pear2rpm'));        $tmp = $this->config->get('verbose');        $this->config->set('verbose', 0);        $installer = $this->getInstaller($this->ui);        require_once 'PEAR/Downloader/Package.php';        $pack = new PEAR_Downloader_Package($installer);        $pack->setPackageFile($pf);        $params[0] = &$pack;        $installer->setOptions(array('installroot' => $instroot,                                          'nodeps' => true, 'soft' => true));        $installer->setDownloadedPackages($params);        $info = $installer->install($params[0],                                    array('installroot' => $instroot,                                          'nodeps' => true, 'soft' => true));        $pkgdir = $pf->getPackage() . '-' . $pf->getVersion();        $info['rpm_xml_dir'] = '/var/lib/pear';        $this->config->set('verbose', $tmp);        if (isset($options['spec-template'])) {            $spec_template = $options['spec-template'];        } else {            $spec_template = '@DATA-DIR@/PEAR/template.spec';        }        $info['possible_channel'] = '';        $info['extra_config'] = '';        if (isset($options['rpm-pkgname'])) {            $rpm_pkgname_format = $options['rpm-pkgname'];        } else {            if ($pf->getChannel() == 'pear.php.net' || $pf->getChannel() == 'pecl.php.net') {                $alias = 'PEAR';            } else {                $chan = &$reg->getChannel($pf->getChannel());                $alias = $chan->getAlias();                $alias = strtoupper($alias);                $info['possible_channel'] = $pf->getChannel() . '/';            }            $rpm_pkgname_format = $alias . '::%s';        }        $info['extra_headers'] = '';        $info['doc_files'] = '';        $info['files'] = '';        $info['package2xml'] = '';        $info['rpm_package'] = sprintf($rpm_pkgname_format, $pf->getPackage());        $srcfiles = 0;        foreach ($info['filelist'] as $name => $attr) {            if (!isset($attr['role'])) {                continue;            }            $name = preg_replace('![/:\\\\]!', '/', $name);            if ($attr['role'] == 'doc') {                $info['doc_files'] .= " $name";            // Map role to the rpm vars            } else {                $c_prefix = '%{_libdir}/php/pear';                switch ($attr['role']) {                    case 'php':                        $prefix = $c_prefix;                    break;                    case 'ext':                        $prefix = '%{_libdir}/php';                    break; // XXX good place?                    case 'src':                        $srcfiles++;                        $prefix = '%{_includedir}/php';                    break; // XXX good place?                    case 'test':                        $prefix = "$c_prefix/tests/" . $pf->getPackage();                    break;                    case 'data':                        $prefix = "$c_prefix/data/" . $pf->getPackage();                    break;                    case 'script':                        $prefix = '%{_bindir}';                    break;                    default: // non-standard roles                        $prefix = "$c_prefix/$attr[role]/" . $pf->getPackage();                        $info['extra_config'] .=                        "\n        -d {$attr[role]}_dir=$c_prefix/{$attr[role]} \\";                        $this->ui->outputData('WARNING: role "' . $attr['role'] . '" used, ' .                            'and will be installed in "' . $c_prefix . '/' . $attr['role'] .                            '/' . $pf->getPackage() .                            ' - hand-edit the final .spec if this is wrong', $command);                    break;                }                $name = str_replace('\\', '/', $name);                $info['files'] .= "$prefix/$name\n";            }        }        if ($srcfiles > 0) {            require_once 'OS/Guess.php';            $os = new OS_Guess;            $arch = $os->getCpu();        } else {            $arch = 'noarch';        }        $cfg = array('master_server', 'php_dir', 'ext_dir', 'doc_dir',                     'bin_dir', 'data_dir', 'test_dir');        foreach ($cfg as $k) {            if ($k == 'master_server') {                $chan = $reg->getChannel($pf->getChannel());                $info[$k] = $chan->getServer();                continue;            }            $info[$k] = $this->config->get($k);        }        $info['arch'] = $arch;        $fp = @fopen($spec_template, "r");        if (!$fp) {            return $this->raiseError("could not open RPM spec file template $spec_template: $php_errormsg");        }        $info['package'] = $pf->getPackage();        $info['version'] = $pf->getVersion();        $info['release_license'] = $pf->getLicense();        if ($pf->getDeps()) {            if ($pf->getPackagexmlVersion() == '1.0') {                $requires = $conflicts = array();                foreach ($pf->getDeps() as $dep) {                    if (isset($dep['optional']) && $dep['optional'] == 'yes') {                        continue;                    }                    if ($dep['type'] != 'pkg') {                        continue;                    }                    if (isset($dep['channel']) && $dep['channel'] != 'pear.php.net' &&                          $dep['channel'] != 'pecl.php.net') {                        $chan = &$reg->getChannel($dep['channel']);                        $package = strtoupper($chan->getAlias()) . '::' . $dep['name'];                    } else {                        $package = 'PEAR::' . $dep['name'];                    }                    $trans = array(                        '>' => '>',                        '<' => '<',                        '>=' => '>=',                        '<=' => '<=',                        '=' => '=',                        'gt' => '>',                        'lt' => '<',                        'ge' => '>=',                        'le' => '<=',                        'eq' => '=',                    );                    if ($dep['rel'] == 'has') {                        $requires[] = $package;                    } elseif ($dep['rel'] == 'not') {                        $conflicts[] = $package;                    } elseif ($dep['rel'] == 'ne') {                        $conflicts[] = $package . ' = ' . $dep['version'];                    } elseif (isset($trans[$dep['rel']])) {                        $requires[] = $package . ' ' . $trans[$dep['rel']] . ' ' . $dep['version'];                    }                }                if (count($requires)) {                    $info['extra_headers'] .= 'Requires: ' . implode(', ', $requires) . "\n";                }                if (count($conflicts)) {                    $info['extra_headers'] .= 'Conflicts: ' . implode(', ', $conflicts) . "\n";                }            } else {                $info['package2xml'] = '2'; // tell the spec to use package2.xml                $requires = $conflicts = array();                $deps = $pf->getDeps(true);                if (isset($deps['required']['package'])) {                    if (!isset($deps['required']['package'][0])) {                        $deps['required']['package'] = array($deps['required']['package']);                    }                    foreach ($deps['required']['package'] as $dep) {                        if ($dep['channel'] != 'pear.php.net' &&  $dep['channel'] != 'pecl.php.net') {                            $chan = &$reg->getChannel($dep['channel']);                            $package = strtoupper($chan->getAlias()) . '::' . $dep['name'];                        } else {                            $package = 'PEAR::' . $dep['name'];                        }                        if (isset($dep['conflicts']) && (isset($dep['min']) ||                              isset($dep['max']))) {                            $deprange = array();                            if (isset($dep['min'])) {                                $deprange[] = array($dep['min'],'>=');                            }                            if (isset($dep['max'])) {                                $deprange[] = array($dep['max'], '<=');                            }                            if (isset($dep['exclude'])) {                                if (!is_array($dep['exclude']) ||                                      !isset($dep['exclude'][0])) {                                    $dep['exclude'] = array($dep['exclude']);                                }                                if (count($deprange)) {                                    $excl = $dep['exclude'];                                    // change >= to > if excluding the min version                                    // change <= to < if excluding the max version                                    for($i = 0; $i < count($excl); $i++) {                                        if (isset($deprange[0]) &&                                              $excl[$i] == $deprange[0][0]) {                                            $deprange[0][1] = '<';                                            unset($dep['exclude'][$i]);                                        }                                        if (isset($deprange[1]) &&                                              $excl[$i] == $deprange[1][0]) {                                            $deprange[1][1] = '>';                                            unset($dep['exclude'][$i]);                                        }                                    }                                }                                if (count($dep['exclude'])) {                                    $dep['exclude'] = array_values($dep['exclude']);                                    $newdeprange = array();                                    // remove excludes that are outside the existing range                                    for ($i = 0; $i < count($dep['exclude']); $i++) {                                        if ($dep['exclude'][$i] < $dep['min'] ||                                              $dep['exclude'][$i] > $dep['max']) {                                            unset($dep['exclude'][$i]);                                        }                                    }                                    $dep['exclude'] = array_values($dep['exclude']);                                    usort($dep['exclude'], 'version_compare');                                    // take the remaining excludes and                                    // split the dependency into sub-ranges                                    $lastmin = $deprange[0];                                    for ($i = 0; $i < count($dep['exclude']) - 1; $i++) {                                        $newdeprange[] = '(' .                                            $package . " {$lastmin[1]} {$lastmin[0]} and " .                                            $package . ' < ' . $dep['exclude'][$i] . ')';                                        $lastmin = array($dep['exclude'][$i], '>');                                    }                                    if (isset($dep['max'])) {                                        $newdeprange[] = '(' . $package .                                            " {$lastmin[1]} {$lastmin[0]} and " .                                            $package . ' < ' . $dep['max'] . ')';                                    }                                    $conflicts[] = implode(' or ', $deprange);                                } else {                                    $conflicts[] = $package .                                        " {$deprange[0][1]} {$deprange[0][0]}" .                                        (isset($deprange[1]) ?                                         " and $package {$deprange[1][1]} {$deprange[1][0]}"                                        : '');                                }                            }                            continue;                        }                        if (!isset($dep['min']) && !isset($dep['max']) &&                              !isset($dep['exclude'])) {                            if (isset($dep['conflicts'])) {                                $conflicts[] = $package;                            } else {                                $requires[] = $package;                            }                        } else {                            if (isset($dep['min'])) {                                $requires[] = $package . ' >= ' . $dep['min'];                            }                            if (isset($dep['max'])) {                                $requires[] = $package . ' <= ' . $dep['max'];                            }                            if (isset($dep['exclude'])) {                                $ex = $dep['exclude'];                                if (!is_array($ex)) {                                    $ex = array($ex);                                }                                foreach ($ex as $ver) {                                    $conflicts[] = $package . ' = ' . $ver;                                }                            }                        }                    }                    require_once 'Archive/Tar.php';                    $tar = new Archive_Tar($pf->getArchiveFile());                    $tar->pushErrorHandling(PEAR_ERROR_RETURN);                    $a = $tar->extractInString('package2.xml');                    $tar->popErrorHandling();                    if ($a === null || PEAR::isError($a)) {                        $info['package2xml'] = '';                        // this doesn't have a package.xml version 1.0                        $requires[] = 'PEAR::PEAR >= ' .                            $deps['required']['pearinstaller']['min'];                    }                    if (count($requires)) {                        $info['extra_headers'] .= 'Requires: ' . implode(', ', $requires) . "\n";                    }                    if (count($conflicts)) {                        $info['extra_headers'] .= 'Conflicts: ' . implode(', ', $conflicts) . "\n";                    }                }            }        }        // remove the trailing newline        $info['extra_headers'] = trim($info['extra_headers']);        if (function_exists('file_get_contents')) {            fclose($fp);            $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]',                file_get_contents($spec_template));        } else {            $spec_contents = preg_replace('/@([a-z0-9_-]+)@/e', '$info["\1"]',                fread($fp, filesize($spec_template)));            fclose($fp);        }        $spec_file = "$info[rpm_package]-$info[version].spec";        $wp = fopen($spec_file, "wb");        if (!$wp) {            return $this->raiseError("could not write RPM spec file $spec_file: $php_errormsg");        }        fwrite($wp, $spec_contents);        fclose($wp);        $this->ui->outputData("Wrote RPM spec file $spec_file", $command);        return true;    }    function doConvert($command, $options, $params)    {        $packagexml = isset($params[0]) ? $params[0] : 'package.xml';        $newpackagexml = isset($params[1]) ? $params[1] : dirname($packagexml) .            DIRECTORY_SEPARATOR . 'package2.xml';        $pkg = &$this->getPackageFile($this->config, $this->_debug);        PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);        $pf = $pkg->fromPackageFile($packagexml, PEAR_VALIDATE_NORMAL);        PEAR::staticPopErrorHandling();        if (!PEAR::isError($pf)) {            if (is_a($pf, 'PEAR_PackageFile_v2')) {                $this->ui->outputData($packagexml . ' is already a package.xml version 2.0');                return true;            }            $gen = &$pf->getDefaultGenerator();            $newpf = &$gen->toV2();            $newpf->setPackagefile($newpackagexml);            $gen = &$newpf->getDefaultGenerator();            PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);            $state = (isset($options['flat']) ? PEAR_VALIDATE_PACKAGING : PEAR_VALIDATE_NORMAL);            $saved = $gen->toPackageFile(dirname($newpackagexml), $state,                basename($newpackagexml));            PEAR::staticPopErrorHandling();            if (PEAR::isError($saved)) {                if (is_array($saved->getUserInfo())) {                    foreach ($saved->getUserInfo() as $warning) {                        $this->ui->outputData($warning['message']);                    }                }                $this->ui->outputData($saved->getMessage());                return true;            }            $this->ui->outputData('Wrote new version 2.0 package.xml to "' . $saved . '"');            return true;        } else {            if (is_array($pf->getUserInfo())) {                foreach ($pf->getUserInfo() as $warning) {                    $this->ui->outputData($warning['message']);                }            }            return $this->raiseError($pf);        }    }    // }}}}?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -