You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2018/07/31 20:43:50 UTC

[trafficserver] 02/11: Enhances detection of luajit

This is an automated email from the ASF dual-hosted git repository.

zwoop pushed a commit to branch 8.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit de4798328a31630a5ae7695c7b09bbec563b10d1
Author: Randall Meyer <ra...@yahoo.com>
AuthorDate: Tue Jul 10 16:27:34 2018 -0700

    Enhances detection of luajit
    
    if --with-luajit is specified, it will be used, otherwise use pkg-config
    or look in /usr and /usr/local
    
    (cherry picked from commit ba93177dc5f8cc4a943b96b704170b5eba43ce91)
---
 build/luajit.m4                    | 176 +++++++++++++++++++++++++++++++++++++
 configure.ac                       |  44 +---------
 doc/admin-guide/plugins/lua.en.rst |   6 +-
 plugins/lua/Makefile.inc           |   2 +-
 src/traffic_server/Makefile.inc    |   4 +
 5 files changed, 187 insertions(+), 45 deletions(-)

diff --git a/build/luajit.m4 b/build/luajit.m4
new file mode 100644
index 0000000..6ca0251
--- /dev/null
+++ b/build/luajit.m4
@@ -0,0 +1,176 @@
+dnl -------------------------------------------------------- -*- autoconf -*-
+dnl Licensed to the Apache Software Foundation (ASF) under one or more
+dnl contributor license agreements.  See the NOTICE file distributed with
+dnl this work for additional information regarding copyright ownership.
+dnl The ASF licenses this file to You under the Apache License, Version 2.0
+dnl (the "License"); you may not use this file except in compliance with
+dnl the License.  You may obtain a copy of the License at
+dnl
+dnl     http://www.apache.org/licenses/LICENSE-2.0
+dnl
+dnl Unless required by applicable law or agreed to in writing, software
+dnl distributed under the License is distributed on an "AS IS" BASIS,
+dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+dnl See the License for the specific language governing permissions and
+dnl limitations under the License.
+
+dnl
+dnl luajit.m4: Trafficserver's luajit autoconf macros
+dnl
+
+dnl
+dnl TS_CHECK_LUAJIT: look for luajit libraries and headers
+dnl
+AC_DEFUN([TS_CHECK_LUAJIT], [
+has_luajit=0
+AC_ARG_WITH(luajit, [AC_HELP_STRING([--with-luajit=DIR], [use a specific luajit library])],
+[
+  if test "x$withval" != "xyes" && test "x$withval" != "x"; then
+    luajit_base_dir="$withval"
+    if test "$withval" != "no"; then
+      has_luajit=1
+
+      case "$withval" in
+      *":"*)
+        luajit_include="`echo $withval | sed -e 's/:.*$//'`"
+        luajit_ldflags="`echo $withval | sed -e 's/^.*://'`"
+        AC_MSG_CHECKING(checking for luajit includes in $luajit_include libs in $luajit_ldflags)
+        ;;
+      *)
+        # looking for versioned subdir
+        for version in 2.0 2.1 ; do
+            dir="$withval/include/luajit-$version"
+            AC_MSG_CHECKING(checking for luajit in $dir)
+            if test -d $dir; then
+                AC_MSG_RESULT([ok])
+                luajit_include=$dir
+                break
+            else
+                AC_MSG_RESULT([not found])
+            fi
+        done
+
+        if test "x$luajit_include" = "x"; then
+            AC_MSG_ERROR([*** could not find luajit include dir ***])
+        fi
+
+        luajit_ldflags="$withval/lib"
+        ;;
+      esac
+
+    fi
+  fi
+
+  if test -d $luajit_include && test -d $luajit_ldflags && test -f $luajit_include/luajit.h; then
+    AC_MSG_RESULT([ok])
+  else
+    AC_MSG_RESULT([not found])
+  fi
+
+if test "$has_luajit" != "0"; then
+  saved_ldflags=$LDFLAGS
+  saved_cppflags=$CPPFLAGS
+  luajit_have_headers=0
+  luajit_have_libs=0
+
+  TS_ADDTO(CPPFLAGS, [-I${luajit_include}])
+  if test "$luajit_base_dir" != "/usr"; then
+    TS_ADDTO(LDFLAGS, [-L${luajit_ldflags}])
+    TS_ADDTO_RPATH(${luajit_ldflags})
+  fi
+
+  AC_CHECK_LIB([luajit-5.1], luaopen_jit, [luajit_have_libs=1])
+  if test "$luajit_have_libs" == "1"; then
+    AC_CHECK_HEADERS(luajit.h, [luajit_have_headers=1])
+  fi
+
+  if test "$luajit_have_headers" == "1"; then
+    AC_SUBST([LUAJIT_LDFLAGS], ["-L${luajit_ldflags} -lluajit-5.1"])
+    AC_SUBST([LUAJIT_CPPFLAGS], [-I${luajit_include}])
+    enable_luajit=yes
+  else
+    has_luajit=0
+    AC_MSG_ERROR([*** luajit requested but either libluajit-5.1 or luajit.h cannot be found ***])
+  fi
+
+  CPPFLAGS=$saved_cppflags
+  LDFLAGS=$saved_ldflags
+fi
+],
+[
+# use pkg-config to search for it
+#
+
+PKG_CHECK_MODULES([LUAJIT], [luajit >= 2.0.4], [
+   AC_SUBST([LUAJIT_LDFLAGS], [$LUAJIT_LIBS])
+   AC_SUBST([LUAJIT_CPPFLAGS], [$LUAJIT_CFLAGS])
+   enable_luajit=yes
+],
+[
+# look in /usr and /usr/local for what we need
+#
+
+AC_MSG_CHECKING([for luajit location])
+  # looking for versioned subdir
+  for version in 2.0 2.1; do
+    for lua_prefix in /usr/local /usr; do
+      dir="$lua_prefix/include/luajit-$version"
+
+      if test -d $dir; then
+        luajit_base_dir=$lua_prefix
+        luajit_include=$dir
+        luajit_ldflags=$lua_prefix/lib
+        break
+      fi
+    done
+  done
+
+  if test "x$luajit_base_dir" = "x"; then
+    enable_luajit=no
+    AC_MSG_RESULT([not found])
+  else
+    enable_luajit=yes
+    AC_MSG_RESULT([$dir])
+  fi
+
+if test "$enable_luajit" != "no"; then
+  saved_ldflags=$LDFLAGS
+  saved_cppflags=$CPPFLAGS
+  luajit_have_headers=0
+  luajit_have_libs=0
+
+  TS_ADDTO(CPPFLAGS, [-I${luajit_include}])
+  if test "$luajit_base_dir" != "/usr"; then
+    TS_ADDTO(LDFLAGS, [-L${luajit_ldflags}])
+    TS_ADDTO_RPATH(${luajit_ldflags})
+  fi
+
+  AC_CHECK_LIB([luajit-5.1], luaopen_jit, [luajit_have_libs=1])
+  if test "$luajit_have_libs" == "1"; then
+    AC_CHECK_HEADERS(luajit.h, [luajit_have_headers=1])
+  fi
+
+  if test "$luajit_have_headers" == "1"; then
+    AC_SUBST([LUAJIT_LDFLAGS], ["-L${luajit_ldflags} -lluajit-5.1"])
+    AC_SUBST([LUAJIT_CPPFLAGS], [-I${luajit_include}])
+    enable_luajit=yes
+  else
+    has_luajit=0
+  fi
+
+  CPPFLAGS=$saved_cppflags
+  LDFLAGS=$saved_ldflags
+fi
+
+])
+])
+
+TS_ARG_ENABLE_VAR([has],[luajit])
+AM_CONDITIONAL([HAS_LUAJIT], [test 0 -ne $has_luajit])
+
+# On Darwin, LuaJIT requires magic link options for a program loading or running with LuaJIT,
+# otherwise it will crash in luaL_openlibs() at startup.  See http://luajit.org/install.html for more details
+AC_SUBST([LUAJIT_DARWIN_LDFLAGS], ["-Wl,-pagezero_size,10000 -Wl,-image_base,100000000"])
+AM_CONDITIONAL([IS_DARWIN], [test x$(uname) = xDarwin])
+
+])
diff --git a/configure.ac b/configure.ac
index a69743e..00cd405 100644
--- a/configure.ac
+++ b/configure.ac
@@ -348,18 +348,6 @@ AC_ARG_WITH([profiler],
 )
 AC_MSG_RESULT([$with_profiler])
 
