mirror of
https://github.com/nginx/nginx.git
synced 2024-12-11 17:59:00 +08:00
8ae9e7903f
On Mac OS X system toolchain by default prefers include files from /usr/local/include, but libraries from /usr/lib. This might result in various problems, in particular the one outlined below. If the PCRE library is installed into /usr/local/, this results in pcre.h being used from /usr/local/include (with PCRE_CONFIG_JIT defined), but libpcre from /usr/lib (as shipped with the OS, without pcre_free_study() symbol). As a result build fails as we use pcre_free_study() function if we try to compile with PCRE JIT support. Obvious workaround is to the root cause is to ask compiler to prefer library from /usr/local/lib via ./configure --with-ld-opt="-L/usr/local/lib". On the other hand, in any case it would be good to check if the function we are going to use is available, hence the change. See thread here for details: http://mailman.nginx.org/pipermail/nginx-devel/2012-December/003074.html Prodded by Piotr Sikora.
199 lines
5.7 KiB
Plaintext
199 lines
5.7 KiB
Plaintext
|
|
# Copyright (C) Igor Sysoev
|
|
# Copyright (C) Nginx, Inc.
|
|
|
|
|
|
if [ $PCRE != NONE ]; then
|
|
CORE_INCS="$CORE_INCS $PCRE"
|
|
|
|
case "$NGX_CC_NAME" in
|
|
|
|
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"
|
|
;;
|
|
|
|
icc* )
|
|
have=NGX_PCRE . auto/have
|
|
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
|
|
|
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
|
|
|
|
echo $ngx_n "checking for PCRE library ...$ngx_c"
|
|
|
|
if [ -f $PCRE/pcre.h ]; then
|
|
ngx_pcre_ver=`grep PCRE_MAJOR $PCRE/pcre.h \
|
|
| sed -e 's/^.*PCRE_MAJOR.* \(.*\)$/\1/'`
|
|
|
|
else if [ -f $PCRE/configure.in ]; then
|
|
ngx_pcre_ver=`grep PCRE_MAJOR= $PCRE/configure.in \
|
|
| sed -e 's/^.*=\(.*\)$/\1/'`
|
|
|
|
else
|
|
ngx_pcre_ver=`grep pcre_major, $PCRE/configure.ac \
|
|
| sed -e 's/^.*pcre_major,.*\[\(.*\)\].*$/\1/'`
|
|
fi
|
|
fi
|
|
|
|
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
|
|
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
|
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
|
|
CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
if [ $PCRE_JIT = YES ]; then
|
|
have=NGX_HAVE_PCRE_JIT . auto/have
|
|
PCRE_CONF_OPT="$PCRE_CONF_OPT --enable-jit"
|
|
fi
|
|
|
|
else
|
|
|
|
if [ "$NGX_PLATFORM" != win32 ]; then
|
|
|
|
PCRE=NO
|
|
|
|
ngx_feature="PCRE library"
|
|
ngx_feature_name="NGX_PCRE"
|
|
ngx_feature_run=no
|
|
ngx_feature_incs="#include <pcre.h>"
|
|
ngx_feature_path=
|
|
ngx_feature_libs="-lpcre"
|
|
ngx_feature_test="pcre *re;
|
|
re = pcre_compile(NULL, 0, NULL, 0, NULL);
|
|
if (re == NULL) return 1"
|
|
. auto/feature
|
|
|
|
if [ $ngx_found = no ]; then
|
|
|
|
# FreeBSD port
|
|
|
|
ngx_feature="PCRE library in /usr/local/"
|
|
ngx_feature_path="/usr/local/include"
|
|
|
|
if [ $NGX_RPATH = YES ]; then
|
|
ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lpcre"
|
|
else
|
|
ngx_feature_libs="-L/usr/local/lib -lpcre"
|
|
fi
|
|
|
|
. auto/feature
|
|
fi
|
|
|
|
if [ $ngx_found = no ]; then
|
|
|
|
# RedHat RPM, Solaris package
|
|
|
|
ngx_feature="PCRE library in /usr/include/pcre/"
|
|
ngx_feature_path="/usr/include/pcre"
|
|
ngx_feature_libs="-lpcre"
|
|
|
|
. auto/feature
|
|
fi
|
|
|
|
if [ $ngx_found = no ]; then
|
|
|
|
# NetBSD port
|
|
|
|
ngx_feature="PCRE library in /usr/pkg/"
|
|
ngx_feature_path="/usr/pkg/include"
|
|
|
|
if [ $NGX_RPATH = YES ]; then
|
|
ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lpcre"
|
|
else
|
|
ngx_feature_libs="-L/usr/pkg/lib -lpcre"
|
|
fi
|
|
|
|
. auto/feature
|
|
fi
|
|
|
|
if [ $ngx_found = no ]; then
|
|
|
|
# MacPorts
|
|
|
|
ngx_feature="PCRE library in /opt/local/"
|
|
ngx_feature_path="/opt/local/include"
|
|
|
|
if [ $NGX_RPATH = YES ]; then
|
|
ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lpcre"
|
|
else
|
|
ngx_feature_libs="-L/opt/local/lib -lpcre"
|
|
fi
|
|
|
|
. auto/feature
|
|
fi
|
|
|
|
if [ $ngx_found = yes ]; then
|
|
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
|
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
|
PCRE=YES
|
|
fi
|
|
|
|
if [ $PCRE = YES ]; then
|
|
ngx_feature="PCRE JIT support"
|
|
ngx_feature_name="NGX_HAVE_PCRE_JIT"
|
|
ngx_feature_test="int jit = 0;
|
|
pcre_free_study(NULL);
|
|
pcre_config(PCRE_CONFIG_JIT, &jit);
|
|
if (jit != 1) return 1;"
|
|
. auto/feature
|
|
|
|
if [ $ngx_found = yes ]; then
|
|
PCRE_JIT=YES
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
if [ $PCRE != YES ]; then
|
|
cat << END
|
|
|
|
$0: error: the HTTP rewrite module requires the PCRE library.
|
|
You can either disable the module by using --without-http_rewrite_module
|
|
option, or install the PCRE library into the system, or build the PCRE library
|
|
statically from the source with nginx by using --with-pcre=<path> option.
|
|
|
|
END
|
|
exit 1
|
|
fi
|
|
|
|
fi
|