]> granicus.if.org Git - php/commitdiff
* first shot at "pear build" command for building extensions from C code
authorStig Bakken <ssb@php.net>
Mon, 27 May 2002 01:20:10 +0000 (01:20 +0000)
committerStig Bakken <ssb@php.net>
Mon, 27 May 2002 01:20:10 +0000 (01:20 +0000)
pear/PEAR/Command/Build.php [new file with mode: 0644]
pear/PEAR/Common.php
pear/package-PEAR.xml
pear/package.dtd

diff --git a/pear/PEAR/Command/Build.php b/pear/PEAR/Command/Build.php
new file mode 100644 (file)
index 0000000..6a661eb
--- /dev/null
@@ -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);
+        
+    }
+}
index d03b643d59d9deb4b62dc6bed92422beb4bd37f3..f244a0366060da0c230b9d4a0b9dab7953eb884b 100644 (file)
@@ -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 {
index 59dca07d6cc5ca7b82771a0f8b51c6255e55ae40..b894fe37256ec00c7e89a11116672280652e2330 100644 (file)
     <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"/>
index 18638597e4b5b18ba82637201fe707d423af0174..1c214ee2e82baa0cfe3380c87a00a38385d73de1 100644 (file)
@@ -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)>
 
               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>