/[pcre]/code/trunk/NON-UNIX-USE
ViewVC logotype

Diff of /code/trunk/NON-UNIX-USE

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 101 by ph10, Tue Mar 6 15:19:44 2007 UTC revision 177 by ph10, Mon Jun 11 15:08:58 2007 UTC
# Line 1  Line 1 
1  Compiling PCRE on non-Unix systems  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      Comments about Win32 builds
11      Building under Windows with BCC5.5
12      Building PCRE on OpenVMS
13    
14    
15    GENERAL
16    
17  I (Philip Hazel) have no knowledge of Windows or VMS sytems and how their  I (Philip Hazel) have no knowledge of Windows or VMS sytems and how their
18  libraries work. The items in the PCRE distribution and Makefile that relate to  libraries work. The items in the PCRE distribution and Makefile that relate to
19  anything other than Unix-like systems have been contributed by PCRE users and  anything other than Unix-like systems are untested by me.
 are untested by me.  
20    
21  There are some other comments and files in the Contrib directory on the ftp  There are some other comments and files in the Contrib directory on the ftp
22  site that you may find useful. See  site that you may find useful. See
23    
24    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
25    
26  If you want to compile PCRE for a non-Unix system (or perhaps, more strictly,  If you want to compile PCRE for a non-Unix system (especially for a system that
27  for a system that does not support "configure" and "make" files), note that  does not support "configure" and "make" files), note that the basic PCRE
28  the basic PCRE library consists entirely of code written in Standard C, and so  library consists entirely of code written in Standard C, and so should compile
29  should compile successfully on any system that has a Standard C compiler and  successfully on any system that has a Standard C compiler and library. The C++
30  library. The C++ wrapper functions are a separate issue (see below).  wrapper functions are a separate issue (see below).
31    
32    The PCRE distribution contains some experimental support for "cmake", but this
33  GENERIC INSTRUCTIONS FOR THE C LIBRARY  is incomplete and not documented. However if you are a "cmake" user you might
34    like to try building with "cmake".
35  The following are generic comments about building PCRE. The interspersed  
36  indented commands are suggestions from Mark Tetrode as to which commands you  
37  might use on a Windows system to build a static library.  GENERIC INSTRUCTIONS FOR THE PCRE C LIBRARY
38    
39  (1) Copy or rename the file config.h.in as config.h, and change the macros that  The following are generic comments about building the PCRE C library "by hand".
40  define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.  
41  Unfortunately, because of the way Unix autoconf works, the default setting has  (1) Copy or rename the file config.h.generic as config.h, and edit the macro
42  to be 0. You may also want to make changes to other macros in config.h. In      settings that it contains to whatever is appropriate for your environment.
43  particular, if you want to force a specific value for newline, you can define      In particular, if you want to force a specific value for newline, you can
44  the NEWLINE macro. The default is to use '\n', thereby using whatever value      define the NEWLINE macro.
45  your compiler gives to '\n'.  
46        An alternative approach is not to edit config.h, but to use -D on the
47    rem Mark Tetrode's commands      compiler command line to make any changes that you need.
48    copy config.h.in config.h  
49    rem Use write, because notepad cannot handle UNIX files. Change values.      NOTE: There have been occasions when the way in which certain parameters in
50    write config.h      config.h are used has changed between releases. (In the configure/make
51        world, this is handled automatically.) When upgrading to a new release, you
52  (2) Compile dftables.c as a stand-alone program, and then run it with      are strongly advised to review config.h.generic before re-using what you
53  the single argument "pcre_chartables.c". This generates a set of standard      had previously.
54  character tables and writes them to that file.  
55    (2) Copy or rename the file pcre.h.generic as pcre.h.
56    rem Mark Tetrode's commands  
57    rem Compile & run  (3) EITHER:
58    cl -DSUPPORT_UTF8 -DSUPPORT_UCP dftables.c        Copy or rename file pcre_chartables.c.dist as pcre_chartables.c.
59    dftables.exe pcre_chartables.c  
60        OR:
61  (3) Compile the following source files:        Compile dftables.c as a stand-alone program, and then run it with the
62          single argument "pcre_chartables.c". This generates a set of standard
63    pcre_chartables.c        character tables and writes them to that file. The tables are generated
64    pcre_compile.c        using the default C locale for your system. If you want to use a locale
65    pcre_config.c        that is specified by LC_xxx environment variables, add the -L option to
66    pcre_dfa_exec.c        the dftables command. You must use this method if you are building on
67    pcre_exec.c        a system that uses EBCDIC code.
68    pcre_fullinfo.c  
69    pcre_get.c      The tables in pcre_chartables.c are defaults. The caller of PCRE can
70    pcre_globals.c      specify alternative tables at run time.
71    pcre_info.c  
72    pcre_maketables.c  (4) Compile the following source files:
73    pcre_newline.c  
74    pcre_ord2utf8.c        pcre_chartables.c
75    pcre_refcount.c        pcre_compile.c
76    pcre_study.c        pcre_config.c
77    pcre_tables.c        pcre_dfa_exec.c
78    pcre_try_flipped.c        pcre_exec.c
79    pcre_ucp_searchfuncs.c        pcre_fullinfo.c
80    pcre_valid_utf8.c        pcre_get.c
81    pcre_version.c        pcre_globals.c
82    pcre_xclass.c        pcre_info.c
83          pcre_maketables.c
84  and link them all together into an object library in whichever form your system        pcre_newline.c
85  keeps such libraries. This is the pcre C library. If your system has static and        pcre_ord2utf8.c
86  shared libraries, you may have to do this once for each type.        pcre_refcount.c
87          pcre_study.c
88    rem These comments are out-of-date, referring to a previous release which        pcre_tables.c
89    rem had fewer source files. Replace with the file names from above.        pcre_try_flipped.c
90    rem Mark Tetrode's commands, for a static library        pcre_ucp_searchfuncs.c
91    rem Compile & lib        pcre_valid_utf8.c
92    cl -DSUPPORT_UTF8 -DSUPPORT_UCP -DPOSIX_MALLOC_THRESHOLD=10 /c maketables.c get.c study.c pcre.c        pcre_version.c
93    lib /OUT:pcre.lib maketables.obj get.obj study.obj pcre.obj        pcre_xclass.c
94    
95  (4) Similarly, compile pcreposix.c and link it (on its own) as the pcreposix      Now link them all together into an object library in whichever form your
96  library.      system keeps such libraries. This is the basic PCRE C library. If your
97        system has static and shared libraries, you may have to do this once for
98    rem Mark Tetrode's commands, for a static library      each type.
99    rem Compile & lib  
100    cl -DSUPPORT_UTF8 -DSUPPORT_UCP -DPOSIX_MALLOC_THRESHOLD=10 /c pcreposix.c  (5) Similarly, compile pcreposix.c and link it (on its own) as the pcreposix
101    lib /OUT:pcreposix.lib pcreposix.obj      library.
102    
103  (5) Compile the test program pcretest.c. This needs the functions in the  (6) Compile the test program pcretest.c. This needs the functions in the
104  pcre and pcreposix libraries when linking.      pcre and pcreposix libraries when linking.
105    
106    rem Mark Tetrode's commands  (7) Run pcretest on the testinput files in the testdata directory, and check
107    rem compile & link      that the output matches the corresponding testoutput files. Note that the
108    cl /F0x400000 pcretest.c pcre.lib pcreposix.lib      supplied files are in Unix format, with just LF characters as line
109        terminators. You may need to edit them to change this if your system uses a
110  (6) Run pcretest on the testinput files in the testdata directory, and check      different convention.
 that the output matches the corresponding testoutput files. Note that the  
 supplied files are in Unix format, with just LF characters as line terminators.  
 You may need to edit them to change this if your system uses a different  
 convention.  
   
   rem Mark Tetrode's commands  
   pcretest testdata\testinput1 testdata\myoutput1  
   windiff testdata\testoutput1 testdata\myoutput1  
   pcretest -i testdata\testinput2 testdata\myoutput2  
   windiff testdata\testoutput2 testdata\myoutput2  
   pcretest testdata\testinput3 testdata\myoutput3  
   windiff testdata\testoutput3 testdata\myoutput3  
   pcretest testdata\testinput4 testdata\myoutput4  
   windiff testdata\testoutput4 testdata\myoutput4  
   pcretest testdata\testinput5 testdata\myoutput5  
   windiff testdata\testoutput5 testdata\myoutput5  
   pcretest testdata\testinput6 testdata\myoutput6  
   windiff testdata\testoutput6 testdata\myoutput6  
   
 Note that there are now three more tests (7, 8, 9) that did not exist when Mark  
 wrote those comments. The test the new pcre_dfa_exec() function.  
