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
|
||||
* @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
|
||||
@ -446,6 +446,16 @@ class PEAR_Common extends PEAR
|
||||
$this->pkginfo['release_deps'][$this->d_i] = $attribs;
|
||||
}
|
||||
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";
|
||||
}
|
||||
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'])) {
|
||||
$ret .= "$indent <filelist>\n";
|
||||
foreach ($pkginfo['filelist'] as $file => $fa) {
|
||||
@ -1036,6 +1059,17 @@ class PEAR_Common extends PEAR
|
||||
$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'])) {
|
||||
$errors[] = 'no files';
|
||||
} else {
|
||||
|
@ -35,6 +35,11 @@
|
||||
<state>beta</state>
|
||||
<date>YYYY-MM-DD</date>
|
||||
<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>
|
||||
<filelist>
|
||||
<file role="data" name="package.dtd"/>
|
||||
@ -45,6 +50,7 @@
|
||||
<file role="php" name="Command.php"/>
|
||||
<dir name="Command">
|
||||
<file role="php" name="Auth.php"/>
|
||||
<file role="php" name="Build.php"/>
|
||||
<file role="php" name="Common.php"/>
|
||||
<file role="php" name="Config.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.
|
||||
It should be used with the informal public identifier:
|
||||
@ -43,7 +43,7 @@
|
||||
|
||||
<!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)>
|
||||
|
||||
@ -60,9 +60,11 @@
|
||||
baseinstalldir CDATA #IMPLIED>
|
||||
|
||||
<!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'
|
||||
threaded (na|on|off) 'na'
|
||||
zts (na|on|off) 'na'
|
||||
phpapi NUMBER #IMPLIED
|
||||
zendapi NUMBER #IMPLIED
|
||||
format CDATA #IMPLIED
|
||||
baseinstalldir CDATA #IMPLIED
|
||||
platform CDATA #IMPLIED
|
||||
@ -103,3 +105,11 @@
|
||||
pre-build |post-build |
|
||||
pre-configure|post-configure|
|
||||
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