Including PCRE with Solaris
Stefan Teleman <Stefan.Teleman at Sun.COM>
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/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/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/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/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.
3.3. Exported interfaces
NAME STABILITY NOTES
SUNWpcre Uncommitted Package name
/usr/bin/pcregrep Uncommitted Executable location
/usr/bin/pcretest Uncommitted Executable location
/usr/lib/libpcre.so.0.0.1 Uncommitted Shared library
/usr/lib/libpcre.so.0 Uncommitted Symbolic link
/usr/lib/libpcre.so Uncommitted Symbolic link
/usr/lib/libpcreposix.so.0.0.0 Uncommitted Shared library
/usr/lib/libpcreposix.so.0 Uncommitted Symbolic link
/usr/lib/libpcre.so Uncommitted Symbolic link
/usr/lib/libpcrecpp.so.0.0.0 Uncommitted Shared library
/usr/lib/libpcrecpp.so.0 Uncommitted Symbolic link
/usr/lib/libpcrecpp.so Uncommitted 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.3Uncommitted 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
--
Stefan Teleman
Sun Microsystems, Inc.
Stefan.Teleman at Sun.COM