* started work on php file support

This commit is contained in:
Stig Bakken 2001-08-28 11:18:08 +00:00
parent b392fe4497
commit 36c27603b1

View File

@ -1,12 +1,14 @@
#!@prefix@/bin/php -Cq
<?php // -*- PHP -*-
main($argc, $argv, $HTTP_ENV_VARS);
main($argc, $argv, $_ENV);
// {{{ main()
function main(&$argc, &$argv, &$env)
{
global $debug;
$debug = false;
$file = check_options($argc, $argv, $env);
parse_package_file($file);
make_makefile_in($env);
@ -15,11 +17,30 @@ function main(&$argc, &$argv, &$env)
// }}}
// {{{ check_options()
function check_options(&$argc, &$argv, &$env)
function check_options($argc, $argv, $env)
{
$file = $argv[1];
global $debug;
array_shift($argv);
while ($argv[0]{0} == '-' && $argv[0] != '-') {
$opt = array_shift($argv);
switch ($opt) {
case '--': {
break 2;
}
case '-d': {
$debug = true;
break;
}
default: {
die("pearize: unrecognized option `$opt'\n");
}
}
}
$file = array_shift($argv);
if (empty($file)) {
$file = "package.xml";
} elseif ($file == '-') {
$file = "php://stdin";
}
return $file;
}
@ -29,14 +50,16 @@ function check_options(&$argc, &$argv, &$env)
function make_makefile_in(&$env)
{
global $libdata;
if (sizeof($libdata) == 0) {
exit;
} elseif (sizeof($libdata) > 1) {
global $libdata, $debug;
if (sizeof($libdata) > 1) {
die("No support yet for multiple libraries in one package.\n");
}
$wp = @fopen("Makefile.in", "w");
if ($debug) {
$wp = fopen("php://stdout", "w");
} else {
$wp = @fopen("Makefile.in", "w");
}
if (is_resource($wp)) {
print "Creating Makefile.in...";
flush();
@ -44,17 +67,22 @@ function make_makefile_in(&$env)
die("Could not create Makefile.in in current directory.\n");
}
$who = $env["USER"];
$when = gmdate('Y-m-d h:i');
fwrite($wp, "# This file was generated by `pearize' by $who at $when GMT\n\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
fwrite($wp, "\
INCLUDES = $includes
LTLIBRARY_NAME = lib{$lib}.la
LTLIBRARY_SOURCES = $sources
LTLIBRARY_SHARED_NAME = {$lib}.la
LTLIBRARY_SHARED_LIBADD = $libadd
");
}
if (sizeof($libdata) > 0) {
fwrite($wp, "include \$(top_srcdir)/build/dynlib.mk\n");
}
fclose($wp);
@ -67,12 +95,15 @@ LTLIBRARY_SHARED_LIBADD = $libadd
function parse_package_file($file)
{
global $in_file, $curlib, $curelem, $libdata, $cdata;
global $currinstalldir, $baseinstalldir;
$in_file = false;
$curlib = '';
$curelem = '';
$libdata = array();
$cdata = array();
$baseinstalldir = array();
$currinstalldir = array();
$xp = xml_parser_create();
xml_set_element_handler($xp, "start_handler", "end_handler");
@ -94,10 +125,13 @@ function parse_package_file($file)
function start_handler($xp, $elem, $attrs)
{
global $cdata, $in_file, $curelem;
global $cdata, $in_file, $curelem, $curfile, $filerole;
global $baseinstalldir, $currinstalldir;
switch ($elem) {
case "FILE": {
switch ($attrs['ROLE']) {
$curfile = '';
$filerole = $attrs['ROLE'];
switch ($filerole) {
case "ext": {
$in_file = true;
$cdata = array();
@ -109,6 +143,17 @@ function start_handler($xp, $elem, $attrs)
}
break;
}
case "DIR": {
$cdir = $currinstalldir[sizeof($currinstalldir)-1];
$bdir = $baseinstalldir[sizeof($baseinstalldir)-1];
array_push($currinstalldir, "$cdir/{$attrs[NAME]}");
if (isset($attrs["BASEINSTALLDIR"])) {
array_push($baseinstalldir, "$bdir/{$attrs[BASEINSTALLDIR]}");
} else {
array_push($baseinstalldir, $bdir);
}
break;
}
case "INCLUDES":
case "LIBNAME":
case "LIBADD":
@ -125,6 +170,7 @@ function start_handler($xp, $elem, $attrs)
function end_handler($xp, $elem)
{
global $in_file, $curlib, $curelem, $libdata, $cdata;
global $baseinstalldir, $currinstalldir;
switch ($elem) {
case "FILE": {
if ($in_file === true) {
@ -138,6 +184,11 @@ function end_handler($xp, $elem)
}
break;
}
case "DIR": {
array_pop($currinstalldir);
array_pop($baseinstalldir);
break;
}
}
}
@ -146,8 +197,12 @@ function end_handler($xp, $elem)
function cdata_handler($xp, $data)
{
global $curelem, $cdata;
global $curelem, $cdata, $curfile;
switch ($curelem) {
case "FILE": {
$curfile .= $data;
break;
}
case "INCLUDES":
case "LIBADD":
case "LIBNAME":