1Building PCRE2 without using autotools 2-------------------------------------- 3 4This document contains the following sections: 5 6 General 7 Generic instructions for the PCRE2 C libraries 8 Stack size in Windows environments 9 Linking programs in Windows environments 10 Calling conventions in Windows environments 11 Comments about Win32 builds 12 Building PCRE2 on Windows with CMake 13 Building PCRE2 on Windows with Visual Studio 14 Testing with RunTest.bat 15 Building PCRE2 on native z/OS and z/VM 16 Building PCRE2 under VMS 17 18 19GENERAL 20 21The source of the PCRE2 libraries consists entirely of code written in Standard 22C, and so should compile successfully on any system that has a Standard C 23compiler and library. 24 25The PCRE2 distribution includes a "configure" file for use by the 26configure/make (autotools) build system, as found in many Unix-like 27environments. The README file contains information about the options for 28"configure". 29 30There is also support for CMake, which some users prefer, especially in Windows 31environments, though it can also be run in Unix-like environments. See the 32section entitled "Building PCRE2 on Windows with CMake" below. 33 34Versions of src/config.h and src/pcre2.h are distributed in the PCRE2 tarballs 35under the names src/config.h.generic and src/pcre2.h.generic. These are 36provided for those who build PCRE2 without using "configure" or CMake. If you 37use "configure" or CMake, the .generic versions are not used. 38 39 40GENERIC INSTRUCTIONS FOR THE PCRE2 C LIBRARIES 41 42There are three possible PCRE2 libraries, each handling data with a specific 43code unit width: 8, 16, or 32 bits. You can build any combination of them. The 44following are generic instructions for building a PCRE2 C library "by hand". If 45you are going to use CMake, this section does not apply to you; you can skip 46ahead to the CMake section. Note that the settings concerned with 8-bit, 4716-bit, and 32-bit code units relate to the type of data string that PCRE2 48processes. They are NOT referring to the underlying operating system bit width. 49You do not have to do anything special to compile in a 64-bit environment, for 50example. 51 52 (1) Copy or rename the file src/config.h.generic as src/config.h, and edit the 53 macro settings that it contains to whatever is appropriate for your 54 environment. In particular, you can alter the definition of the NEWLINE 55 macro to specify what character(s) you want to be interpreted as line 56 terminators by default. You need to #define at least one of 57 SUPPORT_PCRE2_8, SUPPORT_PCRE2_16, or SUPPORT_PCRE2_32, depending on which 58 libraries you are going to build. You must set all that apply. 59 60 When you subsequently compile any of the PCRE2 modules, you must specify 61 -DHAVE_CONFIG_H to your compiler so that src/config.h is included in the 62 sources. 63 64 An alternative approach is not to edit src/config.h, but to use -D on the 65 compiler command line to make any changes that you need to the 66 configuration options. In this case -DHAVE_CONFIG_H must not be set. 67 68 NOTE: There have been occasions when the way in which certain parameters 69 in src/config.h are used has changed between releases. (In the 70 configure/make world, this is handled automatically.) When upgrading to a 71 new release, you are strongly advised to review src/config.h.generic 72 before re-using what you had previously. 73 74 Note also that the src/config.h.generic file is created from a config.h 75 that was generated by Autotools, which automatically includes settings of 76 a number of macros that are not actually used by PCRE2 (for example, 77 HAVE_DLFCN_H). 78 79 (2) Copy or rename the file src/pcre2.h.generic as src/pcre2.h. 80 81 (3) EITHER: 82 Copy or rename file src/pcre2_chartables.c.dist as 83 src/pcre2_chartables.c. 84 85 OR: 86 Compile src/pcre2_dftables.c as a stand-alone program (using 87 -DHAVE_CONFIG_H if you have set up src/config.h), and then run it with 88 the single argument "src/pcre2_chartables.c". This generates a set of 89 standard character tables and writes them to that file. The tables are 90 generated using the default C locale for your system. If you want to use 91 a locale that is specified by LC_xxx environment variables, add the -L 92 option to the pcre2_dftables command. You must use this method if you 93 are building on a system that uses EBCDIC code. 94 95 The tables in src/pcre2_chartables.c are defaults. The caller of PCRE2 can 96 specify alternative tables at run time. 97 98 (4) For a library that supports 8-bit code units in the character strings that 99 it processes, compile the following source files from the src directory, 100 setting -DPCRE2_CODE_UNIT_WIDTH=8 as a compiler option. Also set 101 -DHAVE_CONFIG_H if you have set up src/config.h with your configuration, 102 or else use other -D settings to change the configuration as required. 103 104 pcre2_auto_possess.c 105 pcre2_chkdint.c 106 pcre2_chartables.c 107 pcre2_compile.c 108 pcre2_config.c 109 pcre2_context.c 110 pcre2_convert.c 111 pcre2_dfa_match.c 112 pcre2_error.c 113 pcre2_extuni.c 114 pcre2_find_bracket.c 115 pcre2_jit_compile.c 116 pcre2_maketables.c 117 pcre2_match.c 118 pcre2_match_data.c 119 pcre2_newline.c 120 pcre2_ord2utf.c 121 pcre2_pattern_info.c 122 pcre2_script_run.c 123 pcre2_serialize.c 124 pcre2_string_utils.c 125 pcre2_study.c 126 pcre2_substitute.c 127 pcre2_substring.c 128 pcre2_tables.c 129 pcre2_ucd.c 130 pcre2_valid_utf.c 131 pcre2_xclass.c 132 133 Make sure that you include -I. in the compiler command (or equivalent for 134 an unusual compiler) so that all included PCRE2 header files are first 135 sought in the src directory under the current directory. Otherwise you run 136 the risk of picking up a previously-installed file from somewhere else. 137 138 Note that you must compile pcre2_jit_compile.c, even if you have not 139 defined SUPPORT_JIT in src/config.h, because when JIT support is not 140 configured, dummy functions are compiled. When JIT support IS configured, 141 pcre2_jit_compile.c #includes other files from the sljit subdirectory, 142 all of whose names begin with "sljit". It also #includes 143 src/pcre2_jit_match.c and src/pcre2_jit_misc.c, so you should not compile 144 those yourself. 145 146 Note also that the pcre2_fuzzsupport.c file contains special code that is 147 useful to those who want to run fuzzing tests on the PCRE2 library. Unless 148 you are doing that, you can ignore it. 149 150 (5) Now link all the compiled code into an object library in whichever form 151 your system keeps such libraries. This is the PCRE2 C 8-bit library, 152 typically called something like libpcre2-8. If your system has static and 153 shared libraries, you may have to do this once for each type. 154 155 (6) If you want to build a library that supports 16-bit or 32-bit code units, 156 set 16 or 32 as the value of -DPCRE2_CODE_UNIT_WIDTH when obeying step 4 157 above. If you want to build more than one PCRE2 library, repeat steps 4 158 and 5 as necessary. 159 160 (7) If you want to build the POSIX wrapper functions (which apply only to the 161 8-bit library), ensure that you have the src/pcre2posix.h file and then 162 compile src/pcre2posix.c. Link the result (on its own) as the pcre2posix 163 library. If targeting a DLL in Windows, make sure to include 164 -DPCRE2POSIX_SHARED with your compiler flags. 165 166 (8) The pcre2test program can be linked with any combination of the 8-bit, 167 16-bit and 32-bit libraries (depending on what you specfied in 168 src/config.h) . Compile src/pcre2test.c; don't forget -DHAVE_CONFIG_H if 169 necessary, but do NOT define PCRE2_CODE_UNIT_WIDTH. Then link with the 170 appropriate library/ies. If you compiled an 8-bit library, pcre2test also 171 needs the pcre2posix wrapper library. 172 173 (9) Run pcre2test on the testinput files in the testdata directory, and check 174 that the output matches the corresponding testoutput files. There are 175 comments about what each test does in the section entitled "Testing PCRE2" 176 in the README file. If you compiled more than one of the 8-bit, 16-bit and 177 32-bit libraries, you need to run pcre2test with the -16 option to do 178 16-bit tests and with the -32 option to do 32-bit tests. 179 180 Some tests are relevant only when certain build-time options are selected. 181 For example, test 4 is for Unicode support, and will not run if you have 182 built PCRE2 without it. See the comments at the start of each testinput 183 file. If you have a suitable Unix-like shell, the RunTest script will run 184 the appropriate tests for you. The command "RunTest list" will output a 185 list of all the tests. 186 187 Note that the supplied files are in Unix format, with just LF characters 188 as line terminators. You may need to edit them to change this if your 189 system uses a different convention. 190 191(10) If you have built PCRE2 with SUPPORT_JIT, the JIT features can be tested 192 by running pcre2test with the -jit option. This is done automatically by 193 the RunTest script. You might also like to build and run the freestanding 194 JIT test program, src/pcre2_jit_test.c. 195 196(11) The pcre2test program tests the POSIX wrapper library, but there is also a 197 freestanding test program in src/pcre2posix_test.c. It must be linked with 198 both the pcre2posix library and the 8-bit PCRE2 library. 199 200(12) If you want to use the pcre2grep command, compile and link 201 src/pcre2grep.c; it uses only the 8-bit PCRE2 library (it does not need 202 the pcre2posix library). If you have built the PCRE2 library with JIT 203 support by defining SUPPORT_JIT in src/config.h, you can also define 204 SUPPORT_PCRE2GREP_JIT, which causes pcre2grep to make use of JIT (unless 205 it is run with --no-jit). If you define SUPPORT_PCRE2GREP_JIT without 206 defining SUPPORT_JIT, pcre2grep does not try to make use of JIT. 207 208 209STACK SIZE IN WINDOWS ENVIRONMENTS 210 211Prior to release 10.30 the default system stack size of 1MiB in some Windows 212environments caused issues with some tests. This should no longer be the case 213for 10.30 and later releases. 214 215 216LINKING PROGRAMS IN WINDOWS ENVIRONMENTS 217 218If you want to statically link a program against a PCRE2 library in the form of 219a non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h. 220 221 222CALLING CONVENTIONS IN WINDOWS ENVIRONMENTS 223 224It is possible to compile programs to use different calling conventions using 225MSVC. Search the web for "calling conventions" for more information. To make it 226easier to change the calling convention for the exported functions in a 227PCRE2 library, the macro PCRE2_CALL_CONVENTION is present in all the external 228definitions. It can be set externally when compiling (e.g. in CFLAGS). If it is 229not set, it defaults to empty; the default calling convention is then used 230(which is what is wanted most of the time). 231 232 233COMMENTS ABOUT WIN32 BUILDS (see also "BUILDING PCRE2 ON WINDOWS WITH CMAKE") 234 235There are two ways of building PCRE2 using the "configure, make, make install" 236paradigm on Windows systems: using MinGW or using Cygwin. These are not at all 237the same thing; they are completely different from each other. There is also 238support for building using CMake, which some users find a more straightforward 239way of building PCRE2 under Windows. 240 241The MinGW home page (http://www.mingw.org/) says this: 242 243 MinGW: A collection of freely available and freely distributable Windows 244 specific header files and import libraries combined with GNU toolsets that 245 allow one to produce native Windows programs that do not rely on any 246 3rd-party C runtime DLLs. 247 248The Cygwin home page (http://www.cygwin.com/) says this: 249 250 Cygwin is a Linux-like environment for Windows. It consists of two parts: 251 252 . A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing 253 substantial Linux API functionality 254 255 . A collection of tools which provide Linux look and feel. 256 257On both MinGW and Cygwin, PCRE2 should build correctly using: 258 259 ./configure && make && make install 260 261This should create two libraries called libpcre2-8 and libpcre2-posix. These 262are independent libraries: when you link with libpcre2-posix you must also link 263with libpcre2-8, which contains the basic functions. 264 265Using Cygwin's compiler generates libraries and executables that depend on 266cygwin1.dll. If a library that is generated this way is distributed, 267cygwin1.dll has to be distributed as well. Since cygwin1.dll is under the GPL 268licence, this forces not only PCRE2 to be under the GPL, but also the entire 269application. A distributor who wants to keep their own code proprietary must 270purchase an appropriate Cygwin licence. 271 272MinGW has no such restrictions. The MinGW compiler generates a library or 273executable that can run standalone on Windows without any third party dll or 274licensing issues. 275 276But there is more complication: 277 278If a Cygwin user uses the -mno-cygwin Cygwin gcc flag, what that really does is 279to tell Cygwin's gcc to use the MinGW gcc. Cygwin's gcc is only acting as a 280front end to MinGW's gcc (if you install Cygwin's gcc, you get both Cygwin's 281gcc and MinGW's gcc). So, a user can: 282 283. Build native binaries by using MinGW or by getting Cygwin and using 284 -mno-cygwin. 285 286. Build binaries that depend on cygwin1.dll by using Cygwin with the normal 287 compiler flags. 288 289The test files that are supplied with PCRE2 are in UNIX format, with LF 290characters as line terminators. Unless your PCRE2 library uses a default 291newline option that includes LF as a valid newline, it may be necessary to 292change the line terminators in the test files to get some of the tests to work. 293 294 295BUILDING PCRE2 ON WINDOWS WITH CMAKE 296 297CMake is an alternative configuration facility that can be used instead of 298"configure". CMake creates project files (make files, solution files, etc.) 299tailored to numerous development environments, including Visual Studio, 300Borland, Msys, MinGW, NMake, and Unix. If possible, use short paths with no 301spaces in the names for your CMake installation and your PCRE2 source and build 302directories. 303 304The following instructions were contributed by a PCRE1 user, but they should 305also work for PCRE2. If they are not followed exactly, errors may occur. In the 306event that errors do occur, it is recommended that you delete the CMake cache 307before attempting to repeat the CMake build process. In the CMake GUI, the 308cache can be deleted by selecting "File > Delete Cache". 309 3101. Install the latest CMake version available from http://www.cmake.org/, and 311 ensure that cmake\bin is on your path. 312 3132. Unzip (retaining folder structure) the PCRE2 source tree into a source 314 directory such as C:\pcre2. You should ensure your local date and time 315 is not earlier than the file dates in your source dir if the release is 316 very new. 317 3183. Create a new, empty build directory, preferably a subdirectory of the 319 source dir. For example, C:\pcre2\pcre2-xx\build. 320 3214. Run cmake-gui from the Shell environment of your build tool, for example, 322 Msys for Msys/MinGW or Visual Studio Command Prompt for VC/VC++. Do not try 323 to start Cmake from the Windows Start menu, as this can lead to errors. 324 3255. Enter C:\pcre2\pcre2-xx and C:\pcre2\pcre2-xx\build for the source and 326 build directories, respectively. 327 3286. Hit the "Configure" button. 329 3307. Select the particular IDE / build tool that you are using (Visual 331 Studio, MSYS makefiles, MinGW makefiles, etc.) 332 3338. The GUI will then list several configuration options. This is where 334 you can disable Unicode support or select other PCRE2 optional features. 335 3369. Hit "Configure" again. The adjacent "Generate" button should now be 337 active. 338 33910. Hit "Generate". 340 34111. The build directory should now contain a usable build system, be it a 342 solution file for Visual Studio, makefiles for MinGW, etc. Exit from 343 cmake-gui and use the generated build system with your compiler or IDE. 344 E.g., for MinGW you can run "make", or for Visual Studio, open the PCRE2 345 solution, select the desired configuration (Debug, or Release, etc.) and 346 build the ALL_BUILD project. 347 34812. If during configuration with cmake-gui you've elected to build the test 349 programs, you can execute them by building the test project. E.g., for 350 MinGW: "make test"; for Visual Studio build the RUN_TESTS project. The 351 most recent build configuration is targeted by the tests. A summary of 352 test results is presented. Complete test output is subsequently 353 available for review in Testing\Temporary under your build dir. 354 355 356BUILDING PCRE2 ON WINDOWS WITH VISUAL STUDIO 357 358The code currently cannot be compiled without an inttypes.h header, which is 359available only with Visual Studio 2013 or newer. However, this portable and 360permissively-licensed implementation of the stdint.h header could be used as an 361alternative: 362 363 http://www.azillionmonkeys.com/qed/pstdint.h 364 365Just rename it and drop it into the top level of the build tree. 366 367 368TESTING WITH RUNTEST.BAT 369 370If configured with CMake, building the test project ("make test" or building 371ALL_TESTS in Visual Studio) creates (and runs) pcre2_test.bat (and depending 372on your configuration options, possibly other test programs) in the build 373directory. The pcre2_test.bat script runs RunTest.bat with correct source and 374exe paths. 375 376For manual testing with RunTest.bat, provided the build dir is a subdirectory 377of the source directory: Open command shell window. Chdir to the location 378of your pcre2test.exe and pcre2grep.exe programs. Call RunTest.bat with 379"..\RunTest.Bat" or "..\..\RunTest.bat" as appropriate. 380 381To run only a particular test with RunTest.Bat provide a test number argument. 382 383Otherwise: 384 3851. Copy RunTest.bat into the directory where pcre2test.exe and pcre2grep.exe 386 have been created. 387 3882. Edit RunTest.bat to identify the full or relative location of 389 the pcre2 source (wherein which the testdata folder resides), e.g.: 390 391 set srcdir=C:\pcre2\pcre2-10.00 392 3933. In a Windows command environment, chdir to the location of your bat and 394 exe programs. 395 3964. Run RunTest.bat. Test outputs will automatically be compared to expected 397 results, and discrepancies will be identified in the console output. 398 399To independently test the just-in-time compiler, run pcre2_jit_test.exe. 400 401 402BUILDING PCRE2 ON NATIVE Z/OS AND Z/VM 403 404z/OS and z/VM are operating systems for mainframe computers, produced by IBM. 405The character code used is EBCDIC, not ASCII or Unicode. In z/OS, UNIX APIs and 406applications can be supported through UNIX System Services, and in such an 407environment it should be possible to build PCRE2 in the same way as in other 408systems, with the EBCDIC related configuration settings, but it is not known if 409anybody has tried this. 410 411In native z/OS (without UNIX System Services) and in z/VM, special ports are 412required. For details, please see file 939 on this web site: 413 414 http://www.cbttape.org 415 416Everything in that location, source and executable, is in EBCDIC and native 417z/OS file formats. The port provides an API for LE languages such as COBOL and 418for the z/OS and z/VM versions of the Rexx languages. 419 420 421BUILDING PCRE2 UNDER VMS 422 423Alexey Chuphin has contributed some auxiliary files for building PCRE2 under 424OpenVMS. They are in the "vms" directory in the distribution tarball. Please 425read the file called vms/openvms_readme.txt. The pcre2test and pcre2grep 426programs contain some VMS-specific code. 427 428=========================== 429Last Updated: 16 April 2024 430=========================== 431