diff --git a/src/bin/psql/Makefile.in b/src/bin/psql/Makefile.in index da8e286096..49600c8ccb 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 f8e5379c89..875ff84383 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('', ); close FILE; + # Ignore files that are not for SQL language statements $filecontent =~ m!\s*SQL - Language Statements\s*!i - or next; + || next; - $filecontent =~ m!\s*([a-z ]+?)\s*!i && ($cmdname = $1); - $filecontent =~ m!\s*(.+?)\s*!i && ($cmddesc = $1); - - $filecontent =~ m!\s*(.+?)\s*!is && ($cmdsynopsis = $1); + # Extract , , and fields, taking the + # first one if there are more than one. NOTE: we cannot just say + # "(.*)", because that will match the first + # occurrence of and the last one of ! Under + # Perl 5 we could use a non-greedy wildcard, .*?, to ensure we match + # the first , 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!\s*([a-z ]*[a-z])\s*!i && ($cmdname = $1); + if ($filecontent =~ m!\s*([\000-\377]+)$!i) { + $tmp = $1; # everything after first + if ($tmp =~ s!\s*[\000-\377]*$!!i) { + $cmddesc = $tmp; + } + } + if ($filecontent =~ m!\s*([\000-\377]+)$!i) { + $tmp = $1; # everything after first + if ($tmp =~ s!\s*[\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;