Home | History | Annotate | Download | only in pcre
      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 ****
    502