aboutsummaryrefslogtreecommitdiff
path: root/auto/lib/pcre
diff options
context:
space:
mode:
Diffstat (limited to 'auto/lib/pcre')
-rw-r--r--auto/lib/pcre/conf154
-rw-r--r--auto/lib/pcre/make152
2 files changed, 213 insertions, 93 deletions
diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf
index 5e3960fea..20c1cafbe 100644
--- a/auto/lib/pcre/conf
+++ b/auto/lib/pcre/conf
@@ -4,87 +4,62 @@
if [ $PCRE != NONE ]; then
- CORE_INCS="$CORE_INCS $PCRE"
- case "$NGX_CC_NAME" in
+ if [ -f $PCRE/src/pcre2.h.generic ]; then
- msvc | owc | bcc)
- have=NGX_PCRE . auto/have
- have=PCRE_STATIC . auto/have
- CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
- LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
- ;;
+ PCRE_LIBRARY=PCRE2
- icc)
- have=NGX_PCRE . auto/have
- CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
+ have=NGX_PCRE . auto/have
+ have=NGX_PCRE2 . auto/have
- LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ have=PCRE2_STATIC . auto/have
+ fi
- echo $ngx_n "checking for PCRE library ...$ngx_c"
+ CORE_INCS="$CORE_INCS $PCRE/src/"
+ CORE_DEPS="$CORE_DEPS $PCRE/src/pcre2.h"
- if [ -f $PCRE/pcre.h ]; then
- ngx_pcre_ver=`grep PCRE_MAJOR $PCRE/pcre.h \
- | sed -e 's/^.*PCRE_MAJOR.* \(.*\)$/\1/'`
+ case "$NGX_CC_NAME" in
- else if [ -f $PCRE/configure.in ]; then
- ngx_pcre_ver=`grep PCRE_MAJOR= $PCRE/configure.in \
- | sed -e 's/^.*=\(.*\)$/\1/'`
+ msvc)
+ LINK_DEPS="$LINK_DEPS $PCRE/src/pcre2-8.lib"
+ CORE_LIBS="$CORE_LIBS $PCRE/src/pcre2-8.lib"
+ ;;
- else
- ngx_pcre_ver=`grep pcre_major, $PCRE/configure.ac \
- | sed -e 's/^.*pcre_major,.*\[\(.*\)\].*$/\1/'`
- fi
- fi
+ *)
+ LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre2-8.a"
+ CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre2-8.a"
+ ;;
- echo " $ngx_pcre_ver major version found"
-
- # to allow -ipo optimization we link with the *.o but not library
-
- case "$ngx_pcre_ver" in
- 4|5)
- CORE_LIBS="$CORE_LIBS $PCRE/pcre.o"
- ;;
-
- 6)
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
- ;;
-
- *)
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
- CORE_LIBS="$CORE_LIBS $PCRE/pcre_newline.o"
- ;;
-
- esac
- ;;
-
- *)
- have=NGX_PCRE . auto/have
+ esac
- if [ "$NGX_PLATFORM" = win32 ]; then
- have=PCRE_STATIC . auto/have
- fi
+ else
- CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
- LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
- CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
- ;;
+ PCRE_LIBRARY=PCRE
- esac
+ have=NGX_PCRE . auto/have
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ have=PCRE_STATIC . auto/have
+ fi
+
+ CORE_INCS="$CORE_INCS $PCRE"
+ CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
+
+ case "$NGX_CC_NAME" in
+
+ msvc | owc | bcc)
+ LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
+ ;;
+
+ *)
+ LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
+ CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
+ ;;
+
+ esac
+ fi
if [ $PCRE_JIT = YES ]; then
have=NGX_HAVE_PCRE_JIT . auto/have
@@ -94,8 +69,48 @@ if [ $PCRE != NONE ]; then
else
if [ "$NGX_PLATFORM" != win32 ]; then
-
PCRE=NO
+ fi
+
+ if [ $PCRE = NO -a $PCRE2 != DISABLED ]; then
+
+ ngx_feature="PCRE2 library"
+ ngx_feature_name="NGX_PCRE2"
+ ngx_feature_run=no
+ ngx_feature_incs="#define PCRE2_CODE_UNIT_WIDTH 8
+ #include <pcre2.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lpcre2-8"
+ ngx_feature_test="pcre2_code *re;
+ re = pcre2_compile(NULL, 0, 0, NULL, NULL, NULL);
+ if (re == NULL) return 1"
+ . auto/feature
+
+ if [ $ngx_found = no ]; then
+
+ # pcre2-config
+
+ ngx_pcre2_prefix=`pcre2-config --prefix 2>/dev/null`
+
+ if [ -n "$ngx_pcre2_prefix" ]; then
+ ngx_feature="PCRE2 library in $ngx_pcre2_prefix"
+ ngx_feature_path=`pcre2-config --cflags \
+ | sed -n -e 's/.*-I *\([^ ][^ ]*\).*/\1/p'`
+ ngx_feature_libs=`pcre2-config --libs8`
+ . auto/feature
+ fi
+ fi
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_PCRE . auto/have
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ PCRE=YES
+ PCRE_LIBRARY=PCRE2
+ fi
+ fi
+
+ if [ $PCRE = NO ]; then
ngx_feature="PCRE library"
ngx_feature_name="NGX_PCRE"
@@ -171,6 +186,7 @@ else
CORE_INCS="$CORE_INCS $ngx_feature_path"
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
PCRE=YES
+ PCRE_LIBRARY=PCRE
fi
if [ $PCRE = YES ]; then
diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make
index 97c9f3ba0..839ef294b 100644
--- a/auto/lib/pcre/make
+++ b/auto/lib/pcre/make
@@ -3,36 +3,138 @@
# Copyright (C) Nginx, Inc.
-case "$NGX_CC_NAME" in
+if [ $PCRE_LIBRARY = PCRE2 ]; then
+
+ # PCRE2
+
+ if [ $NGX_CC_NAME = msvc ]; then
+
+ # With PCRE2, it is not possible to compile all sources.
+ # Since list of source files changes between versions, we
+ # test files which might not be present.
+
+ ngx_pcre_srcs="pcre2_auto_possess.c \
+ pcre2_chartables.c \
+ pcre2_compile.c \
+ pcre2_config.c \
+ pcre2_context.c \
+ pcre2_dfa_match.c \
+ pcre2_error.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_string_utils.c \
+ pcre2_study.c \
+ pcre2_substitute.c \
+ pcre2_substring.c \
+ pcre2_tables.c \
+ pcre2_ucd.c \
+ pcre2_valid_utf.c \
+ pcre2_xclass.c"
+
+ ngx_pcre_test="pcre2_convert.c \
+ pcre2_extuni.c \
+ pcre2_find_bracket.c \
+ pcre2_script_run.c \
+ pcre2_serialize.c"
+
+ for ngx_src in $ngx_pcre_test
+ do
+ if [ -f $PCRE/src/$ngx_src ]; then
+ ngx_pcre_srcs="$ngx_pcre_srcs $ngx_src"
+ fi
+ done
+
+ ngx_pcre_objs=`echo $ngx_pcre_srcs \
+ | sed -e "s#\([^ ]*\.\)c#\1$ngx_objext#g"`
+
+ ngx_pcre_srcs=`echo $ngx_pcre_srcs \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`
+ ngx_pcre_objs=`echo $ngx_pcre_objs \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+PCRE_CFLAGS = -O2 -Ob1 -Oi -Gs $LIBC $CPU_OPT
+PCRE_FLAGS = -DHAVE_CONFIG_H -DPCRE2_STATIC -DPCRE2_CODE_UNIT_WIDTH=8 \\
+ -DHAVE_MEMMOVE
+
+PCRE_SRCS = $ngx_pcre_srcs
+PCRE_OBJS = $ngx_pcre_objs
+
+$PCRE/src/pcre2.h:
+ cd $PCRE/src \\
+ && copy /y config.h.generic config.h \\
+ && copy /y pcre2.h.generic pcre2.h \\
+ && copy /y pcre2_chartables.c.dist pcre2_chartables.c
+
+$PCRE/src/pcre2-8.lib: $PCRE/src/pcre2.h $NGX_MAKEFILE
+ cd $PCRE/src \\
+ && cl -nologo -c \$(PCRE_CFLAGS) -I . \$(PCRE_FLAGS) \$(PCRE_SRCS) \\
+ && link -lib -out:pcre2-8.lib -verbose:lib \$(PCRE_OBJS)
- msvc)
- ngx_makefile=makefile.msvc
- ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
- ngx_pcre="PCRE=\"$PCRE\""
- ;;
+END
+
+ else
+
+ cat << END >> $NGX_MAKEFILE
- owc)
- ngx_makefile=makefile.owc
- ngx_opt="CPU_OPT=\"$CPU_OPT\""
- ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
- ;;
+$PCRE/src/pcre2.h: $PCRE/Makefile
+
+$PCRE/Makefile: $NGX_MAKEFILE
+ cd $PCRE \\
+ && if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
+ && CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
+ ./configure --disable-shared $PCRE_CONF_OPT
- bcc)
- ngx_makefile=makefile.bcc
- ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
- ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
- ;;
+$PCRE/.libs/libpcre2-8.a: $PCRE/Makefile
+ cd $PCRE \\
+ && \$(MAKE) libpcre2-8.la
- *)
- ngx_makefile=
- ;;
+END
-esac
+ fi
-if [ -n "$ngx_makefile" ]; then
+else
- cat << END >> $NGX_MAKEFILE
+ # PCRE
+
+ case "$NGX_CC_NAME" in
+
+ msvc)
+ ngx_makefile=makefile.msvc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
+ ngx_pcre="PCRE=\"$PCRE\""
+ ;;
+
+ owc)
+ ngx_makefile=makefile.owc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\""
+ ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ bcc)
+ ngx_makefile=makefile.bcc
+ ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
+ ngx_pcre=`echo \-DPCRE=\"$PCRE\" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ *)
+ ngx_makefile=
+ ;;
+
+ esac
+
+
+ if [ -n "$ngx_makefile" ]; then
+
+ cat << END >> $NGX_MAKEFILE
`echo "$PCRE/pcre.lib: $PCRE/pcre.h $NGX_MAKEFILE" \
| sed -e "s/\//$ngx_regex_dirsep/g"`
@@ -43,9 +145,9 @@ if [ -n "$ngx_makefile" ]; then
END
-else
+ else
- cat << END >> $NGX_MAKEFILE
+ cat << END >> $NGX_MAKEFILE
$PCRE/pcre.h: $PCRE/Makefile
@@ -61,4 +163,6 @@ $PCRE/.libs/libpcre.a: $PCRE/Makefile
END
+ fi
+
fi