-# System luajit
-AC_MSG_CHECKING([whether to enable luajit])
-AC_ARG_ENABLE([luajit],
-  [AS_HELP_STRING([--enable-luajit],[enable support for system-installed luajit])],
-  [enable_luajit=yes],
-  [enable_luajit=no]
-)
-AC_MSG_RESULT([$enable_luajit])
-TS_ARG_ENABLE_VAR([has],[luajit])
-AM_CONDITIONAL([HAS_LUAJIT], [test 0 -ne $has_luajit])
-
-
 # Disable all static library builds
 AC_DISABLE_STATIC
 
@@ -1232,35 +1220,6 @@ TS_CHECK_ZLIB
 TS_CHECK_LZMA
 
 #
-# System LuaJIT
-#
-
-if test "x$enable_luajit" == "xyes"; then
-    saveLIBS=$LIBS
-    LIBS=""
-    AC_CHECK_HEADER(lua.h, [],
-                    [LUAJIT_PKGCONFIG=1])
-    AC_CHECK_LIB(luajit-5.1, luaL_newstate, [],
-                 [LUAJIT_PKGCONFIG=1])
-    if test "x$LUAJIT_PKGCONFIG" != "x"; then
-        PKG_CHECK_MODULES([LUAJIT], [luajit < 2.1.0, luajit >= 2.0.0], [
-            AC_SUBST([LIBLUAJIT], [$LUAJIT_LIBS])
-            TS_ADDTO(AM_CPPFLAGS, [$LUAJIT_CFLAGS])
-            # On Darwin LuaJIT requires magic link options, otherwise it will crash in luaL_openlibs() at startup. See
-            # http://luajit.org/install.html.
-            case $host_os_def in
-            darwin)
-                LUAJIT_LDFLAGS="-Wl,-pagezero_size,10000 -Wl,-image_base,100000000"
-                ;;
-            esac
-        ], [AC_MSG_ERROR([*** luajit requested but either libluajit-5.1 or lua.h cannot be found ***])])
-    else
-        AC_SUBST([LIBLUAJIT], [$LIBS])
-    fi
-    LIBS=$saveLIBS
-fi
-
-#
 # Tcl macros provided by build/tcl.m4
 #
 # this will error out if tclConfig.sh is not found
