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