aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-04-16 18:07:22 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-04-16 18:07:22 +0000
commitea46ddcfa6d6156f67aa30053438995dca71ce0d (patch)
tree49fcb6ca876b63ac7938cc3315f389a22b0e1c88 /src
parentaae70b2dca2de4b0aa7f81a210b86626ef2e081e (diff)
downloadpostgresql-ea46ddcfa6d6156f67aa30053438995dca71ce0d.tar.gz
postgresql-ea46ddcfa6d6156f67aa30053438995dca71ce0d.zip
Tweak create_help.pl so it will work under either perl 4.* or perl 5.*.
Remove knowledge of path to documentation source directory from perl script, instead have Makefile pass it to script.
Diffstat (limited to 'src')
-rw-r--r--src/bin/psql/Makefile.in12
-rw-r--r--src/bin/psql/create_help.pl55
2 files changed, 45 insertions, 22 deletions
diff --git a/src/bin/psql/Makefile.in b/src/bin/psql/Makefile.in
index da8e2860963..49600c8ccb5 100644
--- a/src/bin/psql/Makefile.in
+++ b/src/bin/psql/Makefile.in
@@ -7,14 +7,16 @@
#
#
# IDENTIFICATION
-# $Header: /cvsroot/pgsql/src/bin/psql/Attic/Makefile.in,v 1.22 2000/04/14 23:43:44 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/psql/Attic/Makefile.in,v 1.23 2000/04/16 18:07:22 tgl Exp $
#
#-------------------------------------------------------------------------
SRCDIR= ../..
-include ../../Makefile.global
+include $(SRCDIR)/Makefile.global
-CFLAGS:= -I$(LIBPQDIR) $(CFLAGS)
+DOCDIR= $(SRCDIR)/../doc/src/sgml/ref
+
+CFLAGS+= -I$(LIBPQDIR)
#
# And where libpq goes, so goes the authentication stuff...
@@ -61,8 +63,8 @@ psql: $(OBJS) $(LIBPQDIR)/libpq.a
help.o: sql_help.h
ifneq ($(strip $(PERL)),)
-sql_help.h: $(wildcard $(SRCDIR)/../doc/src/sgml/ref/*.sgml) create_help.pl
- $(PERL) create_help.pl sql_help.h
+sql_help.h: $(wildcard $(DOCDIR)/*.sgml) create_help.pl
+ $(PERL) create_help.pl $(DOCDIR) sql_help.h
else
sql_help.h:
@echo "*** Perl is needed to build psql help."
diff --git a/src/bin/psql/create_help.pl b/src/bin/psql/create_help.pl
index f8e5379c893..875ff843837 100644
--- a/src/bin/psql/create_help.pl
+++ b/src/bin/psql/create_help.pl
@@ -5,7 +5,7 @@
#
# Copyright 2000 by PostgreSQL Global Development Group
#
-# $Header: /cvsroot/pgsql/src/bin/psql/create_help.pl,v 1.5 2000/03/01 21:09:58 petere Exp $
+# $Header: /cvsroot/pgsql/src/bin/psql/create_help.pl,v 1.6 2000/04/16 18:07:22 tgl Exp $
#################################################################
#
@@ -14,20 +14,22 @@
# enough that this worked, but this here is by no means an SGML
# parser.
#
-# Call: perl create_help.pl sql_help.h
+# Call: perl create_help.pl docdir sql_help.h
# The name of the header file doesn't matter to this script, but it
# sure does matter to the rest of the source.
#
-$docdir = "./../../../doc/src/sgml/ref";
-$outputfile = $ARGV[0] or die "$0: missing required argument\n";
+$docdir = $ARGV[0] || die "$0: missing required argument: docdir\n";
+$outputfile = $ARGV[1] || die "$0: missing required argument: output file\n";
$define = $outputfile;
$define =~ tr/a-z/A-Z/;
$define =~ s/\W/_/g;
-opendir DIR, $docdir or die "$0: could not open documentation sources: $!\n";
-open OUT, ">$outputfile" or die "$0: could not open output file '$outputfile': $!\n";
+opendir(DIR, $docdir)
+ || die "$0: could not open documentation source dir '$docdir': $!\n";
+open(OUT, ">$outputfile")
+ || die "$0: could not open output file '$outputfile': $!\n";
print OUT
"/*
@@ -57,29 +59,48 @@ static struct _helpStruct QL_HELP[] = {
$count = 0;
foreach $file (sort readdir DIR) {
- my ($cmdname, $cmddesc, $cmdsynopsis);
+ local ($cmdname, $cmddesc, $cmdsynopsis);
$file =~ /\.sgml$/ || next;
- open FILE, "$docdir/$file" or next;
+ open(FILE, "$docdir/$file") || next;
$filecontent = join('', <FILE>);
close FILE;
+ # Ignore files that are not for SQL language statements
$filecontent =~ m!<refmiscinfo>\s*SQL - Language Statements\s*</refmiscinfo>!i
- or next;
-
- $filecontent =~ m!<refname>\s*([a-z ]+?)\s*</refname>!i && ($cmdname = $1);
- $filecontent =~ m!<refpurpose>\s*(.+?)\s*</refpurpose>!i && ($cmddesc = $1);
-
- $filecontent =~ m!<synopsis>\s*(.+?)\s*</synopsis>!is && ($cmdsynopsis = $1);
+ || next;
+
+ # Extract <refname>, <refpurpose>, and <synopsis> fields, taking the
+ # first one if there are more than one. NOTE: we cannot just say
+ # "<synopsis>(.*)</synopsis>", because that will match the first
+ # occurrence of <synopsis> and the last one of </synopsis>! Under
+ # Perl 5 we could use a non-greedy wildcard, .*?, to ensure we match
+ # the first </synopsis>, but we want this script to run under Perl 4
+ # too, and Perl 4 hasn't got that feature. So, do it the hard way.
+ # Also, use [\000-\377] where we want to match anything including
+ # newline --- Perl 4 does not have Perl 5's /s modifier.
+ $filecontent =~ m!<refname>\s*([a-z ]*[a-z])\s*</refname>!i && ($cmdname = $1);
+ if ($filecontent =~ m!<refpurpose>\s*([\000-\377]+)$!i) {
+ $tmp = $1; # everything after first <refpurpose>
+ if ($tmp =~ s!\s*</refpurpose>[\000-\377]*$!!i) {
+ $cmddesc = $tmp;
+ }
+ }
+ if ($filecontent =~ m!<synopsis>\s*([\000-\377]+)$!i) {
+ $tmp = $1; # everything after first <synopsis>
+ if ($tmp =~ s!\s*</synopsis>[\000-\377]*$!!i) {
+ $cmdsynopsis = $tmp;
+ }
+ }
if ($cmdname && $cmddesc && $cmdsynopsis) {
$cmdname =~ s/\"/\\"/g;
- $cmddesc =~ s/<\/?.+?>//sg;
- $cmddesc =~ s/\n/ /g;
+ $cmddesc =~ s/<[^>]+>//g;
+ $cmddesc =~ s/\s+/ /g;
$cmddesc =~ s/\"/\\"/g;
- $cmdsynopsis =~ s/<\/?.+?>//sg;
+ $cmdsynopsis =~ s/<[^>]+>//g;
$cmdsynopsis =~ s/\n/\\n/g;
$cmdsynopsis =~ s/\"/\\"/g;