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


Reply via email to