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 40perl ../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 pcre16 pcrebuild pcrematching pcreapi pcrecallout pcrecompat \ 62 pcrepattern pcresyntax pcreunicode pcrejit pcrepartial \ 63 pcreprecompile pcreperform pcreposix pcrecpp pcresample \ 64 pcrelimits pcrestack ; do 65 echo " Processing $file.3" 66 nroff -c -man $file.3 >$file.rawtxt 67 perl ../CleanTxt <$file.rawtxt >>pcre.txt 68 /bin/rm $file.rawtxt 69 echo "------------------------------------------------------------------------------" >>pcre.txt 70 if [ "$file" != "pcresample" ] ; then 71 echo " " >>pcre.txt 72 echo " " >>pcre.txt 73 fi 74done 75 76# The three commands 77for file in pcretest pcregrep pcre-config ; do 78 echo Making $file.txt 79 nroff -c -man $file.1 >$file.rawtxt 80 perl ../CleanTxt <$file.rawtxt >$file.txt 81 /bin/rm $file.rawtxt 82done 83 84 85# Make pcredemo.3 from the pcredemo.c source file 86 87echo "Making pcredemo.3" 88perl <<"END" >pcredemo.3 89 open(IN, "../pcredemo.c") || die "Failed to open pcredemo.c\n"; 90 open(OUT, ">pcredemo.3") || die "Failed to open pcredemo.3\n"; 91 print OUT ".\\\" Start example.\n" . 92 ".de EX\n" . 93 ". nr mE \\\\n(.f\n" . 94 ". nf\n" . 95 ". nh\n" . 96 ". ft CW\n" . 97 "..\n" . 98 ".\n" . 99 ".\n" . 100 ".\\\" End example.\n" . 101 ".de EE\n" . 102 ". ft \\\\n(mE\n" . 103 ". fi\n" . 104 ". hy \\\\n(HY\n" . 105 "..\n" . 106 ".\n" . 107 ".EX\n" ; 108 while (<IN>) 109 { 110 s/\\/\\e/g; 111 print OUT; 112 } 113 print OUT ".EE\n"; 114 close(IN); 115 close(OUT); 116END 117if [ $? != 0 ] ; then exit 1; fi 118 119 120# Make HTML form of the documentation. 121 122echo "Making HTML documentation" 123/bin/rm html/* 124cp index.html.src html/index.html 125 126for file in *.1 ; do 127 base=`basename $file .1` 128 echo " Making $base.html" 129 perl ../132html -toc $base <$file >html/$base.html 130done 131 132# Exclude table of contents for function summaries. It seems that expr 133# forces an anchored regex. Also exclude them for small pages that have 134# only one section. 135 136for file in *.3 ; do 137 base=`basename $file .3` 138 toc=-toc 139 if [ `expr $base : '.*_'` -ne 0 ] ; then toc="" ; fi 140 if [ "$base" = "pcresample" ] || \ 141 [ "$base" = "pcrestack" ] || \ 142 [ "$base" = "pcrecompat" ] || \ 143 [ "$base" = "pcrelimits" ] || \ 144 [ "$base" = "pcreperform" ] || \ 145 [ "$base" = "pcreunicode" ] ; then 146 toc="" 147 fi 148 echo " Making $base.html" 149 perl ../132html $toc $base <$file >html/$base.html 150 if [ $? != 0 ] ; then exit 1; fi 151done 152 153# End of documentation processing; stop if only documentation required. 154 155cd .. 156echo Documentation done 157if [ "$1" = "doc" ] ; then exit; fi 158 159# These files are detrailed; do not detrail the test data because there may be 160# significant trailing spaces. Do not detrail RunTest.bat, because it has CRLF 161# line endings and the detrail script removes all trailing white space. The 162# configure files are also omitted from the detrailing. We don't bother with 163# those pcre16_xx files that just define COMPILE_PCRE16 and then #include the 164# common file, because they aren't going to change. 165 166files="\ 167 Makefile.am \ 168 Makefile.in \ 169 configure.ac \ 170 README \ 171 LICENCE \ 172 COPYING \ 173 AUTHORS \ 174 NEWS \ 175 NON-UNIX-USE \ 176 NON-AUTOTOOLS-BUILD \ 177 INSTALL \ 178 132html \ 179 CleanTxt \ 180 Detrail \ 181 ChangeLog \ 182 CMakeLists.txt \ 183 RunGrepTest \ 184 RunTest \ 185 pcre-config.in \ 186 libpcre.pc.in \ 187 libpcre16.pc.in \ 188 libpcreposix.pc.in \ 189 libpcrecpp.pc.in \ 190 config.h.in \ 191 pcre_chartables.c.dist \ 192 pcredemo.c \ 193 pcregrep.c \ 194 pcretest.c \ 195 dftables.c \ 196 pcreposix.c \ 197 pcreposix.h \ 198 pcre.h.in \ 199 pcre_internal.h 200 pcre_byte_order.c \ 201 pcre_compile.c \ 202 pcre_config.c \ 203 pcre_dfa_exec.c \ 204 pcre_exec.c \ 205 pcre_fullinfo.c \ 206 pcre_get.c \ 207 pcre_globals.c \ 208 pcre_jit_compile.c \ 209 pcre_jit_test.c \ 210 pcre_maketables.c \ 211 pcre_newline.c \ 212 pcre_ord2utf8.c \ 213 pcre16_ord2utf16.c \ 214 pcre_printint.c \ 215 pcre_refcount.c \ 216 pcre_string_utils.c \ 217 pcre_study.c \ 218 pcre_tables.c \ 219 pcre_ucp_searchfuncs.c \ 220 pcre_valid_utf8.c \ 221 pcre_version.c \ 222 pcre_xclass.c \ 223 pcre16_utf16_utils.c \ 224 pcre16_valid_utf16.c \ 225 pcre_scanner.cc \ 226 pcre_scanner.h \ 227 pcre_scanner_unittest.cc \ 228 pcrecpp.cc \ 229 pcrecpp.h \ 230 pcrecpparg.h.in \ 231 pcrecpp_unittest.cc \ 232 pcre_stringpiece.cc \ 233 pcre_stringpiece.h.in \ 234 pcre_stringpiece_unittest.cc \ 235 perltest.pl \ 236 ucp.h \ 237 ucpinternal.h \ 238 ucptable.h \ 239 makevp.bat \ 240 pcre.def \ 241 libpcre.def \ 242 libpcreposix.def" 243 244echo Detrailing 245perl ./Detrail $files doc/p* doc/html/* 246 247echo Doing basic configure to get default pcre.h and config.h 248# This is in case the caller has set aliases (as I do - PH) 249unset cp ls mv rm 250./configure >/dev/null 251 252echo Converting pcre.h and config.h to generic forms 253cp -f pcre.h pcre.h.generic 254 255perl <<'END' 256 open(IN, "<config.h") || die "Can't open config.h: $!\n"; 257 open(OUT, ">config.h.generic") || die "Can't open config.h.generic: $!\n"; 258 while (<IN>) 259 { 260 if (/^#define\s(?!PACKAGE)(\w+)/) 261 { 262 print OUT "#ifndef $1\n"; 263 print OUT; 264 print OUT "#endif\n"; 265 } 266 else 267 { 268 print OUT; 269 } 270 } 271 close IN; 272 close OUT; 273END 274 275echo Done 276 277#End 278