Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert a config file to build a dynamic module #22

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
371 changes: 369 additions & 2 deletions config
Original file line number Diff line number Diff line change
@@ -1,3 +1,370 @@
ngx_addon_name=ngx_http_lua_upstream_module
HTTP_MODULES="$HTTP_MODULES ngx_http_lua_upstream_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/src/ngx_http_lua_upstream_module.c"
HTTP_LUA_UPSTREAM_SRCS="$ngx_addon_dir/src/ngx_http_lua_upstream_module.c"

ngx_feature="Lua library"
ngx_feature_libs="-llua -lm"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is too much. I don't think ngx_lua_upstream should link against Lua. It already depends on ngx_lua anyway.

ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs="#include <lauxlib.h>"
ngx_feature_path=
ngx_feature_test="#if LUA_VERSION_NUM != 501
# error unsupported Lua language version
#endif
(void) luaL_newstate();"
ngx_lua_opt_I=
ngx_lua_opt_L=

if [ -n "$LUAJIT_INC" -o -n "$LUAJIT_LIB" ]; then
# explicitly set LuaJIT paths

if [ "$NGX_PLATFORM" = win32 ]; then
ngx_feature="LuaJIT library in $LUAJIT_LIB and $LUAJIT_INC (win32)"
ngx_feature_path="$LUAJIT_INC"
ngx_lua_opt_I="-I$LUAJIT_INC"
ngx_lua_opt_L="-L$LUAJIT_LIB"

# ensure that our -I$LUAJIT_INC and -L$LUAJIT_LIB is at the first.
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
SAVED_NGX_TEST_LD_OPT="$NGX_TEST_LD_OPT"
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"

# LuaJIT's win32 build uses the library file name lua51.dll.
ngx_feature_libs="$ngx_lua_opt_L -llua51"

. auto/feature

# clean up
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
NGX_TEST_LD_OPT="$SAVED_NGX_TEST_LD_OPT"
else

# attempt to link with -ldl, static linking on Linux requires it.
ngx_feature="LuaJIT library in $LUAJIT_LIB and $LUAJIT_INC (specified by the LUAJIT_LIB and LUAJIT_INC env, with -ldl)"
ngx_feature_path="$LUAJIT_INC"
ngx_lua_opt_I="-I$LUAJIT_INC"
ngx_lua_opt_L="-L$LUAJIT_LIB"

# ensure that our -I$LUAJIT_INC and -L$LUAJIT_LIB is at the first.
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
SAVED_NGX_TEST_LD_OPT="$NGX_TEST_LD_OPT"
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"

if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 -lm -ldl"
else
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 -lm -ldl"
fi

. auto/feature

# clean up
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
NGX_TEST_LD_OPT="$SAVED_NGX_TEST_LD_OPT"

if [ $ngx_found = no ]; then
# retry without -ldl
ngx_feature="LuaJIT library in $LUAJIT_LIB and $LUAJIT_INC (specified by the LUAJIT_LIB and LUAJIT_INC env)"
ngx_feature_path="$LUAJIT_INC"
ngx_lua_opt_I="-I$LUAJIT_INC"
ngx_lua_opt_L="-L$LUAJIT_LIB"

# ensure that our -I$LUAJIT_INC and -L$LUAJIT_LIB is at the first.
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
SAVED_NGX_TEST_LD_OPT="$NGX_TEST_LD_OPT"
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"

if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R$LUAJIT_LIB $ngx_lua_opt_L -lluajit-5.1 -lm"
else
ngx_feature_libs="$ngx_lua_opt_L -lluajit-5.1 -lm"
fi

. auto/feature

# clean up
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
NGX_TEST_LD_OPT="$SAVED_NGX_TEST_LD_OPT"
fi
fi

if [ $ngx_found = no ]; then
cat << END
$0: error: ngx_http_lua_module requires the Lua or LuaJIT library and LUAJIT_LIB is defined as $LUAJIT_LIB and LUAJIT_INC (path for lua.h) $LUAJIT_INC, but we cannot find LuaJIT there.
END
exit 1
fi

