diff --git a/src/bin/psql/Makefile.in b/src/bin/psql/Makefile.in index da8e2860963ab03f3c166ef605edca41c4d78d0c..49600c8ccb503fc8476325e3adb1dbc6cf3f69c4 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 f8e5379c8936476c1b1faf84584ab443e3755371..875ff843837a9441e2f64566c1638af7ac174ad5 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;