]> git.ipfire.org Git - thirdparty/util-linux.git/blob - m4/ul.m4
db04c12691d74e27034a0b80880d0a781e600f9b
[thirdparty/util-linux.git] / m4 / ul.m4
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.
3 dnl
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:
12 dnl macro(
13 dnl []
14 dnl )
15 dnl
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])])])
22
23 ifdef([m4_ifnblank],[],[
24 m4_define([m4_ifnblank],
25 [m4_if(m4_translit([[$1]], [ ][ ][
26 ]), [], [$3], [$2])])])
27
28 dnl UL_PKG_STATIC(VARIABLE, MODULES)
29 dnl
30 dnl Calls pkg-config --static
31 dnl
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"`
35 else
36 AC_MSG_ERROR([pkg-config description of $2, needed for static build, is not available])
37 fi
38 ])
39
40 dnl UL_CHECK_LIB(LIBRARY, FUNCTION, [VARSUFFIX = $1]))
41 dnl
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
45 dnl
46 AC_DEFUN([UL_CHECK_LIB], [
47 m4_define([suffix], m4_default([$3],$1))
48 [have_]suffix=yes
49 m4_ifdef([$3],
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])
53 ])
54
55
56 dnl UL_SET_ARCH(ARCHNAME, PATTERN)
57 dnl
58 dnl Define ARCH_<archname> condition if the pattern match with the current
59 dnl architecture
60 dnl
61 AC_DEFUN([UL_SET_ARCH], [
62 cpu_$1=false
63 case "$host" in
64 $2) cpu_$1=true ;;
65 esac
66 AM_CONDITIONAL(AS_TR_CPP(ARCH_$1), [test "x$cpu_$1" = xtrue])
67 ])
68
69
70 dnl UL_SET_FLAGS(CFLAGS, CPPFLAGS, LDFLAGS)
71 dnl
72 dnl Sets new global CFLAGS, CPPFLAGS and LDFLAG, the original
73 dnl setting could be restored by UL_RESTORE_FLAGS()
74 dnl
75 AC_DEFUN([UL_SET_FLAGS], [
76 old_CFLAGS="$CFLAGS"
77 old_CPPFLAGS="$CPPFLAGS"
78 old_LDFLAGS="$LDFLAGS"
79 CFLAGS="$CFLAGS $1"
80 CPPFLAGS="$CPPFLAGS $2"
81 LDFLAGS="$LDFLAGS $3"
82 ])
83
84 dnl UL_RESTORE_FLAGS()
85 dnl
86 dnl Restores CFLAGS, CPPFLAGS and LDFLAG previously saved by UL_SET_FLAGS()
87 dnl
88 AC_DEFUN([UL_RESTORE_FLAGS], [
89 CFLAGS="$old_CFLAGS"
90 CPPFLAGS="$old_CPPFLAGS"
91 LDFLAGS="$old_LDFLAGS"
92 ])
93
94
95 dnl UL_CHECK_SYSCALL(SYSCALL, FALLBACK, ...)
96 dnl
97 dnl Only specify FALLBACK if the SYSCALL you're checking for is a "newish" one
98 dnl
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],
103 [ul_cv_syscall_$1],
104 [_UL_SYSCALL_CHECK_DECL([SYS_$1],
105 [syscall=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],
109 [syscall=_NR_$1],
110 [
111 syscall=no
112 if test "x$linux_os" = xyes; then
113 case $host_cpu in
114 _UL_CHECK_SYSCALL_FALLBACK(m4_shift($@))
115 esac
116 fi
117 ])
118 ])
119 ul_cv_syscall_$1=$syscall
120 ])
121 case $ul_cv_syscall_$1 in #(
122 no) AC_MSG_WARN([Unable to detect syscall $1.]) ;;
123 SYS_*) ;;
124 *) AC_DEFINE_UNQUOTED([SYS_$1], [$ul_cv_syscall_$1],
125 [Fallback syscall number for $1]) ;;
126 esac
127 ])
128
129
130 dnl _UL_SYSCALL_CHECK_DECL(SYMBOL, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND)
131 dnl
132 dnl Check if SYMBOL is declared, using the headers needed for syscall checks.
133 dnl
134 m4_define([_UL_SYSCALL_CHECK_DECL],
135 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
136 #include <sys/syscall.h>
137 #include <unistd.h>
138 ]], [[int test = $1;]])],
139 [$2], [$3])
140 ])
141
142 dnl _UL_CHECK_SYSCALL_FALLBACK(PATTERN, VALUE, ...)
143 dnl
144 dnl Helper macro to create the body for the above `case'.
145 dnl
146 m4_define([_UL_CHECK_SYSCALL_FALLBACK],
147 [m4_ifval([$1],
148 [#(
149 $1) syscall="$2" ;;dnl
150 _UL_CHECK_SYSCALL_FALLBACK(m4_shiftn(2, $@))])dnl
151 ])
152
153
154 dnl UL_REQUIRES_LINUX(NAME, [VARSUFFIX = $1])
155 dnl
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.
159 dnl
160 dnl The default <name> for $build_ and $enable_ could be overwrited by option $2.
161 dnl
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 #(
167 no:*)
168 [build_]suffix=no ;;
169 yes:yes)
170 [build_]suffix=yes ;;
171 yes:*)
172 AC_MSG_ERROR([$1 selected for non-linux system]);;
173 check:yes)
174 [build_]suffix=yes ;;
175 check:*)
176 AC_MSG_WARN([non-linux system; not building $1])
177 [build_]suffix=no ;;
178 esac
179 fi
180 ])
181
182
183 dnl UL_EXCLUDE_ARCH(NAME, ARCH, [VARSUFFIX = $1])
184 dnl
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.
188 dnl
189 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
190 dnl
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 #(
196 no:*)
197 [build_]suffix=no ;;
198 yes:$2)
199 AC_MSG_ERROR([$1 selected for unsupported architecture]);;
200 yes:*)
201 [build_]suffix=yes ;;
202 check:$2)
203 AC_MSG_WARN([excluded for $host architecture; not building $1])
204 [build_]suffix=no ;;
205 check:*)
206 [build_]suffix=yes ;;
207 esac
208 fi
209 ])
210
211 dnl UL_REQUIRES_HAVE(NAME, HAVENAME, HAVEDESC, [VARSUFFIX=$1])
212 dnl
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").
216 dnl
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.
220 dnl
221 dnl The default <name> for $build_ and $enable_ could be overwrited by option $4.
222 dnl
223 AC_DEFUN([UL_REQUIRES_HAVE], [
224 m4_define([suffix], m4_default([$4],$1))
225
226 if test "x$[build_]suffix" != xno; then
227
228 [ul_haveone_]suffix=no
229 m4_foreach([onehave], [$2], [
230 if test "x$[have_]onehave" = xyes; then
231 [ul_haveone_]suffix=yes
232 fi
233 ])dnl
234
235 case $[enable_]suffix:$[ul_haveone_]suffix in #(
236 no:*)
237 [build_]suffix=no ;;
238 yes:yes)
239 [build_]suffix=yes ;;
240 yes:*)
241 AC_MSG_ERROR([$1 selected, but required $3 not available]);;
242 check:yes)
243 [build_]suffix=yes ;;
244 check:*)
245 AC_MSG_WARN([$3 not found; not building $1])
246 [build_]suffix=no ;;
247 esac
248 fi
249 ])
250
251 dnl UL_REQUIRES_HAVE(NAME, PROGRAM_PROLOGUE, PROGRAM_BODY, DESC, [VARSUFFIX=$1])
252 dnl
253 dnl Modifies $build_<name> variable according to $enable_<name> and
254 dnl ability compile AC_LANG_PROGRAM(<program_prologue>, <program_body>).
255 dnl
256 dnl The <desc> is description used for warning/error dnl message (e.g. "foo support").
257 dnl
258 dnl The default <name> for $build_ and $enable_ could be overwrited by option $5.
259
260 AC_DEFUN([UL_REQUIRES_COMPILE], [
261 m4_define([suffix], m4_default([$5],$1))
262
263 if test "x$[build_]suffix" != xno; then
264
265 AC_MSG_CHECKING([$4])
266 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$2], [$3])],
267 [AC_MSG_RESULT([yes])
268 [ul_haveprogram_]suffix=yes],
269 [AC_MSG_RESULT([no])
270 [ul_haveprogram_]suffix=no])
271
272 case $[enable_]suffix:$[ul_haveprogram_]suffix in #(
273 no:*)
274 [build_]suffix=no ;;
275 yes:yes)
276 [build_]suffix=yes ;;
277 yes:*)
278 AC_MSG_ERROR([$1 selected, but required $4 not available]);;
279 check:yes)
280 [build_]suffix=yes ;;
281 check:*)
282 AC_MSG_WARN([$4 not found; not building $1])
283 [build_]suffix=no ;;
284 esac
285 fi
286 ])
287
288 dnl
289 dnl UL_CONFLICTS_BUILD(NAME, ANOTHER, ANOTHERDESC, [VARSUFFIX=$1])
290 dnl
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'
295 dnl
296 dnl The <havedesc> is description used for warning/error
297 dnl message (e.g. "function").
298 dnl
299 dnl The default <name> for $build_ and $enable_ could be overwrited by option $4.
300 dnl
301 AC_DEFUN([UL_CONFLICTS_BUILD], [
302 m4_define([suffix], m4_default([$4],$1))
303
304 if test "x$[build_]suffix" != xno; then
305 case $[enable_]suffix:$[build_]$2 in #(
306 no:*)
307 [build_]suffix=no ;;
308 check:yes)
309 [build_]suffix=no ;;
310 check:no)
311 [build_]suffix=yes ;;
312 yes:yes)
313 AC_MSG_ERROR([$1 selected, but it conflicts with $3]);;
314 esac
315 fi
316 ])
317
318
319 dnl UL_REQUIRES_BUILD(NAME, BUILDNAME, [VARSUFFIX=$1])
320 dnl
321 dnl Modifies $build_<name> variable according to $enable_<name> and $have_funcname.
322 dnl
323 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
324 dnl
325 AC_DEFUN([UL_REQUIRES_BUILD], [
326 m4_define([suffix], m4_default([$3],$1))
327
328 if test "x$[build_]suffix" != xno; then
329 case $[enable_]suffix:$[build_]$2 in #(
330 no:*)
331 [build_]suffix=no ;;
332 yes:yes)
333 [build_]suffix=yes ;;
334 yes:*)
335 AC_MSG_ERROR([$2 is needed to build $1]);;
336 check:yes)
337 [build_]suffix=yes ;;
338 check:*)
339 AC_MSG_WARN([$2 disabled; not building $1])
340 [build_]suffix=no ;;
341 esac
342 fi
343 ])
344
345 dnl UL_REQUIRES_SYSCALL_CHECK(NAME, SYSCALL-TEST, [SYSCALLNAME=$1], [VARSUFFIX=$1])
346 dnl
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.
350 dnl
351 dnl Note that SYSCALL-TEST has to define $ul_cv_syscall_<name> variable, see
352 dnl also UL_CHECK_SYSCALL().
353 dnl
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.
356 dnl
357 AC_DEFUN([UL_REQUIRES_SYSCALL_CHECK], [
358 m4_define([suffix], m4_default([$4],$1))
359 m4_define([callname], m4_default([$3],$1))
360
361 if test "x$[build_]suffix" != xno; then
362 if test "x$[enable_]suffix" = xno; then
363 [build_]suffix=no
364 else
365 $2
366 case $[enable_]suffix:$[ul_cv_syscall_]callname in #(
367 no:*)
368 [build_]suffix=no ;;
369 yes:no)
370 AC_MSG_ERROR([$1 selected but callname syscall not found]) ;;
371 check:no)
372 AC_MSG_WARN([callname syscall not found; not building $1])
373 [build_]suffix=no ;;
374 *)
375 dnl default $ul_cv_syscall_ is SYS_ value
376 [build_]suffix=yes ;;
377 esac
378 fi
379 fi
380 ])
381
382 dnl UL_BUILD_INIT(NAME, [ENABLE_STATE], [VARSUFFIX = $1])
383 dnl
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.
387 dnl
388 dnl The default <name> for $build_ and $enable_ could be overwrited by option $3.
389 dnl
390 AC_DEFUN([UL_BUILD_INIT], [
391 m4_define([suffix], m4_default([$3],$1))
392 m4_ifblank([$2],
393 [if test "x$enable_[]suffix" = xno; then
394 build_[]suffix=no
395 else
396 build_[]suffix=yes
397 fi],
398 [if test "x$ul_default_estate" != x; then
399 enable_[]suffix=$ul_default_estate
400 build_[]suffix=yes
401 if test "x$ul_default_estate" = xno; then
402 build_[]suffix=no
403 fi
404 else[]
405 ifelse(
406 [$2], [check],[
407 build_[]suffix=yes
408 enable_[]suffix=check],
409 [$2], [yes],[
410 build_[]suffix=yes
411 enable_[]suffix=yes],
412 [$2], [no], [
413 build_[]suffix=no
414 enable_[]suffix=no])
415 fi])
416 ])
417
418 dnl UL_DEFAULT_ENABLE(NAME, ENABLE_STATE)
419 dnl
420 dnl Initializes $enable_<name> variable according to ENABLE_STATE. The default
421 dnl setting is possible to override by global $ul_default_estate.
422 dnl
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
427 else
428 enable_[]suffix=$2
429 fi
430 ])
431
432
433 dnl UL_ENABLE_ALIAS(NAME, MASTERNAME)
434 dnl
435 dnl Initializes $enable_<name> variable according to $enable_<mastername>. This
436 dnl is usefull for example if you want to use one --enable-mastername option
437 dnl for group of programs.
438 dnl
439 AC_DEFUN([UL_ENABLE_ALIAS], [
440 m4_define([suffix], $1)
441 m4_define([mastersuffix], $2)
442
443 enable_[]suffix=$enable_[]mastersuffix
444 ])
445
446
447 dnl UL_NCURSES_CHECK(NAME)
448 dnl
449 dnl Initializes $have_<name>, NCURSES_LIBS and NCURSES_CFLAGS variables according to
450 dnl <name>{6,5}_config output.
451 dnl
452 dnl The expected <name> is ncurses or ncursesw.
453 dnl
454 AC_DEFUN([UL_NCURSES_CHECK], [
455 m4_define([suffix], $1)
456 m4_define([SUFFIX], m4_toupper($1))
457
458 # pkg-config (not supported by ncurses upstream by default)
459 #
460 PKG_CHECK_MODULES(SUFFIX, [$1], [
461 have_[]suffix=yes
462 NCURSES_LIBS=${SUFFIX[]_LIBS}
463 NCURSES_CFLAGS=${SUFFIX[]_CFLAGS}
464 ],[have_[]suffix=no])
465
466 # ncurses6-config
467 #
468 AS_IF([test "x$have_[]suffix" = xno], [
469 AC_CHECK_TOOL(SUFFIX[]6_CONFIG, suffix[]6-config)
470 if AC_RUN_LOG([$SUFFIX[]6_CONFIG --version >/dev/null]); then
471 have_[]suffix=yes
472 NCURSES_LIBS=`$SUFFIX[]6_CONFIG --libs`
473 NCURSES_CFLAGS=`$SUFFIX[]6_CONFIG --cflags`
474 else
475 have_[]suffix=no
476 fi
477 ])
478
479 # ncurses5-config
480 #
481 AS_IF([test "x$have_[]suffix" = xno], [
482 AC_CHECK_TOOL(SUFFIX[]5_CONFIG, suffix[]5-config)
483 if AC_RUN_LOG([$SUFFIX[]5_CONFIG --version >/dev/null]); then
484 have_[]suffix=yes
485 NCURSES_LIBS=`$SUFFIX[]5_CONFIG --libs`
486 NCURSES_CFLAGS=`$SUFFIX[]5_CONFIG --cflags`
487 else
488 have_[]suffix=no
489 fi
490 ])
491
492 # classic autoconf way
493 #
494 AS_IF([test "x$have_[]suffix" = xno], [
495 AS_IF([test "x$have_[]suffix" = xno], [
496 AC_CHECK_LIB([$1], [initscr], [have_[]suffix=yes], [have_[]suffix=no])
497 AS_IF([test "x$have_[]suffix" = xyes], [NCURSES_LIBS="-l[]suffix"])
498 ])
499 ])
500 ])