]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/byacc/aclocal.m4
MFV: r309561
[FreeBSD/FreeBSD.git] / contrib / byacc / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.41 2016/12/02 13:03:06 tom Exp $
2 dnl Macros for byacc configure script (Thomas E. Dickey)
3 dnl ---------------------------------------------------------------------------
4 dnl Copyright 2004-2015,2016 Thomas E. Dickey
5 dnl 
6 dnl Permission is hereby granted, free of charge, to any person obtaining a
7 dnl copy of this software and associated documentation files (the
8 dnl "Software"), to deal in the Software without restriction, including
9 dnl without limitation the rights to use, copy, modify, merge, publish,
10 dnl distribute, distribute with modifications, sublicense, and/or sell
11 dnl copies of the Software, and to permit persons to whom the Software is
12 dnl furnished to do so, subject to the following conditions:
13 dnl 
14 dnl The above copyright notice and this permission notice shall be included
15 dnl in all copies or portions of the Software.
16 dnl 
17 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21 dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22 dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
23 dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 dnl 
25 dnl Except as contained in this notice, the name(s) of the above copyright
26 dnl holders shall not be used in advertising or otherwise to promote the
27 dnl sale, use or other dealings in this Software without prior written
28 dnl authorization.
29 dnl ---------------------------------------------------------------------------
30 dnl ---------------------------------------------------------------------------
31 dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49
32 dnl ------------------
33 dnl Conditionally generate script according to whether we're using a given autoconf.
34 dnl
35 dnl $1 = version to compare against
36 dnl $2 = code to use if AC_ACVERSION is at least as high as $1.
37 dnl $3 = code to use if AC_ACVERSION is older than $1.
38 define([CF_ACVERSION_CHECK],
39 [
40 ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl
41 ifdef([m4_version_compare],
42 [m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])],
43 [CF_ACVERSION_COMPARE(
44 AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])),
45 AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl
46 dnl ---------------------------------------------------------------------------
47 dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53
48 dnl --------------------
49 dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1,
50 dnl                      MAJOR2, MINOR2, TERNARY2,
51 dnl                      PRINTABLE2, not FOUND, FOUND)
52 define([CF_ACVERSION_COMPARE],
53 [ifelse(builtin([eval], [$2 < $5]), 1,
54 [ifelse([$8], , ,[$8])],
55 [ifelse([$9], , ,[$9])])])dnl
56 dnl ---------------------------------------------------------------------------
57 dnl CF_ADD_CFLAGS version: 12 updated: 2015/04/12 15:39:00
58 dnl -------------
59 dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
60 dnl The second parameter if given makes this macro verbose.
61 dnl
62 dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
63 dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
64 dnl confused by the quotes (which require backslashes to keep them usable).
65 AC_DEFUN([CF_ADD_CFLAGS],
66 [
67 cf_fix_cppflags=no
68 cf_new_cflags=
69 cf_new_cppflags=
70 cf_new_extra_cppflags=
71
72 for cf_add_cflags in $1
73 do
74 case $cf_fix_cppflags in
75 (no)
76         case $cf_add_cflags in
77         (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
78                 case $cf_add_cflags in
79                 (-D*)
80                         cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
81
82                         test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
83                                 && test -z "${cf_tst_cflags}" \
84                                 && cf_fix_cppflags=yes
85
86                         if test $cf_fix_cppflags = yes ; then
87                                 cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
88                                 continue
89                         elif test "${cf_tst_cflags}" = "\"'" ; then
90                                 cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
91                                 continue
92                         fi
93                         ;;
94                 esac
95                 case "$CPPFLAGS" in
96                 (*$cf_add_cflags)
97                         ;;
98                 (*)
99                         case $cf_add_cflags in
100                         (-D*)
101                                 cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
102                                 CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags)
103                                 ;;
104                         esac
105                         cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
106                         ;;
107                 esac
108                 ;;
109         (*)
110                 cf_new_cflags="$cf_new_cflags $cf_add_cflags"
111                 ;;
112         esac
113         ;;
114 (yes)
115         cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
116
117         cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'`
118
119         test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
120                 && test -z "${cf_tst_cflags}" \
121                 && cf_fix_cppflags=no
122         ;;
123 esac
124 done
125
126 if test -n "$cf_new_cflags" ; then
127         ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)])
128         CFLAGS="$CFLAGS $cf_new_cflags"
129 fi
130
131 if test -n "$cf_new_cppflags" ; then
132         ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)])
133         CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
134 fi
135
136 if test -n "$cf_new_extra_cppflags" ; then
137         ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
138         EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
139 fi
140
141 AC_SUBST(EXTRA_CPPFLAGS)
142
143 ])dnl
144 dnl ---------------------------------------------------------------------------
145 dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31
146 dnl --------------
147 dnl Allow user to disable a normally-on option.
148 AC_DEFUN([CF_ARG_DISABLE],
149 [CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl
150 dnl ---------------------------------------------------------------------------
151 dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14
152 dnl -------------
153 dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
154 dnl values.
155 dnl
156 dnl Parameters:
157 dnl $1 = option name
158 dnl $2 = help-string
159 dnl $3 = action to perform if option is not default
160 dnl $4 = action if perform if option is default
161 dnl $5 = default option value (either 'yes' or 'no')
162 AC_DEFUN([CF_ARG_OPTION],
163 [AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes)
164         if test "$enableval" != "$5" ; then
165 ifelse([$3],,[    :]dnl
166 ,[    $3]) ifelse([$4],,,[
167         else
168                 $4])
169         fi],[enableval=$5 ifelse([$4],,,[
170         $4
171 ])dnl
172 ])])dnl
173 dnl ---------------------------------------------------------------------------
174 dnl CF_CC_ENV_FLAGS version: 6 updated: 2016/08/29 20:57:00
175 dnl ---------------
176 dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
177 dnl into CC.  This will not help with broken scripts that wrap the compiler
178 dnl with options, but eliminates a more common category of user confusion.
179 dnl
180 dnl In particular, it addresses the problem of being able to run the C
181 dnl preprocessor in a consistent manner.
182 dnl
183 dnl Caveat: this also disallows blanks in the pathname for the compiler, but
184 dnl the nuisance of having inconsistent settings for compiler and preprocessor
185 dnl outweighs that limitation.
186 AC_DEFUN([CF_CC_ENV_FLAGS],
187 [
188 # This should have been defined by AC_PROG_CC
189 : ${CC:=cc}
190
191 AC_MSG_CHECKING(\$CC variable)
192 case "$CC" in
193 (*[[\ \ ]]-*)
194         AC_MSG_RESULT(broken)
195         AC_MSG_WARN(your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options)
196         # humor him...
197         cf_flags=`echo "$CC" | sed -e 's/^.*[[  ]]\(-[[^        ]]\)/\1/'`
198         CC=`echo "$CC " | sed -e 's/[[  ]]-[[^  ]].*$//' -e 's/[[       ]]*$//'`
199         for cf_arg in $cf_flags
200         do
201                 case "x$cf_arg" in
202                 (x-[[IUDfgOW]]*)
203                         CF_ADD_CFLAGS($cf_flags)
204                         ;;
205                 (*)
206                         CC="$CC $cf_arg"
207                         ;;
208                 esac
209         done
210         CF_VERBOSE(resulting CC: '$CC')
211         CF_VERBOSE(resulting CFLAGS: '$CFLAGS')
212         CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS')
213         ;;
214 (*)
215         AC_MSG_RESULT(ok)
216         ;;
217 esac
218 ])dnl
219 dnl ---------------------------------------------------------------------------
220 dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03
221 dnl --------------
222 dnl Check if we're accidentally using a cache from a different machine.
223 dnl Derive the system name, as a check for reusing the autoconf cache.
224 dnl
225 dnl If we've packaged config.guess and config.sub, run that (since it does a
226 dnl better job than uname).  Normally we'll use AC_CANONICAL_HOST, but allow
227 dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
228 dnl which is useful in cross-compiles.
229 dnl
230 dnl Note: we would use $ac_config_sub, but that is one of the places where
231 dnl autoconf 2.5x broke compatibility with autoconf 2.13
232 AC_DEFUN([CF_CHECK_CACHE],
233 [
234 if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
235         ifelse([$1],,[AC_CANONICAL_HOST],[$1])
236         system_name="$host_os"
237 else
238         system_name="`(uname -s -r) 2>/dev/null`"
239         if test -z "$system_name" ; then
240                 system_name="`(hostname) 2>/dev/null`"
241         fi
242 fi
243 test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.])
244 AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
245
246 test -z "$system_name" && system_name="$cf_cv_system_name"
247 test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
248
249 if test ".$system_name" != ".$cf_cv_system_name" ; then
250         AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name))
251         AC_MSG_ERROR("Please remove config.cache and try again.")
252 fi
253 ])dnl
254 dnl ---------------------------------------------------------------------------
255 dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35
256 dnl -----------------
257 dnl Check if the given compiler is really clang.  clang's C driver defines
258 dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does
259 dnl not ignore some gcc options.
260 dnl
261 dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
262 dnl ensure that it is not mistaken for gcc/g++.  It is normally invoked from
263 dnl the wrappers for gcc and g++ warnings.
264 dnl
265 dnl $1 = GCC (default) or GXX
266 dnl $2 = CLANG_COMPILER (default)
267 dnl $3 = CFLAGS (default) or CXXFLAGS
268 AC_DEFUN([CF_CLANG_COMPILER],[
269 ifelse([$2],,CLANG_COMPILER,[$2])=no
270
271 if test "$ifelse([$1],,[$1],GCC)" = yes ; then
272         AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler)
273         cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
274         ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -Qunused-arguments"
275         AC_TRY_COMPILE([],[
276 #ifdef __clang__
277 #else
278 make an error
279 #endif
280 ],[ifelse([$2],,CLANG_COMPILER,[$2])=yes
281 cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
282 ],[])
283         ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
284         AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2]))
285 fi
286 ])
287 dnl ---------------------------------------------------------------------------
288 dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57
289 dnl ---------------
290 dnl You can always use "make -n" to see the actual options, but it's hard to
291 dnl pick out/analyze warning messages when the compile-line is long.
292 dnl
293 dnl Sets:
294 dnl     ECHO_LT - symbol to control if libtool is verbose
295 dnl     ECHO_LD - symbol to prefix "cc -o" lines
296 dnl     RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
297 dnl     SHOW_CC - symbol to put before explicit "cc -c" lines
298 dnl     ECHO_CC - symbol to put before any "cc" line
299 dnl
300 AC_DEFUN([CF_DISABLE_ECHO],[
301 AC_MSG_CHECKING(if you want to see long compiling messages)
302 CF_ARG_DISABLE(echo,
303         [  --disable-echo          do not display "compiling" commands],
304         [
305         ECHO_LT='--silent'
306         ECHO_LD='@echo linking [$]@;'
307         RULE_CC='@echo compiling [$]<'
308         SHOW_CC='@echo compiling [$]@'
309         ECHO_CC='@'
310 ],[
311         ECHO_LT=''
312         ECHO_LD=''
313         RULE_CC=''
314         SHOW_CC=''
315         ECHO_CC=''
316 ])
317 AC_MSG_RESULT($enableval)
318 AC_SUBST(ECHO_LT)
319 AC_SUBST(ECHO_LD)
320 AC_SUBST(RULE_CC)
321 AC_SUBST(SHOW_CC)
322 AC_SUBST(ECHO_CC)
323 ])dnl
324 dnl ---------------------------------------------------------------------------
325 dnl CF_DISABLE_LEAKS version: 7 updated: 2012/10/02 20:55:03
326 dnl ----------------
327 dnl Combine no-leak checks with the libraries or tools that are used for the
328 dnl checks.
329 AC_DEFUN([CF_DISABLE_LEAKS],[
330
331 AC_REQUIRE([CF_WITH_DMALLOC])
332 AC_REQUIRE([CF_WITH_DBMALLOC])
333 AC_REQUIRE([CF_WITH_VALGRIND])
334
335 AC_MSG_CHECKING(if you want to perform memory-leak testing)
336 AC_ARG_ENABLE(leaks,
337         [  --disable-leaks         test: free permanent memory, analyze leaks],
338         [if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi],
339         : ${with_no_leaks:=no})
340 AC_MSG_RESULT($with_no_leaks)
341
342 if test "$with_no_leaks" = yes ; then
343         AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
344         AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
345 fi
346 ])dnl
347 dnl ---------------------------------------------------------------------------
348 dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00
349 dnl -----------------
350 dnl Test for availability of useful gcc __attribute__ directives to quiet
351 dnl compiler warnings.  Though useful, not all are supported -- and contrary
352 dnl to documentation, unrecognized directives cause older compilers to barf.
353 AC_DEFUN([CF_GCC_ATTRIBUTES],
354 [
355 if test "$GCC" = yes
356 then
357 cat > conftest.i <<EOF
358 #ifndef GCC_PRINTF
359 #define GCC_PRINTF 0
360 #endif
361 #ifndef GCC_SCANF
362 #define GCC_SCANF 0
363 #endif
364 #ifndef GCC_NORETURN
365 #define GCC_NORETURN /* nothing */
366 #endif
367 #ifndef GCC_UNUSED
368 #define GCC_UNUSED /* nothing */
369 #endif
370 EOF
371 if test "$GCC" = yes
372 then
373         AC_CHECKING([for $CC __attribute__ directives])
374 cat > conftest.$ac_ext <<EOF
375 #line __oline__ "${as_me:-configure}"
376 #include "confdefs.h"
377 #include "conftest.h"
378 #include "conftest.i"
379 #if     GCC_PRINTF
380 #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
381 #else
382 #define GCC_PRINTFLIKE(fmt,var) /*nothing*/
383 #endif
384 #if     GCC_SCANF
385 #define GCC_SCANFLIKE(fmt,var)  __attribute__((format(scanf,fmt,var)))
386 #else
387 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
388 #endif
389 extern void wow(char *,...) GCC_SCANFLIKE(1,2);
390 extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
391 extern void foo(void) GCC_NORETURN;
392 int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
393 EOF
394         cf_printf_attribute=no
395         cf_scanf_attribute=no
396         for cf_attribute in scanf printf unused noreturn
397         do
398                 CF_UPPER(cf_ATTRIBUTE,$cf_attribute)
399                 cf_directive="__attribute__(($cf_attribute))"
400                 echo "checking for $CC $cf_directive" 1>&AC_FD_CC
401
402                 case $cf_attribute in
403                 (printf)
404                         cf_printf_attribute=yes
405                         cat >conftest.h <<EOF
406 #define GCC_$cf_ATTRIBUTE 1
407 EOF
408                         ;;
409                 (scanf)
410                         cf_scanf_attribute=yes
411                         cat >conftest.h <<EOF
412 #define GCC_$cf_ATTRIBUTE 1
413 EOF
414                         ;;
415                 (*)
416                         cat >conftest.h <<EOF
417 #define GCC_$cf_ATTRIBUTE $cf_directive
418 EOF
419                         ;;
420                 esac
421
422                 if AC_TRY_EVAL(ac_compile); then
423                         test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute)
424                         cat conftest.h >>confdefs.h
425                         case $cf_attribute in
426                         (noreturn)
427                                 AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc])
428                                 ;;
429                         (printf)
430                                 cf_value='/* nothing */'
431                                 if test "$cf_printf_attribute" != no ; then
432                                         cf_value='__attribute__((format(printf,fmt,var)))'
433                                         AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.])
434                                 fi
435                                 AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc])
436                                 ;;
437                         (scanf)
438                                 cf_value='/* nothing */'
439                                 if test "$cf_scanf_attribute" != no ; then
440                                         cf_value='__attribute__((format(scanf,fmt,var)))'
441                                         AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.])
442                                 fi
443                                 AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc])
444                                 ;;
445                         (unused)
446                                 AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc])
447                                 ;;
448                         esac
449                 fi
450         done
451 else
452         fgrep define conftest.i >>confdefs.h
453 fi
454 rm -rf conftest*
455 fi
456 ])dnl
457 dnl ---------------------------------------------------------------------------
458 dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33
459 dnl --------------
460 dnl Find version of gcc
461 AC_DEFUN([CF_GCC_VERSION],[
462 AC_REQUIRE([AC_PROG_CC])
463 GCC_VERSION=none
464 if test "$GCC" = yes ; then
465         AC_MSG_CHECKING(version of $CC)
466         GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
467         test -z "$GCC_VERSION" && GCC_VERSION=unknown
468         AC_MSG_RESULT($GCC_VERSION)
469 fi
470 ])dnl
471 dnl ---------------------------------------------------------------------------
472 dnl CF_GCC_WARNINGS version: 32 updated: 2015/04/12 15:39:00
473 dnl ---------------
474 dnl Check if the compiler supports useful warning options.  There's a few that
475 dnl we don't use, simply because they're too noisy:
476 dnl
477 dnl     -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
478 dnl     -Wredundant-decls (system headers make this too noisy)
479 dnl     -Wtraditional (combines too many unrelated messages, only a few useful)
480 dnl     -Wwrite-strings (too noisy, but should review occasionally).  This
481 dnl             is enabled for ncurses using "--enable-const".
482 dnl     -pedantic
483 dnl
484 dnl Parameter:
485 dnl     $1 is an optional list of gcc warning flags that a particular
486 dnl             application might want to use, e.g., "no-unused" for
487 dnl             -Wno-unused
488 dnl Special:
489 dnl     If $with_ext_const is "yes", add a check for -Wwrite-strings
490 dnl
491 AC_DEFUN([CF_GCC_WARNINGS],
492 [
493 AC_REQUIRE([CF_GCC_VERSION])
494 CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
495 CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS)
496
497 cat > conftest.$ac_ext <<EOF
498 #line __oline__ "${as_me:-configure}"
499 int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
500 EOF
501
502 if test "$INTEL_COMPILER" = yes
503 then
504 # The "-wdXXX" options suppress warnings:
505 # remark #1419: external declaration in primary source file
506 # remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
507 # remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
508 # remark #193: zero used for undefined preprocessing identifier
509 # remark #593: variable "curs_sb_left_arrow" was set but never used
510 # remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
511 # remark #869: parameter "tw" was never referenced
512 # remark #981: operands are evaluated in unspecified order
513 # warning #279: controlling expression is constant
514
515         AC_CHECKING([for $CC warning options])
516         cf_save_CFLAGS="$CFLAGS"
517         EXTRA_CFLAGS="-Wall"
518         for cf_opt in \
519                 wd1419 \
520                 wd1683 \
521                 wd1684 \
522                 wd193 \
523                 wd593 \
524                 wd279 \
525                 wd810 \
526                 wd869 \
527                 wd981
528         do
529                 CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
530                 if AC_TRY_EVAL(ac_compile); then
531                         test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
532                         EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
533                 fi
534         done
535         CFLAGS="$cf_save_CFLAGS"
536
537 elif test "$GCC" = yes
538 then
539         AC_CHECKING([for $CC warning options])
540         cf_save_CFLAGS="$CFLAGS"
541         EXTRA_CFLAGS=
542         cf_warn_CONST=""
543         test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
544         cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
545         test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings=
546         for cf_opt in W Wall \
547                 Wbad-function-cast \
548                 Wcast-align \
549                 Wcast-qual \
550                 Wdeclaration-after-statement \
551                 Wextra \
552                 Winline \
553                 Wmissing-declarations \
554                 Wmissing-prototypes \
555                 Wnested-externs \
556                 Wpointer-arith \
557                 Wshadow \
558                 Wstrict-prototypes \
559                 Wundef $cf_gcc_warnings $cf_warn_CONST $1
560         do
561                 CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
562                 if AC_TRY_EVAL(ac_compile); then
563                         test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
564                         case $cf_opt in
565                         (Wcast-qual)
566                                 CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
567                                 ;;
568                         (Winline)
569                                 case $GCC_VERSION in
570                                 ([[34]].*)
571                                         CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
572                                         continue;;
573                                 esac
574                                 ;;
575                         (Wpointer-arith)
576                                 case $GCC_VERSION in
577                                 ([[12]].*)
578                                         CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
579                                         continue;;
580                                 esac
581                                 ;;
582                         esac
583                         EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
584                 fi
585         done
586         CFLAGS="$cf_save_CFLAGS"
587 fi
588 rm -rf conftest*
589
590 AC_SUBST(EXTRA_CFLAGS)
591 ])dnl
592 dnl ---------------------------------------------------------------------------
593 dnl CF_GNU_SOURCE version: 7 updated: 2016/08/05 05:15:37
594 dnl -------------
595 dnl Check if we must define _GNU_SOURCE to get a reasonable value for
596 dnl _XOPEN_SOURCE, upon which many POSIX definitions depend.  This is a defect
597 dnl (or misfeature) of glibc2, which breaks portability of many applications,
598 dnl since it is interwoven with GNU extensions.
599 dnl
600 dnl Well, yes we could work around it...
601 AC_DEFUN([CF_GNU_SOURCE],
602 [
603 AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
604 AC_TRY_COMPILE([#include <sys/types.h>],[
605 #ifndef _XOPEN_SOURCE
606 make an error
607 #endif],
608         [cf_cv_gnu_source=no],
609         [cf_save="$CPPFLAGS"
610          CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
611          AC_TRY_COMPILE([#include <sys/types.h>],[
612 #ifdef _XOPEN_SOURCE
613 make an error
614 #endif],
615         [cf_cv_gnu_source=no],
616         [cf_cv_gnu_source=yes])
617         CPPFLAGS="$cf_save"
618         ])
619 ])
620
621 if test "$cf_cv_gnu_source" = yes
622 then
623 AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[
624 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
625         AC_TRY_COMPILE([#include <sys/types.h>],[
626 #ifdef _DEFAULT_SOURCE
627 make an error
628 #endif],
629                 [cf_cv_default_source=no],
630                 [cf_cv_default_source=yes])
631         ])
632 test "$cf_cv_default_source" = yes && CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE"
633 fi
634 ])dnl
635 dnl ---------------------------------------------------------------------------
636 dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00
637 dnl -----------------
638 dnl Check if the given compiler is really the Intel compiler for Linux.  It
639 dnl tries to imitate gcc, but does not return an error when it finds a mismatch
640 dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
641 dnl
642 dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
643 dnl ensure that it is not mistaken for gcc/g++.  It is normally invoked from
644 dnl the wrappers for gcc and g++ warnings.
645 dnl
646 dnl $1 = GCC (default) or GXX
647 dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
648 dnl $3 = CFLAGS (default) or CXXFLAGS
649 AC_DEFUN([CF_INTEL_COMPILER],[
650 AC_REQUIRE([AC_CANONICAL_HOST])
651 ifelse([$2],,INTEL_COMPILER,[$2])=no
652
653 if test "$ifelse([$1],,[$1],GCC)" = yes ; then
654         case $host_os in
655         (linux*|gnu*)
656                 AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler)
657                 cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
658                 ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc"
659                 AC_TRY_COMPILE([],[
660 #ifdef __INTEL_COMPILER
661 #else
662 make an error
663 #endif
664 ],[ifelse([$2],,INTEL_COMPILER,[$2])=yes
665 cf_save_CFLAGS="$cf_save_CFLAGS -we147"
666 ],[])
667                 ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
668                 AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2]))
669                 ;;
670         esac
671 fi
672 ])dnl
673 dnl ---------------------------------------------------------------------------
674 dnl CF_MAKE_DOCS version: 4 updated: 2015/07/04 21:43:03
675 dnl ------------
676 dnl $1 = name(s) to generate rules for
677 dnl $2 = suffix of corresponding manpages used as input.
678 dnl
679 dnl This works best if called at the end of configure.in, following CF_WITH_MAN2HTML
680 define([CF_MAKE_DOCS],[
681 test -z "$cf_make_docs" && cf_make_docs=0
682
683 cf_output=makefile
684 test -f "$cf_output" || cf_output=Makefile
685
686 if test "$cf_make_docs" = 0
687 then
688 cat >>$cf_output <<CF_EOF
689 ################################################################################
690 ## generated by $0
691 .SUFFIXES : .html .$2 .man .ps .pdf .txt
692
693 ${NROFF_NOTE}.$2.txt :
694 ${NROFF_NOTE}   [\$](SHELL) -c "tbl [\$]*.$2 | nroff -man | col -bx" >[\$]@
695
696 ${GROFF_NOTE}.ps.pdf :
697 ${GROFF_NOTE}   ps2pdf [\$]*.ps
698 ${GROFF_NOTE}
699 ${GROFF_NOTE}.$2.ps :
700 ${GROFF_NOTE}   [\$](SHELL) -c "tbl [\$]*.$2 | groff -man" >[\$]@
701 ${GROFF_NOTE}
702 ${GROFF_NOTE}.$2.txt :
703 ${GROFF_NOTE}   GROFF_NO_SGR=stupid [\$](SHELL) -c "tbl [\$]*.$2 | nroff -Tascii -man | col -bx" >[\$]@
704
705 ${MAN2HTML_NOTE}.$2.html :
706 ${MAN2HTML_NOTE}        ./${MAN2HTML_TEMP} [\$]* $2 man >[\$]@
707
708 CF_EOF
709         cf_make_docs=1
710 fi
711
712 for cf_name in $1
713 do
714 cat >>$cf_output <<CF_EOF
715 ################################################################################
716 ${NROFF_NOTE}docs docs-$cf_name :: $cf_name.txt
717 ${MAN2HTML_NOTE}docs docs-$cf_name :: $cf_name.html
718 ${GROFF_NOTE}docs docs-$cf_name :: $cf_name.pdf
719 ${GROFF_NOTE}docs docs-$cf_name :: $cf_name.ps
720 ${GROFF_NOTE}docs docs-$cf_name :: $cf_name.txt
721
722 clean \\
723 docs-clean ::
724 ${NROFF_NOTE}   rm -f $cf_name.txt
725 ${MAN2HTML_NOTE}        rm -f $cf_name.html
726 ${GROFF_NOTE}   rm -f $cf_name.pdf
727 ${GROFF_NOTE}   rm -f $cf_name.ps
728 ${GROFF_NOTE}   rm -f $cf_name.txt
729
730 ${NROFF_NOTE}$cf_name.txt  : $cf_name.$2
731 ${MAN2HTML_NOTE}$cf_name.html : $cf_name.$2
732 ${GROFF_NOTE}$cf_name.pdf  : $cf_name.ps
733 ${GROFF_NOTE}$cf_name.ps   : $cf_name.$2
734 ${GROFF_NOTE}$cf_name.txt  : $cf_name.$2
735 CF_EOF
736 done
737 ])dnl
738 dnl ---------------------------------------------------------------------------
739 dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32
740 dnl ------------
741 dnl Generate tags/TAGS targets for makefiles.  Do not generate TAGS if we have
742 dnl a monocase filesystem.
743 AC_DEFUN([CF_MAKE_TAGS],[
744 AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
745
746 AC_CHECK_PROGS(CTAGS, exctags ctags)
747 AC_CHECK_PROGS(ETAGS, exetags etags)
748
749 AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no)
750
751 if test "$cf_cv_mixedcase" = yes ; then
752         AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no)
753 else
754         MAKE_UPPER_TAGS=no
755 fi
756
757 if test "$MAKE_UPPER_TAGS" = yes ; then
758         MAKE_UPPER_TAGS=
759 else
760         MAKE_UPPER_TAGS="#"
761 fi
762
763 if test "$MAKE_LOWER_TAGS" = yes ; then
764         MAKE_LOWER_TAGS=
765 else
766         MAKE_LOWER_TAGS="#"
767 fi
768
769 AC_SUBST(CTAGS)
770 AC_SUBST(ETAGS)
771
772 AC_SUBST(MAKE_UPPER_TAGS)
773 AC_SUBST(MAKE_LOWER_TAGS)
774 ])dnl
775 dnl ---------------------------------------------------------------------------
776 dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00
777 dnl ----------------------
778 dnl Check if the file-system supports mixed-case filenames.  If we're able to
779 dnl create a lowercase name and see it as uppercase, it doesn't support that.
780 AC_DEFUN([CF_MIXEDCASE_FILENAMES],
781 [
782 AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
783 if test "$cross_compiling" = yes ; then
784         case $target_alias in
785         (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*)
786                 cf_cv_mixedcase=no
787                 ;;
788         (*)
789                 cf_cv_mixedcase=yes
790                 ;;
791         esac
792 else
793         rm -f conftest CONFTEST
794         echo test >conftest
795         if test -f CONFTEST ; then
796                 cf_cv_mixedcase=no
797         else
798                 cf_cv_mixedcase=yes
799         fi
800         rm -f conftest CONFTEST
801 fi
802 ])
803 test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.])
804 ])dnl
805 dnl ---------------------------------------------------------------------------
806 dnl CF_MKSTEMP version: 9 updated: 2012/10/03 04:34:49
807 dnl ----------
808 dnl Check for a working mkstemp.  This creates two files, checks that they are
809 dnl successfully created and distinct (AmigaOS apparently fails on the last).
810 AC_DEFUN([CF_MKSTEMP],[
811 AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[
812 rm -rf conftest*
813 AC_TRY_RUN([
814 #include <sys/types.h>
815 #include <stdlib.h>
816 #include <stdio.h>
817 #include <string.h>
818 #include <sys/stat.h>
819 int main()
820 {
821         char *tmpl = "conftestXXXXXX";
822         char name[2][80];
823         int n;
824         int result = 0;
825         int fd;
826         struct stat sb;
827
828         umask(077);
829         for (n = 0; n < 2; ++n) {
830                 strcpy(name[n], tmpl);
831                 if ((fd = mkstemp(name[n])) >= 0) {
832                         if (!strcmp(name[n], tmpl)
833                          || stat(name[n], &sb) != 0
834                          || (sb.st_mode & S_IFMT) != S_IFREG
835                          || (sb.st_mode & 077) != 0) {
836                                 result = 1;
837                         }
838                         close(fd);
839                 }
840         }
841         if (result == 0
842          && !strcmp(name[0], name[1]))
843                 result = 1;
844         ${cf_cv_main_return:-return}(result);
845 }
846 ],[cf_cv_func_mkstemp=yes
847 ],[cf_cv_func_mkstemp=no
848 ],[cf_cv_func_mkstemp=maybe])
849 ])
850 if test "x$cf_cv_func_mkstemp" = xmaybe ; then
851         AC_CHECK_FUNC(mkstemp)
852 fi
853 if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
854         AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.])
855 fi
856 ])dnl
857 dnl ---------------------------------------------------------------------------
858 dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
859 dnl ----------
860 dnl Write a debug message to config.log, along with the line number in the
861 dnl configure script.
862 AC_DEFUN([CF_MSG_LOG],[
863 echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
864 ])dnl
865 dnl ---------------------------------------------------------------------------
866 dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00
867 dnl ------------------
868 dnl see CF_WITH_NO_LEAKS
869 AC_DEFUN([CF_NO_LEAKS_OPTION],[
870 AC_MSG_CHECKING(if you want to use $1 for testing)
871 AC_ARG_WITH($1,
872         [$2],
873         [AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
874          $4
875 ])
876         : ${with_cflags:=-g}
877         : ${with_no_leaks:=yes}
878          with_$1=yes],
879         [with_$1=])
880 AC_MSG_RESULT(${with_$1:-no})
881
882 case .$with_cflags in
883 (.*-g*)
884         case .$CFLAGS in
885         (.*-g*)
886                 ;;
887         (*)
888                 CF_ADD_CFLAGS([-g])
889                 ;;
890         esac
891         ;;
892 esac
893 ])dnl
894 dnl ---------------------------------------------------------------------------
895 dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57
896 dnl --------------
897 dnl Check the argument to see that it looks like a pathname.  Rewrite it if it
898 dnl begins with one of the prefix/exec_prefix variables, and then again if the
899 dnl result begins with 'NONE'.  This is necessary to work around autoconf's
900 dnl delayed evaluation of those symbols.
901 AC_DEFUN([CF_PATH_SYNTAX],[
902 if test "x$prefix" != xNONE; then
903         cf_path_syntax="$prefix"
904 else
905         cf_path_syntax="$ac_default_prefix"
906 fi
907
908 case ".[$]$1" in
909 (.\[$]\(*\)*|.\'*\'*)
910         ;;
911 (..|./*|.\\*)
912         ;;
913 (.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX
914         ;;
915 (.\[$]{*prefix}*|.\[$]{*dir}*)
916         eval $1="[$]$1"
917         case ".[$]$1" in
918         (.NONE/*)
919                 $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
920                 ;;
921         esac
922         ;;
923 (.no|.NONE/*)
924         $1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
925         ;;
926 (*)
927         ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
928         ;;
929 esac
930 ])dnl
931 dnl ---------------------------------------------------------------------------
932 dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00
933 dnl -----------------
934 dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
935 dnl
936 dnl     POSIX.1-1990                            _POSIX_SOURCE
937 dnl     POSIX.1-1990 and                        _POSIX_SOURCE and
938 dnl             POSIX.2-1992 C-Language                 _POSIX_C_SOURCE=2
939 dnl             Bindings Option
940 dnl     POSIX.1b-1993                           _POSIX_C_SOURCE=199309L
941 dnl     POSIX.1c-1996                           _POSIX_C_SOURCE=199506L
942 dnl     X/Open 2000                             _POSIX_C_SOURCE=200112L
943 dnl
944 dnl Parameters:
945 dnl     $1 is the nominal value for _POSIX_C_SOURCE
946 AC_DEFUN([CF_POSIX_C_SOURCE],
947 [
948 cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
949
950 cf_save_CFLAGS="$CFLAGS"
951 cf_save_CPPFLAGS="$CPPFLAGS"
952
953 CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
954 CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
955
956 AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
957         CF_MSG_LOG(if the symbol is already defined go no further)
958         AC_TRY_COMPILE([#include <sys/types.h>],[
959 #ifndef _POSIX_C_SOURCE
960 make an error
961 #endif],
962         [cf_cv_posix_c_source=no],
963         [cf_want_posix_source=no
964          case .$cf_POSIX_C_SOURCE in
965          (.[[12]]??*)
966                 cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
967                 ;;
968          (.2)
969                 cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
970                 cf_want_posix_source=yes
971                 ;;
972          (.*)
973                 cf_want_posix_source=yes
974                 ;;
975          esac
976          if test "$cf_want_posix_source" = yes ; then
977                 AC_TRY_COMPILE([#include <sys/types.h>],[
978 #ifdef _POSIX_SOURCE
979 make an error
980 #endif],[],
981                 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
982          fi
983          CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
984          CFLAGS="$cf_trim_CFLAGS"
985          CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
986          CF_MSG_LOG(if the second compile does not leave our definition intact error)
987          AC_TRY_COMPILE([#include <sys/types.h>],[
988 #ifndef _POSIX_C_SOURCE
989 make an error
990 #endif],,
991          [cf_cv_posix_c_source=no])
992          CFLAGS="$cf_save_CFLAGS"
993          CPPFLAGS="$cf_save_CPPFLAGS"
994         ])
995 ])
996
997 if test "$cf_cv_posix_c_source" != no ; then
998         CFLAGS="$cf_trim_CFLAGS"
999         CPPFLAGS="$cf_trim_CPPFLAGS"
1000         CF_ADD_CFLAGS($cf_cv_posix_c_source)
1001 fi
1002
1003 ])dnl
1004 dnl ---------------------------------------------------------------------------
1005 dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59
1006 dnl -----------
1007 dnl Check for awk, ensure that the check found something.
1008 AC_DEFUN([CF_PROG_AWK],
1009 [
1010 AC_PROG_AWK
1011 test -z "$AWK" && AC_MSG_ERROR(No awk program found)
1012 ])dnl
1013 dnl ---------------------------------------------------------------------------
1014 dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58
1015 dnl ----------
1016 dnl standard check for CC, plus followup sanity checks
1017 dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
1018 AC_DEFUN([CF_PROG_CC],[
1019 ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
1020 CF_GCC_VERSION
1021 CF_ACVERSION_CHECK(2.52,
1022         [AC_PROG_CC_STDC],
1023         [CF_ANSI_CC_REQD])
1024 CF_CC_ENV_FLAGS
1025 ])dnl
1026 dnl ---------------------------------------------------------------------------
1027 dnl CF_PROG_GROFF version: 2 updated: 2015/07/04 11:16:27
1028 dnl -------------
1029 dnl Check if groff is available, for cases (such as html output) where nroff
1030 dnl is not enough.
1031 AC_DEFUN([CF_PROG_GROFF],[
1032 AC_PATH_PROG(GROFF_PATH,groff,no)
1033 AC_PATH_PROG(NROFF_PATH,nroff,no)
1034 if test "x$GROFF_PATH" = xno
1035 then
1036         NROFF_NOTE=
1037         GROFF_NOTE="#"
1038 else
1039         NROFF_NOTE="#"
1040         GROFF_NOTE=
1041 fi
1042 AC_SUBST(GROFF_NOTE)
1043 AC_SUBST(NROFF_NOTE)
1044 ])dnl
1045 dnl ---------------------------------------------------------------------------
1046 dnl CF_PROG_LINT version: 3 updated: 2016/05/22 15:25:54
1047 dnl ------------
1048 AC_DEFUN([CF_PROG_LINT],
1049 [
1050 AC_CHECK_PROGS(LINT, lint cppcheck splint)
1051 AC_SUBST(LINT_OPTS)
1052 ])dnl
1053 dnl ---------------------------------------------------------------------------
1054 dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
1055 dnl ----------------
1056 dnl Remove all -U and -D options that refer to the given symbol from a list
1057 dnl of C compiler options.  This works around the problem that not all
1058 dnl compilers process -U and -D options from left-to-right, so a -U option
1059 dnl cannot be used to cancel the effect of a preceding -D option.
1060 dnl
1061 dnl $1 = target (which could be the same as the source variable)
1062 dnl $2 = source (including '$')
1063 dnl $3 = symbol to remove
1064 define([CF_REMOVE_DEFINE],
1065 [
1066 $1=`echo "$2" | \
1067         sed     -e 's/-[[UD]]'"$3"'\(=[[^       ]]*\)\?[[       ]]/ /g' \
1068                 -e 's/-[[UD]]'"$3"'\(=[[^       ]]*\)\?[$]//g'`
1069 ])dnl
1070 dnl ---------------------------------------------------------------------------
1071 dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
1072 dnl -------------------
1073 dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
1074 dnl can define it successfully.
1075 AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
1076 AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
1077         AC_TRY_COMPILE([
1078 #include <stdlib.h>
1079 #include <string.h>
1080 #include <sys/types.h>
1081 ],[
1082 #ifndef _XOPEN_SOURCE
1083 make an error
1084 #endif],
1085         [cf_cv_xopen_source=no],
1086         [cf_save="$CPPFLAGS"
1087          CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1088          AC_TRY_COMPILE([
1089 #include <stdlib.h>
1090 #include <string.h>
1091 #include <sys/types.h>
1092 ],[
1093 #ifdef _XOPEN_SOURCE
1094 make an error
1095 #endif],
1096         [cf_cv_xopen_source=no],
1097         [cf_cv_xopen_source=$cf_XOPEN_SOURCE])
1098         CPPFLAGS="$cf_save"
1099         ])
1100 ])
1101
1102 if test "$cf_cv_xopen_source" != no ; then
1103         CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
1104         CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
1105         cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
1106         CF_ADD_CFLAGS($cf_temp_xopen_source)
1107 fi
1108 ])
1109 dnl ---------------------------------------------------------------------------
1110 dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
1111 dnl --------
1112 dnl Make an uppercase version of a variable
1113 dnl $1=uppercase($2)
1114 AC_DEFUN([CF_UPPER],
1115 [
1116 $1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
1117 ])dnl
1118 dnl ---------------------------------------------------------------------------
1119 dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
1120 dnl ----------
1121 dnl Use AC_VERBOSE w/o the warnings
1122 AC_DEFUN([CF_VERBOSE],
1123 [test -n "$verbose" && echo "   $1" 1>&AC_FD_MSG
1124 CF_MSG_LOG([$1])
1125 ])dnl
1126 dnl ---------------------------------------------------------------------------
1127 dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
1128 dnl ----------------
1129 dnl Configure-option for dbmalloc.  The optional parameter is used to override
1130 dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1131 AC_DEFUN([CF_WITH_DBMALLOC],[
1132 CF_NO_LEAKS_OPTION(dbmalloc,
1133         [  --with-dbmalloc         test: use Conor Cahill's dbmalloc library],
1134         [USE_DBMALLOC])
1135
1136 if test "$with_dbmalloc" = yes ; then
1137         AC_CHECK_HEADER(dbmalloc.h,
1138                 [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
1139 fi
1140 ])dnl
1141 dnl ---------------------------------------------------------------------------
1142 dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
1143 dnl ---------------
1144 dnl Configure-option for dmalloc.  The optional parameter is used to override
1145 dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1146 AC_DEFUN([CF_WITH_DMALLOC],[
1147 CF_NO_LEAKS_OPTION(dmalloc,
1148         [  --with-dmalloc          test: use Gray Watson's dmalloc library],
1149         [USE_DMALLOC])
1150
1151 if test "$with_dmalloc" = yes ; then
1152         AC_CHECK_HEADER(dmalloc.h,
1153                 [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
1154 fi
1155 ])dnl
1156 dnl ---------------------------------------------------------------------------
1157 dnl CF_WITH_MAN2HTML version: 5 updated: 2015/08/20 04:51:36
1158 dnl ----------------
1159 dnl Check for man2html and groff.  Optionally prefer man2html over groff.
1160 dnl Generate a shell script which hides the differences between the two.
1161 dnl
1162 dnl We name that "man2html.tmp".
1163 dnl
1164 dnl The shell script can be removed later, e.g., using "make distclean".
1165 AC_DEFUN([CF_WITH_MAN2HTML],[
1166 AC_REQUIRE([CF_PROG_GROFF])
1167
1168 AC_MSG_CHECKING(for program to convert manpage to html)
1169 AC_ARG_WITH(man2html,
1170         [  --with-man2html=XXX     use XXX rather than groff],
1171         [cf_man2html=$withval],
1172         [cf_man2html=$GROFF_PATH])
1173
1174 cf_with_groff=no
1175
1176 case $cf_man2html in
1177 (yes)
1178         AC_MSG_RESULT(man2html)
1179         AC_PATH_PROG(cf_man2html,man2html,no)
1180         ;;
1181 (no|groff|*/groff*)
1182         cf_with_groff=yes
1183         cf_man2html=$GROFF_PATH
1184         AC_MSG_RESULT($cf_man2html)
1185         ;;
1186 (*)
1187         AC_MSG_RESULT($cf_man2html)
1188         ;;
1189 esac
1190
1191 MAN2HTML_TEMP="man2html.tmp"
1192         cat >$MAN2HTML_TEMP <<CF_EOF
1193 #!$SHELL
1194 # Temporary script generated by CF_WITH_MAN2HTML
1195 # Convert inputs to html, sending result to standard output.
1196 #
1197 # Parameters:
1198 # \${1} = rootname of file to convert
1199 # \${2} = suffix of file to convert, e.g., "1"
1200 # \${3} = macros to use, e.g., "man"
1201 #
1202 ROOT=\[$]1
1203 TYPE=\[$]2
1204 MACS=\[$]3
1205
1206 unset LANG
1207 unset LC_ALL
1208 unset LC_CTYPE
1209 unset LANGUAGE
1210 GROFF_NO_SGR=stupid
1211 export GROFF_NO_SGR
1212
1213 CF_EOF
1214
1215 if test "x$cf_with_groff" = xyes
1216 then
1217         MAN2HTML_NOTE="$GROFF_NOTE"
1218         MAN2HTML_PATH="$GROFF_PATH"
1219         cat >>$MAN2HTML_TEMP <<CF_EOF
1220 $SHELL -c "tbl \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}"
1221 CF_EOF
1222 else
1223         MAN2HTML_NOTE=""
1224         CF_PATH_SYNTAX(cf_man2html)
1225         MAN2HTML_PATH="$cf_man2html"
1226         AC_MSG_CHECKING(for $cf_man2html top/bottom margins)
1227
1228         # for this example, expect 3 lines of content, the remainder is head/foot
1229         cat >conftest.in <<CF_EOF
1230 .TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5
1231 .SH SECTION
1232 MARKER
1233 CF_EOF
1234
1235         LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1236
1237         cf_man2html_1st=`fgrep -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1238         cf_man2html_top=`expr $cf_man2html_1st - 2`
1239         cf_man2html_bot=`wc -l conftest.out |sed -e 's/[[^0-9]]//g'`
1240         cf_man2html_bot=`expr $cf_man2html_bot - 2 - $cf_man2html_top`
1241         cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot"
1242
1243         AC_MSG_RESULT($cf_man2html_top_bot)
1244
1245         AC_MSG_CHECKING(for pagesize to use)
1246         for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1247         do
1248         cat >>conftest.in <<CF_EOF
1249 .nf
1250 0
1251 1
1252 2
1253 3
1254 4
1255 5
1256 6
1257 7
1258 8
1259 9
1260 CF_EOF
1261         done
1262
1263         LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1264         cf_man2html_page=`fgrep -n HEAD1 conftest.out |tail -n 1 |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1265         test -z "$cf_man2html_page" && cf_man2html_page=99999
1266         test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999
1267
1268         rm -rf conftest*
1269         AC_MSG_RESULT($cf_man2html_page)
1270
1271         cat >>$MAN2HTML_TEMP <<CF_EOF
1272 : \${MAN2HTML_PATH=$MAN2HTML_PATH}
1273 MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title="\$ROOT\(\$TYPE\)" -compress -pgsize $cf_man2html_page"
1274 case \${TYPE} in
1275 (ms)
1276         tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS
1277         ;;
1278 (*)
1279         tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS
1280         ;;
1281 esac
1282 CF_EOF
1283 fi
1284
1285 chmod 700 $MAN2HTML_TEMP
1286
1287 AC_SUBST(MAN2HTML_NOTE)
1288 AC_SUBST(MAN2HTML_PATH)
1289 AC_SUBST(MAN2HTML_TEMP)
1290 ])dnl
1291 dnl ---------------------------------------------------------------------------
1292 dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
1293 dnl ----------------
1294 AC_DEFUN([CF_WITH_VALGRIND],[
1295 CF_NO_LEAKS_OPTION(valgrind,
1296         [  --with-valgrind         test: use valgrind],
1297         [USE_VALGRIND])
1298 ])dnl
1299 dnl ---------------------------------------------------------------------------
1300 dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34
1301 dnl ----------------
1302 dnl Combine the checks for gcc features into a configure-script option
1303 dnl
1304 dnl Parameters:
1305 dnl     $1 - see CF_GCC_WARNINGS
1306 AC_DEFUN([CF_WITH_WARNINGS],
1307 [
1308 if ( test "$GCC" = yes || test "$GXX" = yes )
1309 then
1310 AC_MSG_CHECKING(if you want to check for gcc warnings)
1311 AC_ARG_WITH(warnings,
1312         [  --with-warnings         test: turn on gcc warnings],
1313         [cf_opt_with_warnings=$withval],
1314         [cf_opt_with_warnings=no])
1315 AC_MSG_RESULT($cf_opt_with_warnings)
1316 if test "$cf_opt_with_warnings" != no ; then
1317         CF_GCC_ATTRIBUTES
1318         CF_GCC_WARNINGS([$1])
1319 fi
1320 fi
1321 ])dnl
1322 dnl ---------------------------------------------------------------------------
1323 dnl CF_XOPEN_SOURCE version: 52 updated: 2016/08/27 12:21:42
1324 dnl ---------------
1325 dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
1326 dnl or adapt to the vendor's definitions to get equivalent functionality,
1327 dnl without losing the common non-POSIX features.
1328 dnl
1329 dnl Parameters:
1330 dnl     $1 is the nominal value for _XOPEN_SOURCE
1331 dnl     $2 is the nominal value for _POSIX_C_SOURCE
1332 AC_DEFUN([CF_XOPEN_SOURCE],[
1333 AC_REQUIRE([AC_CANONICAL_HOST])
1334
1335 cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
1336 cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
1337 cf_xopen_source=
1338
1339 case $host_os in
1340 (aix[[4-7]]*)
1341         cf_xopen_source="-D_ALL_SOURCE"
1342         ;;
1343 (msys)
1344         cf_XOPEN_SOURCE=600
1345         ;;
1346 (darwin[[0-8]].*)
1347         cf_xopen_source="-D_APPLE_C_SOURCE"
1348         ;;
1349 (darwin*)
1350         cf_xopen_source="-D_DARWIN_C_SOURCE"
1351         cf_XOPEN_SOURCE=
1352         ;;
1353 (freebsd*|dragonfly*)
1354         # 5.x headers associate
1355         #       _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
1356         #       _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
1357         cf_POSIX_C_SOURCE=200112L
1358         cf_XOPEN_SOURCE=600
1359         cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1360         ;;
1361 (hpux11*)
1362         cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
1363         ;;
1364 (hpux*)
1365         cf_xopen_source="-D_HPUX_SOURCE"
1366         ;;
1367 (irix[[56]].*)
1368         cf_xopen_source="-D_SGI_SOURCE"
1369         cf_XOPEN_SOURCE=
1370         ;;
1371 (linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin)
1372         CF_GNU_SOURCE
1373         ;;
1374 (minix*)
1375         cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
1376         ;;
1377 (mirbsd*)
1378         # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
1379         cf_XOPEN_SOURCE=
1380         CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1381         ;;
1382 (netbsd*)
1383         cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
1384         ;;
1385 (openbsd[[4-9]]*)
1386         # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
1387         cf_xopen_source="-D_BSD_SOURCE"
1388         cf_XOPEN_SOURCE=600
1389         ;;
1390 (openbsd*)
1391         # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
1392         ;;
1393 (osf[[45]]*)
1394         cf_xopen_source="-D_OSF_SOURCE"
1395         ;;
1396 (nto-qnx*)
1397         cf_xopen_source="-D_QNX_SOURCE"
1398         ;;
1399 (sco*)
1400         # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
1401         ;;
1402 (solaris2.*)
1403         cf_xopen_source="-D__EXTENSIONS__"
1404         cf_cv_xopen_source=broken
1405         ;;
1406 (sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
1407         cf_XOPEN_SOURCE=
1408         cf_POSIX_C_SOURCE=
1409         ;;
1410 (*)
1411         CF_TRY_XOPEN_SOURCE
1412         CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1413         ;;
1414 esac
1415
1416 if test -n "$cf_xopen_source" ; then
1417         CF_ADD_CFLAGS($cf_xopen_source,true)
1418 fi
1419
1420 dnl In anything but the default case, we may have system-specific setting
1421 dnl which is still not guaranteed to provide all of the entrypoints that
1422 dnl _XOPEN_SOURCE would yield.
1423 if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
1424         AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
1425         AC_TRY_COMPILE([#include <stdlib.h>],[
1426 #ifndef _XOPEN_SOURCE
1427 make an error
1428 #endif],
1429         [cf_XOPEN_SOURCE_set=yes],
1430         [cf_XOPEN_SOURCE_set=no])
1431         AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
1432         if test $cf_XOPEN_SOURCE_set = yes
1433         then
1434                 AC_TRY_COMPILE([#include <stdlib.h>],[
1435 #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
1436 make an error
1437 #endif],
1438                 [cf_XOPEN_SOURCE_set_ok=yes],
1439                 [cf_XOPEN_SOURCE_set_ok=no])
1440                 if test $cf_XOPEN_SOURCE_set_ok = no
1441                 then
1442                         AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
1443                 fi
1444         else
1445                 CF_TRY_XOPEN_SOURCE
1446         fi
1447 fi
1448 ])