case "$NGX_PLATFORM" in
Darwin:*)
case "$NGX_MACHINE" in
amd64 | x86_64 | i386)
echo "adding extra linking options needed by LuaJIT"
ngx_feature_libs="$ngx_feature_libs -pagezero_size 10000 -image_base 100000000"
;;

*)
;;
esac
;;

*)
;;
esac
else
if [ -n "$LUA_INC" -o -n "$LUA_LIB" ]; then
# explicitly set Lua paths
ngx_feature="Lua library in $LUA_LIB and $LUA_INC (specified by the LUA_LIB and LUA_INC env)"
ngx_feature_path="$LUA_INC"
ngx_lua_opt_I="-I$LUA_INC"
ngx_lua_opt_L="-L$LUA_LIB"

# ensure that our -I$LUA_INC and -L$LUA_LIB is at the first.
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
SAVED_NGX_TEST_LD_OPT="$NGX_TEST_LD_OPT"
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"

if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R$LUA_LIB $ngx_lua_opt_L -llua -lm -ldl"
else
ngx_feature_libs="$ngx_lua_opt_L -llua -lm -ldl"
fi

. auto/feature

# clean up
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
NGX_TEST_LD_OPT="$SAVED_NGX_TEST_LD_OPT"

if [ $ngx_found = no ]; then
# retry without -ldl

ngx_feature_path="$LUA_INC"
ngx_lua_opt_I="-I$LUA_INC"
ngx_lua_opt_L="-L$LUA_LIB"

# ensure that our -I$LUA_INC and -L$LUA_LIB is at the first.
SAVED_CC_TEST_FLAGS="$CC_TEST_FLAGS"
CC_TEST_FLAGS="$ngx_lua_opt_I $CC_TEST_FLAGS"
SAVED_NGX_TEST_LD_OPT="$NGX_TEST_LD_OPT"
NGX_TEST_LD_OPT="$ngx_lua_opt_L $NGX_TEST_LD_OPT"

if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R$LUA_LIB $ngx_lua_opt_L -llua -lm"
else
ngx_feature_libs="$ngx_lua_opt_L -llua -lm"
fi

. auto/feature

# clean up
CC_TEST_FLAGS="$SAVED_CC_TEST_FLAGS"
NGX_TEST_LD_OPT="$SAVED_NGX_TEST_LD_OPT"
fi

if [ $ngx_found = no ]; then
cat << END
$0: error: ngx_http_lua_module requires the Lua or LuaJIT library and LUA_LIB is defined as $LUA_LIB and LUA_INC (path for lua.h) is $LUA_INC, but we cannot find standard Lua there.
END
exit 1
fi
else
# auto-discovery
ngx_feature="Lua library"
ngx_feature_libs="-llua -lm"
. auto/feature

if [ $ngx_found = no ]; then
# OpenBSD-5.2
ngx_feature="Lua library in /usr/local/"
ngx_feature_path="/usr/local/include/lua-5.1"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -llua -lm"
else
ngx_feature_libs="-L/usr/local/lib -llua5.1 -lm"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# OpenBSD < 5.2
ngx_feature="Lua 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 -llua -lm"
else
ngx_feature_libs="-L/usr/local/lib -llua -lm"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# NetBSD
ngx_feature="Lua 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 -lm -llua"
else
ngx_feature_libs="-L/usr/pkg/lib -lm -llua"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# MacPorts
ngx_feature="Lua 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 -lm -llua"
else
ngx_feature_libs="-L/opt/local/lib -lm -llua"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# FreeBSD
ngx_feature="Lua library in /usr/local/*/lua51/"
ngx_feature_path="/usr/local/include/lua51"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/local/lib/lua51 -L/usr/local/lib/lua51 -llua -lm"
else
ngx_feature_libs="-L/usr/local/lib/lua51 -llua -lm"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# Debian
ngx_feature="Lua library in /usr/"
ngx_feature_path="/usr/include/lua5.1"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -llua5.1"
else
ngx_feature_libs="-L/usr/lib -lm -llua5.1"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# FreeBSD with luajit-2.0 from ports collection
ngx_feature="LuaJIT library in /usr/local/"
ngx_feature_path="/usr/local/include/luajit-2.0"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lluajit-5.1 -lm"
else
ngx_feature_libs="-L/usr/local/lib -lluajit-5.1 -lm"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# Gentoo with LuaJIT-2.0, try with -ldl
ngx_feature="LuaJIT library in /usr/"
ngx_feature_path="/usr/include/luajit-2.0"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -lluajit-5.1 -ldl"
else
ngx_feature_libs="-L/usr/lib -lm -lluajit-5.1 -ldl"
fi
. auto/feature
fi

