Building PCRE2 without using autotools
--------------------------------------

This document contains the following sections:

  General
  Generic instructions for the PCRE2 C library
  Stack size in Windows environments
  Linking programs in Windows environments
  Calling conventions in Windows environments
  Comments about Win32 builds
  Building PCRE2 on Windows with CMake
  Building PCRE2 on Windows with Visual Studio
  Testing with RunTest.bat
  Building PCRE2 on native z/OS and z/VM


GENERAL

The basic PCRE2 library consists entirely of code written in Standard C, and so
should compile successfully on any system that has a Standard C compiler and
library.

The PCRE2 distribution includes a "configure" file for use by the
configure/make (autotools) build system, as found in many Unix-like
environments. The README file contains information about the options for
"configure".

There is also support for CMake, which some users prefer, especially in Windows
environments, though it can also be run in Unix-like environments. See the
section entitled "Building PCRE2 on Windows with CMake" below.

Versions of src/config.h and src/pcre2.h are distributed in the PCRE2 tarballs
under the names src/config.h.generic and src/pcre2.h.generic. These are
provided for those who build PCRE2 without using "configure" or CMake. If you
use "configure" or CMake, the .generic versions are not used.


GENERIC INSTRUCTIONS FOR THE PCRE2 C LIBRARY

The following are generic instructions for building the PCRE2 C library "by
hand". If you are going to use CMake, this section does not apply to you; you
can skip ahead to the CMake section.

 (1) Copy or rename the file src/config.h.generic as src/config.h, and edit the
     macro settings that it contains to whatever is appropriate for your
     environment. In particular, you can alter the definition of the NEWLINE
     macro to specify what character(s) you want to be interpreted as line
     terminators by default.

     When you subsequently compile any of the PCRE2 modules, you must specify
     -DHAVE_CONFIG_H to your compiler so that src/config.h is included in the
     sources.

     An alternative approach is not to edit src/config.h, but to use -D on the
     compiler command line to make any changes that you need to the
     configuration options. In this case -DHAVE_CONFIG_H must not be set.

     NOTE: There have been occasions when the way in which certain parameters
     in src/config.h are used has changed between releases. (In the
     configure/make world, this is handled automatically.) When upgrading to a
     new release, you are strongly advised to review src/config.h.generic
     before re-using what you had previously.

     Note also that the src/config.h.generic file is created from a config.h
     that was generated by Autotools, which automatically includes settings of
     a number of macros that are not actually used by PCRE2 (for example,
     HAVE_MEMORY_H).

 (2) Copy or rename the file src/pcre2.h.generic as src/pcre2.h.

 (3) EITHER:
       Copy or rename file src/pcre2_chartables.c.dist as
       src/pcre2_chartables.c.

     OR:
       Compile src/dftables.c as a stand-alone program (using -DHAVE_CONFIG_H
       if you have set up src/config.h), and then run it with the single
       argument "src/pcre2_chartables.c". This generates a set of standard
       character tables and writes them to that file. The tables are generated
       using the default C locale for your system. If you want to use a locale
       that is specified by LC_xxx environment variables, add the -L option to
       the dftables command. You must use this method if you are building on a
       system that uses EBCDIC code.

     The tables in src/pcre2_chartables.c are defaults. The caller of PCRE2 can
     specify alternative tables at run time.

 (4) For an 8-bit library, compile the following source files from the src
     directory, setting -DPCRE2_CODE_UNIT_WIDTH=8 as a compiler option. Also
     set -DHAVE_CONFIG_H if you have set up src/config.h with your
     configuration, or else use other -D settings to change the configuration
     as required.

       pcre2_auto_possess.c
       pcre2_chartables.c
       pcre2_compile.c
       pcre2_config.c
       pcre2_context.c
       pcre2_convert.c
       pcre2_dfa_match.c
       pcre2_error.c
       pcre2_extuni.c
       pcre2_find_bracket.c
       pcre2_jit_compile.c
       pcre2_maketables.c
       pcre2_match.c
       pcre2_match_data.c
       pcre2_newline.c
       pcre2_ord2utf.c
       pcre2_pattern_info.c
       pcre2_script_run.c
       pcre2_serialize.c
       pcre2_string_utils.c
       pcre2_study.c
       pcre2_substitute.c
       pcre2_substring.c
       pcre2_tables.c
       pcre2_ucd.c
       pcre2_valid_utf.c
       pcre2_xclass.c

     Make sure that you include -I. in the compiler command (or equivalent for
     an unusual compiler) so that all included PCRE2 header files are first
     sought in the src directory under the current directory. Otherwise you run
     the risk of picking up a previously-installed file from somewhere else.

     Note that you must compile pcre2_jit_compile.c, even if you have not
     defined SUPPORT_JIT in src/config.h, because when JIT support is not
     configured, dummy functions are compiled. When JIT support IS configured,
     pcre2_jit_compile.c #includes other files from the sljit subdirectory,
     all of whose names begin with "sljit". It also #includes
     src/pcre2_jit_match.c and src/pcre2_jit_misc.c, so you should not compile
     these yourself.

     Note also that the pcre2_fuzzsupport.c file contains special code that is
     useful to those who want to run fuzzing tests on the PCRE2 library. Unless
     you are doing that, you can ignore it.

 (5) Now link all the compiled code into an object library in whichever form
     your system keeps such libraries. This is the basic PCRE2 C 8-bit library.
     If your system has static and shared libraries, you may have to do this
     once for each type.

 (6) If you want to build a 16-bit library or 32-bit library (as well as, or
     instead of the 8-bit library) just supply 16 or 32 as the value of
     -DPCRE2_CODE_UNIT_WIDTH when you are compiling.

 (7) If you want to build the POSIX wrapper functions (which apply only to the
     8-bit library), ensure that you have the src/pcre2posix.h file and then
     compile src/pcre2posix.c. Link the result (on its own) as the pcre2posix
     library.

 (8) The pcre2test program can be linked with any combination of the 8-bit,
     16-bit and 32-bit libraries (depending on what you selected in
     src/config.h). Compile src/pcre2test.c; don't forget -DHAVE_CONFIG_H if
     necessary, but do NOT define PCRE2_CODE_UNIT_WIDTH. Then link with the
     appropriate library/ies. If you compiled an 8-bit library, pcre2test also
     needs the pcre2posix wrapper library.

 (9) Run pcre2test on the testinput files in the testdata directory, and check
     that the output matches the corresponding testoutput files. There are
     comments about what each test does in the section entitled "Testing PCRE2"
     in the README file. If you compiled more than one of the 8-bit, 16-bit and
     32-bit libraries, you need to run pcre2test with the -16 option to do
     16-bit tests and with the -32 option to do 32-bit tests.

     Some tests are relevant only when certain build-time options are selected.
     For example, test 4 is for Unicode support, and will not run if you have
     built PCRE2 without it. See the comments at the start of each testinput
     file. If you have a suitable Unix-like shell, the RunTest script will run
     the appropriate tests for you. The command "RunTest list" will output a
     list of all the tests.

     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.

