/[pcre]/code/tags/pcre-7.7/README
ViewVC logotype

Contents of /code/tags/pcre-7.7/README

Parent Directory Parent Directory | Revision Log Revision Log


Revision 77 - (hide annotations) (download)
Sat Feb 24 21:40:45 2007 UTC (7 years, 8 months ago) by nigel
Original Path: code/trunk/README
File size: 22105 byte(s)
Load pcre-6.0 into code/trunk.

1 nigel 41 README file for PCRE (Perl-compatible regular expression library)
2     -----------------------------------------------------------------
3 nigel 3
4 nigel 43 The latest release of PCRE is always available from
5    
6     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
7    
8 nigel 41 Please read the NEWS file if you are upgrading from a previous release.
9 nigel 23
10 nigel 35
11 nigel 77 The PCRE APIs
12     -------------
13    
14     PCRE is written in C, and it has its own API. The distribution now includes a
15     set of C++ wrapper functions, courtesy of Google Inc. (see the pcrecpp man page
16     for details).
17    
18     Also included are a set of C wrapper functions that are based on the POSIX
19     API. These end up in the library called libpcreposix. Note that this just
20     provides a POSIX calling interface to PCRE: the regular expressions themselves
21     still follow Perl syntax and semantics. The header file for the POSIX-style
22     functions is called pcreposix.h. The official POSIX name is regex.h, but I
23     didn't want to risk possible problems with existing files of that name by
24     distributing it that way. To use it with an existing program that uses the
25     POSIX API, it will have to be renamed or pointed at by a link.
26    
27 nigel 73 If you are using the POSIX interface to PCRE and there is already a POSIX regex
28     library installed on your system, you must take care when linking programs to
29     ensure that they link with PCRE's libpcreposix library. Otherwise they may pick
30     up the "real" POSIX functions of the same name.
31 nigel 49
32 nigel 73
33 nigel 75 Documentation for PCRE
34     ----------------------
35    
36     If you install PCRE in the normal way, you will end up with an installed set of
37     man pages whose names all start with "pcre". The one that is called "pcre"
38     lists all the others. In addition to these man pages, the PCRE documentation is
39     supplied in two other forms; however, as there is no standard place to install
40     them, they are left in the doc directory of the unpacked source distribution.
41     These forms are:
42    
43     1. Files called doc/pcre.txt, doc/pcregrep.txt, and doc/pcretest.txt. The
44     first of these is a concatenation of the text forms of all the section 3
45     man pages except those that summarize individual functions. The other two
46     are the text forms of the section 1 man pages for the pcregrep and
47     pcretest commands. Text forms are provided for ease of scanning with text
48     editors or similar tools.
49    
50     2. A subdirectory called doc/html contains all the documentation in HTML
51     form, hyperlinked in various ways, and rooted in a file called
52     doc/index.html.
53    
54    
55 nigel 53 Contributions by users of PCRE
56     ------------------------------
57    
58     You can find contributions from PCRE users in the directory
59    
60     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
61    
62     where there is also a README file giving brief descriptions of what they are.
63     Several of them provide support for compiling PCRE on various flavours of
64     Windows systems (I myself do not use Windows). Some are complete in themselves;
65     others are pointers to URLs containing relevant files.
66    
67    
68 nigel 63 Building PCRE on a Unix-like system
69     -----------------------------------
70 nigel 3
71 nigel 63 To build PCRE on a Unix-like system, first run the "configure" command from the
72     PCRE distribution directory, with your current directory set to the directory
73     where you want the files to be created. This command is a standard GNU
74     "autoconf" configuration script, for which generic instructions are supplied in
75     INSTALL.
76 nigel 3
77 nigel 53 Most commonly, people build PCRE within its own distribution directory, and in
78     this case, on many systems, just running "./configure" is sufficient, but the
79 nigel 75 usual methods of changing standard defaults are available. For example:
80 nigel 53
81 nigel 41 CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
82    
83     specifies that the C compiler should be run with the flags '-O2 -Wall' instead
84     of the default, and that "make install" should install PCRE under /opt/local
85 nigel 49 instead of the default /usr/local.
86 nigel 41
87 nigel 53 If you want to build in a different directory, just run "configure" with that
88     directory as current. For example, suppose you have unpacked the PCRE source
89     into /source/pcre/pcre-xxx, but you want to build it in /build/pcre/pcre-xxx:
90    
91     cd /build/pcre/pcre-xxx
92     /source/pcre/pcre-xxx/configure
93    
94 nigel 63 There are some optional features that can be included or omitted from the PCRE
95     library. You can read more about them in the pcrebuild man page.
96 nigel 49
97 nigel 63 . If you want to make use of the support for UTF-8 character strings in PCRE,
98     you must add --enable-utf8 to the "configure" command. Without it, the code
99     for handling UTF-8 is not included in the library. (Even when included, it
100     still has to be enabled by an option at run time.)
101    
102 nigel 75 . If, in addition to support for UTF-8 character strings, you want to include
103     support for the \P, \p, and \X sequences that recognize Unicode character
104     properties, you must add --enable-unicode-properties to the "configure"
105     command. This adds about 90K to the size of the library (in the form of a
106     property table); only the basic two-letter properties such as Lu are
107     supported.
108    
109 nigel 63 . You can build PCRE to recognized CR or NL as the newline character, instead
110     of whatever your compiler uses for "\n", by adding --newline-is-cr or
111     --newline-is-nl to the "configure" command, respectively. Only do this if you
112     really understand what you are doing. On traditional Unix-like systems, the
113     newline character is NL.
114    
115     . When called via the POSIX interface, PCRE uses malloc() to get additional
116     storage for processing capturing parentheses if there are more than 10 of
117     them. You can increase this threshold by setting, for example,
118    
119     --with-posix-malloc-threshold=20
120    
121     on the "configure" command.
122    
123 nigel 77 . PCRE has a counter that can be set to limit the amount of resources it uses.
124 nigel 63 If the limit is exceeded during a match, the match fails. The default is ten
125     million. You can change the default by setting, for example,
126    
127     --with-match-limit=500000
128    
129     on the "configure" command. This is just the default; individual calls to
130     pcre_exec() can supply their own value. There is discussion on the pcreapi
131     man page.
132    
133     . The default maximum compiled pattern size is around 64K. You can increase
134     this by adding --with-link-size=3 to the "configure" command. You can
135     increase it even more by setting --with-link-size=4, but this is unlikely
136     ever to be necessary. If you build PCRE with an increased link size, test 2
137     (and 5 if you are using UTF-8) will fail. Part of the output of these tests
138     is a representation of the compiled pattern, and this changes with the link
139     size.
140    
141 nigel 77 . You can build PCRE so that its internal match() function that is called from
142     pcre_exec() does not call itself recursively. Instead, it uses blocks of data
143     from the heap via special functions pcre_stack_malloc() and pcre_stack_free()
144     to save data that would otherwise be saved on the stack. To build PCRE like
145     this, use
146 nigel 73
147     --disable-stack-for-recursion
148    
149     on the "configure" command. PCRE runs more slowly in this mode, but it may be
150 nigel 77 necessary in environments with limited stack sizes. This applies only to the
151     pcre_exec() function; it does not apply to pcre_dfa_exec(), which does not
152     use deeply nested recursion.
153 nigel 73
154 nigel 77 The "configure" script builds eight files for the basic C library:
155 nigel 49
156 nigel 77 . pcre.h is the header file for C programs that call PCRE
157     . Makefile is the makefile that builds the library
158     . config.h contains build-time configuration options for the library
159     . pcre-config is a script that shows the settings of "configure" options
160     . libpcre.pc is data for the pkg-config command
161 nigel 75 . libtool is a script that builds shared and/or static libraries
162 nigel 77 . RunTest is a script for running tests on the library
163     . RunGrepTest is a script for running tests on the pcregrep command
164 nigel 41
165 nigel 77 In addition, if a C++ compiler is found, the following are also built:
166    
167     . pcrecpp.h is the header file for programs that call PCRE via the C++ wrapper
168     . pcre_stringpiece.h is the header for the C++ "stringpiece" functions
169    
170     The "configure" script also creates config.status, which is an executable
171     script that can be run to recreate the configuration, and config.log, which
172     contains compiler output from tests that "configure" runs.
173    
174     Once "configure" has run, you can run "make". It builds two libraries, called
175 nigel 49 libpcre and libpcreposix, a test program called pcretest, and the pcregrep
176 nigel 77 command. If a C++ compiler was found on your system, it also builds the C++
177     wrapper library, which is called libpcrecpp, and some test programs called
178     pcrecpp_unittest, pcre_scanner_unittest, and pcre_stringpiece_unittest.
179 nigel 3
180 nigel 77 The command "make test" runs all the appropriate tests. Details of the PCRE
181     tests are given in a separate section of this document, below.
182 nigel 75
183 nigel 77 You can use "make install" to copy the libraries, the public header files
184     pcre.h, pcreposix.h, pcrecpp.h, and pcre_stringpiece.h (the last two only if
185     the C++ wrapper was built), and the man pages to appropriate live directories
186     on your system, in the normal way.
187    
188     If you want to remove PCRE from your system, you can run "make uninstall".
189     This removes all the files that "make install" installed. However, it does not
190     remove any directories, because these are often shared with other programs.
191    
192    
193 nigel 75 Retrieving configuration information on Unix-like systems
194     ---------------------------------------------------------
195    
196 nigel 43 Running "make install" also installs the command pcre-config, which can be used
197     to recall information about the PCRE configuration and installation. For
198 nigel 75 example:
199 nigel 37
200 nigel 43 pcre-config --version
201    
202     prints the version number, and
203    
204 nigel 75 pcre-config --libs
205 nigel 43
206     outputs information about where the library is installed. This command can be
207     included in makefiles for programs that use PCRE, saving the programmer from
208     having to remember too many details.
209    
210 nigel 75 The pkg-config command is another system for saving and retrieving information
211     about installed libraries. Instead of separate commands for each library, a
212     single command is used. For example:
213 nigel 43
214 nigel 75 pkg-config --cflags pcre
215    
216     The data is held in *.pc files that are installed in a directory called
217     pkgconfig.
218    
219    
220 nigel 63 Shared libraries on Unix-like systems
221     -------------------------------------
222 nigel 53
223 nigel 77 The default distribution builds PCRE as shared libraries and static libraries,
224     as long as the operating system supports shared libraries. Shared library
225     support relies on the "libtool" script which is built as part of the
226 nigel 53 "configure" process.
227 nigel 39
228 nigel 53 The libtool script is used to compile and link both shared and static
229     libraries. They are placed in a subdirectory called .libs when they are newly
230     built. The programs pcretest and pcregrep are built to use these uninstalled
231     libraries (by means of wrapper scripts in the case of shared libraries). When
232     you use "make install" to install shared libraries, pcregrep and pcretest are
233     automatically re-built to use the newly installed shared libraries before being
234     installed themselves. However, the versions left in the source directory still
235     use the uninstalled libraries.
236    
237     To build PCRE using static libraries only you must use --disable-shared when
238 nigel 75 configuring it. For example:
239 nigel 3
240 nigel 43 ./configure --prefix=/usr/gnu --disable-shared
241 nigel 41
242 nigel 53 Then run "make" in the usual way. Similarly, you can use --disable-static to
243     build only shared libraries.
244 nigel 41
245 nigel 43
246 nigel 63 Cross-compiling on a Unix-like system
247     -------------------------------------
248    
249     You can specify CC and CFLAGS in the normal way to the "configure" command, in
250     order to cross-compile PCRE for some other host. However, during the building
251     process, the dftables.c source file is compiled *and run* on the local host, in
252     order to generate the default character tables (the chartables.c file). It
253     therefore needs to be compiled with the local compiler, not the cross compiler.
254 nigel 77 You can do this by specifying CC_FOR_BUILD (and if necessary CFLAGS_FOR_BUILD;
255     there are also CXX_FOR_BUILD and CXXFLAGS_FOR_BUILD for the C++ wrapper)
256 nigel 73 when calling the "configure" command. If they are not specified, they default
257     to the values of CC and CFLAGS.
258 nigel 63
259    
260 nigel 41 Building on non-Unix systems
261     ----------------------------
262    
263 nigel 73 For a non-Unix system, read the comments in the file NON-UNIX-USE, though if
264     the system supports the use of "configure" and "make" you may be able to build
265     PCRE in the same way as for Unix systems.
266    
267     PCRE has been compiled on Windows systems and on Macintoshes, but I don't know
268     the details because I don't use those systems. It should be straightforward to
269 nigel 41 build PCRE on any system that has a Standard C compiler, because it uses only
270     Standard C functions.
271    
272    
273     Testing PCRE
274     ------------
275    
276 nigel 53 To test PCRE on a Unix system, run the RunTest script that is created by the
277 nigel 77 configuring process. There is also a script called RunGrepTest that tests the
278     options of the pcregrep command. If the C++ wrapper library is build, three
279     test programs called pcrecpp_unittest, pcre_scanner_unittest, and
280     pcre_stringpiece_unittest are provided.
281 nigel 41
282 nigel 77 Both the scripts and all the program tests are run if you obey "make runtest",
283     "make check", or "make test". For other systems, see the instructions in
284     NON-UNIX-USE.
285    
286     The RunTest script runs the pcretest test program (which is documented in its
287     own man page) on each of the testinput files (in the testdata directory) in
288     turn, and compares the output with the contents of the corresponding testoutput
289     file. A file called testtry is used to hold the main output from pcretest
290 nigel 75 (testsavedregex is also used as a working file). To run pcretest on just one of
291     the test files, give its number as an argument to RunTest, for example:
292 nigel 41
293 nigel 63 RunTest 2
294 nigel 3
295 nigel 63 The first file can also be fed directly into the perltest script to check that
296     Perl gives the same results. The only difference you should see is in the first
297     few lines, where the Perl version is given instead of the PCRE version.
298 nigel 3
299 nigel 49 The second set of tests check pcre_fullinfo(), pcre_info(), pcre_study(),
300     pcre_copy_substring(), pcre_get_substring(), pcre_get_substring_list(), error
301     detection, and run-time flags that are specific to PCRE, as well as the POSIX
302     wrapper API. It also uses the debugging flag to check some of the internals of
303     pcre_compile().
304 nigel 7
305 nigel 49 If you build PCRE with a locale setting that is not the standard C locale, the
306     character tables may be different (see next paragraph). In some cases, this may
307     cause failures in the second set of tests. For example, in a locale where the
308     isprint() function yields TRUE for characters in the range 128-255, the use of
309     [:isascii:] inside a character class defines a different set of characters, and
310     this shows up in this test as a difference in the compiled code, which is being
311     listed for checking. Where the comparison test output contains [\x00-\x7f] the
312     test will contain [\x00-\xff], and similarly in some other cases. This is not a
313     bug in PCRE.
314    
315 nigel 63 The third set of tests checks pcre_maketables(), the facility for building a
316 nigel 25 set of character tables for a specific locale and using them instead of the
317 nigel 73 default tables. The tests make use of the "fr_FR" (French) locale. Before
318     running the test, the script checks for the presence of this locale by running
319     the "locale" command. If that command fails, or if it doesn't include "fr_FR"
320     in the list of available locales, the third test cannot be run, and a comment
321     is output to say why. If running this test produces instances of the error
322 nigel 25
323 nigel 73 ** Failed to set locale "fr_FR"
324 nigel 25
325     in the comparison output, it means that locale is not available on your system,
326     despite being listed by "locale". This does not mean that PCRE is broken.
327    
328 nigel 63 The fourth test checks the UTF-8 support. It is not run automatically unless
329     PCRE is built with UTF-8 support. To do this you must set --enable-utf8 when
330     running "configure". This file can be also fed directly to the perltest script,
331     provided you are running Perl 5.8 or higher. (For Perl 5.6, a small patch,
332     commented in the script, can be be used.)
333 nigel 3
334 nigel 75 The fifth test checks error handling with UTF-8 encoding, and internal UTF-8
335     features of PCRE that are not relevant to Perl.
336 nigel 3
337 nigel 77 The sixth and test checks the support for Unicode character properties. It it
338     not run automatically unless PCRE is built with Unicode property support. To to
339     this you must set --enable-unicode-properties when running "configure".
340 nigel 63
341 nigel 77 The seventh, eighth, and ninth tests check the pcre_dfa_exec() alternative
342     matching function, in non-UTF-8 mode, UTF-8 mode, and UTF-8 mode with Unicode
343     property support, respectively. The eighth and ninth tests are not run
344     automatically unless PCRE is build with the relevant support.
345 nigel 75
346 nigel 77
347 nigel 3 Character tables
348     ----------------
349    
350 nigel 75 PCRE uses four tables for manipulating and identifying characters whose values
351     are less than 256. The final argument of the pcre_compile() function is a
352     pointer to a block of memory containing the concatenated tables. A call to
353     pcre_maketables() can be used to generate a set of tables in the current
354     locale. If the final argument for pcre_compile() is passed as NULL, a set of
355     default tables that is built into the binary is used.
356 nigel 3
357 nigel 25 The source file called chartables.c contains the default set of tables. This is
358 nigel 27 not supplied in the distribution, but is built by the program dftables
359     (compiled from dftables.c), which uses the ANSI C character handling functions
360 nigel 25 such as isalnum(), isalpha(), isupper(), islower(), etc. to build the table
361 nigel 35 sources. This means that the default C locale which is set for your system will
362     control the contents of these default tables. You can change the default tables
363     by editing chartables.c and then re-building PCRE. If you do this, you should
364     probably also edit Makefile to ensure that the file doesn't ever get
365     re-generated.
366 nigel 3
367 nigel 25 The first two 256-byte tables provide lower casing and case flipping functions,
368     respectively. The next table consists of three 32-byte bit maps which identify
369     digits, "word" characters, and white space, respectively. These are used when
370     building 32-byte bit maps that represent character classes.
371    
372     The final 256-byte table has bits indicating various character types, as
373 nigel 3 follows:
374    
375     1 white space character
376     2 letter
377     4 decimal digit
378     8 hexadecimal digit
379     16 alphanumeric or '_'
380     128 regular expression metacharacter or binary zero
381    
382     You should not alter the set of characters that contain the 128 bit, as that
383     will cause PCRE to malfunction.
384    
385    
386 nigel 41 Manifest
387     --------
388 nigel 3
389 nigel 41 The distribution should contain the following files:
390 nigel 3
391 nigel 41 (A) The actual source files of the PCRE library functions and their
392     headers:
393 nigel 3
394 nigel 41 dftables.c auxiliary program for building chartables.c
395 nigel 75
396 nigel 41 pcreposix.c )
397 nigel 77 pcre_compile.c )
398     pcre_config.c )
399     pcre_dfa_exec.c )
400     pcre_exec.c )
401     pcre_fullinfo.c )
402     pcre_get.c ) sources for the functions in the library,
403     pcre_globals.c ) and some internal functions that they use
404     pcre_info.c )
405     pcre_maketables.c )
406     pcre_ord2utf8.c )
407     pcre_printint.c )
408     pcre_study.c )
409     pcre_tables.c )
410     pcre_try_flipped.c )
411     pcre_ucp_findchar.c )
412     pcre_valid_utf8.c )
413     pcre_version.c )
414     pcre_xclass.c )
415 nigel 75
416 nigel 77 ucp_findchar.c )
417 nigel 75 ucp.h ) source for the code that is used for
418     ucpinternal.h ) Unicode property handling
419     ucptable.c )
420     ucptypetable.c )
421    
422 nigel 43 pcre.in "source" for the header for the external API; pcre.h
423     is built from this by "configure"
424 nigel 41 pcreposix.h header for the external POSIX wrapper API
425 nigel 77 pcre_internal.h header for internal use
426 nigel 41 config.in template for config.h, which is built by configure
427 nigel 3
428 nigel 77 pcrecpp.h.in "source" for the header file for the C++ wrapper
429     pcrecpp.cc )
430     pcre_scanner.cc ) source for the C++ wrapper library
431    
432     pcre_stringpiece.h.in "source" for pcre_stringpiece.h, the header for the
433     C++ stringpiece functions
434     pcre_stringpiece.cc source for the C++ stringpiece functions
435    
436 nigel 41 (B) Auxiliary files:
437 nigel 3
438 nigel 41 AUTHORS information about the author of PCRE
439     ChangeLog log of changes to the code
440     INSTALL generic installation instructions
441     LICENCE conditions for the use of PCRE
442 nigel 43 COPYING the same, using GNU's standard name
443 nigel 41 Makefile.in template for Unix Makefile, which is built by configure
444     NEWS important changes in this release
445     NON-UNIX-USE notes on building PCRE on non-Unix systems
446     README this file
447 nigel 49 RunTest.in template for a Unix shell script for running tests
448 nigel 77 RunGrepTest.in template for a Unix shell script for pcregrep tests
449 nigel 41 config.guess ) files used by libtool,
450     config.sub ) used only when building a shared library
451     configure a configuring shell script (built by autoconf)
452     configure.in the autoconf input used to build configure
453     doc/Tech.Notes notes on the encoding
454 nigel 63 doc/*.3 man page sources for the PCRE functions
455     doc/*.1 man page sources for pcregrep and pcretest
456     doc/html/* HTML documentation
457     doc/pcre.txt plain text version of the man pages
458     doc/pcretest.txt plain text documentation of test program
459     doc/perltest.txt plain text documentation of Perl test program
460 nigel 41 install-sh a shell script for installing files
461 nigel 75 libpcre.pc.in "source" for libpcre.pc for pkg-config
462 nigel 53 ltmain.sh file used to build a libtool script
463 nigel 75 mkinstalldirs script for making install directories
464 nigel 53 pcretest.c comprehensive test program
465     pcredemo.c simple demonstration of coding calls to PCRE
466 nigel 41 perltest Perl test program
467 nigel 49 pcregrep.c source of a grep utility that uses PCRE
468 nigel 43 pcre-config.in source of script which retains PCRE information
469 nigel 77 pcrecpp_unittest.c )
470     pcre_scanner_unittest.c ) test programs for the C++ wrapper
471     pcre_stringpiece_unittest.c )
472     testdata/testinput* test data for main library tests
473     testdata/testoutput* expected test results
474     testdata/grep* input and output for pcregrep tests
475 nigel 3
476 nigel 41 (C) Auxiliary files for Win32 DLL
477 nigel 29
478 nigel 75 libpcre.def
479     libpcreposix.def
480 nigel 41 pcre.def
481 nigel 29
482 nigel 63 (D) Auxiliary file for VPASCAL
483    
484     makevp.bat
485    
486 nigel 77 Philip Hazel
487     Email local part: ph10
488     Email domain: cam.ac.uk
489     June 2005

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12