mirror of
https://github.com/php/php-src.git
synced 2024-11-25 02:44:58 +08:00
* first shot at "pear build" command for building extensions from C code
This commit is contained in:
parent
735f4a129f
commit
622c684164
102
pear/PEAR/Command/Build.php
Normal file
102
pear/PEAR/Command/Build.php
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | PHP Version 4 |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Copyright (c) 1997-2002 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. |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Author: Stig Bakken <ssb@fast.no> |
|
||||||
|
// | Tomas V.V.Cox <cox@idecnet.com> |
|
||||||
|
// | |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
require_once "PEAR/Command/Common.php";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PEAR commands for building extensions.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class PEAR_Command_Build extends PEAR_Command_Common
|
||||||
|
{
|
||||||
|
var $commands = array(
|
||||||
|
'build' => array(
|
||||||
|
'summary' => 'Build an Extension From C Source',
|
||||||
|
'function' => 'doBuild',
|
||||||
|
'shortcut' => 'b',
|
||||||
|
'options' => array(),
|
||||||
|
'doc' => '[package.xml]
|
||||||
|
Builds one or more extensions contained in a package.'
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PEAR_Command_Build constructor.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function PEAR_Command_Build(&$ui, &$config)
|
||||||
|
{
|
||||||
|
parent::PEAR_Command_Common($ui, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
function doBuild($command, $options, $params)
|
||||||
|
{
|
||||||
|
if (sizeof($params) < 1) {
|
||||||
|
$params[0] = 'package.xml';
|
||||||
|
}
|
||||||
|
$obj = &new PEAR_Common();
|
||||||
|
if (PEAR::isError($info = $obj->infoFromAny($params[0]))) {
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
$configure_command = "./configure";
|
||||||
|
if (isset($info['configure_options'])) {
|
||||||
|
foreach ($info['configure_options'] as $o) {
|
||||||
|
$r = $this->ui->userDialog($o['prompt'], 'text', @$o['default']);
|
||||||
|
if ($r == 'yes' && substr($o['name'], 0, 5) == 'with-') {
|
||||||
|
$configure_command .= " --$o[name]";
|
||||||
|
} else {
|
||||||
|
$configure_command .= " --$o[name]=$r";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($_ENV['MAKE'])) {
|
||||||
|
$make_command = $_ENV['MAKE'];
|
||||||
|
} else {
|
||||||
|
$make_command = 'make';
|
||||||
|
}
|
||||||
|
$to_run = array(
|
||||||
|
"phpize",
|
||||||
|
$configure_command,
|
||||||
|
$make_command,
|
||||||
|
);
|
||||||
|
foreach ($to_run as $cmd) {
|
||||||
|
if (PEAR::isError($err = $this->_runCommand($cmd))) {
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _runCommand($command)
|
||||||
|
{
|
||||||
|
$pp = @popen($command, "r");
|
||||||
|
if (!$pp) {
|
||||||
|
return $this->raiseError("failed to run `$command'");
|
||||||
|
}
|
||||||
|
while ($line = fgets($pp, 1024)) {
|
||||||
|
$this->ui->displayLine(rtrim($line));
|
||||||
|
}
|
||||||
|
pclose($pp);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -61,7 +61,7 @@ $GLOBALS['_PEAR_Common_dependency_relations'] = array('has','eq','lt','le','gt',
|
|||||||
* Valid file roles
|
* Valid file roles
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
$GLOBALS['_PEAR_Common_file_roles'] = array('php','ext','test','doc','data','extsrc','script');
|
$GLOBALS['_PEAR_Common_file_roles'] = array('php','ext','test','doc','data','src','script');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Valid replacement types
|
* Valid replacement types
|
||||||
@ -446,6 +446,16 @@ class PEAR_Common extends PEAR
|
|||||||
$this->pkginfo['release_deps'][$this->d_i] = $attribs;
|
$this->pkginfo['release_deps'][$this->d_i] = $attribs;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'configureoptions':
|
||||||
|
if (!$this->in_changelog) {
|
||||||
|
$this->pkginfo['configure_options'] = array();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'configureoption':
|
||||||
|
if (!$this->in_changelog) {
|
||||||
|
$this->pkginfo['configure_options'][] = $attribs;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -868,6 +878,19 @@ class PEAR_Common extends PEAR
|
|||||||
}
|
}
|
||||||
$ret .= "$indent </deps>\n";
|
$ret .= "$indent </deps>\n";
|
||||||
}
|
}
|
||||||
|
if (isset($pkginfo['configure_options'])) {
|
||||||
|
$ret .= "$indent <configureoptions>\n";
|
||||||
|
foreach ($pkginfo['configure_options'] as $c) {
|
||||||
|
$ret .= "$indent <configureoption name=\"".
|
||||||
|
htmlspecialchars($c['name']) . "\"";
|
||||||
|
if (isset($c['default'])) {
|
||||||
|
$ret .= " default=\"" . htmlspecialchars($c['default']) . "\"";
|
||||||
|
}
|
||||||
|
$ret .= " prompt=\"" . htmlspecialchars($c['prompt']) . "\"";
|
||||||
|
$ret .= "/>\n";
|
||||||
|
}
|
||||||
|
$ret .= "$indent </configureoptions>\n";
|
||||||
|
}
|
||||||
if (isset($pkginfo['filelist'])) {
|
if (isset($pkginfo['filelist'])) {
|
||||||
$ret .= "$indent <filelist>\n";
|
$ret .= "$indent <filelist>\n";
|
||||||
foreach ($pkginfo['filelist'] as $file => $fa) {
|
foreach ($pkginfo['filelist'] as $file => $fa) {
|
||||||
@ -1036,6 +1059,17 @@ class PEAR_Common extends PEAR
|
|||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!empty($info['configure_options'])) {
|
||||||
|
$i = 1;
|
||||||
|
foreach ($info['configure_options'] as $c) {
|
||||||
|
if (empty($c['name'])) {
|
||||||
|
$errors[] = "configure option $i: missing name";
|
||||||
|
}
|
||||||
|
if (empty($c['prompt'])) {
|
||||||
|
$errors[] = "configure option $i: missing prompt";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (empty($info['filelist'])) {
|
if (empty($info['filelist'])) {
|
||||||
$errors[] = 'no files';
|
$errors[] = 'no files';
|
||||||
} else {
|
} else {
|
||||||
|
@ -35,6 +35,11 @@
|
|||||||
<state>beta</state>
|
<state>beta</state>
|
||||||
<date>YYYY-MM-DD</date>
|
<date>YYYY-MM-DD</date>
|
||||||
<notes>
|
<notes>
|
||||||
|
* fixed broken "help" command
|
||||||
|
* new command: "info"
|
||||||
|
* new command: "config-help"
|
||||||
|
* un-indent multi-line data from xml description files
|
||||||
|
* new command: "build"
|
||||||
</notes>
|
</notes>
|
||||||
<filelist>
|
<filelist>
|
||||||
<file role="data" name="package.dtd"/>
|
<file role="data" name="package.dtd"/>
|
||||||
@ -45,6 +50,7 @@
|
|||||||
<file role="php" name="Command.php"/>
|
<file role="php" name="Command.php"/>
|
||||||
<dir name="Command">
|
<dir name="Command">
|
||||||
<file role="php" name="Auth.php"/>
|
<file role="php" name="Auth.php"/>
|
||||||
|
<file role="php" name="Build.php"/>
|
||||||
<file role="php" name="Common.php"/>
|
<file role="php" name="Common.php"/>
|
||||||
<file role="php" name="Config.php"/>
|
<file role="php" name="Config.php"/>
|
||||||
<file role="php" name="Install.php"/>
|
<file role="php" name="Install.php"/>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Id: package.dtd,v 1.24 2002-04-28 07:58:41 ssb Exp $
|
$Id: package.dtd,v 1.25 2002-05-27 01:20:07 ssb Exp $
|
||||||
|
|
||||||
This is the PEAR package description, version 1.0b7.
|
This is the PEAR package description, version 1.0b7.
|
||||||
It should be used with the informal public identifier:
|
It should be used with the informal public identifier:
|
||||||
@ -43,7 +43,7 @@
|
|||||||
|
|
||||||
<!ELEMENT changelog (release)+>
|
<!ELEMENT changelog (release)+>
|
||||||
|
|
||||||
<!ELEMENT release (version|license|state|date|notes|filelist|deps|provides|script)+>
|
<!ELEMENT release (version|license|state|date|notes|filelist|deps|provides|script|configureoptions)+>
|
||||||
|
|
||||||
<!ELEMENT version (#PCDATA)>
|
<!ELEMENT version (#PCDATA)>
|
||||||
|
|
||||||
@ -60,9 +60,11 @@
|
|||||||
baseinstalldir CDATA #IMPLIED>
|
baseinstalldir CDATA #IMPLIED>
|
||||||
|
|
||||||
<!ELEMENT file (replace*)>
|
<!ELEMENT file (replace*)>
|
||||||
<!ATTLIST file role (php|ext|test|doc|data|script) 'php'
|
<!ATTLIST file role (php|ext|src|test|doc|data|script) 'php'
|
||||||
debug (na|on|off) 'na'
|
debug (na|on|off) 'na'
|
||||||
threaded (na|on|off) 'na'
|
zts (na|on|off) 'na'
|
||||||
|
phpapi NUMBER #IMPLIED
|
||||||
|
zendapi NUMBER #IMPLIED
|
||||||
format CDATA #IMPLIED
|
format CDATA #IMPLIED
|
||||||
baseinstalldir CDATA #IMPLIED
|
baseinstalldir CDATA #IMPLIED
|
||||||
platform CDATA #IMPLIED
|
platform CDATA #IMPLIED
|
||||||
@ -103,3 +105,11 @@
|
|||||||
pre-build |post-build |
|
pre-build |post-build |
|
||||||
pre-configure|post-configure|
|
pre-configure|post-configure|
|
||||||
pre-setup |post-setup ) #REQUIRED>
|
pre-setup |post-setup ) #REQUIRED>
|
||||||
|
|
||||||
|
<!ELEMENT configureoptions (configureoption*)>
|
||||||
|
|
||||||
|
<!ELEMENT configureoption EMPTY>
|
||||||
|
<!ATTLIST configureoption
|
||||||
|
name CDATA #REQUIRED
|
||||||
|
default CDATA #IMPLIED
|
||||||
|
prompt CDATA #REQUIRED>
|
||||||
|
Loading…
Reference in New Issue
Block a user