if [ $ngx_found = no ]; then
# Gentoo with LuaJIT 2.0
ngx_feature="LuaJIT library in /usr/"
ngx_feature_path="/usr/include/luajit-2.0"
if [ $NGX_RPATH = YES ]; then
ngx_feature_libs="-R/usr/lib -L/usr/lib -lm -lluajit-5.1"
else
ngx_feature_libs="-L/usr/lib -lm -lluajit-5.1"
fi
. auto/feature
fi
fi
fi

ngx_module_incs=
ngx_module_libs=

if [ $ngx_found = yes ]; then
# this is a hack to persuade nginx's build system to favor
# the paths set by our user environments:
CFLAGS="$ngx_lua_opt_I $CFLAGS"
NGX_LD_OPT="$ngx_lua_opt_L $NGX_LD_OPT"

ngx_module_incs="$ngx_module_incs $ngx_feature_path"
ngx_module_libs="$ngx_module_libs $ngx_feature_libs"
else
cat << END
$0: error: ngx_http_lua_module requires the Lua library.
END
exit 1
fi

CFLAGS="$CFLAGS -DNDK_SET_VAR"

ngx_feature="export symbols by default (-E)"
ngx_feature_libs="-Wl,-E"
ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs="#include <stdio.h>"
ngx_feature_path=
ngx_feature_test='printf("hello");'

. auto/feature

if [ $ngx_found = yes ]; then
CORE_LIBS="-Wl,-E $CORE_LIBS"
fi

# for Cygwin
ngx_feature="export symbols by default (--export-all-symbols)"
ngx_feature_libs="-Wl,--export-all-symbols"
ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs="#include <stdio.h>"
ngx_feature_path=
ngx_feature_test='printf("hello");'

. auto/feature

if [ $ngx_found = yes ]; then
CORE_LIBS="-Wl,--export-all-symbols $CORE_LIBS"
fi

NGX_DTRACE_PROVIDERS="$NGX_DTRACE_PROVIDERS $ngx_addon_dir/dtrace/ngx_lua_provider.d"
NGX_TAPSET_SRCS="$NGX_TAPSET_SRCS $ngx_addon_dir/tapset/ngx_lua.stp"

USE_MD5=YES
USE_SHA1=YES

CORE_INCS="$CORE_INCS $ngx_addon_dir/src/api"

ngx_feature="SO_PASSCRED"
ngx_feature_libs=
ngx_feature_name="NGX_HTTP_LUA_HAVE_SO_PASSCRED"
ngx_feature_run=no
ngx_feature_incs="#include <sys/types.h>
#include <sys/socket.h>"
ngx_feature_path=
ngx_feature_test='setsockopt(1, SOL_SOCKET, SO_PASSCRED, NULL, 0);'

. auto/feature

if test -n "$ngx_module_link"; then
ngx_module_type=HTTP
ngx_module_name=$ngx_addon_name
ngx_module_srcs="$HTTP_LUA_UPSTREAM_SRCS"

. auto/module
else
HTTP_MODULES="$HTTP_MODULES $ngx_addon_name"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $HTTP_LUA_UPSTREAM_SRCS"

CORE_INCS="$CORE_INCS $ngx_module_incs"
CORE_LIBS="$CORE_LIBS $ngx_module_libs"
fi