(10) If you have built PCRE2 with SUPPORT_JIT, the JIT features can be tested
     by running pcre2test with the -jit option. This is done automatically by
     the RunTest script. You might also like to build and run the freestanding
     JIT test program, src/pcre2_jit_test.c.

(11) If you want to use the pcre2grep command, compile and link
     src/pcre2grep.c; it uses only the basic 8-bit PCRE2 library (it does not
     need the pcre2posix library). If you have built the PCRE2 library with JIT
     support by defining SUPPORT_JIT in src/config.h, you can also define
     SUPPORT_PCRE2GREP_JIT, which causes pcre2grep to make use of JIT (unless
     it is run with --no-jit). If you define SUPPORT_PCRE2GREP_JIT without
     defining SUPPORT_JIT, pcre2grep does not try to make use of JIT.


STACK SIZE IN WINDOWS ENVIRONMENTS

Prior to release 10.30 the default system stack size of 1MiB in some Windows
environments caused issues with some tests. This should no longer be the case
for 10.30 and later releases.


LINKING PROGRAMS IN WINDOWS ENVIRONMENTS

If you want to statically link a program against a PCRE2 library in the form of
a non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h.


CALLING CONVENTIONS IN WINDOWS ENVIRONMENTS

It is possible to compile programs to use different calling conventions using
MSVC. Search the web for "calling conventions" for more information. To make it
easier to change the calling convention for the exported functions in the
PCRE2 library, the macro PCRE2_CALL_CONVENTION is present in all the external
definitions. It can be set externally when compiling (e.g. in CFLAGS). If it is
not set, it defaults to empty; the default calling convention is then used
(which is what is wanted most of the time).


