1 dnl -*-fundamental-*- *@--GLOB-HEADER--@*
3 dnl $Id: aclocal.glob,v 1.18 2004/04/08 01:36:24 mdw Exp $
5 dnl Common library of autoconf macros
7 dnl (c) 1997 Mark Wooding, except for macros and documentation where noted.
10 dnl----- Licensing notice ---------------------------------------------------
12 dnl This file is part of the Common Files Distribution (`common')
14 dnl `Common' is free software; you can redistribute it and/or modify
15 dnl it under the terms of the GNU General Public License as published by
16 dnl the Free Software Foundation; either version 2 of the License, or
17 dnl (at your option) any later version.
19 dnl `Common' is distributed in the hope that it will be useful,
20 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
21 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 dnl GNU General Public License for more details.
24 dnl You should have received a copy of the GNU General Public License
25 dnl along with `common'; if not, write to the Free Software Foundation,
26 dnl Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 dnl *@--NOTICE--@* Common File Distribution
29 dnl $Id: aclocal.glob,v 1.18 2004/04/08 01:36:24 mdw Exp $
31 dnl --- *@-mdw_REQUIRE-@* ---
33 dnl Author: Mark Wooding
35 dnl Synopsis: mdw_REQUIRE(MACRO, ARGS...)
37 dnl Arguments: MACRO = name of a macro which should have been called
38 dnl ARGS = arguments to pass
40 dnl Use: Like `AC_REQUIRE', only it handles arguments.
42 AC_DEFUN([mdw_REQUIRE],
43 [ifdef([AC_PROVIDE_$1], ,
44 [AC_DIVERT_PUSH(builtin(eval, AC_DIVERSION_CURRENT - 1))dnl
49 dnl --- *@-mdw_CURSES-@* ---
51 dnl Author: Mark Wooding
53 dnl Synopsis: mdw_CURSES
57 dnl Use: Searches for a `curses' library (one of `ncurses' or
58 dnl `curses') using mdw_CHECK_MANYLIBS. If one is found, the
59 dnl preprocessor macro HAVE_CURSES is defined, and a search is
60 dnl made for a `curses' header file (one of <ncurses.h>,
61 dnl <ncurses/ncurses.h> or <curses.h>) using AC_CHECK_HEADERS
62 dnl and the appropriate preprocessor symbol is defined.
63 dnl Finally, a check is made for the function `wresize' using
66 AC_DEFUN([mdw_CURSES],
67 [mdw_CHECK_MANYLIBS(newwin, ncurses curses, AC_DEFINE(HAVE_CURSES))
68 if test $mdw_cv_lib_newwin != no; then
69 AC_CHECK_HEADERS([ncurses.h ncurses/ncurses.h curses.h], [break])
70 if test "$ac_cv_header_ncurses_h" = "no" &&
71 test "$ac_cv_header_ncurses_ncurses_h" = "no" &&
72 test "$ac_cv_header_curses_h" = "no"; then
73 AC_MSG_WARN([couldn't find a \`curses' header. Assuming \`curses.h'.])
74 AC_DEFINE(HAVE_CURSES_H)
76 AC_CHECK_FUNCS(wresize)
79 dnl --- *@-mdw_TYPE_SSIZE_T-@* ---
81 dnl Author: Mark Wooding
83 dnl Synopsis: mdw_TYPE_SSIZE_T
87 dnl Use: Checks whether the Posix type `ssize_t' is defined. If not,
88 dnl it defaults to `int'.
90 AC_DEFUN([mdw_TYPE_SSIZE_T],
91 [AC_REQUIRE([AC_HEADER_STDC])
92 AC_CACHE_CHECK(for ssize_t, mdw_cv_ssize_t,
93 [AC_EGREP_CPP(ssize_t,
94 [#include <sys/types.h>
102 [mdw_cv_ssize_t=yes], [mdw_cv_ssize_t=no])])
103 if test $mdw_cv_ssize_t = no; then
104 AC_DEFINE(ssize_t, int)
107 dnl --- *@-mdw_DECL_ENVIRON-@* ---
109 dnl Author: Mark Wooding
111 dnl Synopsis: mdw_DECL_ENVIRON
115 dnl Use: Searches for a declaration of the global `environ' variable.
116 dnl If one is found in one of the `usual' places, DECL_ENVIRON
117 dnl is defined as a preprocessor symbol.
119 AC_DEFUN([mdw_DECL_ENVIRON],
120 [AC_CACHE_CHECK([for declaration of \`environ'], mdw_cv_environ,
121 [AC_EGREP_CPP(environ,
122 [#include <sys/types.h>
129 #endif], [mdw_cv_environ=yes], [mdw_cv_environ=no])])
130 if test $mdw_cv_environ = yes; then
131 AC_DEFINE(DECL_ENVIRON)
134 dnl --- *@-mdw_CHECK_MANYLIBS-@* ---
136 dnl Author: Mark Wooding
138 dnl Synopsis: mdw_CHECK_MANYLIBS(FUNC, LIBS, [IF-FOUND], [IF-NOT-FOUND],
139 dnl [INCLUDES], [ARGS])
141 dnl Arguments: FUNC = a function to try to find
142 dnl LIBS = a whitespace-separated list of libraries to search
143 dnl IF-FOUND = what to do when the function is found
144 dnl IF-NOT-FOUND = what to do when the function isn't found
145 dnl INCLUDES = other include files to add
146 dnl ARGS = arguments to pass the function
148 dnl Use: Searches for a library which defines FUNC. It first tries
149 dnl without any libraries; then it tries each library specified
150 dnl in LIBS in turn. If it finds a match, it adds the
151 dnl appropriate library to `LIBS'.
153 dnl This is particularly handy under DIREIX: if you link with
154 dnl `-lnsl' then you get non-NIS-aware versions of getpwnam and
155 dnl so on, which is clearly a Bad Thing.
157 AC_DEFUN([mdw_CHECK_MANYLIBS],
158 [AC_CACHE_CHECK([for library containing $1], [mdw_cv_lib_$1],
159 [mdw_save_LIBS="$LIBS"
161 AC_TRY_LINK([$5], [$1($6)], [mdw_cv_lib_$1="none required"])
162 test "$mdw_cv_lib_$1" = "no" && for i in $2; do
163 LIBS="-l$i $mdw_save_LIBS"
164 AC_TRY_LINK([$5], [$1($6)],
165 [mdw_cv_lib_$1="-l$i"
168 LIBS="$mdw_save_LIBS"])
169 if test "$mdw_cv_lib_$1" != "no"; then
170 test "$mdw_cv_lib_$1" = "none required" || LIBS="$mdw_cv_lib_$1 $LIBS"
176 dnl --- *@-mdw__PERL_VERSION-@* ---
178 dnl AC_DEFUN relies on `[', `]' being quotes, so I have to drop down a level.
181 define([mdw__PERL_VERSION], <<$1 -e 'exit ($] < $2);' >&5 2>&5>>)
184 dnl --- *@-mdw_PROG_PERL-@* ---
186 dnl Author: Mark Wooding
188 dnl Synopsis: mdw_PROG_PERL(VERSION, [IF-FOUND], [IF-NOT-FOUND])
190 dnl Arguments: VERSION = version number of Perl required
191 dnl IF-FOUND = what to do if it's found
192 dnl IF-NOT-FOUND = what to do if it isn't
194 dnl Use: Attempts to find a working version of Perl with a late
195 dnl enough version number. It supplies an option `--with-perl'
196 dnl to allow the user to provide a Perl interpreter. If one
197 dnl isn't provided explicitly, it searches for `perl' and `perl5'
198 dnl in the current PATH, asking them whether they have a late
199 dnl enough version number. The path of the working Perl is
200 dnl put into the `PERL' environment variable; `AC_SUBST' is used
201 dnl to substitute its value into Perl scripts. If there is no
202 dnl Perl to be found, the value of `PERL' is set to be `none'.
204 AC_DEFUN([mdw_PROG_PERL],
206 [ --with-perl=PERL specify path to Perl version $1 or newer],
208 if test -z "$PERL"; then
209 [AC_CACHE_CHECK([for Perl version $1 or later], mdw_cv_prog_perl,
210 [mdw_cv_prog_perl="none"
211 for p in `echo "$PATH:/usr/local/bin" | tr ":" " "`; do
212 case $p in /*) ;; *) p=`pwd`/$p ;; esac
213 if mdw__PERL_VERSION(["$p/perl"], $1); then
214 mdw_cv_prog_perl="$p/perl"
217 if mdw__PERL_VERSION(["$p/perl5"], $1); then
218 mdw_cv_prog_perl="$p/perl5"
222 PERL="$mdw_cv_prog_perl"])
226 if test "$PERL" = "none"; then :
232 dnl --- *@-mdw_CHECK_PERL-@* ---
234 dnl Author: Mark Wooding
236 dnl Synopsis: mdw_CHECK_PERL(VERSION)
238 dnl Arguments: VERSION = version number of Perl required
240 dnl Use: Verifies that the Perl interpreter in the `PERL' shell
241 dnl variable actually works and is of the right version. If it's
242 dnl not, an error is raised and configuration is aborted.
244 AC_DEFUN([mdw_CHECK_PERL],
245 [mdw_REQUIRE([mdw_PROG_PERL], [$1])
246 AC_MSG_CHECKING([whether Perl ($PERL) works])
247 if test "$PERL" != "none" && mdw__PERL_VERSION("$PERL", $1); then
251 AC_MSG_ERROR([Perl version $1 or newer not found.
252 If you have a recent enough Perl, and I just failed to find it, try using
253 the --with-perl=PERL option to give me an explicit pathname.])
256 dnl --- *@-mdw_PERLLIB_CHECK-@* ---
258 dnl Author: Mark Wooding
260 dnl Synopsis: mdw_PERLLIB_CHECK(LIBRARY)
262 dnl Arguments: LIBRARY = name of a Perl library to check for
264 dnl Use: Ensures that a Perl script can `use LIBRARY;'. If it can,
265 dnl all's well and good; if it can't, `LIBRARY.pm' is added to
266 dnl the variable `NEEDED_PERLLIBS' and a line which adds
267 dnl `pkgdatadir' to Perl's `@INC' array is placed in the
268 dnl variable `INC_PERLLIBS'; `AC_SUBST' is called for both of
269 dnl these variables. It's expected that `NEEDED_PERLLIBS' will
270 dnl be used in the `Makefile.in' to decide which versions from
271 dnl the distribution need installing.
273 dnl This macro isn't terribly useful in the general case. It
274 dnl Also implicitly assumes that `$PERL' is Perl 5 or later.
276 AC_DEFUN([mdw__PERLLIB_INIT],
277 [AC_SUBST(INC_PERLLIBS)dnl
278 AC_SUBST(NEEDED_PERLLIBS)dnl
281 AC_DEFUN([mdw_PERLLIB_CHECK],
282 [AC_REQUIRE([mdw__PERLLIB_INIT])
283 mdw_REQUIRE([mdw_CHECK_PERL], 5)
284 AC_CACHE_CHECK([for Perl library $1], mdw_cv_perllib_$1,
285 [if $PERL -e 'use $1;' >&5 2>&5; then
286 mdw_cv_perllib_$1="yes"
288 mdw_cv_perllib_$1="no"
291 if test "$mdw_cv_perllib_$1" = "no"; then
292 NEEDED_PERLLIBS="$NEEDED_PERLLIBS $1.pm"
294 # --- Deal with autoconf lossage ---
296 # It doesn't want to define `prefix' until rather later on, so I have
299 if test -z "$INC_PERLLIBS"; then
300 mdw_old_prefix="$prefix"
301 test "$prefix" = "NONE" && prefix="$ac_default_prefix";
302 INC_PERLLIBS="BEGIN { push @INC, \"`eval echo $datadir/$PACKAGE`\"; }"
303 prefix="$mdw_old_prefix";
307 dnl --- *@-mdw_GCC_FLAGS-@* ---
309 dnl Author: Mark Wooding
311 dnl Synopsis: mdw_GCC_FLAGS([FLAGS], [CFLAGS], [C++FLAGS])
313 dnl Arguments: FLAGS = GCC compiler flags to add (default is
314 dnl `-pedantic -Wall')
315 dnl CFLAGS = GCC C compiler flags to add (default is empty)
316 dnl C++FLAGS = GCC C++ compiler flags to add (default is
317 dnl `-fhandle-exceptions').
319 dnl Use: If the C compiler is GCC, add the compiler flags.
321 AC_DEFUN([mdw_GCC_FLAGS],
322 [if test "$GCC" = "yes"; then
323 CFLAGS="$CFLAGS ifelse([$1], [], [-pedantic -Wall], [$1])"
324 CFLAGS="$CFLAGS ifelse([$2], [], [], [$2])"
326 if test "$GXX" = "yes"; then
327 CXXFLAGS="$CXXFLAGS ifelse([$1], [], [-pedantic -Wall], [$1])"
328 CXXFLAGS="$CXXFLAGS ifelse([$3], [], [-fhandle-exceptions], [$3])"
331 dnl --- *@-mdw_INIT_LIB-@* ---
333 dnl Author: Mark Wooding
335 dnl Synopsis: mdw_INIT_LIB(LIB, NAME, VERSION, [PACKAGE])
337 dnl Arguments: LIB = the name of the library (and the package)
338 dnl NAME = a presentable version of the library's name
339 dnl VERSION = version of the library
340 dnl PACKAGE = package name to pass on to AM_INIT_AUTOMAKE
342 dnl Use: Sets up various useful variables. This macro calls
343 dnl AM_INIT_AUTOMAKE, which might be considered useful. It also
344 dnl provides variables for the use of `lib-config.in'.
346 AC_DEFUN([mdw_INIT_LIB],
347 [AM_INIT_AUTOMAKE(ifelse([$4], [], [$1], [$4]), [$3])
348 LIBRARY="$1" AC_SUBST(LIBRARY)
349 LIBNAME="$2" AC_SUBST(LIBNAME)])
351 dnl --- *@-mdw_LIB_CONFIG-@* ---
353 dnl Author: Mark Wooding
355 dnl Synopsis: mdw_LIB_CONFIG(LIB, NAME, VERSION, IF-FOUND, IF-NOT-FOUND)
357 dnl Arguments: LIB = the name of the library (and its configuration program)
358 dnl NAME = a presentable version of the library's name
359 dnl VERSION = version of library required
360 dnl IF-FOUND = what to do if found
361 dnl IF-NOT-FOUND = what to do if not found
363 dnl Use: Configures a library client program, using a configuration
364 dnl script provided by the library maintainer.
366 dnl The default version is 1.0.0pre0; the default action is to
367 dnl add everything to the CFLAGS and LIBS variables, and complain
368 dnl if the library couldn't be found.
370 dnl The variable LIB_VERSION contains the version number of
371 dnl the library; LIB_CFLAGS is the C compiler flags required
372 dnl and LIB_LIBS is the linker flags.
374 AC_DEFUN([mdw_LIB_CONFIG],
375 [pushdef([upname], translit([$1], [a-z], [A-Z]))dnl
376 AC_MSG_CHECKING([for $2 library])
377 if $1-config --check $3 >/dev/null 2>&1; then
378 upname[]_VERSION=`$1-config --version`
379 upname[]_CFLAGS=`$1-config --cflags`
380 upname[]_LIBS=`$1-config --libs`
381 AC_SUBST(upname[]_VERSION)
382 AC_SUBST(upname[]_CFLAGS)
383 AC_SUBST(upname[]_LIBS)
385 [CFLAGS="$CFLAGS $upname[]_CFLAGS"
386 LIBS="$upname[]_LIBS $LIBS"],
388 AC_MSG_RESULT([$upname[]_VERSION])
391 AC_MSG_ERROR([$2 library not found or too old.]),
393 AC_MSG_RESULT([not found])
397 dnl --- *@-mdw_MLIB-@* ---
399 dnl Author: Mark Wooding
401 dnl Synopsis: mdw_MLIB(VERSION, IF-FOUND, IF-NOT-FOUND
403 dnl Arguments: VERSION = version of library required
404 dnl IF-FOUND = what to do if found
405 dnl IF-NOT-FOUND = what to do if not found
407 dnl Use: Configures an mLib client program.
409 AC_DEFUN([mdw_MLIB], [mdw_LIB_CONFIG(mLib, mLib, $@)])
411 dnl --- *@-mdw_MGLIB-@* ---
413 dnl Author: Mark Wooding
415 dnl Synopsis: mdw_MGLIB(VERSION, IF-FOUND, IF-NOT-FOUND
417 dnl Arguments: VERSION = version of library required
418 dnl IF-FOUND = what to do if found
419 dnl IF-NOT-FOUND = what to do if not found
421 dnl Use: Configures an mgLib client program.
423 AC_DEFUN([mdw_MGLIB],
424 [mdw_REQUIRE([mdw_MLIB], [1.6.0])
425 mdw_LIB_CONFIG(mgLib, mgLib, $@)])
427 dnl --- *@-mdw_CATACOMB-@* ---
429 dnl Author: Mark Wooding
431 dnl Synopsis: mdw_CATACOMB([VERSION], [IF-FOUND], [IF-NOT-FOUND])
433 dnl Arguments: VERSION = version of Catacomb required
434 dnl IF-FOUND = what to do if found
435 dnl IF-NOT-FOUND = what to do if not found
437 dnl Use: Configures the program as a Catacomb client.
439 AC_DEFUN([mdw_CATACOMB],
440 [mdw_REQUIRE([mdw_MLIB], [1.6.0])
441 mdw_LIB_CONFIG(catacomb, Catacomb, $@)])
443 dnl --- *@-mdw_PK-@* ---
445 dnl Author: Mark Wooding
447 dnl Synopsis: mdw_PK([VERSION], [IF-FOUND], [IF-NOT-FOUND])
449 dnl Arguments: VERSION = version of PK required
450 dnl IF-FOUND = what to do if found
451 dnl IF-NOT-FOUND = what to do if not found
453 dnl Use: Configures the program as a PK client.
456 [mdw_REQUIRE([mdw_MLIB], [1.6.0])
457 mdw_LIB_CONFIG(pk, PK, $@)])
459 dnl --- *@-mdw_OPT_NDEBUG-@* ---
461 dnl Author: Mark Wooding
463 dnl Synopsis: mdw_OPT_NDEBUG
467 dnl Use: Turns on the `NDEBUG' flag, to disable useful things like
470 AC_DEFUN([mdw_OPT_NDEBUG],
471 [AC_ARG_ENABLE(debugging,
472 [ --disable-debugging spews vast swathes of useless information],
473 [if test "$enableval" = "no"; then
477 dnl --- *@-mdw_OPT_EFENCE-@* ---
479 dnl Author: Mark Wooding
481 dnl Synopsis: mdw_OPT_EFENCE
485 dnl Use: Links with the Electric Fence library.
487 AC_DEFUN([mdw_OPT_EFENCE],
488 [AC_ARG_WITH(electric-fence,
489 [ --with-electric-fence link programs with Electric Fence],
490 [if test "$withval" = "yes"; then
491 AC_CHECK_LIB(efence, malloc)
494 dnl --- *@-mdw_OPT_TRACE-@* ---
496 dnl Author: Mark Wooding
498 dnl Synopsis: mdw_OPT_TRACE
502 dnl Use: Turns on the `NTRACE' flag, to disable useful things like
505 AC_DEFUN([mdw_OPT_TRACE],
506 [AC_ARG_ENABLE(tracing,
507 [ --disable-tracing disable output of trace information],
508 [if test "$enableval" = "no"; then
512 dnl --- *@-mdw_OPT_mLib_TRACK-@* ---
514 dnl Author: Mark Wooding
516 dnl Synopsis: mdw_OPT_mLib_TRACK(PROGRAM)
518 dnl Arguments: PROGRAM = name of this program or package.
520 dnl Use: Controls the unsupported mLib memory tracker. The
521 dnl following are defined:
523 dnl --enable-track turns on malloc tracking
524 dnl --enable-blame-PROGRAM tracks malloc contexts in PROGRAM
526 dnl There must be a separate `blame' option for each program,
527 dnl so that the various blame options in a hierarchy get
528 dnl propagated properly. This is an obsolete feature from the
529 dnl days when mLib was provided as a subdirectory of other
532 AC_DEFUN([mdw_OPT_mLib_TRACK],
533 [AC_REQUIRE([mdw_OPT_TRACE])
535 [ --enable-track enable tracking of malloc and free],
536 [AC_DEFINE(TRACK_ENABLE, 1)])
537 AC_ARG_ENABLE(blame-$1,
539 track malloc contexts while in $1],
540 [AC_DEFINE(TRACK_BLAME, 1)])])
542 dnl --- *@-mdw_OPT_mLib_DEBUG-@* ---
544 dnl Author: Mark Wooding
546 dnl Synopsis: mdw_OPT_mLib_DEBUG(PROGRAM)
548 dnl Arguments: PROGRAM = name of this program or package.
550 dnl Use: Provides all of the above debugging options.
552 AC_DEFUN([mdw_OPT_mLib_DEBUG],
553 [mdw_REQUIRE([mdw_OPT_NDEBUG])
554 mdw_REQUIRE([mdw_OPT_mLib_TRACK], [$1])])
556 dnl --- *@-mdw_DEFINE_PATHS-@*
558 dnl Author: Mark Wooding
560 dnl Synopsis: mdw_DEFINE_FILES(CODE)
562 dnl Arguments: CODE = shell script code to execute
564 dnl Use: Fixes up various variables so that pathname defines can be
565 dnl defined. Within CODE, you may use the following macros:
567 dnl mdw_PROG(NAME) Transformed program name
569 dnl mdw_PATH(PATH) Expanded path (may contain variables)
571 dnl mdw_DEFINE_PROG(SYMBOL, PROG)
572 dnl Define a symbol as a transformed
575 dnl mdw_DEFINE_PATH(SYMBOL, NAME)
576 dnl Define a symbol as an expanded path
578 AC_DEFUN([mdw_DEFINE_PATHS],
579 [mdw_prefix=$prefix mdw_exec_prefix=$exec_prefix
580 mdw_transform=`echo "$program_transform_name"|sed 's,\\\\\\\\,\\\\,g; s,\\$\\$,$,g'`
581 test "$prefix" = "NONE" && prefix=$ac_default_prefix
582 test "$exec_prefix" = "NONE" && exec_prefix=$prefix
584 prefix=$mdw_prefix exec_prefix=$mdw_exec_prefix])
586 AC_DEFUN([mdw_PROG], [`echo "$1"|sed "$mdw_transform"`])
587 AC_DEFUN([mdw_PATH], [dnl
591 *\\$[]*) t=\`eval echo "$t"\`;; dnl
595 AC_DEFUN([mdw_DEFINE_PROG], [AC_DEFINE_UNQUOTED([$1], ["mdw_PROG([$2])"])])
596 AC_DEFUN([mdw_DEFINE_PATH], [AC_DEFINE_UNQUOTED([$1], ["mdw_PATH([$2])"])])
598 dnl --- *@-mdw_DIR_TEXMF-@* ---
600 dnl Author: Mark Wooding
602 dnl Synopsis: mdw_DIR_TEXMF
606 dnl Use: Sets the substitution `texmfdir' as a sensible TeX install
609 AC_DEFUN([mdw_DIR_TEXMF], [
610 AC_ARG_WITH([texmfdir],
611 [ --with-texmfdir=DIR set the TeX install directory to DIR],
613 [AC_MSG_CHECKING([where to put installed TeX files])
615 texmfdir='${datadir}/texmf'
617 '${datadir}/texmf' '${prefix}/lib/texmf' \
618 '${prefix}/texmf' '${libdir}/lib/texmf'; do
619 if test -d "mdw_PATH([$d])"; then
624 AC_MSG_RESULT([$texmfdir])])])
627 dnl --- *@-mdw_MANEXT-@* ---
629 dnl Author: Mark Wooding
631 dnl Synopsis: mdw_MANEXT
635 dnl Use: Sets the substitution `manext' for man page extensions.
637 AC_DEFUN([mdw_MANEXT], [
638 AC_ARG_WITH([man-ext],
639 [ --with-man-ext=EXT give manpages the EXT extension (e.g., foo.3EXT)],
640 [manext=$withval], [manext=mLib])
643 dnl----- That's all, folks --------------------------------- *@--GLOB-END--@*