xref: /freebsd/contrib/libucl/m4/ax_lua.m4 (revision b0d29bc47dba79f6f38e67eabadfb4b32ffd9390)
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
186dnl =========================================================================
187dnl AX_PROG_LUA([MINIMUM-VERSION], [TOO-BIG-VERSION],
188dnl             [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
189dnl =========================================================================
190AC_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
351dnl AX_WITH_LUA is now the same thing as AX_PROG_LUA.
352AC_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
359dnl =========================================================================
360dnl _AX_LUA_CHK_IS_INTRP(PROG, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
361dnl =========================================================================
362AC_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
381dnl =========================================================================
382dnl _AX_LUA_CHK_VER(PROG, MINIMUM-VERSION, [TOO-BIG-VERSION],
383dnl                 [ACTION-IF-TRUE], [ACTION-IF-FALSE])
384dnl =========================================================================
385AC_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
412dnl =========================================================================
413dnl _AX_LUA_FND_PRFX_PTH(PROG, PREFIX, SCRIPT-OR-MODULE-DIR)
414dnl =========================================================================
415AC_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
454dnl =========================================================================
455dnl AX_LUA_HEADERS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
456dnl =========================================================================
457AC_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>
532int 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
571dnl AX_LUA_HEADERS_VERSION no longer exists, use AX_LUA_HEADERS.
572AC_DEFUN([AX_LUA_HEADERS_VERSION],
573[
574  AC_MSG_WARN([[$0 is deprecated, please use AX_LUA_HEADERS instead]])
575])
576
577
578dnl =========================================================================
579dnl AX_LUA_LIBS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
580dnl =========================================================================
581AC_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="$LUA_LIB $LIBS"
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="$LUA_LIB $LIBS"
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="$LUA_LIB $LIBS"
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
652dnl =========================================================================
653dnl AX_LUA_READLINE([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
654dnl =========================================================================
655AC_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])
665