Skip to content

Commit 315330a

Browse files
committed
bugfix: config: ensured LuaJIT FFI check and static PCRE builds succeed on all platforms.
- fix the LuaJIT FFI check (tested on Linux and Darwin) - fix static libpcre builds on Darwin - ensure previous config scripts do not make the LuaJIT check fail
1 parent 2a19073 commit 315330a

File tree

1 file changed

+52
-43
lines changed

1 file changed

+52
-43
lines changed

config

+52-43
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
ngx_lua_opt_I=
22
ngx_lua_opt_L=
3+
luajit_ld_opt=
4+
5+
ngx_feature_name=
6+
ngx_feature_run=no
7+
ngx_feature_incs=
8+
ngx_feature_test=
39

410
if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
511
# explicitly set LuaJIT paths
@@ -30,6 +36,7 @@ if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
3036
ngx_feature_path="$LUAJIT_INC"
3137
ngx_lua_opt_I="-I$LUAJIT_INC"
3238
ngx_lua_opt_L="-L$LUAJIT_LIB"
39+
luajit_ld_opt="-lm -ldl"
3340

3441
# ensure that -I$LUAJIT_INC and -L$LUAJIT_LIB come first
3542
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
@@ -38,9 +45,9 @@ if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
3845
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"
3946

4047
if [ $NGX_RPATH = YES ]; then
41-
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 -lm -ldl"
48+
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 $luajit_ld_opt"
4249
else
43-
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 -lm -ldl"
50+
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 $luajit_ld_opt"
4451
fi
4552

4653
. auto/feature
@@ -55,6 +62,7 @@ if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
5562
ngx_feature_path="$LUAJIT_INC"
5663
ngx_lua_opt_I="-I$LUAJIT_INC"
5764
ngx_lua_opt_L="-L$LUAJIT_LIB"
65+
luajit_ld_opt="-lm"
5866

5967
# ensure that -I$LUAJIT_INC and -L$LUAJIT_LIB come first
6068
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
@@ -63,9 +71,9 @@ if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
6371
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"
6472

6573
if [ $NGX_RPATH = YES ]; then
66-
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 -lm"
74+
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 $luajit_ld_opt"
6775
else
68-
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 -lm"
76+
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 $luajit_ld_opt"
6977
fi
7078

7179
. auto/feature
@@ -88,6 +96,7 @@ END
8896
case "$NGX_MACHINE" in
8997
amd64 | x86_64 | i386)
9098
echo "adding extra linking options needed by LuaJIT on $NGX_MACHINE"
99+
luajit_ld_opt="$luajit_ld_opt -pagezero_size 10000 -image_base 100000000"
91100
ngx_feature_libs="$ngx_feature_libs -pagezero_size 10000 -image_base 100000000"
92101
;;
93102

@@ -105,6 +114,8 @@ else
105114
# FreeBSD with luajit-2.0 from ports collection
106115
ngx_feature="LuaJIT library in /usr/local/"
107116
ngx_feature_path="/usr/local/include/luajit-2.0"
117+
luajit_ld_opt="-lm"
118+
LUAJIT_LIB="/usr/local/lib"
108119
if [ $NGX_RPATH = YES ]; then
109120
ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lluajit-5.1 -lm"
110121
else
@@ -117,6 +128,8 @@ else
117128
# Gentoo with LuaJIT-2.0, try with -ldl
118129
ngx_feature="LuaJIT library in /usr/"
119130
ngx_feature_path="/usr/include/luajit-2.0"
131+
luajit_ld_opt="-lm -ldl"
132+
LUAJIT_LIB="/usr/lib"
120133
if [ $NGX_RPATH = YES ]; then
121134
ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -lluajit-5.1 -ldl"
122135
else
@@ -129,6 +142,8 @@ else
129142
# Gentoo with LuaJIT 2.0
130143
ngx_feature="LuaJIT library in /usr/"
131144
ngx_feature_path="/usr/include/luajit-2.0"
145+
luajit_ld_opt="-lm"
146+
LUAJIT_LIB="/usr/lib"
132147
if [ $NGX_RPATH = YES ]; then
133148
ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -lluajit-5.1"
134149
else
@@ -159,15 +174,11 @@ fi
159174
# ----------------------------------------
160175