111    
112  (7) If you want to use the pcregrep command, compile and link pcregrep.c; it  (8) If you want to use the pcregrep command, compile and link pcregrep.c; it
113  uses only the basic PCRE library.      uses only the basic PCRE library (it does not need the pcreposix library).
114    
115    
116  THE C++ WRAPPER FUNCTIONS  THE C++ WRAPPER FUNCTIONS
117    
118  The PCRE distribution now contains some C++ wrapper functions and tests,  The PCRE distribution also contains some C++ wrapper functions and tests,
119  contributed by Google Inc. On a system that can use "configure" and "make",  contributed by Google Inc. On a system that can use "configure" and "make",
120  the functions are automatically built into a library called pcrecpp. It should  the functions are automatically built into a library called pcrecpp. It should
121  be straightforward to compile the .cc files manually on other systems. The  be straightforward to compile the .cc files manually on other systems. The
# Line 132  files called xxx_unittest.cc are test pr Line 123  files called xxx_unittest.cc are test pr
123  xxx.cc files.  xxx.cc files.
124    
125    
126  FURTHER REMARKS  BUILDING FOR VIRTUAL PASCAL
127    
128  If you have a system without "configure" but where you can use a Makefile, edit  A script for building PCRE using Borland's C++ compiler for use with VPASCAL
129  Makefile.in to create Makefile, substituting suitable values for the variables  was contributed by Alexander Tokarev. Stefan Weber updated the script and added
130  at the head of the file.  additional files. The following files in the distribution are for building PCRE
131    for use with VP/Borland: makevp_c.txt, makevp_l.txt, makevp.bat, pcregexp.pas.
 Stefan Weber contributed the following files in the distribution for building  
 PCRE for use with VP/Borland: !compile.txt, !linklib.txt, makevp.bat,  
 pcregexp.pas.  
