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