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