blob: 155349116e3df4f8820f43be900dcfae413b4b95 [file] [log] [blame]
Jens Geyer468e63b2015-02-08 14:43:15 +01001# ===========================================================================
2# http://www.gnu.org/software/autoconf-archive/ax_lua.html
3# ===========================================================================
4#
5# SYNOPSIS
6#
7# AX_PROG_LUA[([MINIMUM-VERSION], [TOO-BIG-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
8# AX_LUA_HEADERS[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
9# AX_LUA_LIBS[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
10# AX_LUA_READLINE[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
11#
12# DESCRIPTION
13#
14# Detect a Lua interpreter, optionally specifying a minimum and maximum
15# version number. Set up important Lua paths, such as the directories in
16# which to install scripts and modules (shared libraries).
17#
18# Also detect Lua headers and libraries. The Lua version contained in the
19# header is checked to match the Lua interpreter version exactly. When
20# searching for Lua libraries, the version number is used as a suffix.
21# This is done with the goal of supporting multiple Lua installs (5.1 and
22# 5.2 side-by-side).
23#
24# A note on compatibility with previous versions: This file has been
25# mostly rewritten for serial 18. Most developers should be able to use
26# these macros without needing to modify configure.ac. Care has been taken
27# to preserve each macro's behavior, but there are some differences:
28#
29# 1) AX_WITH_LUA is deprecated; it now expands to the exact same thing as
30# AX_PROG_LUA with no arguments.
31#
32# 2) AX_LUA_HEADERS now checks that the version number defined in lua.h
33# matches the interpreter version. AX_LUA_HEADERS_VERSION is therefore
34# unnecessary, so it is deprecated and does not expand to anything.
35#
36# 3) The configure flag --with-lua-suffix no longer exists; the user
37# should instead specify the LUA precious variable on the command line.
38# See the AX_PROG_LUA description for details.
39#
40# Please read the macro descriptions below for more information.
41#
42# This file was inspired by Andrew Dalke's and James Henstridge's
43# python.m4 and Tom Payne's, Matthieu Moy's, and Reuben Thomas's ax_lua.m4
44# (serial 17). Basically, this file is a mash-up of those two files. I
45# like to think it combines the best of the two!
46#
47# AX_PROG_LUA: Search for the Lua interpreter, and set up important Lua
48# paths. Adds precious variable LUA, which may contain the path of the Lua
49# interpreter. If LUA is blank, the user's path is searched for an
50# suitable interpreter.
51#
52# If MINIMUM-VERSION is supplied, then only Lua interpreters with a
53# version number greater or equal to MINIMUM-VERSION will be accepted. If
54# TOO-BIG- VERSION is also supplied, then only Lua interpreters with a
55# version number greater or equal to MINIMUM-VERSION and less than
56# TOO-BIG-VERSION will be accepted.
57#
58# The Lua version number, LUA_VERSION, is found from the interpreter, and
59# substituted. LUA_PLATFORM is also found, but not currently supported (no
60# standard representation).
61#
62# Finally, the macro finds four paths:
63#
64# luadir Directory to install Lua scripts.
65# pkgluadir $luadir/$PACKAGE
66# luaexecdir Directory to install Lua modules.
67# pkgluaexecdir $luaexecdir/$PACKAGE
68#
69# These paths a found based on $prefix, $exec_prefix, Lua's package.path,
70# and package.cpath. The first path of package.path beginning with $prefix
71# is selected as luadir. The first path of package.cpath beginning with
72# $exec_prefix is used as luaexecdir. This should work on all reasonable
73# Lua installations. If a path cannot be determined, a default path is
74# used. Of course, the user can override these later when invoking make.
75#
76# luadir Default: $prefix/share/lua/$LUA_VERSION
77# luaexecdir Default: $exec_prefix/lib/lua/$LUA_VERSION
78#
79# These directories can be used by Automake as install destinations. The
80# variable name minus 'dir' needs to be used as a prefix to the
81# appropriate Automake primary, e.g. lua_SCRIPS or luaexec_LIBRARIES.
82#
83# If an acceptable Lua interpreter is found, then ACTION-IF-FOUND is
84# performed, otherwise ACTION-IF-NOT-FOUND is preformed. If ACTION-IF-NOT-
85# FOUND is blank, then it will default to printing an error. To prevent
86# the default behavior, give ':' as an action.
87#
88# AX_LUA_HEADERS: Search for Lua headers. Requires that AX_PROG_LUA be
89# expanded before this macro. Adds precious variable LUA_INCLUDE, which
90# may contain Lua specific include flags, e.g. -I/usr/include/lua5.1. If
91# LUA_INCLUDE is blank, then this macro will attempt to find suitable
92# flags.
93#
94# LUA_INCLUDE can be used by Automake to compile Lua modules or
95# executables with embedded interpreters. The *_CPPFLAGS variables should
96# be used for this purpose, e.g. myprog_CPPFLAGS = $(LUA_INCLUDE).
97#
98# This macro searches for the header lua.h (and others). The search is
99# performed with a combination of CPPFLAGS, CPATH, etc, and LUA_INCLUDE.
100# If the search is unsuccessful, then some common directories are tried.
101# If the headers are then found, then LUA_INCLUDE is set accordingly.
102#
103# The paths automatically searched are:
104#
105# * /usr/include/luaX.Y
106# * /usr/include/lua/X.Y
107# * /usr/include/luaXY
108# * /usr/local/include/luaX.Y
109# * /usr/local/include/lua-X.Y
110# * /usr/local/include/lua/X.Y
111# * /usr/local/include/luaXY
112#
113# (Where X.Y is the Lua version number, e.g. 5.1.)
114#
115# The Lua version number found in the headers is always checked to match
116# the Lua interpreter's version number. Lua headers with mismatched
117# version numbers are not accepted.
118#
119# If headers are found, then ACTION-IF-FOUND is performed, otherwise
120# ACTION-IF-NOT-FOUND is performed. If ACTION-IF-NOT-FOUND is blank, then
121# it will default to printing an error. To prevent the default behavior,
122# set the action to ':'.
123#
124# AX_LUA_LIBS: Search for Lua libraries. Requires that AX_PROG_LUA be
125# expanded before this macro. Adds precious variable LUA_LIB, which may
126# contain Lua specific linker flags, e.g. -llua5.1. If LUA_LIB is blank,
127# then this macro will attempt to find suitable flags.
128#
129# LUA_LIB can be used by Automake to link Lua modules or executables with
130# embedded interpreters. The *_LIBADD and *_LDADD variables should be used
131# for this purpose, e.g. mymod_LIBADD = $(LUA_LIB).
132#
133# This macro searches for the Lua library. More technically, it searches
134# for a library containing the function lua_load. The search is performed
135# with a combination of LIBS, LIBRARY_PATH, and LUA_LIB.
136#
137# If the search determines that some linker flags are missing, then those
138# flags will be added to LUA_LIB.
139#
140# If libraries are found, then ACTION-IF-FOUND is performed, otherwise
141# ACTION-IF-NOT-FOUND is performed. If ACTION-IF-NOT-FOUND is blank, then
142# it will default to printing an error. To prevent the default behavior,
143# set the action to ':'.
144#
145# AX_LUA_READLINE: Search for readline headers and libraries. Requires the
146# AX_LIB_READLINE macro, which is provided by ax_lib_readline.m4 from the
147# Autoconf Archive.
148#
149# If a readline compatible library is found, then ACTION-IF-FOUND is
150# performed, otherwise ACTION-IF-NOT-FOUND is performed.
151#
152# LICENSE
153#
154# Copyright (c) 2014 Reuben Thomas <rrt@sc3d.org>
155# Copyright (c) 2014 Tim Perkins <tprk77@gmail.com>
156#
157# This program is free software: you can redistribute it and/or modify it
158# under the terms of the GNU General Public License as published by the
159# Free Software Foundation, either version 3 of the License, or (at your
160# option) any later version.
161#
162# This program is distributed in the hope that it will be useful, but
163# WITHOUT ANY WARRANTY; without even the implied warranty of
164# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
165# Public License for more details.
166#
167# You should have received a copy of the GNU General Public License along
168# with this program. If not, see <http://www.gnu.org/licenses/>.
169#
170# As a special exception, the respective Autoconf Macro's copyright owner
171# gives unlimited permission to copy, distribute and modify the configure
172# scripts that are the output of Autoconf when processing the Macro. You
173# need not follow the terms of the GNU General Public License when using
174# or distributing such scripts, even though portions of the text of the
175# Macro appear in them. The GNU General Public License (GPL) does govern
176# all other use of the material that constitutes the Autoconf Macro.
177#
178# This special exception to the GPL applies to versions of the Autoconf
179# Macro released by the Autoconf Archive. When you make and distribute a
180# modified version of the Autoconf Macro, you may extend this special
181# exception to the GPL to apply to your modified version as well.
182
183#serial 36
184
185dnl =========================================================================
186dnl AX_PROG_LUA([MINIMUM-VERSION], [TOO-BIG-VERSION],
187dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
188dnl =========================================================================
189AC_DEFUN([AX_PROG_LUA],
190[
191 dnl Check for required tools.
192 AC_REQUIRE([AC_PROG_GREP])
193 AC_REQUIRE([AC_PROG_SED])
194
195 dnl Make LUA a precious variable.
196 AC_ARG_VAR([LUA], [The Lua interpreter, e.g. /usr/bin/lua5.1])
197
198 dnl Find a Lua interpreter.
199 m4_define_default([_AX_LUA_INTERPRETER_LIST],
200 [lua lua5.2 lua52 lua5.1 lua51 lua50])
201
202 m4_if([$1], [],
203 [ dnl No version check is needed. Find any Lua interpreter.
204 AS_IF([test "x$LUA" = 'x'],
205 [AC_PATH_PROGS([LUA], [_AX_LUA_INTERPRETER_LIST], [:])])
206 ax_display_LUA='lua'
207
208 AS_IF([test "x$LUA" != 'x:'],
209 [ dnl At least check if this is a Lua interpreter.
210 AC_MSG_CHECKING([if $LUA is a Lua interpreter])
211 _AX_LUA_CHK_IS_INTRP([$LUA],
212 [AC_MSG_RESULT([yes])],
213 [ AC_MSG_RESULT([no])
214 AC_MSG_ERROR([not a Lua interpreter])
215 ])
216 ])
217 ],
218 [ dnl A version check is needed.
219 AS_IF([test "x$LUA" != 'x'],
220 [ dnl Check if this is a Lua interpreter.
221 AC_MSG_CHECKING([if $LUA is a Lua interpreter])
222 _AX_LUA_CHK_IS_INTRP([$LUA],
223 [AC_MSG_RESULT([yes])],
224 [ AC_MSG_RESULT([no])
225 AC_MSG_ERROR([not a Lua interpreter])
226 ])
227 dnl Check the version.
228 m4_if([$2], [],
229 [_ax_check_text="whether $LUA version >= $1"],
230 [_ax_check_text="whether $LUA version >= $1, < $2"])
231 AC_MSG_CHECKING([$_ax_check_text])
232 _AX_LUA_CHK_VER([$LUA], [$1], [$2],
233 [AC_MSG_RESULT([yes])],
234 [ AC_MSG_RESULT([no])
235 AC_MSG_ERROR([version is out of range for specified LUA])])
236 ax_display_LUA=$LUA
237 ],
238 [ dnl Try each interpreter until we find one that satisfies VERSION.
239 m4_if([$2], [],
240 [_ax_check_text="for a Lua interpreter with version >= $1"],
241 [_ax_check_text="for a Lua interpreter with version >= $1, < $2"])
242 AC_CACHE_CHECK([$_ax_check_text],
243 [ax_cv_pathless_LUA],
244 [ for ax_cv_pathless_LUA in _AX_LUA_INTERPRETER_LIST none; do
245 test "x$ax_cv_pathless_LUA" = 'xnone' && break
246 _AX_LUA_CHK_IS_INTRP([$ax_cv_pathless_LUA], [], [continue])
247 _AX_LUA_CHK_VER([$ax_cv_pathless_LUA], [$1], [$2], [break])
248 done
249 ])
250 dnl Set $LUA to the absolute path of $ax_cv_pathless_LUA.
251 AS_IF([test "x$ax_cv_pathless_LUA" = 'xnone'],
252 [LUA=':'],
253 [AC_PATH_PROG([LUA], [$ax_cv_pathless_LUA])])
254 ax_display_LUA=$ax_cv_pathless_LUA
255 ])
256 ])
257
258 AS_IF([test "x$LUA" = 'x:'],
259 [ dnl Run any user-specified action, or abort.
260 m4_default([$4], [AC_MSG_ERROR([cannot find suitable Lua interpreter])])
261 ],
262 [ dnl Query Lua for its version number.
263 AC_CACHE_CHECK([for $ax_display_LUA version],
264 [ax_cv_lua_version],
265 [ dnl Get the interpreter version in X.Y format. This should work for
266 dnl interpreters version 5.0 and beyond.
267 ax_cv_lua_version=[`$LUA -e '
268 -- return a version number in X.Y format
269 local _, _, ver = string.find(_VERSION, "^Lua (%d+%.%d+)")
270 print(ver)'`]
271 ])
272 AS_IF([test "x$ax_cv_lua_version" = 'x'],
273 [AC_MSG_ERROR([invalid Lua version number])])
274 AC_SUBST([LUA_VERSION], [$ax_cv_lua_version])
275 AC_SUBST([LUA_SHORT_VERSION], [`echo "$LUA_VERSION" | $SED 's|\.||'`])
276
277 dnl The following check is not supported:
278 dnl At times (like when building shared libraries) you may want to know
279 dnl which OS platform Lua thinks this is.
280 AC_CACHE_CHECK([for $ax_display_LUA platform],
281 [ax_cv_lua_platform],
282 [ax_cv_lua_platform=[`$LUA -e 'print("unknown")'`]])
283 AC_SUBST([LUA_PLATFORM], [$ax_cv_lua_platform])
284
285 dnl Use the values of $prefix and $exec_prefix for the corresponding
286 dnl values of LUA_PREFIX and LUA_EXEC_PREFIX. These are made distinct
287 dnl variables so they can be overridden if need be. However, the general
288 dnl consensus is that you shouldn't need this ability.
289 AC_SUBST([LUA_PREFIX], ['${prefix}'])
290 AC_SUBST([LUA_EXEC_PREFIX], ['${exec_prefix}'])
291
292 dnl Lua provides no way to query the script directory, and instead
293 dnl provides LUA_PATH. However, we should be able to make a safe educated
294 dnl guess. If the built-in search path contains a directory which is
295 dnl prefixed by $prefix, then we can store scripts there. The first
296 dnl matching path will be used.
297 AC_CACHE_CHECK([for $ax_display_LUA script directory],
298 [ax_cv_lua_luadir],
299 [ AS_IF([test "x$prefix" = 'xNONE'],
300 [ax_lua_prefix=$ac_default_prefix],
301 [ax_lua_prefix=$prefix])
302
303 dnl Initialize to the default path.
304 ax_cv_lua_luadir="$LUA_PREFIX/share/lua/$LUA_VERSION"
305
306 dnl Try to find a path with the prefix.
307 _AX_LUA_FND_PRFX_PTH([$LUA], [$ax_lua_prefix], [package.path])
308 AS_IF([test "x$ax_lua_prefixed_path" != 'x'],
309 [ dnl Fix the prefix.
310 _ax_strip_prefix=`echo "$ax_lua_prefix" | $SED 's|.|.|g'`
311 ax_cv_lua_luadir=`echo "$ax_lua_prefixed_path" | \
312 $SED "s|^$_ax_strip_prefix|$LUA_PREFIX|"`
313 ])
314 ])
315 AC_SUBST([luadir], [$ax_cv_lua_luadir])
316 AC_SUBST([pkgluadir], [\${luadir}/$PACKAGE])
317
318 dnl Lua provides no way to query the module directory, and instead
319 dnl provides LUA_PATH. However, we should be able to make a safe educated
320 dnl guess. If the built-in search path contains a directory which is
321 dnl prefixed by $exec_prefix, then we can store modules there. The first
322 dnl matching path will be used.
323 AC_CACHE_CHECK([for $ax_display_LUA module directory],
324 [ax_cv_lua_luaexecdir],
325 [ AS_IF([test "x$exec_prefix" = 'xNONE'],
326 [ax_lua_exec_prefix=$ax_lua_prefix],
327 [ax_lua_exec_prefix=$exec_prefix])
328
329 dnl Initialize to the default path.
330 ax_cv_lua_luaexecdir="$LUA_EXEC_PREFIX/lib/lua/$LUA_VERSION"
331
332 dnl Try to find a path with the prefix.
333 _AX_LUA_FND_PRFX_PTH([$LUA],
334 [$ax_lua_exec_prefix], [package.cpath])
335 AS_IF([test "x$ax_lua_prefixed_path" != 'x'],
336 [ dnl Fix the prefix.
337 _ax_strip_prefix=`echo "$ax_lua_exec_prefix" | $SED 's|.|.|g'`
338 ax_cv_lua_luaexecdir=`echo "$ax_lua_prefixed_path" | \
339 $SED "s|^$_ax_strip_prefix|$LUA_EXEC_PREFIX|"`
340 ])
341 ])
342 AC_SUBST([luaexecdir], [$ax_cv_lua_luaexecdir])
343 AC_SUBST([pkgluaexecdir], [\${luaexecdir}/$PACKAGE])
344
345 dnl Run any user specified action.
346 $3
347 ])
348])
349
350dnl AX_WITH_LUA is now the same thing as AX_PROG_LUA.
351AC_DEFUN([AX_WITH_LUA],
352[
353 AC_MSG_WARN([[$0 is deprecated, please use AX_PROG_LUA instead]])
354 AX_PROG_LUA
355])
356
357
358dnl =========================================================================
359dnl _AX_LUA_CHK_IS_INTRP(PROG, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
360dnl =========================================================================
361AC_DEFUN([_AX_LUA_CHK_IS_INTRP],
362[
363 dnl A minimal Lua factorial to prove this is an interpreter. This should work
364 dnl for Lua interpreters version 5.0 and beyond.
365 _ax_lua_factorial=[`$1 2>/dev/null -e '
366 -- a simple factorial
367 function fact (n)
368 if n == 0 then
369 return 1
370 else
371 return n * fact(n-1)
372 end
373 end
374 print("fact(5) is " .. fact(5))'`]
375 AS_IF([test "$_ax_lua_factorial" = 'fact(5) is 120'],
376 [$2], [$3])
377])
378
379
380dnl =========================================================================
381dnl _AX_LUA_CHK_VER(PROG, MINIMUM-VERSION, [TOO-BIG-VERSION],
382dnl [ACTION-IF-TRUE], [ACTION-IF-FALSE])
383dnl =========================================================================
384AC_DEFUN([_AX_LUA_CHK_VER],
385[
386 dnl Check that the Lua version is within the bounds. Only the major and minor
387 dnl version numbers are considered. This should work for Lua interpreters
388 dnl version 5.0 and beyond.
389 _ax_lua_good_version=[`$1 -e '
390 -- a script to compare versions
391 function verstr2num(verstr)
392 local _, _, majorver, minorver = string.find(verstr, "^(%d+)%.(%d+)")
393 if majorver and minorver then
394 return tonumber(majorver) * 100 + tonumber(minorver)
395 end
396 end
397 local minver = verstr2num("$2")
398 local _, _, trimver = string.find(_VERSION, "^Lua (.*)")
399 local ver = verstr2num(trimver)
400 local maxver = verstr2num("$3") or 1e9
401 if minver <= ver and ver < maxver then
402 print("yes")
403 else
404 print("no")
405 end'`]
406 AS_IF([test "x$_ax_lua_good_version" = "xyes"],
407 [$4], [$5])
408])
409
410
411dnl =========================================================================
412dnl _AX_LUA_FND_PRFX_PTH(PROG, PREFIX, SCRIPT-OR-MODULE-DIR)
413dnl =========================================================================
414AC_DEFUN([_AX_LUA_FND_PRFX_PTH],
415[
416 dnl Get the script or module directory by querying the Lua interpreter,
417 dnl filtering on the given prefix, and selecting the shallowest path. If no
418 dnl path is found matching the prefix, the result will be an empty string.
419 dnl The third argument determines the type of search, it can be 'script' or
420 dnl 'module'. Supplying 'script' will perform the search with package.path
421 dnl and LUA_PATH, and supplying 'module' will search with package.cpath and
422 dnl LUA_CPATH. This is done for compatibility with Lua 5.0.
423
424 ax_lua_prefixed_path=[`$1 -e '
425 -- get the path based on search type
426 local searchtype = "$3"
427 local paths = ""
428 if searchtype == "script" then
429 paths = (package and package.path) or LUA_PATH
430 elseif searchtype == "module" then
431 paths = (package and package.cpath) or LUA_CPATH
432 end
433 -- search for the prefix
434 local prefix = "$2"
435 local minpath = ""
436 local mindepth = 1e9
437 string.gsub(paths, "(@<:@^;@:>@+)",
438 function (path)
439 path = string.gsub(path, "%?.*$", "")
440 path = string.gsub(path, "/@<:@^/@:>@*$", "")
441 if string.find(path, prefix) then
442 local depth = string.len(string.gsub(path, "@<:@^/@:>@", ""))
443 if depth < mindepth then
444 minpath = path
445 mindepth = depth
446 end
447 end
448 end)
449 print(minpath)'`]
450])
451
452
453dnl =========================================================================
454dnl AX_LUA_HEADERS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
455dnl =========================================================================
456AC_DEFUN([AX_LUA_HEADERS],
457[
458 dnl Check for LUA_VERSION.
459 AC_MSG_CHECKING([if LUA_VERSION is defined])
460 AS_IF([test "x$LUA_VERSION" != 'x'],
461 [AC_MSG_RESULT([yes])],
462 [ AC_MSG_RESULT([no])
463 AC_MSG_ERROR([cannot check Lua headers without knowing LUA_VERSION])
464 ])
465
466 dnl Make LUA_INCLUDE a precious variable.
467 AC_ARG_VAR([LUA_INCLUDE], [The Lua includes, e.g. -I/usr/include/lua5.1])
468
469 dnl Some default directories to search.
470 LUA_SHORT_VERSION=`echo "$LUA_VERSION" | $SED 's|\.||'`
471 m4_define_default([_AX_LUA_INCLUDE_LIST],
472 [ /usr/include/lua$LUA_VERSION \
473 /usr/include/lua-$LUA_VERSION \
474 /usr/include/lua/$LUA_VERSION \
475 /usr/include/lua$LUA_SHORT_VERSION \
476 /usr/local/include/lua$LUA_VERSION \
477 /usr/local/include/lua-$LUA_VERSION \
478 /usr/local/include/lua/$LUA_VERSION \
479 /usr/local/include/lua$LUA_SHORT_VERSION \
480 ])
481
482 dnl Try to find the headers.
483 _ax_lua_saved_cppflags=$CPPFLAGS
484 CPPFLAGS="$CPPFLAGS $LUA_INCLUDE"
485 AC_CHECK_HEADERS([lua.h lualib.h lauxlib.h luaconf.h])
486 CPPFLAGS=$_ax_lua_saved_cppflags
487
488 dnl Try some other directories if LUA_INCLUDE was not set.
489 AS_IF([test "x$LUA_INCLUDE" = 'x' &&
490 test "x$ac_cv_header_lua_h" != 'xyes'],
491 [ dnl Try some common include paths.
492 for _ax_include_path in _AX_LUA_INCLUDE_LIST; do
493 test ! -d "$_ax_include_path" && continue
494
495 AC_MSG_CHECKING([for Lua headers in])
496 AC_MSG_RESULT([$_ax_include_path])
497
498 AS_UNSET([ac_cv_header_lua_h])
499 AS_UNSET([ac_cv_header_lualib_h])
500 AS_UNSET([ac_cv_header_lauxlib_h])
501 AS_UNSET([ac_cv_header_luaconf_h])
502
503 _ax_lua_saved_cppflags=$CPPFLAGS
504 CPPFLAGS="$CPPFLAGS -I$_ax_include_path"
505 AC_CHECK_HEADERS([lua.h lualib.h lauxlib.h luaconf.h])
506 CPPFLAGS=$_ax_lua_saved_cppflags
507
508 AS_IF([test "x$ac_cv_header_lua_h" = 'xyes'],
509 [ LUA_INCLUDE="-I$_ax_include_path"
510 break
511 ])
512 done
513 ])
514
515 AS_IF([test "x$ac_cv_header_lua_h" = 'xyes'],
516 [ dnl Make a program to print LUA_VERSION defined in the header.
517 dnl TODO It would be really nice if we could do this without compiling a
518 dnl program, then it would work when cross compiling. But I'm not sure how
519 dnl to do this reliably. For now, assume versions match when cross compiling.
520
521 AS_IF([test "x$cross_compiling" != 'xyes'],
522 [ AC_CACHE_CHECK([for Lua header version],
523 [ax_cv_lua_header_version],
524 [ _ax_lua_saved_cppflags=$CPPFLAGS
525 CPPFLAGS="$CPPFLAGS $LUA_INCLUDE"
526 AC_RUN_IFELSE(
527 [ AC_LANG_SOURCE([[
528#include <lua.h>
529#include <stdlib.h>
530#include <stdio.h>
531int main(int argc, char ** argv)
532{
533 if(argc > 1) printf("%s", LUA_VERSION);
534 exit(EXIT_SUCCESS);
535}
536]])
537 ],
538 [ ax_cv_lua_header_version=`./conftest$EXEEXT p | \
539 $SED -n "s|^Lua \(@<:@0-9@:>@\{1,\}\.@<:@0-9@:>@\{1,\}\).\{0,\}|\1|p"`
540 ],
541 [ax_cv_lua_header_version='unknown'])
542 CPPFLAGS=$_ax_lua_saved_cppflags
543 ])
544
545 dnl Compare this to the previously found LUA_VERSION.
546 AC_MSG_CHECKING([if Lua header version matches $LUA_VERSION])
547 AS_IF([test "x$ax_cv_lua_header_version" = "x$LUA_VERSION"],
548 [ AC_MSG_RESULT([yes])
549 ax_header_version_match='yes'
550 ],
551 [ AC_MSG_RESULT([no])
552 ax_header_version_match='no'
553 ])
554 ],
555 [ AC_MSG_WARN([cross compiling so assuming header version number matches])
556 ax_header_version_match='yes'
557 ])
558 ])
559
560 dnl Was LUA_INCLUDE specified?
561 AS_IF([test "x$ax_header_version_match" != 'xyes' &&
562 test "x$LUA_INCLUDE" != 'x'],
563 [AC_MSG_ERROR([cannot find headers for specified LUA_INCLUDE])])
564
565 dnl Test the final result and run user code.
566 AS_IF([test "x$ax_header_version_match" = 'xyes'], [$1],
567 [m4_default([$2], [AC_MSG_ERROR([cannot find Lua includes])])])
568])
569
570dnl AX_LUA_HEADERS_VERSION no longer exists, use AX_LUA_HEADERS.
571AC_DEFUN([AX_LUA_HEADERS_VERSION],
572[
573 AC_MSG_WARN([[$0 is deprecated, please use AX_LUA_HEADERS instead]])
574])
575
576
577dnl =========================================================================
578dnl AX_LUA_LIBS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
579dnl =========================================================================
580AC_DEFUN([AX_LUA_LIBS],
581[
582 dnl TODO Should this macro also check various -L flags?
583
584 dnl Check for LUA_VERSION.
585 AC_MSG_CHECKING([if LUA_VERSION is defined])
586 AS_IF([test "x$LUA_VERSION" != 'x'],
587 [AC_MSG_RESULT([yes])],
588 [ AC_MSG_RESULT([no])
589 AC_MSG_ERROR([cannot check Lua libs without knowing LUA_VERSION])
590 ])
591
592 dnl Make LUA_LIB a precious variable.
593 AC_ARG_VAR([LUA_LIB], [The Lua library, e.g. -llua5.1])
594
595 AS_IF([test "x$LUA_LIB" != 'x'],
596 [ dnl Check that LUA_LIBS works.
597 _ax_lua_saved_libs=$LIBS
598 LIBS="$LIBS $LUA_LIB"
599 AC_SEARCH_LIBS([lua_load], [],
600 [_ax_found_lua_libs='yes'],
601 [_ax_found_lua_libs='no'])
602 LIBS=$_ax_lua_saved_libs
603
604 dnl Check the result.
605 AS_IF([test "x$_ax_found_lua_libs" != 'xyes'],
606 [AC_MSG_ERROR([cannot find libs for specified LUA_LIB])])
607 ],
608 [ dnl First search for extra libs.
609 _ax_lua_extra_libs=''
610
611 _ax_lua_saved_libs=$LIBS
612 LIBS="$LIBS $LUA_LIB"
613 AC_SEARCH_LIBS([exp], [m])
614 AC_SEARCH_LIBS([dlopen], [dl])
615 LIBS=$_ax_lua_saved_libs
616
617 AS_IF([test "x$ac_cv_search_exp" != 'xno' &&
618 test "x$ac_cv_search_exp" != 'xnone required'],
619 [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_exp"])
620
621 AS_IF([test "x$ac_cv_search_dlopen" != 'xno' &&
622 test "x$ac_cv_search_dlopen" != 'xnone required'],
623 [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_dlopen"])
624
625 dnl Try to find the Lua libs.
626 _ax_lua_saved_libs=$LIBS
627 LIBS="$LIBS $LUA_LIB"
628 AC_SEARCH_LIBS([lua_load],
629 [ lua$LUA_VERSION \
630 lua$LUA_SHORT_VERSION \
631 lua-$LUA_VERSION \
632 lua-$LUA_SHORT_VERSION \
633 lua \
634 ],
635 [_ax_found_lua_libs='yes'],
636 [_ax_found_lua_libs='no'],
637 [$_ax_lua_extra_libs])
638 LIBS=$_ax_lua_saved_libs
639
640 AS_IF([test "x$ac_cv_search_lua_load" != 'xno' &&
641 test "x$ac_cv_search_lua_load" != 'xnone required'],
642 [LUA_LIB="$ac_cv_search_lua_load $_ax_lua_extra_libs"])
643 ])
644
645 dnl Test the result and run user code.
646 AS_IF([test "x$_ax_found_lua_libs" = 'xyes'], [$1],
647 [m4_default([$2], [AC_MSG_ERROR([cannot find Lua libs])])])
648])
649
650
651dnl =========================================================================
652dnl AX_LUA_READLINE([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
653dnl =========================================================================
654AC_DEFUN([AX_LUA_READLINE],
655[
656 AX_LIB_READLINE
657 AS_IF([test "x$ac_cv_header_readline_readline_h" != 'x' &&
658 test "x$ac_cv_header_readline_history_h" != 'x'],
659 [ LUA_LIBS_CFLAGS="-DLUA_USE_READLINE $LUA_LIBS_CFLAGS"
660 $1
661 ],
662 [$2])
663])