1 dnl If needed, define the m4_ifblank and m4_ifnblank macros from autoconf 2.64
2 dnl This allows us to run with earlier Autoconfs as well.
4 dnl m4_ifblank(COND, [IF-BLANK], [IF-TEXT])
5 dnl m4_ifnblank(COND, [IF-TEXT], [IF-BLANK])
6 dnl ----------------------------------------
7 dnl If COND is empty, or consists only of blanks (space, tab, newline),
8 dnl then expand IF-BLANK, otherwise expand IF-TEXT. This differs from
9 dnl m4_ifval only if COND has just whitespace, but it helps optimize in
10 dnl spite of users who mistakenly leave trailing space after what they
11 dnl thought was an empty argument:
16 dnl Writing one macro in terms of the other causes extra overhead, so
17 dnl we inline both definitions.
18 ifdef([m4_ifblank],[],[
19 m4_define([m4_ifblank],
20 [m4_if(m4_translit([[$1]], [ ][ ][
21 ]), [], [$2], [$3])])])
23 ifdef([m4_ifnblank],[],[
24 m4_define([m4_ifnblank],
25 [m4_if(m4_translit([[$1]], [ ][ ][
26 ]), [], [$3], [$2])])])
28 dnl UL_PKG_STATIC(VARIABLE, MODULES)
30 dnl Calls pkg-config --static
32 AC_DEFUN([UL_PKG_STATIC], [
33 if AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$2"]); then
34 $1=`$PKG_CONFIG --libs --static "$2"`
36 AC_MSG_ERROR([pkg-config description of $2, needed for static build, is not available])
40 dnl UL_CHECK_LIB(LIBRARY, FUNCTION, [VARSUFFIX = $1]))
42 dnl The VARSUFFIX is optional and overrides the default behavior. For example:
43 dnl UL_CHECK_LIB(yyy, func, xxx) generates have_xxx and HAVE_LIBXXX
44 dnl UL_CHECK_LIB(yyy, func) generates have_yyy and HAVE_LIBYYY
46 AC_DEFUN([UL_CHECK_LIB], [
47 m4_define([suffix], m4_default([$3],$1))
50 [AC_CHECK_LIB([$1], [$2], [AC_DEFINE(AS_TR_CPP([HAVE_LIB]suffix), 1)], [[have_]suffix=no])],
51 [AC_CHECK_LIB([$1], [$2], [], [[have_]suffix=no])])
52 AM_CONDITIONAL(AS_TR_CPP([HAVE_]suffix), [test [$have_]suffix = yes])
56 dnl UL_SET_ARCH(ARCHNAME, PATTERN)
58 dnl Define ARCH_<archname> condition if the pattern match with the current
61 AC_DEFUN([UL_SET_ARCH], [
66 AM_CONDITIONAL(AS_TR_CPP(ARCH_$1), [test "x$cpu_$1" = xtrue])
70 dnl UL_SET_FLAGS(CFLAGS, CPPFLAGS, LDFLAGS)
72 dnl Sets new global CFLAGS, CPPFLAGS and LDFLAG, the original
73 dnl setting could be restored by UL_RESTORE_FLAGS()
75 AC_DEFUN([UL_SET_FLAGS], [
77 old_CPPFLAGS="$CPPFLAGS"
78 old_LDFLAGS="$LDFLAGS"
80 CPPFLAGS="$CPPFLAGS $2"
84 dnl UL_RESTORE_FLAGS()
86 dnl Restores CFLAGS, CPPFLAGS and LDFLAG previously saved by UL_SET_FLAGS()
88 AC_DEFUN([UL_RESTORE_FLAGS], [
90 CPPFLAGS="$old_CPPFLAGS"
91 LDFLAGS="$old_LDFLAGS"
95 dnl UL_CHECK_SYSCALL(SYSCALL, FALLBACK, ...)
97 dnl Only specify FALLBACK if the SYSCALL you're checking for is a "newish" one
99 AC_DEFUN([UL_CHECK_SYSCALL], [
100 dnl This macro uses host_cpu.
101 AC_REQUIRE([AC_CANONICAL_HOST])
102 AC_CACHE_CHECK([for syscall $1],
104 [_UL_SYSCALL_CHECK_DECL([SYS_$1],
106 [dnl Our libc failed use, so see if we can get the kernel
107 dnl headers to play ball ...
108 _UL_SYSCALL_CHECK_DECL([_NR_$1],
112 if test "x$linux_os" = xyes; then
114 _UL_CHECK_SYSCALL_FALLBACK(m4_shift($@))
119 ul_cv_syscall_$1=$syscall
121 case $ul_cv_syscall_$1 in #(
122 no) AC_MSG_WARN([Unable to detect syscall $1.]) ;;
124 *) AC_DEFINE_UNQUOTED([SYS_$1], [$ul_cv_syscall_$1],
125 [Fallback syscall number for $1]) ;;
130 dnl _UL_SYSCALL_CHECK_DECL(SYMBOL, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
132 dnl Check if SYMBOL is declared, using the headers needed for syscall checks.
134 m4_define([_UL_SYSCALL_CHECK_DECL],
135 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
136 #include <sys/syscall.h>
138 ]], [[int test = $1;]])],
142 dnl _UL_CHECK_SYSCALL_FALLBACK(PATTERN, VALUE, ...)
144 dnl Helper macro to create the body for the above `case'.
146 m4_define([_UL_CHECK_SYSCALL_FALLBACK],
149 $1) syscall="$2" ;;dnl
150 _UL_CHECK_SYSCALL_FALLBACK(m4_shiftn(2, $@))])dnl
154 dnl UL_REQUIRES_LINUX(NAME, [VARSUFFIX = $1])
156 dnl Modifies $build_<name> variable according to $enable_<name> and OS type. The
157 dnl $enable_<name> could be "yes", "no" and "check". If build_<name> is "no" then
158 dnl all checks are skiped.
160 dnl The default <name> for $build_ and $enable_ could be overwrited by option $2.
162 AC_DEFUN([UL_REQUIRES_LINUX], [
163 m4_define([suffix], m4_default([$2],$1))
164 if test "x$[build_]suffix" != xno; then
165 AC_REQUIRE([AC_CANONICAL_HOST])
166 case $[enable_]suffix:$linux_os in #(
170 [build_]suffix=yes ;;
172 AC_MSG_ERROR([$1 selected for non-linux system]);;
174 [build_]suffix=yes ;;
176 AC_MSG_WARN([non-linux system; not building $1])
183 dnl UL_EXCLUDE_ARCH(NAME, ARCH, [VARSUFFIX = $1])
185 dnl Modifies $build_<name> variable according to $enable_<name> and $host. The
186 dnl $enable_<name> could be "yes", "no" and "check". If build_<name> is "no" then
187 dnl all checks are skiped.
189 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
191 AC_DEFUN([UL_EXCLUDE_ARCH], [
192 m4_define([suffix], m4_default([$3],$1))
193 if test "x$[build_]suffix" != xno; then
194 AC_REQUIRE([AC_CANONICAL_HOST])
195 case $[enable_]suffix:"$host" in #(
199 AC_MSG_ERROR([$1 selected for unsupported architecture]);;
201 [build_]suffix=yes ;;
203 AC_MSG_WARN([excluded for $host architecture; not building $1])
206 [build_]suffix=yes ;;
211 dnl UL_REQUIRES_HAVE(NAME, HAVENAME, HAVEDESC, [VARSUFFIX=$1])
213 dnl Modifies $build_<name> variable according to $enable_<name> and
214 dnl $have_<havename>. The <havedesc> is description used for warning/error
215 dnl message (e.g. "function").
217 dnl The <havename> maybe a list, then at least one of the items in the list
218 dnl have to exist, for example: [ncurses, tinfo] means that have_ncurser=yes
219 dnl *or* have_tinfo=yes must be defined.
221 dnl The default <name> for $build_ and $enable_ could be overwrited by option $4.
223 AC_DEFUN([UL_REQUIRES_HAVE], [
224 m4_define([suffix], m4_default([$4],$1))
226 if test "x$[build_]suffix" != xno; then
228 [ul_haveone_]suffix=no
229 m4_foreach([onehave], [$2], [
230 if test "x$[have_]onehave" = xyes; then
231 [ul_haveone_]suffix=yes
235 case $[enable_]suffix:$[ul_haveone_]suffix in #(
239 [build_]suffix=yes ;;
241 AC_MSG_ERROR([$1 selected, but required $3 not available]);;
243 [build_]suffix=yes ;;
245 AC_MSG_WARN([$3 not found; not building $1])
251 dnl UL_REQUIRES_HAVE(NAME, PROGRAM_PROLOGUE, PROGRAM_BODY, DESC, [VARSUFFIX=$1])
253 dnl Modifies $build_<name> variable according to $enable_<name> and
254 dnl ability compile AC_LANG_PROGRAM(<program_prologue>, <program_body>).
256 dnl The <desc> is description used for warning/error dnl message (e.g. "foo support").
258 dnl The default <name> for $build_ and $enable_ could be overwrited by option $5.
260 AC_DEFUN([UL_REQUIRES_COMPILE], [
261 m4_define([suffix], m4_default([$5],$1))
263 if test "x$[build_]suffix" != xno; then
265 AC_MSG_CHECKING([$4])
266 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
267 [AC_MSG_RESULT([yes])
268 [ul_haveprogram_]suffix=yes],
270 [ul_haveprogram_]suffix=no])
272 case $[enable_]suffix:$[ul_haveprogram_]suffix in #(
276 [build_]suffix=yes ;;
278 AC_MSG_ERROR([$1 selected, but required $4 not available]);;
280 [build_]suffix=yes ;;
282 AC_MSG_WARN([$4 not found; not building $1])
289 dnl UL_CONFLICTS_BUILD(NAME, ANOTHER, ANOTHERDESC, [VARSUFFIX=$1])
291 dnl - ends with error if $enable_<name> and $build_<another>
292 dnl are both set to 'yes'
293 dnl - sets $build_<name> to 'no' if $build_<another> is 'yes' and
294 dnl $enable_<name> is 'check' or 'no'
296 dnl The <havedesc> is description used for warning/error
297 dnl message (e.g. "function").
299 dnl The default <name> for $build_ and $enable_ could be overwrited by option $4.
301 AC_DEFUN([UL_CONFLICTS_BUILD], [
302 m4_define([suffix], m4_default([$4],$1))
304 if test "x$[build_]suffix" != xno; then
305 case $[enable_]suffix:$[build_]$2 in #(
311 [build_]suffix=yes ;;
313 AC_MSG_ERROR([$1 selected, but it conflicts with $3]);;
319 dnl UL_REQUIRES_BUILD(NAME, BUILDNAME, [VARSUFFIX=$1])
321 dnl Modifies $build_<name> variable according to $enable_<name> and $have_funcname.
323 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
325 AC_DEFUN([UL_REQUIRES_BUILD], [
326 m4_define([suffix], m4_default([$3],$1))
328 if test "x$[build_]suffix" != xno; then
329 case $[enable_]suffix:$[build_]$2 in #(
333 [build_]suffix=yes ;;
335 AC_MSG_ERROR([$2 is needed to build $1]);;
337 [build_]suffix=yes ;;
339 AC_MSG_WARN([$2 disabled; not building $1])
345 dnl UL_REQUIRES_SYSCALL_CHECK(NAME, SYSCALL-TEST, [SYSCALLNAME=$1], [VARSUFFIX=$1])
347 dnl Modifies $build_<name> variable according to $enable_<name> and SYSCALL-TEST
348 dnl result. The $enable_<name> variable could be "yes", "no" and "check". If build_<name>
349 dnl is "no" then all checks are skiped.
351 dnl Note that SYSCALL-TEST has to define $ul_cv_syscall_<name> variable, see
352 dnl also UL_CHECK_SYSCALL().
354 dnl The default <name> for $build_ and $enable_ count be overwrited by option $4 and
355 dnl $ul_cv_syscall_ could be overwrited by $3.
357 AC_DEFUN([UL_REQUIRES_SYSCALL_CHECK], [
358 m4_define([suffix], m4_default([$4],$1))
359 m4_define([callname], m4_default([$3],$1))
361 if test "x$[build_]suffix" != xno; then
362 if test "x$[enable_]suffix" = xno; then
366 case $[enable_]suffix:$[ul_cv_syscall_]callname in #(
370 AC_MSG_ERROR([$1 selected but callname syscall not found]) ;;
372 AC_MSG_WARN([callname syscall not found; not building $1])
375 dnl default $ul_cv_syscall_ is SYS_ value
376 [build_]suffix=yes ;;
382 dnl UL_BUILD_INIT(NAME, [ENABLE_STATE], [VARSUFFIX = $1])
384 dnl Initializes $build_<name> variable according to $enable_<name>. If
385 dnl $enable_<name> is undefined then ENABLE_STATE is used and $enable_<name> is
386 dnl set to ENABLE_STATE.
388 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
390 AC_DEFUN([UL_BUILD_INIT], [
391 m4_define([suffix], m4_default([$3],$1))
393 [if test "x$enable_[]suffix" = xno; then
398 [if test "x$ul_default_estate" != x; then
399 enable_[]suffix=$ul_default_estate
401 if test "x$ul_default_estate" = xno; then
408 enable_[]suffix=check],
411 enable_[]suffix=yes],
418 dnl UL_DEFAULT_ENABLE(NAME, ENABLE_STATE)
420 dnl Initializes $enable_<name> variable according to ENABLE_STATE. The default
421 dnl setting is possible to override by global $ul_default_estate.
423 AC_DEFUN([UL_DEFAULT_ENABLE], [
424 m4_define([suffix], $1)
425 if test "x$ul_default_estate" != x; then
426 enable_[]suffix=$ul_default_estate
433 dnl UL_ENABLE_ALIAS(NAME, MASTERNAME)
435 dnl Initializes $enable_<name> variable according to $enable_<mastername>. This
436 dnl is useful for example if you want to use one --enable-mastername option
437 dnl for group of programs.
439 AC_DEFUN([UL_ENABLE_ALIAS], [
440 m4_define([suffix], $1)
441 m4_define([mastersuffix], $2)
443 enable_[]suffix=$enable_[]mastersuffix
447 dnl UL_NCURSES_CHECK(NAME)
449 dnl Initializes $have_<name>, NCURSES_LIBS and NCURSES_CFLAGS variables according to
450 dnl <name>{6,5}_config output.
452 dnl The expected <name> is ncurses or ncursesw.
454 AC_DEFUN([UL_NCURSES_CHECK], [
455 m4_define([suffix], $1)
456 m4_define([SUFFIX], m4_toupper($1))
460 AS_IF([test "x$have_[]suffix" = xno], [
461 AC_CHECK_TOOL(SUFFIX[]6_CONFIG, suffix[]6-config)
462 if AC_RUN_LOG([$SUFFIX[]6_CONFIG --version >/dev/null]); then
464 NCURSES_LIBS=`$SUFFIX[]6_CONFIG --libs`
465 NCURSES_CFLAGS=`$SUFFIX[]6_CONFIG --cflags`
473 AS_IF([test "x$have_[]suffix" = xno], [
474 AC_CHECK_TOOL(SUFFIX[]5_CONFIG, suffix[]5-config)
475 if AC_RUN_LOG([$SUFFIX[]5_CONFIG --version >/dev/null]); then
477 NCURSES_LIBS=`$SUFFIX[]5_CONFIG --libs`
478 NCURSES_CFLAGS=`$SUFFIX[]5_CONFIG --cflags`
484 # pkg-config (not supported by ncurses upstream by default)
486 AS_IF([test "x$have_[]suffix" = xno], [
487 PKG_CHECK_MODULES(SUFFIX, [$1], [
489 NCURSES_LIBS=${SUFFIX[]_LIBS}
490 NCURSES_CFLAGS=${SUFFIX[]_CFLAGS}
491 ],[have_[]suffix=no])
494 # classic autoconf way
496 AS_IF([test "x$have_[]suffix" = xno], [
497 AC_CHECK_LIB([$1], [initscr], [have_[]suffix=yes], [have_[]suffix=no])
498 AS_IF([test "x$have_[]suffix" = xyes], [NCURSES_LIBS="-l[]suffix"])
503 dnl UL_TINFO_CHECK(NAME)
505 dnl Initializes $have_<name>, TINFO_LIBS and TINFO_CFLAGS variables.
507 dnl The expected <name> is tinfow or tinfo.
509 AC_DEFUN([UL_TINFO_CHECK], [
510 m4_define([suffix], $1)
511 m4_define([SUFFIX], m4_toupper($1))
513 PKG_CHECK_MODULES(SUFFIX, [$1], [
514 dnl pkg-config success
516 TINFO_LIBS=${SUFFIX[]_LIBS}
517 TINFO_CFLAGS=${SUFFIX[]_CFLAGS}
518 UL_PKG_STATIC([TINFO_LIBS_STATIC], [$1])
520 dnl If pkg-config failed, fall back to classic searching.
521 AC_CHECK_LIB([$1], [tgetent], [
523 TINFO_LIBS="-l[]suffix"
524 TINFO_LIBS_STATIC="-l[]suffix"