]> git.proxmox.com Git - mirror_frr.git/blob - m4/ax_lua.m4
Merge pull request #5793 from ton31337/fix/formatting_show_bgp_summary_failed
[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 [ dnl Make a program to print LUA_VERSION defined in the header.
518 dnl TODO It would be really nice if we could do this without compiling a
519 dnl program, then it would work when cross compiling. But I'm not sure how
520 dnl to do this reliably. For now, assume versions match when cross compiling.
521
522 AS_IF([test "x$cross_compiling" != 'xyes'],
523 [ AC_CACHE_CHECK([for Lua header version],
524 [ax_cv_lua_header_version],
525 [ _ax_lua_saved_cppflags=$CPPFLAGS
526 CPPFLAGS="$CPPFLAGS $LUA_INCLUDE"
527 AC_RUN_IFELSE(
528 [ AC_LANG_SOURCE([[
529 #include <lua.h>
530 #include <stdlib.h>
531 #include <stdio.h>
532 int main(int argc, char ** argv)
533 {
534 if(argc > 1) printf("%s", LUA_VERSION);
535 exit(EXIT_SUCCESS);
536 }
537 ]])
538 ],
539 [ ax_cv_lua_header_version=`./conftest$EXEEXT p | \
540 $SED -n "s|^Lua \(@<:@0-9@:>@\{1,\}\.@<:@0-9@:>@\{1,\}\).\{0,\}|\1|p"`
541 ],
542 [ax_cv_lua_header_version='unknown'])
543 CPPFLAGS=$_ax_lua_saved_cppflags
544 ])
545
546 dnl Compare this to the previously found LUA_VERSION.
547 AC_MSG_CHECKING([if Lua header version matches $LUA_VERSION])
548 AS_IF([test "x$ax_cv_lua_header_version" = "x$LUA_VERSION"],
549 [ AC_MSG_RESULT([yes])
550 ax_header_version_match='yes'
551 ],
552 [ AC_MSG_RESULT([no])
553 ax_header_version_match='no'
554 ])
555 ],
556 [ AC_MSG_WARN([cross compiling so assuming header version number matches])
557 ax_header_version_match='yes'
558 ])
559 ])
560
561 dnl Was LUA_INCLUDE specified?
562 AS_IF([test "x$ax_header_version_match" != 'xyes' &&
563 test "x$LUA_INCLUDE" != 'x'],
564 [AC_MSG_ERROR([cannot find headers for specified LUA_INCLUDE])])
565
566 dnl Test the final result and run user code.
567 AS_IF([test "x$ax_header_version_match" = 'xyes'], [$1],
568 [m4_default([$2], [AC_MSG_ERROR([cannot find Lua includes])])])
569 ])
570
571 dnl AX_LUA_HEADERS_VERSION no longer exists, use AX_LUA_HEADERS.
572 AC_DEFUN([AX_LUA_HEADERS_VERSION],
573 [
574 AC_MSG_WARN([[$0 is deprecated, please use AX_LUA_HEADERS instead]])
575 ])
576
577
578 dnl =========================================================================
579 dnl AX_LUA_LIBS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
580 dnl =========================================================================
581 AC_DEFUN([AX_LUA_LIBS],
582 [
583 dnl TODO Should this macro also check various -L flags?
584
585 dnl Check for LUA_VERSION.
586 AC_MSG_CHECKING([if LUA_VERSION is defined])
587 AS_IF([test "x$LUA_VERSION" != 'x'],
588 [AC_MSG_RESULT([yes])],
589 [ AC_MSG_RESULT([no])
590 AC_MSG_ERROR([cannot check Lua libs without knowing LUA_VERSION])
591 ])
592
593 dnl Make LUA_LIB a precious variable.
594 AC_ARG_VAR([LUA_LIB], [The Lua library, e.g. -llua5.1])
595
596 AS_IF([test "x$LUA_LIB" != 'x'],
597 [ dnl Check that LUA_LIBS works.
598 _ax_lua_saved_libs=$LIBS
599 LIBS="$LIBS $LUA_LIB"
600 AC_SEARCH_LIBS([lua_load], [],
601 [_ax_found_lua_libs='yes'],
602 [_ax_found_lua_libs='no'])
603 LIBS=$_ax_lua_saved_libs
604
605 dnl Check the result.
606 AS_IF([test "x$_ax_found_lua_libs" != 'xyes'],
607 [AC_MSG_ERROR([cannot find libs for specified LUA_LIB])])
608 ],
609 [ dnl First search for extra libs.
610 _ax_lua_extra_libs=''
611
612 _ax_lua_saved_libs=$LIBS
613 LIBS="$LIBS $LUA_LIB"
614 AC_SEARCH_LIBS([exp], [m])
615 AC_SEARCH_LIBS([dlopen], [dl])
616 LIBS=$_ax_lua_saved_libs
617
618 AS_IF([test "x$ac_cv_search_exp" != 'xno' &&
619 test "x$ac_cv_search_exp" != 'xnone required'],
620 [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_exp"])
621
622 AS_IF([test "x$ac_cv_search_dlopen" != 'xno' &&
623 test "x$ac_cv_search_dlopen" != 'xnone required'],
624 [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_dlopen"])
625
626 dnl Try to find the Lua libs.
627 _ax_lua_saved_libs=$LIBS
628 LIBS="$LIBS $LUA_LIB"
629 AC_SEARCH_LIBS([lua_load],
630 [ lua$LUA_VERSION \
631 lua$LUA_SHORT_VERSION \
632 lua-$LUA_VERSION \
633 lua-$LUA_SHORT_VERSION \
634 lua \
635 ],
636 [_ax_found_lua_libs='yes'],
637 [_ax_found_lua_libs='no'],
638 [$_ax_lua_extra_libs])
639 LIBS=$_ax_lua_saved_libs
640
641 AS_IF([test "x$ac_cv_search_lua_load" != 'xno' &&
642 test "x$ac_cv_search_lua_load" != 'xnone required'],
643 [LUA_LIB="$ac_cv_search_lua_load $_ax_lua_extra_libs"])
644 ])
645
646 dnl Test the result and run user code.
647 AS_IF([test "x$_ax_found_lua_libs" = 'xyes'], [$1],
648 [m4_default([$2], [AC_MSG_ERROR([cannot find Lua libs])])])
649 ])
650
651
652 dnl =========================================================================
653 dnl AX_LUA_READLINE([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
654 dnl =========================================================================
655 AC_DEFUN([AX_LUA_READLINE],
656 [
657 AX_LIB_READLINE
658 AS_IF([test "x$ac_cv_header_readline_readline_h" != 'x' &&
659 test "x$ac_cv_header_readline_history_h" != 'x'],
660 [ LUA_LIBS_CFLAGS="-DLUA_USE_READLINE $LUA_LIBS_CFLAGS"
661 $1
662 ],
663 [$2])
664 ])