Clean up spec file for packaging
[profile/ivi/pcre.git] / NON-UNIX-USE
1 Compiling PCRE on non-Unix systems
2 ----------------------------------
3
4 This document contains the following sections:
5
6   General
7   Generic instructions for the PCRE C library
8   The C++ wrapper functions
9   Building for virtual Pascal
10   Stack size in Windows environments
11   Linking programs in Windows environments
12   Comments about Win32 builds
13   Building PCRE on Windows with CMake
14   Use of relative paths with CMake on Windows
15   Testing with RunTest.bat
16   Building under Windows with BCC5.5
17   Building PCRE on OpenVMS
18   Building PCRE on Stratus OpenVOS
19
20
21 GENERAL
22
23 I (Philip Hazel) have no experience of Windows or VMS sytems and how their
24 libraries work. The items in the PCRE distribution and Makefile that relate to
25 anything other than Unix-like systems are untested by me.
26
27 There are some other comments and files (including some documentation in CHM
28 format) in the Contrib directory on the FTP site:
29
30   ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
31
32 If you want to compile PCRE for a non-Unix system (especially for a system that
33 does not support "configure" and "make" files), note that the basic PCRE
34 library consists entirely of code written in Standard C, and so should compile
35 successfully on any system that has a Standard C compiler and library. The C++
36 wrapper functions are a separate issue (see below).
37
38 The PCRE distribution includes a "configure" file for use by the Configure/Make
39 build system, as found in many Unix-like environments. There is also support
40 support for CMake, which some users prefer, especially in Windows environments.
41 There are some instructions for CMake under Windows in the section entitled
42 "Building PCRE with CMake" below. CMake can also be used to build PCRE in
43 Unix-like systems.
44
45
46 GENERIC INSTRUCTIONS FOR THE PCRE C LIBRARY
47
48 The following are generic comments about building the PCRE C library "by hand".
49
50  (1) Copy or rename the file config.h.generic as config.h, and edit the macro
51      settings that it contains to whatever is appropriate for your environment.
52      In particular, if you want to force a specific value for newline, you can
53      define the NEWLINE macro. When you compile any of the PCRE modules, you
54      must specify -DHAVE_CONFIG_H to your compiler so that config.h is included
55      in the sources.
56
57      An alternative approach is not to edit config.h, but to use -D on the
58      compiler command line to make any changes that you need to the
59      configuration options. In this case -DHAVE_CONFIG_H must not be set.
60
61      NOTE: There have been occasions when the way in which certain parameters
62      in config.h are used has changed between releases. (In the configure/make
63      world, this is handled automatically.) When upgrading to a new release,
64      you are strongly advised to review config.h.generic before re-using what
65      you had previously.
66
67  (2) Copy or rename the file pcre.h.generic as pcre.h.
68
69  (3) EITHER:
70        Copy or rename file pcre_chartables.c.dist as pcre_chartables.c.
71
72      OR:
73        Compile dftables.c as a stand-alone program (using -DHAVE_CONFIG_H if
74        you have set up config.h), and then run it with the single argument
75        "pcre_chartables.c". This generates a set of standard character tables
76        and writes them to that file. The tables are generated using the default
77        C locale for your system. If you want to use a locale that is specified
78        by LC_xxx environment variables, add the -L option to the dftables
79        command. You must use this method if you are building on a system that
80        uses EBCDIC code.
81
82      The tables in pcre_chartables.c are defaults. The caller of PCRE can
83      specify alternative tables at run time.
84
85  (4) Ensure that you have the following header files:
86
87        pcre_internal.h
88        ucp.h
89
90  (5) Also ensure that you have the following file, which is #included as source
91      when building a debugging version of PCRE, and is also used by pcretest.
92
93        pcre_printint.src
94
95  (6) Compile the following source files, setting -DHAVE_CONFIG_H as a compiler
96      option if you have set up config.h with your configuration, or else use
97      other -D settings to change the configuration as required.
98
99        pcre_chartables.c
100        pcre_compile.c
101        pcre_config.c
102        pcre_dfa_exec.c
103        pcre_exec.c
104        pcre_fullinfo.c
105        pcre_get.c
106        pcre_globals.c
107        pcre_info.c
108        pcre_maketables.c
109        pcre_newline.c
110        pcre_ord2utf8.c
111        pcre_refcount.c
112        pcre_study.c
113        pcre_tables.c
114        pcre_try_flipped.c
115        pcre_ucd.c
116        pcre_valid_utf8.c
117        pcre_version.c
118        pcre_xclass.c
119
120      Make sure that you include -I. in the compiler command (or equivalent for
121      an unusual compiler) so that all included PCRE header files are first
122      sought in the current directory. Otherwise you run the risk of picking up
123      a previously-installed file from somewhere else.
124
125  (7) Now link all the compiled code into an object library in whichever form
126      your system keeps such libraries. This is the basic PCRE C library. If
127      your system has static and shared libraries, you may have to do this once
128      for each type.
129
130  (8) Similarly, if you want to build the POSIX wrapper functions, ensure that
131      you have the pcreposix.h file and then compile pcreposix.c (remembering
132      -DHAVE_CONFIG_H if necessary). Link the result (on its own) as the
133      pcreposix library.
134
135  (9) Compile the test program pcretest.c (again, don't forget -DHAVE_CONFIG_H).
136      This needs the functions in the PCRE library when linking. It also needs
137      the pcreposix wrapper functions unless you compile it with -DNOPOSIX. The
138      pcretest.c program also needs the pcre_printint.src source file, which it
139      #includes.
140
141 (10) Run pcretest on the testinput files in the testdata directory, and check
142      that the output matches the corresponding testoutput files. Note that the
143      supplied files are in Unix format, with just LF characters as line
144      terminators. You may need to edit them to change this if your system uses
145      a different convention. If you are using Windows, you probably should use
146      the wintestinput3 file instead of testinput3 (and the corresponding output
147      file). This is a locale test; wintestinput3 sets the locale to "french"
148      rather than "fr_FR", and there some minor output differences.
149
150 (11) If you want to use the pcregrep command, compile and link pcregrep.c; it
151      uses only the basic PCRE library (it does not need the pcreposix library).
152
153
154 THE C++ WRAPPER FUNCTIONS
155
156 The PCRE distribution also contains some C++ wrapper functions and tests,
157 contributed by Google Inc. On a system that can use "configure" and "make",
158 the functions are automatically built into a library called pcrecpp. It should
159 be straightforward to compile the .cc files manually on other systems. The
160 files called xxx_unittest.cc are test programs for each of the corresponding
161 xxx.cc files.
162
163
164 BUILDING FOR VIRTUAL PASCAL
165
166 A script for building PCRE using Borland's C++ compiler for use with VPASCAL
167 was contributed by Alexander Tokarev. Stefan Weber updated the script and added
168 additional files. The following files in the distribution are for building PCRE
169 for use with VP/Borland: makevp_c.txt, makevp_l.txt, makevp.bat, pcregexp.pas.
170
171
172 STACK SIZE IN WINDOWS ENVIRONMENTS
173
174 The default processor stack size of 1Mb in some Windows environments is too
175 small for matching patterns that need much recursion. In particular, test 2 may
176 fail because of this. Normally, running out of stack causes a crash, but there
177 have been cases where the test program has just died silently. See your linker
178 documentation for how to increase stack size if you experience problems. The
179 Linux default of 8Mb is a reasonable choice for the stack, though even that can
180 be too small for some pattern/subject combinations.
181
182 PCRE has a compile configuration option to disable the use of stack for
183 recursion so that heap is used instead. However, pattern matching is
184 significantly slower when this is done. There is more about stack usage in the
185 "pcrestack" documentation.
186
187
188 LINKING PROGRAMS IN WINDOWS ENVIRONMENTS
189
190 If you want to statically link a program against a PCRE library in the form of
191 a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
192 pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
193 be declared __declspec(dllimport), with unwanted results.
194
195
196 CALLING CONVENTIONS IN WINDOWS ENVIRONMENTS
197
198 It is possible to compile programs to use different calling conventions using
199 MSVC. Search the web for "calling conventions" for more information. To make it
200 easier to change the calling convention for the exported functions in the
201 PCRE library, the macro PCRE_CALL_CONVENTION is present in all the external
202 definitions. It can be set externally when compiling (e.g. in CFLAGS). If it is
203 not set, it defaults to empty; the default calling convention is then used
204 (which is what is wanted most of the time).
205
206
207 COMMENTS ABOUT WIN32 BUILDS (see also "BUILDING PCRE WITH CMAKE" below)
208
209 There are two ways of building PCRE using the "configure, make, make install"
210 paradigm on Windows systems: using MinGW or using Cygwin. These are not at all
211 the same thing; they are completely different from each other. There is also
212 support for building using CMake, which some users find a more straightforward
213 way of building PCRE under Windows. However, the tests are not run
214 automatically when CMake is used.
215
216 The MinGW home page (http://www.mingw.org/) says this:
217
218   MinGW: A collection of freely available and freely distributable Windows
219   specific header files and import libraries combined with GNU toolsets that
220   allow one to produce native Windows programs that do not rely on any
221   3rd-party C runtime DLLs.
222
223 The Cygwin home page (http://www.cygwin.com/) says this:
224
225   Cygwin is a Linux-like environment for Windows. It consists of two parts:
226
227   . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing
228     substantial Linux API functionality
229
230   . A collection of tools which provide Linux look and feel.
231
232   The Cygwin DLL currently works with all recent, commercially released x86 32
233   bit and 64 bit versions of Windows, with the exception of Windows CE.
234
235 On both MinGW and Cygwin, PCRE should build correctly using:
236
237   ./configure && make && make install
238
239 This should create two libraries called libpcre and libpcreposix, and, if you
240 have enabled building the C++ wrapper, a third one called libpcrecpp. These are
241 independent libraries: when you like with libpcreposix or libpcrecpp you must
242 also link with libpcre, which contains the basic functions. (Some earlier
243 releases of PCRE included the basic libpcre functions in libpcreposix. This no
244 longer happens.)
245
246 A user submitted a special-purpose patch that makes it easy to create
247 "pcre.dll" under mingw32 using the "msys" environment. It provides "pcre.dll"
248 as a special target. If you use this target, no other files are built, and in
249 particular, the pcretest and pcregrep programs are not built. An example of how
250 this might be used is:
251
252   ./configure --enable-utf --disable-cpp CFLAGS="-03 -s"; make pcre.dll
253
254 Using Cygwin's compiler generates libraries and executables that depend on
255 cygwin1.dll. If a library that is generated this way is distributed,
256 cygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL
257 licence, this forces not only PCRE to be under the GPL, but also the entire
258 application. A distributor who wants to keep their own code proprietary must
259 purchase an appropriate Cygwin licence.
260
261 MinGW has no such restrictions. The MinGW compiler generates a library or
262 executable that can run standalone on Windows without any third party dll or
263 licensing issues.
264
265 But there is more complication:
266
267 If a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is
268 to tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a
269 front end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's
270 gcc and MinGW's gcc). So, a user can:
271
272 . Build native binaries by using MinGW or by getting Cygwin and using
273   -mno-cygwin.
274
275 . Build binaries that depend on cygwin1.dll by using Cygwin with the normal
276   compiler flags.
277
278 The test files that are supplied with PCRE are in Unix format, with LF
279 characters as line terminators. It may be necessary to change the line
280 terminators in order to get some of the tests to work.
281
282
283 BUILDING PCRE ON WINDOWS WITH CMAKE
284
285 CMake is an alternative configuration facility that can be used instead of the
286 traditional Unix "configure". CMake creates project files (make files, solution
287 files, etc.) tailored to numerous development environments, including Visual
288 Studio, Borland, Msys, MinGW, NMake, and Unix. The following instructions
289 were contributed by a PCRE user.
290
291 1.  Install the latest CMake version available from http://www.cmake.org/, and
292     ensure that cmake\bin is on your path.
293
294 2.  Unzip (retaining folder structure) the PCRE source tree into a source
295     directory such as C:\pcre.
296
297 3.  Create a new, empty build directory, for example C:\pcre\build\
298
299 4.  Run cmake-gui from the Shell envirornment of your build tool, for example,
300     Msys for Msys/MinGW or Visual Studio Command Prompt for VC/VC++.
301
302 5.  Enter C:\pcre\pcre-xx and C:\pcre\build for the source and build
303     directories, respectively.
304
305 6.  Hit the "Configure" button.
306
307 7.  Select the particular IDE / build tool that you are using (Visual
308     Studio, MSYS makefiles, MinGW makefiles, etc.)
309
310 8.  The GUI will then list several configuration options. This is where
311     you can enable UTF-8 support or other PCRE optional features.
312
313 9.  Hit "Configure" again. The adjacent "Generate" button should now be
314     active.
315
316 10. Hit "Generate".
317
318 11. The build directory should now contain a usable build system, be it a
319     solution file for Visual Studio, makefiles for MinGW, etc. Exit from
320     cmake-gui and use the generated build system with your compiler or IDE.
321
322
323 USE OF RELATIVE PATHS WITH CMAKE ON WINDOWS
324
325 A PCRE user comments as follows:
326
327 I thought that others may want to know the current state of
328 CMAKE_USE_RELATIVE_PATHS support on Windows.
329
330 Here it is:
331 -- AdditionalIncludeDirectories is only partially modified (only the
332 first path - see below)
333 -- Only some of the contained file paths are modified - shown below for
334 pcre.vcproj
335 -- It properly modifies
336
337 I am sure CMake people can fix that if they want to. Until then one will
338 need to replace existing absolute paths in project files with relative
339 paths manually (e.g. from VS) - relative to project file location. I did
340 just that before being told to try CMAKE_USE_RELATIVE_PATHS. Not a big
341 deal.
342
343 AdditionalIncludeDirectories="E:\builds\pcre\build;E:\builds\pcre\pcre-7.5;"
344 AdditionalIncludeDirectories=".;E:\builds\pcre\pcre-7.5;"
345
346 RelativePath="pcre.h">
347 RelativePath="pcre_chartables.c">
348 RelativePath="pcre_chartables.c.rule">
349
350
351 TESTING WITH RUNTEST.BAT
352
353 1. Copy RunTest.bat into the directory where pcretest.exe has been created.
354
355 2. Edit RunTest.bat and insert a line that indentifies the relative location of
356    the pcre source, e.g.:
357
358    set srcdir=..\pcre-7.4-RC3
359
360 3. Run RunTest.bat from a command shell environment. Test outputs will
361    automatically be compared to expected results, and discrepancies will
362    identified in the console output.
363
364 4. To test pcrecpp, run pcrecpp_unittest.exe, pcre_stringpiece_unittest.exe and
365    pcre_scanner_unittest.exe.
366
367
368 BUILDING UNDER WINDOWS WITH BCC5.5
369
370 Michael Roy sent these comments about building PCRE under Windows with BCC5.5:
371
372   Some of the core BCC libraries have a version of PCRE from 1998 built in,
373   which can lead to pcre_exec() giving an erroneous PCRE_ERROR_NULL from a
374   version mismatch. I'm including an easy workaround below, if you'd like to
375   include it in the non-unix instructions:
376
377   When linking a project with BCC5.5, pcre.lib must be included before any of
378   the libraries cw32.lib, cw32i.lib, cw32mt.lib, and cw32mti.lib on the command
379   line.
380
381
382 BUILDING UNDER WINDOWS CE WITH VISUAL STUDIO 200x
383
384 Vincent Richomme sent a zip archive of files to help with this process. They
385 can be found in the file "pcre-vsbuild.zip" in the Contrib directory of the FTP
386 site.
387
388
389 BUILDING PCRE ON OPENVMS
390
391 Dan Mooney sent the following comments about building PCRE on OpenVMS. They
392 relate to an older version of PCRE that used fewer source files, so the exact
393 commands will need changing. See the current list of source files above.
394
395 "It was quite easy to compile and link the library. I don't have a formal
396 make file but the attached file [reproduced below] contains the OpenVMS DCL
397 commands I used to build the library. I had to add #define
398 POSIX_MALLOC_THRESHOLD 10 to pcre.h since it was not defined anywhere.
399
400 The library was built on:
401 O/S: HP OpenVMS v7.3-1
402 Compiler: Compaq C v6.5-001-48BCD
403 Linker: vA13-01
404
405 The test results did not match 100% due to the issues you mention in your
406 documentation regarding isprint(), iscntrl(), isgraph() and ispunct(). I
407 modified some of the character tables temporarily and was able to get the
408 results to match. Tests using the fr locale did not match since I don't have
409 that locale loaded. The study size was always reported to be 3 less than the
410 value in the standard test output files."
411
412 =========================
413 $! This DCL procedure builds PCRE on OpenVMS
414 $!
415 $! I followed the instructions in the non-unix-use file in the distribution.
416 $!
417 $ COMPILE == "CC/LIST/NOMEMBER_ALIGNMENT/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES
418 $ COMPILE DFTABLES.C
419 $ LINK/EXE=DFTABLES.EXE DFTABLES.OBJ
420 $ RUN DFTABLES.EXE/OUTPUT=CHARTABLES.C
421 $ COMPILE MAKETABLES.C
422 $ COMPILE GET.C
423 $ COMPILE STUDY.C
424 $! I had to set POSIX_MALLOC_THRESHOLD to 10 in PCRE.H since the symbol
425 $! did not seem to be defined anywhere.
426 $! I edited pcre.h and added #DEFINE SUPPORT_UTF8 to enable UTF8 support.
427 $ COMPILE PCRE.C
428 $ LIB/CREATE PCRE MAKETABLES.OBJ, GET.OBJ, STUDY.OBJ, PCRE.OBJ
429 $! I had to set POSIX_MALLOC_THRESHOLD to 10 in PCRE.H since the symbol
430 $! did not seem to be defined anywhere.
431 $ COMPILE PCREPOSIX.C
432 $ LIB/CREATE PCREPOSIX PCREPOSIX.OBJ
433 $ COMPILE PCRETEST.C
434 $ LINK/EXE=PCRETEST.EXE PCRETEST.OBJ, PCRE/LIB, PCREPOSIX/LIB
435 $! C programs that want access to command line arguments must be
436 $! defined as a symbol
437 $ PCRETEST :== "$ SYS$ROADSUSERS:[DMOONEY.REGEXP]PCRETEST.EXE"
438 $! Arguments must be enclosed in quotes.
439 $ PCRETEST "-C"
440 $! Test results:
441 $!
442 $!   The test results did not match 100%. The functions isprint(), iscntrl(),
443 $!   isgraph() and ispunct() on OpenVMS must not produce the same results
444 $!   as the system that built the test output files provided with the
445 $!   distribution.
446 $!
447 $!   The study size did not match and was always 3 less on OpenVMS.
448 $!
449 $!   Locale could not be set to fr
450 $!
451 =========================
452
453
454 BUILDING PCRE ON STRATUS OPENVOS
455
456 These notes on the port of PCRE to VOS (lightly edited) were supplied by
457 Ashutosh Warikoo, whose email address has the local part awarikoo and the
458 domain nse.co.in. The port was for version 7.9 in August 2009.
459
460 1.   Building PCRE
461
462 I built pcre on OpenVOS Release 17.0.1at using GNU Tools 3.4a without any
463 problems. I used the following packages to build PCRE:
464
465   ftp://ftp.stratus.com/pub/vos/posix/ga/posix.save.evf.gz
466
467 Please read and follow the instructions that come with these packages. To start
468 the build of pcre, from the root of the package type:
469
470   ./build.sh
471
472 2. Installing PCRE
473
474 Once you have successfully built PCRE, login to the SysAdmin group, switch to
475 the root user, and type
476
477   [ !create_dir (master_disk)>usr   --if needed ]
478   [ !create_dir (master_disk)>usr>local   --if needed ]
479     !gmake install
480
481 This installs PCRE and its man pages into /usr/local. You can add
482 (master_disk)>usr>local>bin to your command search paths, or if you are in
483 BASH, add /usr/local/bin to the PATH environment variable.
484
485 4. Restrictions
486
487 This port requires readline library optionally. However during the build I
488 faced some yet unexplored errors while linking with readline. As it was an
489 optional component I chose to disable it.
490
491 5. Known Problems
492
493 I ran a the test suite, but you will have to be your own judge of whether this
494 command, and this port, suits your purposes. If you find any problems that
495 appear to be related to the port itself, please let me know. Please see the
496 build.log file in the root of the package also.
497
498
499 =========================
500 Last Updated: 26 May 2010
501 ****