forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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
 | |
| ==============================
 |