• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#/bin/sh
2
3# Script to prepare the files for building a PCRE release. It does some
4# processing of the documentation, detrails files, and creates pcre.h.generic
5# and config.h.generic (for use by builders who can't run ./configure).
6
7# You must run this script before runnning "make dist". If its first argument
8# is "doc", it stops after preparing the documentation. There are no other
9# arguments. The script makes use of the following files:
10
11# 132html     A Perl script that converts a .1 or .3 man page into HTML. It
12#             "knows" the relevant troff constructs that are used in the PCRE
13#             man pages.
14
15# CheckMan    A Perl script that checks man pages for typos in the mark up.
16
17# CleanTxt    A Perl script that cleans up the output of "nroff -man" by
18#             removing backspaces and other redundant text so as to produce
19#             a readable .txt file.
20
21# Detrail     A Perl script that removes trailing spaces from files.
22
23# doc/index.html.src
24#             A file that is copied as index.html into the doc/html directory
25#             when the HTML documentation is built. It works like this so that
26#             doc/html can be deleted and re-created from scratch.
27
28
29# First, sort out the documentation. Remove pcredemo.3 first because it won't
30# pass the markup check (it is created below, using markup that none of the
31# other pages use).
32
33cd doc
34echo Processing documentation
35
36/bin/rm -f pcredemo.3
37
38# Check the remaining man pages
39
40../CheckMan *.1 *.3
41if [ $? != 0 ] ; then exit 1; fi
42
43# Make Text form of the documentation. It needs some mangling to make it
44# tidy for online reading. Concatenate all the .3 stuff, but omit the
45# individual function pages.
46
47cat <<End >pcre.txt
48-----------------------------------------------------------------------------
49This file contains a concatenation of the PCRE man pages, converted to plain
50text format for ease of searching with a text editor, or for use on systems
51that do not have a man page processor. The small individual files that give
52synopses of each function in the library have not been included. Neither has
53the pcredemo program. There are separate text files for the pcregrep and
54pcretest commands.
55-----------------------------------------------------------------------------
56
57
58End
59
60echo "Making pcre.txt"
61for file in pcre pcrebuild pcrematching pcreapi pcrecallout pcrecompat \
62            pcrepattern pcresyntax pcrepartial pcreprecompile \
63            pcreperform pcreposix pcrecpp pcresample pcrestack ; do
64  echo "  Processing $file.3"
65  nroff -c -man $file.3 >$file.rawtxt
66  ../CleanTxt <$file.rawtxt >>pcre.txt
67  /bin/rm $file.rawtxt
68  echo "------------------------------------------------------------------------------" >>pcre.txt
69  if [ "$file" != "pcresample" ] ; then
70    echo " " >>pcre.txt
71    echo " " >>pcre.txt
72  fi
73done
74
75# The three commands
76for file in pcretest pcregrep pcre-config ; do
77  echo Making $file.txt
78  nroff -c -man $file.1 >$file.rawtxt
79  ../CleanTxt <$file.rawtxt >$file.txt
80  /bin/rm $file.rawtxt
81done
82
83
84# Make pcredemo.3 from the pcredemo.c source file
85
86echo "Making pcredemo.3"
87perl <<"END" >pcredemo.3
88  open(IN, "../pcredemo.c") || die "Failed to open pcredemo.c\n";
89  open(OUT, ">pcredemo.3") || die "Failed to open pcredemo.3\n";
90  print OUT ".\\\" Start example.\n" .
91            ".de EX\n" .
92            ".  nr mE \\\\n(.f\n" .
93            ".  nf\n" .
94            ".  nh\n" .
95            ".  ft CW\n" .
96            "..\n" .
97            ".\n" .
98            ".\n" .
99            ".\\\" End example.\n" .
100            ".de EE\n" .
101            ".  ft \\\\n(mE\n" .
102            ".  fi\n" .
103            ".  hy \\\\n(HY\n" .
104            "..\n" .
105            ".\n" .
106            ".EX\n" ;
107  while (<IN>)
108    {
109    s/\\/\\e/g;
110    print OUT;
111    }
112  print OUT ".EE\n";
113  close(IN);
114  close(OUT);
115END
116if [ $? != 0 ] ; then exit 1; fi
117
118
119# Make HTML form of the documentation.
120
121echo "Making HTML documentation"
122/bin/rm html/*
123cp index.html.src html/index.html
124
125for file in *.1 ; do
126  base=`basename $file .1`
127  echo "  Making $base.html"
128  ../132html -toc $base <$file >html/$base.html
129done
130
131# Exclude table of contents for function summaries. It seems that expr
132# forces an anchored regex. Also exclude them for small pages that have
133# only one section.
134
135for file in *.3 ; do
136  base=`basename $file .3`
137  toc=-toc
138  if [ `expr $base : '.*_'` -ne 0 ] ; then toc="" ; fi
139  if [ "$base" = "pcresample" ] || \
140     [ "$base" = "pcrestack" ]  || \
141     [ "$base" = "pcrecompat" ] || \
142     [ "$base" = "pcreperform" ] ; then
143    toc=""
144  fi
145  echo "  Making $base.html"
146  ../132html $toc $base <$file >html/$base.html
147  if [ $? != 0 ] ; then exit 1; fi
148done
149
150# End of documentation processing; stop if only documentation required.
151
152cd ..
153echo Documentation done
154if [ "$1" = "doc" ] ; then exit; fi
155
156# These files are detrailed; do not detrail the test data because there may be
157# significant trailing spaces. The configure files are also omitted from the
158# detrailing.
159
160files="\
161  Makefile.am \
162  Makefile.in \
163  configure.ac \
164  README \
165  LICENCE \
166  COPYING \
167  AUTHORS \
168  NEWS \
169  NON-UNIX-USE \
170  INSTALL \
171  132html \
172  CleanTxt \
173  Detrail \
174  ChangeLog \
175  CMakeLists.txt \
176  RunGrepTest \
177  RunTest \
178  RunTest.bat \
179  pcre-config.in \
180  libpcre.pc.in \
181  libpcreposix.pc.in \
182  libpcrecpp.pc.in \
183  config.h.in \
184  pcre_printint.src \
185  pcre_chartables.c.dist \
186  pcredemo.c \
187  pcregrep.c \
188  pcretest.c \
189  dftables.c \
190  pcreposix.c \
191  pcreposix.h \
192  pcre.h.in \
193  pcre_internal.h
194  pcre_compile.c \
195  pcre_config.c \
196  pcre_dfa_exec.c \
197  pcre_exec.c \
198  pcre_fullinfo.c \
199  pcre_get.c \
200  pcre_globals.c \
201  pcre_info.c \
202  pcre_maketables.c \
203  pcre_newline.c \
204  pcre_ord2utf8.c \
205  pcre_refcount.c \
206  pcre_study.c \
207  pcre_tables.c \
208  pcre_try_flipped.c \
209  pcre_ucp_searchfuncs.c \
210  pcre_valid_utf8.c \
211  pcre_version.c \
212  pcre_xclass.c \
213  pcre_scanner.cc \
214  pcre_scanner.h \
215  pcre_scanner_unittest.cc \
216  pcrecpp.cc \
217  pcrecpp.h \
218  pcrecpparg.h.in \
219  pcrecpp_unittest.cc \
220  pcre_stringpiece.cc \
221  pcre_stringpiece.h.in \
222  pcre_stringpiece_unittest.cc \
223  perltest.pl \
224  ucp.h \
225  ucpinternal.h \
226  ucptable.h \
227  makevp.bat \
228  pcre.def \
229  libpcre.def \
230  libpcreposix.def"
231
232echo Detrailing
233./Detrail $files doc/p* doc/html/*
234
235echo Doing basic configure to get default pcre.h and config.h
236# This is in case the caller has set aliases (as I do - PH)
237unset cp ls mv rm
238./configure >/dev/null
239
240echo Converting pcre.h and config.h to generic forms
241cp -f pcre.h pcre.h.generic
242
243perl <<'END'
244  open(IN, "<config.h") || die "Can't open config.h: $!\n";
245  open(OUT, ">config.h.generic") || die "Can't open config.h.generic: $!\n";
246  while (<IN>)
247    {
248    if (/^#define\s(?!PACKAGE)(\w+)/)
249      {
250      print OUT "#ifndef $1\n";
251      print OUT;
252      print OUT "#endif\n";
253      }
254    else
255      {
256      print OUT;
257      }
258    }
259  close IN;
260  close OUT;
261END
262
263echo Done
264
265#End
266