161176
ngx_feature="LuaJIT 2.x"
162-
ngx_feature_name=
163177
ngx_feature_run=no
164178
ngx_feature_incs="#include <luajit.h>"
165-
ngx_feature_path=
166179
ngx_feature_test='#if !defined(LUAJIT_VERSION_NUM) || (LUAJIT_VERSION_NUM < 20000)
167180
# error unsupported LuaJIT version
168181
#endif'
169-
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
170-
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
171182

172183
. auto/feature
173184

@@ -178,22 +189,17 @@ END
178189
exit 1
179190
fi
180191

181-
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
182-
183192
# ----------------------------------------
184193

185194
ngx_feature="LuaJIT has FFI"
186-
ngx_feature_name=
195+
ngx_feature_libs="$LUAJIT_LIB/libluajit-5.1.a $luajit_ld_opt"
187196
ngx_feature_run=yes
188197
ngx_feature_incs="#include <lualib.h>
189198
#include <lauxlib.h>
190199
#include <assert.h>"
191-
ngx_feature_path=
192-
ngx_feature_test='lua_State *L = luaL_newstate();
200+
ngx_feature_test="lua_State *L = luaL_newstate();
193201
assert(L != NULL);
194-
luaopen_ffi(L);'
195-
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
196-
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
202+
luaopen_ffi(L);"
197203

198204
. auto/feature
199205

@@ -204,8 +210,6 @@ END
204210
exit 1
205211
fi
206212

207-
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
208-
209213
# ----------------------------------------
210214

211215
ngx_addon_name=ngx_http_lua_module
@@ -468,36 +472,41 @@ fi
468472

469473
# ----------------------------------------
470474

471-
if [ $PCRE != NO -a $PCRE != YES ]; then
472-
# force pcre_version symbol to be undefined when PCRE is statically linked
473-
ngx_feature="force undefined symbols (--undefined)"
474-
ngx_feature_libs="-Wl,--undefined=printf"
475-
ngx_feature_name=
476-
ngx_feature_run=no
477-
ngx_feature_incs="#include <stdio.h>"
478-
ngx_feature_path=
479-
ngx_feature_test='printf("hello");'
475+
if [ $USE_PCRE = YES -o $PCRE != NONE ] && [ $PCRE != NO -a $PCRE != YES ]; then
476+
# force pcre_version symbol to be required when PCRE is statically linked
477+
case "$NGX_PLATFORM" in
478+
Darwin:*)
479+
ngx_feature="require defined symbols (-u)"
480+
ngx_feature_name=
481+
ngx_feature_path=
482+
ngx_feature_libs="-Wl,-u,_strerror"
483+
ngx_feature_run=no
484+
ngx_feature_incs="#include <stdio.h>"
485+
ngx_feature_test='printf("hello");'
480486

481-
. auto/feature
487+
. auto/feature
482488

483-
if [ $ngx_found = yes ]; then
484-
CORE_LIBS="$CORE_LIBS -Wl,--undefined=pcre_version"
485-
fi
489+
if [ $ngx_found = yes ]; then
490+
CORE_LIBS="-Wl,-u,_pcre_version $CORE_LIBS"
491+
fi
492+
;;
486493

487-
# for LLVM ld (Darwin)
488-
ngx_feature="force undefined symbols (-all_load -U)"
489-
ngx_feature_libs="-all_load -U printf"
490-
ngx_feature_name=
491-
ngx_feature_run=no
492-
ngx_feature_incs="#include <stdio.h>"
493-
ngx_feature_path=
494-
ngx_feature_test='printf("hello");'
494+
*)
495+
ngx_feature="require defined symbols (--require-defined)"
496+
ngx_feature_name=
497+
ngx_feature_path=
498+
ngx_feature_libs="-Wl,--require-defined=strerror"
499+
ngx_feature_run=no
500+
ngx_feature_incs="#include <stdio.h>"
501+
ngx_feature_test='printf("hello");'
495502

496-
. auto/feature
503+
. auto/feature
497504

498-
if [ $ngx_found = yes ]; then
499-
CORE_LIBS="$CORE_LIBS -all_load -U pcre_version"
500-
fi
505+
if [ $ngx_found = yes ]; then
506+
CORE_LIBS="-Wl,--require-defined=pcre_version $CORE_LIBS"
507+
fi
508+
;;
509+
esac
501510
fi
502511

503512
# ----------------------------------------

0 commit comments

Comments
 (0)