--- /dev/null
+<?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);
+
+ }
+}
* 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
$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;
}
}
}
$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) {
$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 {
<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"/>
<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"/>
<!--
- $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:
<!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)>
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
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>