]> granicus.if.org Git - php/commitdiff
@Added "pearize" script to generate Makefile.in files for PEAR extensions
authorStig Bakken <ssb@php.net>
Mon, 28 May 2001 11:15:19 +0000 (11:15 +0000)
committerStig Bakken <ssb@php.net>
Mon, 28 May 2001 11:15:19 +0000 (11:15 +0000)
configure.in
pear/Makefile.in
pear/scripts/pearize.in [new file with mode: 0644]

index b094b792ca96eeba3951c9da801e37239adcaa10..7bce7b2de6d8210bbdf56fc994a20556c01947b6 100644 (file)
@@ -911,7 +911,7 @@ PHP_GEN_CONFIG_VARS
 $php_shtool mkdir -p pear/scripts
 ALL_OUTPUT_FILES="php4.spec Zend/Makefile main/build-defs.h \
 pear/scripts/pear pear/scripts/phpize pear/scripts/php-config \
-TSRM/Makefile $PHP_OUTPUT_FILES"
+pear/scripts/pearize TSRM/Makefile $PHP_OUTPUT_FILES"
 
 AC_OUTPUT($ALL_OUTPUT_FILES, [], [
 
index 93127bf355e30147667e5836ce04b6a31f001361..898674974f38302240f2b9ac307743185c244d89 100644 (file)
@@ -139,7 +139,7 @@ BUILD_FILES = \
        dynlib.m4 \
        acinclude.m4
 
-bin_SCRIPTS = phpize php-config pear
+bin_SCRIPTS = phpize php-config pear pearize
 
 install-build:
        $(mkinstalldirs) $(INSTALL_ROOT)$(phpbuilddir) $(INSTALL_ROOT)$(bindir) && \
@@ -184,5 +184,8 @@ scripts/pear: scripts/pear.in $(top_builddir)/config.status
 scripts/phpize: scripts/phpize.in $(top_builddir)/config.status
        (cd ..;CONFIG_FILES=pear/scripts/phpize CONFIG_HEADERS= $(top_builddir)/config.status)
 
+scripts/pearize: scripts/pearize.in $(top_builddir)/config.status
+       (cd ..;CONFIG_FILES=pear/scripts/pearize CONFIG_HEADERS= $(top_builddir)/config.status)
+
 scripts/php-config: scripts/php-config.in $(top_builddir)/config.status
        (cd ..;CONFIG_FILES=pear/scripts/php-config CONFIG_HEADERS= $(top_builddir)/config.status)
diff --git a/pear/scripts/pearize.in b/pear/scripts/pearize.in
new file mode 100644 (file)
index 0000000..0f03d21
--- /dev/null
@@ -0,0 +1,165 @@
+#!@prefix@/bin/php -Cq
+<?php // -*- PHP -*-
+
+main($argc, $argv, $HTTP_ENV_VARS);
+
+// {{{ main()
+
+function main(&$argc, &$argv, &$env)
+{
+    $file = check_options($argc, $argv, $env);
+    parse_package_file($file);
+    make_makefile_in($env);
+}
+
+// }}}
+// {{{ check_options()
+
+function check_options(&$argc, &$argv, &$env)
+{
+    $file = $argv[1];
+    if (empty($file)) {
+       $file = "package.xml";
+    }
+    return $file;
+}
+
+// }}}
+// {{{ make_makefile_in()
+
+function make_makefile_in(&$env)
+{
+    global $libdata;
+    if (sizeof($libdata) == 0) {
+       exit;
+    } elseif (sizeof($libdata) > 1) {
+       die("No support yet for multiple libraries in one package.\n");
+    }
+
+    $wp = @fopen("Makefile.in", "w");
+    if (is_resource($wp)) {
+       print "Creating Makefile.in...";
+       flush();
+    } else {
+       die("Could not create Makefile.in in current directory.\n");
+    }
+
+    foreach ($libdata as $lib => $info) {
+       extract($info);
+       $_who = $env["USER"];
+       $_when = gmdate('Y-m-d h:i');
+       fwrite($wp, "\
+# This file was generated by `pearize' by $_who at $_when GMT
+INCLUDES                = $includes
+LTLIBRARY_NAME          = lib{$lib}.la
+LTLIBRARY_SOURCES       = $sources
+LTLIBRARY_SHARED_NAME   = {$lib}.la
+LTLIBRARY_SHARED_LIBADD = $libadd
+
+include \$(top_srcdir)/build/dynlib.mk
+");
+    }
+    fclose($wp);
+    print "done.\n";
+}
+
+// }}}
+// {{{ parse_package_file()
+
+function parse_package_file($file)
+{
+    global $in_file, $curlib, $curelem, $libdata, $cdata;
+    
+    $in_file = false;
+    $curlib = '';
+    $curelem = '';
+    $libdata = array();
+    $cdata = array();
+    
+    $xp = xml_parser_create();
+    xml_set_element_handler($xp, "start_handler", "end_handler");
+    xml_set_character_data_handler($xp, "cdata_handler");
+    xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, false);
+    
+    $fp = @fopen($file, "r");
+    if (!is_resource($fp)) {
+       die("Could not open file `$file'.\n");
+    }
+    while (!feof($fp)) {
+       xml_parse($xp, fread($fp, 2048), feof($fp));
+    }
+    xml_parser_free($xp);
+}
+
+// }}}
+// {{{ start_handler()
+
+function start_handler($xp, $elem, $attrs)
+{
+    global $cdata, $in_file, $curelem;
+    switch ($elem) {
+       case "File": {
+           switch ($attrs['Role']) {
+               case "ext": {
+                   $in_file = true;
+                   $cdata = array();
+                   break;
+               }
+               case "php": default: {
+                   break;
+               }
+           }
+           break;
+       }
+       case "Includes":
+       case "LibName":
+       case "LibAdd":
+       case "Sources": {
+           $curelem = $elem;
+           break;
+       }
+    }
+}
+
+// }}}
+// {{{ end_handler()
+
+function end_handler($xp, $elem)
+{
+    global $in_file, $curlib, $curelem, $libdata, $cdata;
+    switch ($elem) {
+       case "File": {
+           if ($in_file === true) {
+               $libname = trim($cdata['LibName']);
+               $libdata[$libname] = array(
+                   "sources" => trim($cdata['Sources']),
+                   "includes" => trim($cdata['Includes']),
+                   "libadd" => trim($cdata['LibAdd']),
+               );
+               $in_file = false;
+           }
+           break;
+       }
+    }
+}
+
+// }}}
+// {{{ cdata_handler()
+
+function cdata_handler($xp, $data)
+{
+    global $curelem, $cdata;
+    switch ($curelem) {
+       case "Includes":
+       case "LibAdd":
+       case "LibName":
+       case "Sources": {
+           $cdata[$curelem] .= $data;
+           break;
+       }
+    }
+}
+
+// }}}
+
+?>