From 622c684164edd9eecbf2bb40075d623170c08015 Mon Sep 17 00:00:00 2001 From: Stig Bakken Date: Mon, 27 May 2002 01:20:10 +0000 Subject: [PATCH] * first shot at "pear build" command for building extensions from C code --- pear/PEAR/Command/Build.php | 102 ++++++++++++++++++++++++++++++++++++ pear/PEAR/Common.php | 36 ++++++++++++- pear/package-PEAR.xml | 6 +++ pear/package.dtd | 18 +++++-- 4 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 pear/PEAR/Command/Build.php diff --git a/pear/PEAR/Command/Build.php b/pear/PEAR/Command/Build.php new file mode 100644 index 00000000000..6a661eb9f47 --- /dev/null +++ b/pear/PEAR/Command/Build.php @@ -0,0 +1,102 @@ + | +// | Tomas V.V.Cox | +// | | +// +----------------------------------------------------------------------+ +// +// $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); + + } +} diff --git a/pear/PEAR/Common.php b/pear/PEAR/Common.php index d03b643d59d..f244a036606 100644 --- a/pear/PEAR/Common.php +++ b/pear/PEAR/Common.php @@ -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 \n"; } + if (isset($pkginfo['configure_options'])) { + $ret .= "$indent \n"; + foreach ($pkginfo['configure_options'] as $c) { + $ret .= "$indent $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 { diff --git a/pear/package-PEAR.xml b/pear/package-PEAR.xml index 59dca07d6cc..b894fe37256 100644 --- a/pear/package-PEAR.xml +++ b/pear/package-PEAR.xml @@ -35,6 +35,11 @@ beta YYYY-MM-DD +* fixed broken "help" command +* new command: "info" +* new command: "config-help" +* un-indent multi-line data from xml description files +* new command: "build" @@ -45,6 +50,7 @@ + diff --git a/pear/package.dtd b/pear/package.dtd index 18638597e4b..1c214ee2e82 100644 --- a/pear/package.dtd +++ b/pear/package.dtd @@ -1,5 +1,5 @@