@@ -1316,6 +1275,9 @@ fi
 # Check for optional brotli library
 TS_CHECK_BROTLI
 
+# Check for optional luajit library
+TS_CHECK_LUAJIT
+
 #
 # Enable experimental/uri_singing plugin
 # This is here, instead of above, because it needs to know if PCRE is available.
diff --git a/doc/admin-guide/plugins/lua.en.rst b/doc/admin-guide/plugins/lua.en.rst
index bf9eba3..57efc7b 100644
--- a/doc/admin-guide/plugins/lua.en.rst
+++ b/doc/admin-guide/plugins/lua.en.rst
@@ -68,13 +68,13 @@ Synopsis
 Installation
 ============
 
-This plugin is only built if LuaJIT (>2.0.4) is installed and the configure option
+This plugin is only built if LuaJIT (>2.0.4) is installed. The configure option
 
 ::
 
-    --enable-luajit
+    --with-luajit=<path to luajit prefix>
 
-is given at build time.
+can be used to specify a LuaJIT install. Otherwise, configure will use pkg-config to find a viable installation.
 
 Configuration
 =============
diff --git a/plugins/lua/Makefile.inc b/plugins/lua/Makefile.inc
index 954d284..adcdde5 100644
--- a/plugins/lua/Makefile.inc
+++ b/plugins/lua/Makefile.inc
@@ -15,7 +15,7 @@
 #  limitations under the License.
 
 lua_tslua_la_CPPFLAGS = $(AM_CPPFLAGS) $(LUAJIT_CPPFLAGS)
-lua_tslua_la_LDFLAGS = $(AM_LDFLAGS) $(LIBLUAJIT)
+lua_tslua_la_LDFLAGS = $(AM_LDFLAGS) $(LUAJIT_LDFLAGS)
 
 pkglib_LTLIBRARIES += lua/tslua.la
 
diff --git a/src/traffic_server/Makefile.inc b/src/traffic_server/Makefile.inc
index 4ae3687..804248f 100644
--- a/src/traffic_server/Makefile.inc
+++ b/src/traffic_server/Makefile.inc
@@ -95,3 +95,7 @@ traffic_server_traffic_server_LDADD += \
 	@OPENSSL_LIBS@ \
 	@YAMLCPP_LIBS@ \
 	-lm
+
+if IS_DARWIN
+traffic_server_traffic_server_LDADD += $(LUAJIT_DARWIN_LDFLAGS)
+endif