COMMENTS ABOUT WIN32 BUILDS (see also "BUILDING PCRE2 ON WINDOWS WITH CMAKE")

There are two ways of building PCRE2 using the "configure, make, make install"
paradigm on Windows systems: using MinGW or using Cygwin. These are not at all
the same thing; they are completely different from each other. There is also
support for building using CMake, which some users find a more straightforward
way of building PCRE2 under Windows.

The MinGW home page (http://www.mingw.org/) says this:

  MinGW: A collection of freely available and freely distributable Windows
  specific header files and import libraries combined with GNU toolsets that
  allow one to produce native Windows programs that do not rely on any
  3rd-party C runtime DLLs.

The Cygwin home page (http://www.cygwin.com/) says this:

  Cygwin is a Linux-like environment for Windows. It consists of two parts:

  . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing
    substantial Linux API functionality

  . A collection of tools which provide Linux look and feel.

On both MinGW and Cygwin, PCRE2 should build correctly using:

  ./configure && make && make install

This should create two libraries called libpcre2-8 and libpcre2-posix. These
are independent libraries: when you link with libpcre2-posix you must also link
with libpcre2-8, which contains the basic functions.

Using Cygwin's compiler generates libraries and executables that depend on
cygwin1.dll. If a library that is generated this way is distributed,
cygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL
licence, this forces not only PCRE2 to be under the GPL, but also the entire
application. A distributor who wants to keep their own code proprietary must
purchase an appropriate Cygwin licence.

MinGW has no such restrictions. The MinGW compiler generates a library or
executable that can run standalone on Windows without any third party dll or
licensing issues.

But there is more complication:

If a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is
to tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a
front end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's
gcc and MinGW's gcc). So, a user can:

. Build native binaries by using MinGW or by getting Cygwin and using
  -mno-cygwin.

. Build binaries that depend on cygwin1.dll by using Cygwin with the normal
  compiler flags.

The test files that are supplied with PCRE2 are in UNIX format, with LF
characters as line terminators. Unless your PCRE2 library uses a default
newline option that includes LF as a valid newline, it may be necessary to
change the line terminators in the test files to get some of the tests to work.


BUILDING PCRE2 ON WINDOWS WITH CMAKE

CMake is an alternative configuration facility that can be used instead of
"configure". CMake creates project files (make files, solution files, etc.)
tailored to numerous development environments, including Visual Studio,
Borland, Msys, MinGW, NMake, and Unix. If possible, use short paths with no
spaces in the names for your CMake installation and your PCRE2 source and build
directories.

The following instructions were contributed by a PCRE1 user, but they should
also work for PCRE2. If they are not followed exactly, errors may occur. In the
event that errors do occur, it is recommended that you delete the CMake cache
before attempting to repeat the CMake build process. In the CMake GUI, the
cache can be deleted by selecting "File > Delete Cache".

1.  Install the latest CMake version available from http://www.cmake.org/, and
    ensure that cmake\bin is on your path.

2.  Unzip (retaining folder structure) the PCRE2 source tree into a source
    directory such as C:\pcre2. You should ensure your local date and time
    is not earlier than the file dates in your source dir if the release is
    very new.

3.  Create a new, empty build directory, preferably a subdirectory of the
    source dir. For example, C:\pcre2\pcre2-xx\build.

4.  Run cmake-gui from the Shell envirornment of your build tool, for example,
    Msys for Msys/MinGW or Visual Studio Command Prompt for VC/VC++. Do not try
    to start Cmake from the Windows Start menu, as this can lead to errors.

5.  Enter C:\pcre2\pcre2-xx and C:\pcre2\pcre2-xx\build for the source and
    build directories, respectively.

6.  Hit the "Configure" button.

7.  Select the particular IDE / build tool that you are using (Visual
    Studio, MSYS makefiles, MinGW makefiles, etc.)

8.  The GUI will then list several configuration options. This is where
    you can disable Unicode support or select other PCRE2 optional features.

9.  Hit "Configure" again. The adjacent "Generate" button should now be
    active.

10. Hit "Generate".

11. The build directory should now contain a usable build system, be it a
    solution file for Visual Studio, makefiles for MinGW, etc. Exit from
    cmake-gui and use the generated build system with your compiler or IDE.
    E.g., for MinGW you can run "make", or for Visual Studio, open the PCRE2
    solution, select the desired configuration (Debug, or Release, etc.) and
    build the ALL_BUILD project.

12. If during configuration with cmake-gui you've elected to build the test
    programs, you can execute them by building the test project. E.g., for
    MinGW: "make test"; for Visual Studio build the RUN_TESTS project. The
    most recent build configuration is targeted by the tests. A summary of
    test results is presented. Complete test output is subsequently
    available for review in Testing\Temporary under your build dir.


BUILDING PCRE2 ON WINDOWS WITH VISUAL STUDIO

The code currently cannot be compiled without a stdint.h header, which is
available only in relatively recent versions of Visual Studio. However, this
portable and permissively-licensed implementation of the header worked without
issue:

  http://www.azillionmonkeys.com/qed/pstdint.h

Just rename it and drop it into the top level of the build tree.


TESTING WITH RUNTEST.BAT

If configured with CMake, building the test project ("make test" or building
ALL_TESTS in Visual Studio) creates (and runs) pcre2_test.bat (and depending
on your configuration options, possibly other test programs) in the build
directory. The pcre2_test.bat script runs RunTest.bat with correct source and
exe paths.

For manual testing with RunTest.bat, provided the build dir is a subdirectory
of the source directory: Open command shell window. Chdir to the location
of your pcre2test.exe and pcre2grep.exe programs. Call RunTest.bat with
"..\RunTest.Bat" or "..\..\RunTest.bat" as appropriate.

To run only a particular test with RunTest.Bat provide a test number argument.

Otherwise:

1. Copy RunTest.bat into the directory where pcre2test.exe and pcre2grep.exe
   have been created.

2. Edit RunTest.bat to indentify the full or relative location of
   the pcre2 source (wherein which the testdata folder resides), e.g.:

   set srcdir=C:\pcre2\pcre2-10.00

3. In a Windows command environment, chdir to the location of your bat and
   exe programs.

4. Run RunTest.bat. Test outputs will automatically be compared to expected
   results, and discrepancies will be identified in the console output.

To independently test the just-in-time compiler, run pcre2_jit_test.exe.


BUILDING PCRE2 ON NATIVE Z/OS AND Z/VM

z/OS and z/VM are operating systems for mainframe computers, produced by IBM.
The character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and
applications can be supported through UNIX System Services, and in such an
environment it should be possible to build PCRE2 in the same way as in other
systems, with the EBCDIC related configuration settings, but it is not known if
anybody has tried this.

In native z/OS (without UNIX System Services) and in z/VM, special ports are
required. For details, please see file 939 on this web site:

  http://www.cbttape.org

Everything in that location, source and executable, is in EBCDIC and native
z/OS file formats. The port provides an API for LE languages such as COBOL and
for the z/OS and z/VM versions of the Rexx languages.

==============================
Last Updated: 14 November 2018
==============================
