From 29487f805ded86cca7dcf8fb80eea328d00b7f87 Mon Sep 17 00:00:00 2001 From: Rick Bird Date: Wed, 27 Apr 2011 20:58:31 -0400 Subject: [PATCH] Added automatic lua detection. IssueID #240 --- acinclude.m4 | 1 + config.h.in | 6 ++ configure.ac | 10 +- m4/ax_lua.m4 | 267 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 276 insertions(+), 8 deletions(-) create mode 100644 m4/ax_lua.m4 diff --git a/acinclude.m4 b/acinclude.m4 index eaf088d..9d29bfc 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -11,6 +11,7 @@ m4_include(m4/snprintf.m4) # this is deprecated use ax_c_check_flag instead # m4_include(m4/gcc_option.m4) m4_include(m4/ax_c_check_flag.m4) +m4_include(m4/ax_lua.m4) m4_include(m4/ax_ld_check_flag.m4) m4_include(m4/ax_check_openssl.m4) diff --git a/config.h.in b/config.h.in index 636bfe3..e054162 100644 --- a/config.h.in +++ b/config.h.in @@ -176,6 +176,12 @@ /* Define to 1 if the system has the type `long long int'. */ #undef HAVE_LONG_LONG_INT +/* Define to 1 if you have the header file. */ +#undef HAVE_LUALIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_LUA_H + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H diff --git a/configure.ac b/configure.ac index 2bc16bc..11a94b2 100644 --- a/configure.ac +++ b/configure.ac @@ -37,7 +37,6 @@ AC_PROG_INSTALL AC_PROG_LN_S AC_PATH_PROG(MAKE, make) - AX_WITH_PERL if test "${PERL+set}" != "set"; then AC_MSG_ERROR([perl is required to build and run CobraMUSH]) @@ -202,13 +201,8 @@ AC_CHECK_HEADER([ltdl.h], )], AC_MSG_ERROR([Advise your server admin to install libltdl]) ) -AC_CHECK_HEADER([lua5.1/lua.h], - [AC_CHECK_LIB([lua5.1], [lua_close], - [LIBLUA=-llua5.1], - AC_MSG_ERROR([No lua found on your system.]) - )], - AC_MSG_ERROR([No lua found on your system.]) - ) + +AX_FIND_LUA() AC_SUBST([LIBLTDL]) AC_SUBST([LIBLUA]) diff --git a/m4/ax_lua.m4 b/m4/ax_lua.m4 new file mode 100644 index 0000000..f688ec3 --- /dev/null +++ b/m4/ax_lua.m4 @@ -0,0 +1,267 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_lua.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_LUA +# AX_PROG_LUA [(MIN-VERSION, [TOO-BIG-VERSION])] +# AX_LUA_VERSION (MIN-VERSION, [TOO-BIG-VERSION]) +# AX_LUA_HEADERS +# AX_LUA_HEADERS_VERSION (MIN-VERSION, [TOO-BIG-VERSION]) +# AX_LUA_LIBS +# AX_LUA_READLINE +# +# DESCRIPTION +# +# Detect Lua interpreter, headers and libraries, optionally enforcing a +# particular range of versions. If only one version is given, then exactly +# this version is required. +# +# AX_WITH_LUA searches for a Lua interpreter and defines LUA if found. +# +# AX_PROG_LUA searches for a Lua interpreter in the given version range, +# if any, and defines LUA if found, or stops with an error if not. +# +# AX_LUA_VERSION checks that the version of Lua is at least MIN-VERSION +# and less than TOO-BIG-VERSION, if given. +# +# AX_LUA_HEADERS searches for Lua headers and defines HAVE_LUA_H and +# HAVE_LUALIB_H if found, and defines LUA_INCLUDE to the preprocessor +# flags needed, if any. +# +# AX_LUA_HEADERS_VERSION checks that the Lua headers' version is at least +# MIN-VERSION, and less than TOO-BIG-VERSION, if given. +# +# AX_LUA_LIBS searches for Lua libraries and defines LUA_LIB if found. +# +# AX_LUA_READLINE configures Lua to be built with readline support, if +# available. This macro requires AX_LIB_READLINE. +# +# Versions are specified as three-digit integers whose first digit is the +# major version and last two are the minor version (the same format as +# LUA_VERSION_NUM in lua.h); e.g. 501 for Lua 5.1. The revision (e.g. the +# "3" in "5.1.3") is ignored. +# +# The following options are added by these macros: +# +# --with-lua-suffix=ARG Lua binaries and library files are +# suffixed with ARG. +# +# LICENSE +# +# Copyright (c) 2011 Reuben Thomas +# Copyright (c) 2009 Matthieu Moy +# Copyright (c) 2009 Tom Payne +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 14 + +dnl Helper function from previous metaconf methods +dnl + AC_DEFUN([AX_CHECK_LOCAL_LUA], + [ + AC_MSG_CHECKING([Looking for lua in lua5.1 or lua-5.1.4]) + lua_myincs="lua5.1 lua-5.1.4" + lua_otherincs="" + lua_thisincl="" + for lua_thisincl in $myincs; do + if test -r "`pwd`/$lua_thisincl/src/lua.h"; then + lua_h_path="`pwd`/$lua_thisincl/src" + elif test -r "`pwd`/$lua_thisincl/lua.h"; then + lua_h_path="`pwd`/$lua_thisincl" + else + lua_otherincs="$lua_otherincs $thisincl $thisincl/src" + fi + done + if test -r "$lua_h_path" ; then + AC_MSG_RESULT([found at $lua_h_path]) + AC_MSG_CHECKING([Checking for local lua lib]) + if test -f "$lua_h_path/liblua.a"; then + AC_MSG_RESULT([found]) + lua_ldflags="-L$lua_h_path" + lua_libs="$libs" + else + AC_MSG_NOTICE([Could not locate local LUA library.]) + AC_MSG_ERROR([Either install LUA development global libraries or compile your local LUA installation]) + fi + fi + ]) + +AC_DEFUN([AX_FIND_LUA],[ +dnl First check if its int he normal spot.. /usr/include.. If it is.. forget the rest + AC_MSG_CHECKING([for lua.h in /usr/include..]) + if test -f "/usr/include/lua.h"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([Cheking other possible global loations...]) + lua_myincs="/opt/ports/include /usr/include/lua5.1" + for thisincl in $lua_myincs + do + AC_MSG_CHECKING([for lueader header in $thisincl]) + if test -f "$thisincl/lua.h" + then + lua_h_path="$thisincl" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + done + fi + if test -z "$lua_h_path"; then + AC_MSG_NOTICE([Unable to find global lua.h.]) + AX_CHECK_LOCAL_LUA() + fi + AC_SUBST([lua_h_path]) + dnl Now Lets look for our library + LDFLAGS="$LDFLAGS $lua_ldflags" + CFLAGS="$CFLAGS -I$lua_h_path" + AC_CHECK_LIB([lua5.1], [lua_call], , AC_MSG_ERROR([CobraMUSH requires lua libraries.])) +]) + +dnl Helper function to declare extra options +AC_DEFUN([_AX_LUA_OPTS], + [AC_ARG_WITH([lua-suffix], + [AS_HELP_STRING([--with-lua-suffix=ARG], + [Lua binary and library files are suffixed with ARG])])])dnl + +AC_DEFUN([AX_WITH_LUA], + [_AX_LUA_OPTS + if test "x$LUA" = x; then + AC_PATH_PROG(LUA, lua$with_lua_suffix) + fi])dnl + +AC_DEFUN([AX_PROG_LUA], + [lua_min_version=$1 + lua_max_version=$2 + AX_WITH_LUA + if test -z "$LUA"; then + AC_MSG_FAILURE([Lua not found]) + fi + if test -n "$lua_min_version"; then + AX_LUA_VERSION($lua_min_version, $lua_max_version) + fi + AC_SUBST(LUA)])dnl + +dnl Helper function to parse minimum & maximum versions +AC_DEFUN([_AX_LUA_VERSIONS], + [lua_min_version=$1 + lua_max_version=$2 + if test "x$lua_min_version" = x; then + lua_min_version=0 + fi + if test "x$lua_max_version" = x; then + lua_max_version=$(($lua_min_version + 1)) + fi]) + +AC_DEFUN([AX_LUA_VERSION], + [_AX_LUA_OPTS + _AX_LUA_VERSIONS($1, $2) + AC_MSG_CHECKING([Lua version is in range $1 <= v < $2]) + if test "x$LUA" != x; then + lua_text_version=$(LUA_INIT= $LUA -e 'print(_VERSION)' 2>&1 | cut -d' ' -f2) + case $lua_text_version in + 5.2*) + lua_version=502 + ;; + 5.1*) + lua_version=501 + ;; + 5.0*) + lua_version=500 + ;; + 4.0*) + lua_version=400 + ;; + *) + lua_version=-1 + ;; + esac + if test $lua_version -ge "$lua_min_version" && test $lua_version -lt "$lua_max_version"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([Lua version not in desired range.]) + fi + else + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([Lua version not in desired range.]) + fi])dnl + +AC_DEFUN([AX_LUA_HEADERS], + [_AX_LUA_OPTS + LUA_OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $LUA_INCLUDE" + AC_CHECK_HEADERS([lua.h lualib.h]) + CPPFLAGS="$LUA_OLD_CPPFLAGS"] + )dnl + +dnl Finder header location and place it in LUA_HEADER_PATH + +AC_DEFUN([AX_LUA_LIBS], + [_AX_LUA_OPTS + AC_CHECK_LIB([m], [exp], [lua_extra_libs="$lua_extra_libs -lm"], []) + AC_CHECK_LIB([dl], [dlopen], [lua_extra_libs="$lua_extra_libs -ldl"], []) + AC_CHECK_LIB([lua$with_lua_suffix], + [lua_call], + [LUA_LIB="$LUA_LIB -llua$with_lua_suffix $lua_extra_libs"], + [], + [$LUA_LIB $lua_extra_libs])])dnl + +AC_DEFUN([AX_LUA_HEADERS_VERSION], + [_AX_LUA_OPTS + _AX_LUA_VERSIONS($1, $2) + AC_MSG_CHECKING([lua.h version is in range $1 <= v < $2]) + LUA_OLD_LIBS="$LIBS" + LIBS="$LIBS $LUA_LIB" + LUA_OLD_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $LUA_INCLUDE" + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include +#include +#include +int main() +{ + printf("(found %s, %d)... ", LUA_VERSION, LUA_VERSION_NUM); + if (LUA_VERSION_NUM >= $lua_min_version && LUA_VERSION_NUM < $lua_max_version) + exit(EXIT_SUCCESS); + exit(EXIT_FAILURE); +} +]])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_FAILURE([lua.h version not in desired range])]) + LIBS="$LUA_OLD_LIBS" + CPPFLAGS="$LUA_OLD_CPPFLAGS"])dnl + +AC_DEFUN([AX_LUA_READLINE], + [AX_LIB_READLINE + if test -n "$ac_cv_header_readline_readline_h" && test -n "$ac_cv_header_readline_history_h"; then + LUA_LIBS_CFLAGS="-DLUA_USE_READLINE $LUA_LIBS_CFLAGS" + fi])dnl -- 2.30.2