1dnl If needed, define the m4_ifblank and m4_ifnblank macros from autoconf 2.64 2dnl This allows us to run with earlier Autoconfs as well. 3dnl 4dnl m4_ifblank(COND, [IF-BLANK], [IF-TEXT]) 5dnl m4_ifnblank(COND, [IF-TEXT], [IF-BLANK]) 6dnl ---------------------------------------- 7dnl If COND is empty, or consists only of blanks (space, tab, newline), 8dnl then expand IF-BLANK, otherwise expand IF-TEXT. This differs from 9dnl m4_ifval only if COND has just whitespace, but it helps optimize in 10dnl spite of users who mistakenly leave trailing space after what they 11dnl thought was an empty argument: 12dnl macro( 13dnl [] 14dnl ) 15dnl 16dnl Writing one macro in terms of the other causes extra overhead, so 17dnl we inline both definitions. 18ifdef([m4_ifblank],[],[ 19m4_define([m4_ifblank], 20[m4_if(m4_translit([[$1]], [ ][ ][ 21]), [], [$2], [$3])])]) 22 23ifdef([m4_ifnblank],[],[ 24m4_define([m4_ifnblank], 25[m4_if(m4_translit([[$1]], [ ][ ][ 26]), [], [$3], [$2])])]) 27 28dnl UL_PKG_STATIC(VARIABLE, MODULES) 29dnl 30dnl Calls pkg-config --static 31dnl 32AC_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 40dnl UL_CHECK_LIB(LIBRARY, FUNCTION, [VARSUFFIX = $1])) 41dnl 42dnl The VARSUFFIX is optional and overrides the default behavior. For example: 43dnl UL_CHECK_LIB(yyy, func, xxx) generates have_xxx and HAVE_LIBXXX 44dnl UL_CHECK_LIB(yyy, func) generates have_yyy and HAVE_LIBYYY 45dnl 46AC_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 56dnl UL_SET_ARCH(ARCHNAME, PATTERN) 57dnl 58dnl Define ARCH_<archname> condition if the pattern match with the current 59dnl architecture 60dnl 61AC_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 70dnl UL_SET_FLAGS(CFLAGS, CPPFLAGS, LDFLAGS) 71dnl 72dnl Sets new global CFLAGS, CPPFLAGS and LDFLAG, the original 73dnl setting could be restored by UL_RESTORE_FLAGS() 74dnl 75AC_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 84dnl UL_RESTORE_FLAGS() 85dnl 86dnl Restores CFLAGS, CPPFLAGS and LDFLAG previously saved by UL_SET_FLAGS() 87dnl 88AC_DEFUN([UL_RESTORE_FLAGS], [ 89 CFLAGS="$old_CFLAGS" 90 CPPFLAGS="$old_CPPFLAGS" 91 LDFLAGS="$old_LDFLAGS" 92]) 93 94 95dnl UL_CHECK_SYSCALL(SYSCALL, FALLBACK, ...) 96dnl 97dnl Only specify FALLBACK if the SYSCALL you're checking for is a "newish" one 98dnl 99AC_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 130dnl _UL_SYSCALL_CHECK_DECL(SYMBOL, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND) 131dnl 132dnl Check if SYMBOL is declared, using the headers needed for syscall checks. 133dnl 134m4_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 142dnl _UL_CHECK_SYSCALL_FALLBACK(PATTERN, VALUE, ...) 143dnl 144dnl Helper macro to create the body for the above `case'. 145dnl 146m4_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 154dnl UL_REQUIRES_LINUX(NAME, [VARSUFFIX = $1]) 155dnl 156dnl Modifies $build_<name> variable according to $enable_<name> and OS type. The 157dnl $enable_<name> could be "yes", "no" and "check". If build_<name> is "no" then 158dnl all checks are skipped. 159dnl 160dnl The default <name> for $build_ and $enable_ could be overwrited by option $2. 161dnl 162AC_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 183dnl UL_EXCLUDE_ARCH(NAME, ARCH, [VARSUFFIX = $1]) 184dnl 185dnl Modifies $build_<name> variable according to $enable_<name> and $host. The 186dnl $enable_<name> could be "yes", "no" and "check". If build_<name> is "no" then 187dnl all checks are skipped. 188dnl 189dnl The default <name> for $build_ and $enable_ could be overwrited by option $3. 190dnl 191AC_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 212 213dnl UL_REQUIRES_ARCH(NAME, ARCH, [VARSUFFIX = $1]) 214dnl 215dnl Modifies $build_<name> variable according to $enable_<name> and $host. The 216dnl $enable_<name> could be "yes", "no" and "check". If build_<name> is "no" then 217dnl all checks are skipped. 218dnl 219dnl The <arch> maybe a list, then at least one of the patterns in the list 220dnl have to match. 221dnl 222dnl The default <name> for $build_ and $enable_ could be overwrited by option $3. 223dnl 224AC_DEFUN([UL_REQUIRES_ARCH], [ 225 m4_define([suffix], m4_default([$3],$1)) 226 if test "x$[build_]suffix" != xno; then 227 AC_REQUIRE([AC_CANONICAL_HOST]) 228 [ul_archone_]suffix=no 229 m4_foreach([onearch], [$2], [ 230 case "$host" in #( 231 onearch) 232 [ul_archone_]suffix=yes ;; 233 esac 234 ])dnl 235 case $[enable_]suffix:$[ul_archone_]suffix in #( 236 no:*) 237 [build_]suffix=no ;; 238 yes:no) 239 AC_MSG_ERROR([$1 selected for unsupported architecture]);; 240 yes:*) 241 [build_]suffix=yes ;; 242 check:no) 243 AC_MSG_WARN([excluded for $host architecture; not building $1]) 244 [build_]suffix=no ;; 245 check:*) 246 [build_]suffix=yes ;; 247 esac 248 fi 249]) 250 251dnl UL_REQUIRES_HAVE(NAME, HAVENAME, HAVEDESC, [VARSUFFIX=$1]) 252dnl 253dnl Modifies $build_<name> variable according to $enable_<name> and 254dnl $have_<havename>. The <havedesc> is description used for warning/error 255dnl message (e.g. "function"). 256dnl 257dnl The <havename> maybe a list, then at least one of the items in the list 258dnl have to exist, for example: [ncurses, tinfo] means that have_ncurser=yes 259dnl *or* have_tinfo=yes must be defined. 260dnl 261dnl The default <name> for $build_ and $enable_ could be overwrited by option $4. 262dnl 263AC_DEFUN([UL_REQUIRES_HAVE], [ 264 m4_define([suffix], m4_default([$4],$1)) 265 266 if test "x$[build_]suffix" != xno; then 267 268 [ul_haveone_]suffix=no 269 m4_foreach([onehave], [$2], [ 270 if test "x$[have_]onehave" = xyes; then 271 [ul_haveone_]suffix=yes 272 fi 273 ])dnl 274 275 case $[enable_]suffix:$[ul_haveone_]suffix in #( 276 no:*) 277 [build_]suffix=no ;; 278 yes:yes) 279 [build_]suffix=yes ;; 280 yes:*) 281 AC_MSG_ERROR([$1 selected, but required $3 not available]);; 282 check:yes) 283 [build_]suffix=yes ;; 284 check:*) 285 AC_MSG_WARN([$3 not found; not building $1]) 286 [build_]suffix=no ;; 287 esac 288 fi 289]) 290 291dnl UL_REQUIRES_COMPILE(NAME, PROGRAM_PROLOGUE, PROGRAM_BODY, DESC, [VARSUFFIX=$1]) 292dnl 293dnl Modifies $build_<name> variable according to $enable_<name> and 294dnl ability compile AC_LANG_PROGRAM(<program_prologue>, <program_body>). 295dnl 296dnl The <desc> is description used for warning/error dnl message (e.g. "foo support"). 297dnl 298dnl The default <name> for $build_ and $enable_ could be overwrited by option $5. 299 300AC_DEFUN([UL_REQUIRES_COMPILE], [ 301 m4_define([suffix], m4_default([$5],$1)) 302 303 if test "x$[build_]suffix" != xno; then 304 305 AC_MSG_CHECKING([$4]) 306 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$2], [$3])], 307 [AC_MSG_RESULT([yes]) 308 [ul_haveprogram_]suffix=yes], 309 [AC_MSG_RESULT([no]) 310 [ul_haveprogram_]suffix=no]) 311 312 case $[enable_]suffix:$[ul_haveprogram_]suffix in #( 313 no:*) 314 [build_]suffix=no ;; 315 yes:yes) 316 [build_]suffix=yes ;; 317 yes:*) 318 AC_MSG_ERROR([$1 selected, but required $4 not available]);; 319 check:yes) 320 [build_]suffix=yes ;; 321 check:*) 322 AC_MSG_WARN([$4 not found; not building $1]) 323 [build_]suffix=no ;; 324 esac 325 fi 326]) 327 328dnl 329dnl UL_CONFLICTS_BUILD(NAME, ANOTHER, ANOTHERDESC, [VARSUFFIX=$1]) 330dnl 331dnl - ends with error if $enable_<name> and $build_<another> 332dnl are both set to 'yes' 333dnl - sets $build_<name> to 'no' if $build_<another> is 'yes' and 334dnl $enable_<name> is 'check' or 'no' 335dnl 336dnl The <havedesc> is description used for warning/error 337dnl message (e.g. "function"). 338dnl 339dnl The default <name> for $build_ and $enable_ could be overwrited by option $4. 340dnl 341AC_DEFUN([UL_CONFLICTS_BUILD], [ 342 m4_define([suffix], m4_default([$4],$1)) 343 344 if test "x$[build_]suffix" != xno; then 345 case $[enable_]suffix:$[build_]$2 in #( 346 no:*) 347 [build_]suffix=no ;; 348 check:yes) 349 [build_]suffix=no ;; 350 check:no) 351 [build_]suffix=yes ;; 352 yes:yes) 353 AC_MSG_ERROR([$1 selected, but it conflicts with $3]);; 354 esac 355 fi 356]) 357 358 359dnl UL_REQUIRES_BUILD(NAME, BUILDNAME, [VARSUFFIX=$1]) 360dnl 361dnl Modifies $build_<name> variable according to $enable_<name> and $have_funcname. 362dnl 363dnl The default <name> for $build_ and $enable_ could be overwrited by option $3. 364dnl 365AC_DEFUN([UL_REQUIRES_BUILD], [ 366 m4_define([suffix], m4_default([$3],$1)) 367 368 if test "x$[build_]suffix" != xno; then 369 case $[enable_]suffix:$[build_]$2 in #( 370 no:*) 371 [build_]suffix=no ;; 372 yes:yes) 373 [build_]suffix=yes ;; 374 yes:*) 375 AC_MSG_ERROR([$2 is needed to build $1]);; 376 check:yes) 377 [build_]suffix=yes ;; 378 check:*) 379 AC_MSG_WARN([$2 disabled; not building $1]) 380 [build_]suffix=no ;; 381 esac 382 fi 383]) 384 385dnl UL_REQUIRES_SYSCALL_CHECK(NAME, SYSCALL-TEST, [SYSCALLNAME=$1], [VARSUFFIX=$1]) 386dnl 387dnl Modifies $build_<name> variable according to $enable_<name> and SYSCALL-TEST 388dnl result. The $enable_<name> variable could be "yes", "no" and "check". If build_<name> 389dnl is "no" then all checks are skipped. 390dnl 391dnl Note that SYSCALL-TEST has to define $ul_cv_syscall_<name> variable, see 392dnl also UL_CHECK_SYSCALL(). 393dnl 394dnl The default <name> for $build_ and $enable_ count be overwrited by option $4 and 395dnl $ul_cv_syscall_ could be overwrited by $3. 396dnl 397AC_DEFUN([UL_REQUIRES_SYSCALL_CHECK], [ 398 m4_define([suffix], m4_default([$4],$1)) 399 m4_define([callname], m4_default([$3],$1)) 400 401 if test "x$[build_]suffix" != xno; then 402 if test "x$[enable_]suffix" = xno; then 403 [build_]suffix=no 404 else 405 $2 406 case $[enable_]suffix:$[ul_cv_syscall_]callname in #( 407 no:*) 408 [build_]suffix=no ;; 409 yes:no) 410 AC_MSG_ERROR([$1 selected but callname syscall not found]) ;; 411 check:no) 412 AC_MSG_WARN([callname syscall not found; not building $1]) 413 [build_]suffix=no ;; 414 *) 415 dnl default $ul_cv_syscall_ is SYS_ value 416 [build_]suffix=yes ;; 417 esac 418 fi 419 fi 420]) 421 422dnl UL_BUILD_INIT(NAME, [ENABLE_STATE], [VARSUFFIX = $1]) 423dnl 424dnl Initializes $build_<name> variable according to $enable_<name>. If 425dnl $enable_<name> is undefined then ENABLE_STATE is used and $enable_<name> is 426dnl set to ENABLE_STATE. 427dnl 428dnl The default <name> for $build_ and $enable_ could be overwrited by option $3. 429dnl 430AC_DEFUN([UL_BUILD_INIT], [ 431 m4_define([suffix], m4_default([$3],$1)) 432 m4_ifblank([$2], 433[if test "x$enable_[]suffix" = xno; then 434 build_[]suffix=no 435else 436 build_[]suffix=yes 437fi], 438[if test "x$ul_default_estate" != x; then 439 enable_[]suffix=$ul_default_estate 440 build_[]suffix=yes 441 if test "x$ul_default_estate" = xno; then 442 build_[]suffix=no 443 fi 444else[] 445 ifelse( 446 [$2], [check],[ 447 build_[]suffix=yes 448 enable_[]suffix=check], 449 [$2], [yes],[ 450 build_[]suffix=yes 451 enable_[]suffix=yes], 452 [$2], [no], [ 453 build_[]suffix=no 454 enable_[]suffix=no]) 455fi]) 456]) 457 458dnl UL_DEFAULT_ENABLE(NAME, ENABLE_STATE) 459dnl 460dnl Initializes $enable_<name> variable according to ENABLE_STATE. The default 461dnl setting is possible to override by global $ul_default_estate. 462dnl 463AC_DEFUN([UL_DEFAULT_ENABLE], [ 464 m4_define([suffix], $1) 465 if test "x$ul_default_estate" != x; then 466 enable_[]suffix=$ul_default_estate 467 else 468 enable_[]suffix=$2 469 fi 470]) 471 472 473dnl UL_ENABLE_ALIAS(NAME, MASTERNAME) 474dnl 475dnl Initializes $enable_<name> variable according to $enable_<mastername>. This 476dnl is useful for example if you want to use one --enable-mastername option 477dnl for group of programs. 478dnl 479AC_DEFUN([UL_ENABLE_ALIAS], [ 480 m4_define([suffix], $1) 481 m4_define([mastersuffix], $2) 482 483 enable_[]suffix=$enable_[]mastersuffix 484]) 485 486 487dnl UL_NCURSES_CHECK(NAME) 488dnl 489dnl Initializes $have_<name>, NCURSES_LIBS and NCURSES_CFLAGS variables according to 490dnl <name>{6,5}_config output. 491dnl 492dnl The expected <name> is ncurses or ncursesw. 493dnl 494AC_DEFUN([UL_NCURSES_CHECK], [ 495 m4_define([suffix], $1) 496 m4_define([SUFFIX], m4_toupper($1)) 497 498 # ncurses6-config 499 # 500 AS_IF([test "x$have_[]suffix" = xno], [ 501 AC_CHECK_TOOL(SUFFIX[]6_CONFIG, suffix[]6-config) 502 if AC_RUN_LOG([$SUFFIX[]6_CONFIG --version >/dev/null]); then 503 have_[]suffix=yes 504 NCURSES_LIBS=`$SUFFIX[]6_CONFIG --libs` 505 NCURSES_CFLAGS=`$SUFFIX[]6_CONFIG --cflags` 506 else 507 have_[]suffix=no 508 fi 509 ]) 510 511 # ncurses5-config 512 # 513 AS_IF([test "x$have_[]suffix" = xno], [ 514 AC_CHECK_TOOL(SUFFIX[]5_CONFIG, suffix[]5-config) 515 if AC_RUN_LOG([$SUFFIX[]5_CONFIG --version >/dev/null]); then 516 have_[]suffix=yes 517 NCURSES_LIBS=`$SUFFIX[]5_CONFIG --libs` 518 NCURSES_CFLAGS=`$SUFFIX[]5_CONFIG --cflags` 519 else 520 have_[]suffix=no 521 fi 522 ]) 523 524 # pkg-config (not supported by ncurses upstream by default) 525 # 526 AS_IF([test "x$have_[]suffix" = xno], [ 527 PKG_CHECK_MODULES(SUFFIX, [$1], [ 528 have_[]suffix=yes 529 NCURSES_LIBS=${SUFFIX[]_LIBS} 530 NCURSES_CFLAGS=${SUFFIX[]_CFLAGS} 531 ],[have_[]suffix=no]) 532 ]) 533 534 # classic autoconf way 535 # 536 AS_IF([test "x$have_[]suffix" = xno], [ 537 AC_CHECK_LIB([$1], [initscr], [have_[]suffix=yes], [have_[]suffix=no]) 538 AS_IF([test "x$have_[]suffix" = xyes], [NCURSES_LIBS="-l[]suffix"]) 539 ]) 540]) 541 542dnl 543dnl UL_TINFO_CHECK(NAME) 544dnl 545dnl Initializes $have_<name>, TINFO_LIBS and TINFO_CFLAGS variables. 546dnl 547dnl The expected <name> is tinfow or tinfo. 548dnl 549AC_DEFUN([UL_TINFO_CHECK], [ 550 m4_define([suffix], $1) 551 m4_define([SUFFIX], m4_toupper($1)) 552 553 PKG_CHECK_MODULES(SUFFIX, [$1], [ 554 dnl pkg-config success 555 have_[]suffix=yes 556 TINFO_LIBS=${SUFFIX[]_LIBS} 557 TINFO_CFLAGS=${SUFFIX[]_CFLAGS} 558 UL_PKG_STATIC([TINFO_LIBS_STATIC], [$1]) 559 ],[ 560 dnl If pkg-config failed, fall back to classic searching. 561 AC_CHECK_LIB([$1], [tgetent], [ 562 have_[]suffix=yes 563 TINFO_LIBS="-l[]suffix" 564 TINFO_LIBS_STATIC="-l[]suffix" 565 TINFO_CFLAGS=""]) 566 ]) 567]) 568