Including PCRE with Solaris Stefan Teleman 15 March 2007 1. Summary and motivation The inclusion of PHP5 has created a number of external library dependency requirements. One of these dependencies is PCRE [Perl-Compatible Regular Expressions] [1] [3]. According to PCRE's Home Page, "The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5. PCRE has its own native API, as well as a set of wrapper functions that correspond to the POSIX regular expression API." [1] [2] PCRE is used by many open source projects, including Apache, PHP, KDE, Postfix, Nmap, etc. The inclusion of PCRE in Solaris would facilitate the integration of other open source projects depending on PCRE. PCRE was originally written by Philip Hazel at Cambridge University, UK. This FastTrack case proposes the integration of PCRE in Solaris. PCRE is an Open Source project, and is developed outside of SMI. As such, the SFW Consolidation is the natural choice for PCRE integration. This case seeks Micro/Patch Release Binding. 2. Technical issues 2.1. Key objects. /usr/bin/pcregrep /usr/bin/pcretest /usr/bin/pcre-config /usr/bin/64/pcregrep /usr/bin/64/pcretest /usr/bin/64/pcre-config /usr/lib/libpcre.so.0.0.1 /usr/lib/libpcre.so.0 -> libpcre.so.0.0.1 /usr/lib/libpcre.so -> libpcre.so.0.0.1 /usr/lib/64/libpcre.so.0.0.1 /usr/lib/64/libpcre.so.0 -> libpcre.so.0.0.1 /usr/lib/64/libpcre.so -> libpcre.so.0.0.1 /usr/lib/libpcrecpp.so.0.0.0 /usr/lib/libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 /usr/lib/libpcrecpp.so -> libpcrecpp.so.0.0.0 /usr/lib/64/libpcrecpp.so.0.0.0 /usr/lib/64/libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 /usr/lib/64/libpcrecpp.so -> libpcrecpp.so.0.0.0 /usr/lib/libpcreposix.so.0.0.0 /usr/lib/libpcreposix.so.0 -> libpcreposix.so.0.0.0 /usr/lib/libpcreposix.so -> libpcreposix.so.0.0.0 /usr/lib/64/libpcreposix.so.0.0.0 /usr/lib/64/libpcreposix.so.0 -> libpcreposix.so.0.0.0 /usr/lib/64/libpcreposix.so -> libpcreposix.so.0.0.0 /usr/include/pcre/pcre.h /usr/include/pcre/pcre_scanner.h /usr/include/pcre/pcre_stringpiece.h /usr/include/pcre/pcrecpp.h /usr/include/pcre/pcrecpparg.h /usr/include/pcre/pcreposix.h The original PCRE implementation installs header files under the ${PREFIX}/include location. For the purpose of Solaris integration, we propose to change the default header file installation location to /usr/include/pcre/*.h. The motivation for this change is avoidance of namespace pollution in /usr/include. /usr/share/man/man1/pcregrep.1 /usr/share/man/man1/pcretest.1 /usr/share/man/man3/pcre.3 2.2. Functionality PCRE implements library calls allowing Perl-like regular expression pattern matching from within C or C++. Prior to PCRE, Perl-compatible regular expressions and pattern matching were not available outside of Perl itself. PCRE's core functionality is provided by two executables [pcregrep and pcretest] and three shared libraries: libpcre.so.0.0.1, libpcrecpp.so.0.0.0 and libpcreposix.so.0.0.0. Key aspecs of PCRE's functionality are discussed below. pcregrep is a variant of grep which supports Perl-compatible re's. pcretest is a test harness program. It enables testing of RE pattern matching, without having to recompile a program. libpcre.so.0.0.1 implements the Perl-Compatible portion of PCRE. Perl Regular Expressions [perlre] are an implementation of Kleene Algebra applied to free text. Perl RE's differ from traditional UNIX RE or POSIX RE in their pattern matching syntax, by adding significantly more operators and operator modifiers to their algebra. PERL RE's inherit from UNIX and POSIX RE. libpcreposix.so.0.0.0 implements the POSIX-Compatible portion of PCRE. POSIX RE's extend the UNIX RE operator set, and simplify somewhat pattern matching syntax rules. libpcrecpp.so.0.0.0 is the C++ wrapper library around libpcre.so.0.0.1 and libpcreposix.so.0.0.0. libpcrecpp.so implements two Classes: class RE and class RE_Options. These classes do not implement any additional functionality than what is provided by libpcre.so.0.0.1 and libpcreposix.so.0.0.0. 3. Interfaces 3.1. Interface Stability PCRE is an Open Source project [1], developed and maintained external to SMI. PCRE makes no promises or guarantees about API or ABI compatibility between releases. Moreover, there have been several known cases of ABI breakage between different PCRE releases. 3.2. Imported interfaces libpcre.so.0.0.1 and libpcreposix.so.0.0.0 imports Standard C Library Interfaces. libpcrecpp.so.0.0.0 imports Standard C++ Library Interfaces, and depends on libCrun.so.1 and libCstd.so.1. No network library interfaces, or any other Solaris interfaces, are used by PCRE. NAME STABILITY NOTES C++ 5.3 Committed LSARC/2001/284 3.3. Exported interfaces NAME STABILITY NOTES SUNWpcre Uncommitted Package name /usr/bin/pcregrep Uncommitted Executable location /usr/bin/pcretest Uncommitted Executable location /usr/bin/pcre-config Uncommitted Executable location /usr/bin/64/pcregrep Uncommitted Executable location /usr/bin/64/pcretest Uncommitted Executable location /usr/bin/64/pcre-config Uncommitted Executable location /usr/lib/libpcre.so.0.0.1 Volatile Shared library /usr/lib/libpcre.so.0 Uncommitted Symbolic link /usr/lib/libpcre.so Volatile Symbolic link /usr/lib/64/libpcre.so.0.0.1 Volatile Shared library /usr/lib/64/libpcre.so.0 Uncommitted Symbolic link /usr/lib/64/libpcre.so Volatile Symbolic link /usr/lib/libpcreposix.so.0.0.0 Volatile Shared library /usr/lib/libpcreposix.so.0 Uncommitted Symbolic link /usr/lib/libpcre.so Volatile Symbolic link /usr/lib/64/libpcreposix.so.0.0.0 Volatile Shared library /usr/lib/64/libpcreposix.so.0 Uncommitted Symbolic link /usr/lib/64/libpcre.so Volatile Symbolic link /usr/lib/libpcrecpp.so.0.0.0 Volatile Shared library /usr/lib/libpcrecpp.so.0 Uncommitted Symbolic link /usr/lib/libpcrecpp.so Volatile Symbolic link /usr/lib/64/libpcrecpp.so.0.0.0 Volatile Shared library /usr/lib/64/libpcrecpp.so.0 Uncommitted Symbolic link /usr/lib/64/libpcrecpp.so Volatile Symbolic link /usr/share/man/man1/pcregrep.1 Uncommitted Manual Page /usr/share/man/man1/pcretest.1 Uncommitted Manual Page /usr/share/man/man3/pcre.3 Uncommitted Manual Page /usr/share/man/man3/pcre_compile.3 Uncommitted Manual Page /usr/share/man/man3/pcre_compile2.3 Uncommitted Manual Page /usr/share/man/man3/pcre_config.3 Uncommitted Manual Page /usr/share/man/man3/pcre_copy_named_substring.3 Uncommitted Manual Page /usr/share/man/man3/pcre_copy_substring.3 Uncommitted Manual Page /usr/share/man/man3/pcre_dfa_exec.3 Uncommitted Manual Page /usr/share/man/man3/pcre_exec.3 Uncommitted Manual Page /usr/share/man/man3/pcre_free_substring.3 Uncommitted Manual Page /usr/share/man/man3/pcre_free_substring_list.3 Uncommitted Manual Page /usr/share/man/man3/pcre_fullinfo.3 Uncommitted Manual Page /usr/share/man/man3/pcre_get_named_substring.3 Uncommitted Manual Page /usr/share/man/man3/pcre_get_stringnumber.3 Uncommitted Manual Page /usr/share/man/man3/pcre_get_stringtable_entries.3 Uncommitted Manual Page /usr/share/man/man3/pcre_get_substring.3 Uncommitted Manual Page /usr/share/man/man3/pcre_get_substring_list.3 Uncommitted Manual Page /usr/share/man/man3/pcre_info.3 Uncommitted Manual Page /usr/share/man/man3/pcre_maketables.3 Uncommitted Manual Page /usr/share/man/man3/pcre_refcount.3 Uncommitted Manual Page /usr/share/man/man3/pcre_study.3 Uncommitted Manual Page /usr/share/man/man3/pcre_version.3 Uncommitted Manual Page /usr/share/man/man3/pcreapi.3 Uncommitted Manual Page /usr/share/man/man3/pcrebuild.3 Uncommitted Manual Page /usr/share/man/man3/pcrecallout.3 Uncommitted Manual Page /usr/share/man/man3/pcrecompat.3 Uncommitted Manual Page /usr/share/man/man3/pcrecpp.3 Uncommitted Manual Page /usr/share/man/man3/pcrematching.3 Uncommitted Manual Page /usr/share/man/man3/pcrepartial.3 Uncommitted Manual Page /usr/share/man/man3/pcrepattern.3 Uncommitted Manual Page /usr/share/man/man3/pcreperform.3 Uncommitted Manual Page /usr/share/man/man3/pcreposix.3 Uncommitted Manual Page /usr/share/man/man3/pcreprecompile.3 Uncommitted Manual Page /usr/share/man/man3/pcresample.3 Uncommitted Manual Page /usr/share/man/man3/pcrestack.3 Uncommitted Manual Page 7. References [1] http://www.pcre.org/ [2] http://www.unix.org/version3/ieee_std.html [3] http://www.perl.com/doc/manual/html/pod/perlre.html