416 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			416 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								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. Note that the settings concerned with
							 | 
						||
| 
								 | 
							
								8-bit, 16-bit, and 32-bit code units relate to the type of data string that
							 | 
						||
| 
								 | 
							
								PCRE2 processes. They are NOT referring to the underlying operating system bit
							 | 
						||
| 
								 | 
							
								width. You do not have to do anything special to compile in a 64-bit
							 | 
						||
| 
								 | 
							
								environment, for example.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 (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_DLFCN_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/pcre2_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 pcre2_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 a library that supports 8-bit code units in the character strings that
							 | 
						||
| 
								 | 
							
								     it processes, 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_ucptables.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
							 | 
						||
| 
								 | 
							
								     those 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 library that supports 16-bit or 32-bit code units,
							 | 
						||
| 
								 | 
							
								     (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) The pcre2test program tests the POSIX wrapper library, but there is also a
							 | 
						||
| 
								 | 
							
								     freestanding test program in src/pcre2posix_test.c. It must be linked with
							 | 
						||
| 
								 | 
							
								     both the pcre2posix library and the 8-bit PCRE2 library.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(12) 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 environment 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 an inttypes.h header, which is
							 | 
						||
| 
								 | 
							
								available only with Visual Studio 2013 or newer. However, this portable and
							 | 
						||
| 
								 | 
							
								permissively-licensed implementation of the stdint.h header could be used as an
							 | 
						||
| 
								 | 
							
								alternative:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  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 identify 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: 10 December 2022
							 | 
						||
| 
								 | 
							
								==============================
							 |