132    
 Michael Roy sent these comments about building PCRE under Windows with BCC5.5:  
133    
134    Some of the core BCC libraries have a version of PCRE from 1998 built in,  COMMENTS ABOUT WIN32 BUILDS
   which can lead to pcre_exec() giving an erroneous PCRE_ERROR_NULL from a  
   version mismatch. I'm including an easy workaround below, if you'd like to  
   include it in the non-unix instructions:  
135    
136    When linking a project with BCC5.5, pcre.lib must be included before any of  There are two ways of building PCRE using the "configure, make, make install"
137    the libraries cw32.lib, cw32i.lib, cw32mt.lib, and cw32mti.lib on the command  paradigm on Windows systems: using MinGW or using Cygwin. These are not at all
138    line.  the same thing; they are completely different from each other. There is also
139    some experimental, undocumented support for building using "cmake", which you
140    might like to try if you are familiar with "cmake". However, at the present
141    time, the "cmake" process builds only a static library (not a dll), and the
142    tests are not automatically run.
143    
144  Some help in building a Win32 DLL of PCRE in GnuWin32 environments was  The MinGW home page (http://www.mingw.org/) says this:
 contributed by Paul Sokolovsky. These environments are Mingw32  
 (http://www.xraylith.wisc.edu/~khan/software/gnu-win32/) and CygWin  
 (http://sourceware.cygnus.com/cygwin/). Paul comments:  
   
   For CygWin, set CFLAGS=-mno-cygwin, and do 'make dll'. You'll get  
   pcre.dll (containing pcreposix also), libpcre.dll.a, and dynamically  
   linked pgrep and pcretest. If you have /bin/sh, run RunTest (three  
   main test go ok, locale not supported).  
   
 Changes to do MinGW with autoconf 2.50 were supplied by Fred Cox  
 <sailorFred@yahoo.com>, who comments as follows:  
   
   If you are using the PCRE DLL, the normal Unix style configure && make &&  
   make check && make install should just work[*]. If you want to statically  
   link against the .a file, you must define PCRE_STATIC before including  
   pcre.h, otherwise the pcre_malloc and pcre_free exported functions will be  
   declared __declspec(dllimport), with hilarious results.  See the configure.in  
   and pcretest.c for how it is done for the static test.  
   
   Also, there will only be a libpcre.la, not a libpcreposix.la, as you  
   would expect from the Unix version. The single DLL includes the pcreposix  
   interface.  
   
 [*] But note that the supplied test files are in Unix format, with just LF  
 characters as line terminators. You will have to edit them to change to CR LF  
 terminators.  
145    
146  A script for building PCRE using Borland's C++ compiler for use with VPASCAL    MinGW: A collection of freely available and freely distributable Windows
147  was contributed by Alexander Tokarev. It is called makevp.bat.    specific header files and import libraries combined with GNU toolsets that
148      allow one to produce native Windows programs that do not rely on any
149      3rd-party C runtime DLLs.
150    
151  These are some further comments about Win32 builds from Mark Evans. They  The Cygwin home page (http://www.cygwin.com/) says this:
 were contributed before Fred Cox's changes were made, so it is possible that  
 they may no longer be relevant.  
   
 "The documentation for Win32 builds is a bit shy.  Under MSVC6 I  
 followed their instructions to the letter, but there were still  
 some things missing.  
   
 (1) Must #define STATIC for entire project if linking statically.  
     (I see no reason to use DLLs for code this compact.)  This of  
     course is a project setting in MSVC under Preprocessor.  
   
 (2) Missing some #ifdefs relating to the function pointers  
     pcre_malloc and pcre_free.  See my solution below.  (The stubs  
     may not be mandatory but they made me feel better.)"  
152    
153  =========================    Cygwin is a Linux-like environment for Windows. It consists of two parts:
 #ifdef _WIN32  
 #include <malloc.h>  
154    
155  void* malloc_stub(size_t N)    . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing
156  { return malloc(N); }      substantial Linux API functionality
 void free_stub(void* p)  
 { free(p); }  
 void *(*pcre_malloc)(size_t) = &malloc_stub;  
 void  (*pcre_free)(void *) = &free_stub;  
157    
158  #else    . A collection of tools which provide Linux look and feel.
159    
160  void *(*pcre_malloc)(size_t) = malloc;    The Cygwin DLL currently works with all recent, commercially released x86 32
161  void  (*pcre_free)(void *) = free;    bit and 64 bit versions of Windows, with the exception of Windows CE.
162    
163  #endif  On both MinGW and Cygwin, PCRE should build correctly using:
164  =========================  
165      ./configure && make && make install
166    
167    This should create two libraries called libpcre and libpcreposix, and, if you
168    have enabled building the C++ wrapper, a third one called libpcrecpp.
169    
170    If you want to statically link your program against a non-dll .a file, you must
171    define PCRE_STATIC before including pcre.h, otherwise the pcre_malloc() and
172    pcre_free() exported functions will be declared __declspec(dllimport), with
173    unwanted results.
174    
175    Using Cygwin's compiler generates libraries and executables that depend on
176    cygwin1.dll. If a library that is generated this way is distributed,
177    cygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL
178    licence, this forces not only PCRE to be under the GPL, but also the entire
179    application. A distributor who wants to keep their own code proprietary must
180    purchase an appropriate Cygwin licence.
181    
182    MinGW has no such restrictions. The MinGW compiler generates a library or
183    executable that can run standalone on Windows without any third party dll or
184    licensing issues.
185    
186    But there is more complication:
187    
188    If a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is
189    to tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a
190    front end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's
191    gcc and MinGW's gcc). So, a user can:
192    
193    . Build native binaries by using MinGW or by getting Cygwin and using
194      -mno-cygwin.
195    
196    . Build binaries that depend on cygwin1.dll by using Cygwin with the normal
197      compiler flags.
198    
199    The test files that are supplied with PCRE are in Unix format, with LF
200    characters as line terminators. It may be necessary to change the line
201    terminators in order to get some of the tests to work. We hope to improve
202    things in this area in future.
203    
204    
205    BUILDING UNDER WINDOWS WITH BCC5.5
206    
207    Michael Roy sent these comments about building PCRE under Windows with BCC5.5:
208    
209      Some of the core BCC libraries have a version of PCRE from 1998 built in,
210      which can lead to pcre_exec() giving an erroneous PCRE_ERROR_NULL from a
211      version mismatch. I'm including an easy workaround below, if you'd like to
212      include it in the non-unix instructions:
213    
214      When linking a project with BCC5.5, pcre.lib must be included before any of
215      the libraries cw32.lib, cw32i.lib, cw32mt.lib, and cw32mti.lib on the command
216      line.
217    
218    
219  BUILDING PCRE ON OPENVMS  BUILDING PCRE ON OPENVMS
# Line 284  $! Locale could not be set to fr Line 280  $! Locale could not be set to fr
280  $!  $!
281  =========================  =========================
282    
283    Last Updated: 11 June 2007
284  ****  ****

Legend:
Removed from v.101  
changed lines
  Added in v.177

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12