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

📄 builder.php

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * PEAR_Builder for building PHP extensions (PECL packages) * * 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     Stig Bakken <ssb@php.net> * @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: Builder.php,v 1.31 2007/01/10 05:32:51 cellog Exp $ * @link       http://pear.php.net/package/PEAR * @since      File available since Release 0.1 *  * TODO: log output parameters in PECL command line * TODO: msdev path in configuration *//** * Needed for extending PEAR_Builder */require_once 'PEAR/Common.php';require_once 'PEAR/PackageFile.php';/** * Class to handle building (compiling) extensions. * * @category   pear * @package    PEAR * @author     Stig Bakken <ssb@php.net> * @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.6.1 * @link       http://pear.php.net/package/PEAR * @since      Class available since PHP 4.0.2 * @see        http://pear.php.net/manual/en/core.ppm.pear-builder.php */class PEAR_Builder extends PEAR_Common{    // {{{ properties    var $php_api_version = 0;    var $zend_module_api_no = 0;    var $zend_extension_api_no = 0;    var $extensions_built = array();    /**     * @var string Used for reporting when it is not possible to pass function     *             via extra parameter, e.g. log, msdevCallback     */    var $current_callback = null;    // used for msdev builds    var $_lastline = null;    var $_firstline = null;    // }}}    // {{{ constructor    /**     * PEAR_Builder constructor.     *     * @param object $ui user interface object (instance of PEAR_Frontend_*)     *     * @access public     */    function PEAR_Builder(&$ui)    {        parent::PEAR_Common();        $this->setFrontendObject($ui);    }    // }}}    // {{{ _build_win32()    /**     * Build an extension from source on windows.     * requires msdev     */    function _build_win32($descfile, $callback = null)    {        if (is_object($descfile)) {            $pkg = $descfile;            $descfile = $pkg->getPackageFile();        } else {            $pf = &new PEAR_PackageFile($this->config, $this->debug);            $pkg = &$pf->fromPackageFile($descfile, PEAR_VALIDATE_NORMAL);            if (PEAR::isError($pkg)) {                return $pkg;            }        }        $dir = dirname($descfile);        $old_cwd = getcwd();        if (!file_exists($dir) || !is_dir($dir) || !chdir($dir)) {            return $this->raiseError("could not chdir to $dir");        }        // packages that were in a .tar have the packagefile in this directory        $vdir = $pkg->getPackage() . '-' . $pkg->getVersion();        if (file_exists($dir) && is_dir($vdir)) {            if (chdir($vdir)) {                $dir = getcwd();            } else {                return $this->raiseError("could not chdir to " . realpath($vdir));            }        }        $this->log(2, "building in $dir");        $dsp = $pkg->getPackage().'.dsp';        if (!file_exists("$dir/$dsp")) {            return $this->raiseError("The DSP $dsp does not exist.");        }        // XXX TODO: make release build type configurable        $command = 'msdev '.$dsp.' /MAKE "'.$pkg->getPackage(). ' - Release"';        $err = $this->_runCommand($command, array(&$this, 'msdevCallback'));        if (PEAR::isError($err)) {            return $err;        }        // figure out the build platform and type        $platform = 'Win32';        $buildtype = 'Release';        if (preg_match('/.*?'.$pkg->getPackage().'\s-\s(\w+)\s(.*?)-+/i',$this->_firstline,$matches)) {            $platform = $matches[1];            $buildtype = $matches[2];        }        if (preg_match('/(.*)?\s-\s(\d+).*?(\d+)/',$this->_lastline,$matches)) {            if ($matches[2]) {                // there were errors in the build                return $this->raiseError("There were errors during compilation.");            }            $out = $matches[1];        } else {            return $this->raiseError("Did not understand the completion status returned from msdev.exe.");        }        // msdev doesn't tell us the output directory :/        // open the dsp, find /out and use that directory        $dsptext = join(file($dsp),'');        // this regex depends on the build platform and type having been        // correctly identified above.        $regex ='/.*?!IF\s+"\$\(CFG\)"\s+==\s+("'.                    $pkg->getPackage().'\s-\s'.                    $platform.'\s'.                    $buildtype.'").*?'.                    '\/out:"(.*?)"/is';        if ($dsptext && preg_match($regex,$dsptext,$matches)) {            // what we get back is a relative path to the output file itself.            $outfile = realpath($matches[2]);        } else {            return $this->raiseError("Could not retrieve output information from $dsp.");        }        // realpath returns false if the file doesn't exist        if ($outfile && copy($outfile, "$dir/$out")) {            $outfile = "$dir/$out";        }        $built_files[] = array(            'file' => "$outfile",            'php_api' => $this->php_api_version,            'zend_mod_api' => $this->zend_module_api_no,            'zend_ext_api' => $this->zend_extension_api_no,            );        return $built_files;    }    // }}}    // {{{ msdevCallback()    function msdevCallback($what, $data)    {        if (!$this->_firstline)            $this->_firstline = $data;        $this->_lastline = $data;        call_user_func($this->current_callback, $what, $data);    }    // }}}    // {{{ _harventInstDir    /**     * @param string     * @param string     * @param array     * @access private     */    function _harvestInstDir($dest_prefix, $dirname, &$built_files)    {        $d = opendir($dirname);        if (!$d)            return false;        $ret = true;        while (($ent = readdir($d)) !== false) {            if ($ent{0} == '.')                continue;            $full = $dirname . DIRECTORY_SEPARATOR . $ent;            if (is_dir($full)) {                if (!$this->_harvestInstDir(                        $dest_prefix . DIRECTORY_SEPARATOR . $ent,                        $full, $built_files)) {                    $ret = false;                    break;                }            } else {                $dest = $dest_prefix . DIRECTORY_SEPARATOR . $ent;                $built_files[] = array(                        'file' => $full,                        'dest' => $dest,                        'php_api' => $this->php_api_version,                        'zend_mod_api' => $this->zend_module_api_no,                        'zend_ext_api' => $this->zend_extension_api_no,                        );            }        }        closedir($d);        return $ret;    }    // }}}    // {{{ build()    /**     * Build an extension from source.  Runs "phpize" in the source     * directory, but compiles in a temporary directory

⌨️ 快捷键说明

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