xref: /freebsd/contrib/byacc/aclocal.m4 (revision b9f654b163bce26de79705e77b872427c9f2afa1)
1dnl $Id: aclocal.m4,v 1.42 2017/02/01 10:12:21 tom Exp $
2dnl Macros for byacc configure script (Thomas E. Dickey)
3dnl ---------------------------------------------------------------------------
4dnl Copyright 2004-2016,2017 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: 6 updated: 2016/08/29 20:57:00
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
178dnl with options, but eliminates a more common category of user confusion.
179dnl
180dnl In particular, it addresses the problem of being able to run the C
181dnl preprocessor in a consistent manner.
182dnl
183dnl Caveat: this also disallows blanks in the pathname for the compiler, but
184dnl the nuisance of having inconsistent settings for compiler and preprocessor
185dnl outweighs that limitation.
186AC_DEFUN([CF_CC_ENV_FLAGS],
187[
188# This should have been defined by AC_PROG_CC
189: ${CC:=cc}
190
191AC_MSG_CHECKING(\$CC variable)
192case "$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	;;
217esac
218])dnl
219dnl ---------------------------------------------------------------------------
220dnl CF_CHECK_CACHE version: 12 updated: 2012/10/02 20:55:03
221dnl --------------
222dnl Check if we're accidentally using a cache from a different machine.
223dnl Derive the system name, as a check for reusing the autoconf cache.
224dnl
225dnl If we've packaged config.guess and config.sub, run that (since it does a
226dnl better job than uname).  Normally we'll use AC_CANONICAL_HOST, but allow
227dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
228dnl which is useful in cross-compiles.
229dnl
230dnl Note: we would use $ac_config_sub, but that is one of the places where
231dnl autoconf 2.5x broke compatibility with autoconf 2.13
232AC_DEFUN([CF_CHECK_CACHE],
233[
234if 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"
237else
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
242fi
243test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.])
244AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
245
246test -z "$system_name" && system_name="$cf_cv_system_name"
247test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
248
249if 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.")
252fi
253])dnl
254dnl ---------------------------------------------------------------------------
255dnl CF_CLANG_COMPILER version: 2 updated: 2013/11/19 19:23:35
256dnl -----------------
257dnl Check if the given compiler is really clang.  clang's C driver defines
258dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does
259dnl not ignore some gcc options.
260dnl
261dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
262dnl ensure that it is not mistaken for gcc/g++.  It is normally invoked from
263dnl the wrappers for gcc and g++ warnings.
264dnl
265dnl $1 = GCC (default) or GXX
266dnl $2 = CLANG_COMPILER (default)
267dnl $3 = CFLAGS (default) or CXXFLAGS
268AC_DEFUN([CF_CLANG_COMPILER],[
269ifelse([$2],,CLANG_COMPILER,[$2])=no
270
271if 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
278make an error
279#endif
280],[ifelse([$2],,CLANG_COMPILER,[$2])=yes
281cf_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]))
285fi
286])
287dnl ---------------------------------------------------------------------------
288dnl CF_DISABLE_ECHO version: 13 updated: 2015/04/18 08:56:57
289dnl ---------------
290dnl You can always use "make -n" to see the actual options, but it's hard to
291dnl pick out/analyze warning messages when the compile-line is long.
292dnl
293dnl Sets:
294dnl	ECHO_LT - symbol to control if libtool is verbose
295dnl	ECHO_LD - symbol to prefix "cc -o" lines
296dnl	RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
297dnl	SHOW_CC - symbol to put before explicit "cc -c" lines
298dnl	ECHO_CC - symbol to put before any "cc" line
299dnl
300AC_DEFUN([CF_DISABLE_ECHO],[
301AC_MSG_CHECKING(if you want to see long compiling messages)
302CF_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])
317AC_MSG_RESULT($enableval)
318AC_SUBST(ECHO_LT)
319AC_SUBST(ECHO_LD)
320AC_SUBST(RULE_CC)
321AC_SUBST(SHOW_CC)
322AC_SUBST(ECHO_CC)
323])dnl
324dnl ---------------------------------------------------------------------------
325dnl CF_DISABLE_LEAKS version: 7 updated: 2012/10/02 20:55:03
326dnl ----------------
327dnl Combine no-leak checks with the libraries or tools that are used for the
328dnl checks.
329AC_DEFUN([CF_DISABLE_LEAKS],[
330
331AC_REQUIRE([CF_WITH_DMALLOC])
332AC_REQUIRE([CF_WITH_DBMALLOC])
333AC_REQUIRE([CF_WITH_VALGRIND])
334
335AC_MSG_CHECKING(if you want to perform memory-leak testing)
336AC_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})
340AC_MSG_RESULT($with_no_leaks)
341
342if 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.])
345fi
346])dnl
347dnl ---------------------------------------------------------------------------
348dnl CF_GCC_ATTRIBUTES version: 17 updated: 2015/04/12 15:39:00
349dnl -----------------
350dnl Test for availability of useful gcc __attribute__ directives to quiet
351dnl compiler warnings.  Though useful, not all are supported -- and contrary
352dnl to documentation, unrecognized directives cause older compilers to barf.
353AC_DEFUN([CF_GCC_ATTRIBUTES],
354[
355if test "$GCC" = yes
356then
357cat > 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
370EOF
371if test "$GCC" = yes
372then
373	AC_CHECKING([for $CC __attribute__ directives])
374cat > 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
389extern void wow(char *,...) GCC_SCANFLIKE(1,2);
390extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
391extern void foo(void) GCC_NORETURN;
392int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { return 0; }
393EOF
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
407EOF
408			;;
409		(scanf)
410			cf_scanf_attribute=yes
411			cat >conftest.h <<EOF
412#define GCC_$cf_ATTRIBUTE 1
413EOF
414			;;
415		(*)
416			cat >conftest.h <<EOF
417#define GCC_$cf_ATTRIBUTE $cf_directive
418EOF
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
451else
452	fgrep define conftest.i >>confdefs.h
453fi
454rm -rf conftest*
455fi
456])dnl
457dnl ---------------------------------------------------------------------------
458dnl CF_GCC_VERSION version: 7 updated: 2012/10/18 06:46:33
459dnl --------------
460dnl Find version of gcc
461AC_DEFUN([CF_GCC_VERSION],[
462AC_REQUIRE([AC_PROG_CC])
463GCC_VERSION=none
464if 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)
469fi
470])dnl
471dnl ---------------------------------------------------------------------------
472dnl CF_GCC_WARNINGS version: 32 updated: 2015/04/12 15:39:00
473dnl ---------------
474dnl Check if the compiler supports useful warning options.  There's a few that
475dnl we don't use, simply because they're too noisy:
476dnl
477dnl	-Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
478dnl	-Wredundant-decls (system headers make this too noisy)
479dnl	-Wtraditional (combines too many unrelated messages, only a few useful)
480dnl	-Wwrite-strings (too noisy, but should review occasionally).  This
481dnl		is enabled for ncurses using "--enable-const".
482dnl	-pedantic
483dnl
484dnl Parameter:
485dnl	$1 is an optional list of gcc warning flags that a particular
486dnl		application might want to use, e.g., "no-unused" for
487dnl		-Wno-unused
488dnl Special:
489dnl	If $with_ext_const is "yes", add a check for -Wwrite-strings
490dnl
491AC_DEFUN([CF_GCC_WARNINGS],
492[
493AC_REQUIRE([CF_GCC_VERSION])
494CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
495CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS)
496
497cat > conftest.$ac_ext <<EOF
498#line __oline__ "${as_me:-configure}"
499int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
500EOF
501
502if test "$INTEL_COMPILER" = yes
503then
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
537elif test "$GCC" = yes
538then
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"
587fi
588rm -rf conftest*
589
590AC_SUBST(EXTRA_CFLAGS)
591])dnl
592dnl ---------------------------------------------------------------------------
593dnl CF_GNU_SOURCE version: 7 updated: 2016/08/05 05:15:37
594dnl -------------
595dnl Check if we must define _GNU_SOURCE to get a reasonable value for
596dnl _XOPEN_SOURCE, upon which many POSIX definitions depend.  This is a defect
597dnl (or misfeature) of glibc2, which breaks portability of many applications,
598dnl since it is interwoven with GNU extensions.
599dnl
600dnl Well, yes we could work around it...
601AC_DEFUN([CF_GNU_SOURCE],
602[
603AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
604AC_TRY_COMPILE([#include <sys/types.h>],[
605#ifndef _XOPEN_SOURCE
606make 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
613make an error
614#endif],
615	[cf_cv_gnu_source=no],
616	[cf_cv_gnu_source=yes])
617	CPPFLAGS="$cf_save"
618	])
619])
620
621if test "$cf_cv_gnu_source" = yes
622then
623AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[
624CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
625	AC_TRY_COMPILE([#include <sys/types.h>],[
626#ifdef _DEFAULT_SOURCE
627make an error
628#endif],
629		[cf_cv_default_source=no],
630		[cf_cv_default_source=yes])
631	])
632test "$cf_cv_default_source" = yes && CPPFLAGS="$CPPFLAGS -D_DEFAULT_SOURCE"
633fi
634])dnl
635dnl ---------------------------------------------------------------------------
636dnl CF_INTEL_COMPILER version: 7 updated: 2015/04/12 15:39:00
637dnl -----------------
638dnl Check if the given compiler is really the Intel compiler for Linux.  It
639dnl tries to imitate gcc, but does not return an error when it finds a mismatch
640dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
641dnl
642dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
643dnl ensure that it is not mistaken for gcc/g++.  It is normally invoked from
644dnl the wrappers for gcc and g++ warnings.
645dnl
646dnl $1 = GCC (default) or GXX
647dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
648dnl $3 = CFLAGS (default) or CXXFLAGS
649AC_DEFUN([CF_INTEL_COMPILER],[
650AC_REQUIRE([AC_CANONICAL_HOST])
651ifelse([$2],,INTEL_COMPILER,[$2])=no
652
653if 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
662make an error
663#endif
664],[ifelse([$2],,INTEL_COMPILER,[$2])=yes
665cf_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
671fi
672])dnl
673dnl ---------------------------------------------------------------------------
674dnl CF_MAKE_DOCS version: 4 updated: 2015/07/04 21:43:03
675dnl ------------
676dnl $1 = name(s) to generate rules for
677dnl $2 = suffix of corresponding manpages used as input.
678dnl
679dnl This works best if called at the end of configure.in, following CF_WITH_MAN2HTML
680define([CF_MAKE_DOCS],[
681test -z "$cf_make_docs" && cf_make_docs=0
682
683cf_output=makefile
684test -f "$cf_output" || cf_output=Makefile
685
686if test "$cf_make_docs" = 0
687then
688cat >>$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
708CF_EOF
709	cf_make_docs=1
710fi
711
712for cf_name in $1
713do
714cat >>$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
722clean \\
723docs-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
735CF_EOF
736done
737])dnl
738dnl ---------------------------------------------------------------------------
739dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32
740dnl ------------
741dnl Generate tags/TAGS targets for makefiles.  Do not generate TAGS if we have
742dnl a monocase filesystem.
743AC_DEFUN([CF_MAKE_TAGS],[
744AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
745
746AC_CHECK_PROGS(CTAGS, exctags ctags)
747AC_CHECK_PROGS(ETAGS, exetags etags)
748
749AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no)
750
751if test "$cf_cv_mixedcase" = yes ; then
752	AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no)
753else
754	MAKE_UPPER_TAGS=no
755fi
756
757if test "$MAKE_UPPER_TAGS" = yes ; then
758	MAKE_UPPER_TAGS=
759else
760	MAKE_UPPER_TAGS="#"
761fi
762
763if test "$MAKE_LOWER_TAGS" = yes ; then
764	MAKE_LOWER_TAGS=
765else
766	MAKE_LOWER_TAGS="#"
767fi
768
769AC_SUBST(CTAGS)
770AC_SUBST(ETAGS)
771
772AC_SUBST(MAKE_UPPER_TAGS)
773AC_SUBST(MAKE_LOWER_TAGS)
774])dnl
775dnl ---------------------------------------------------------------------------
776dnl CF_MIXEDCASE_FILENAMES version: 7 updated: 2015/04/12 15:39:00
777dnl ----------------------
778dnl Check if the file-system supports mixed-case filenames.  If we're able to
779dnl create a lowercase name and see it as uppercase, it doesn't support that.
780AC_DEFUN([CF_MIXEDCASE_FILENAMES],
781[
782AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
783if 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
792else
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
801fi
802])
803test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.])
804])dnl
805dnl ---------------------------------------------------------------------------
806dnl CF_MKSTEMP version: 10 updated: 2017/01/21 11:12:16
807dnl ----------
808dnl Check for a working mkstemp.  This creates two files, checks that they are
809dnl successfully created and distinct (AmigaOS apparently fails on the last).
810AC_DEFUN([CF_MKSTEMP],[
811AC_CHECK_HEADERS( \
812unistd.h \
813)
814AC_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[
815rm -rf conftest*
816AC_TRY_RUN([
817#include <sys/types.h>
818#ifdef HAVE_UNISTD_H
819#include <unistd.h>
820#endif
821#include <stdlib.h>
822#include <stdio.h>
823#include <string.h>
824#include <sys/stat.h>
825int main(void)
826{
827	char *tmpl = "conftestXXXXXX";
828	char name[2][80];
829	int n;
830	int result = 0;
831	int fd;
832	struct stat sb;
833
834	umask(077);
835	for (n = 0; n < 2; ++n) {
836		strcpy(name[n], tmpl);
837		if ((fd = mkstemp(name[n])) >= 0) {
838			if (!strcmp(name[n], tmpl)
839			 || stat(name[n], &sb) != 0
840			 || (sb.st_mode & S_IFMT) != S_IFREG
841			 || (sb.st_mode & 077) != 0) {
842				result = 1;
843			}
844			close(fd);
845		}
846	}
847	if (result == 0
848	 && !strcmp(name[0], name[1]))
849		result = 1;
850	${cf_cv_main_return:-return}(result);
851}
852],[cf_cv_func_mkstemp=yes
853],[cf_cv_func_mkstemp=no
854],[cf_cv_func_mkstemp=maybe])
855])
856if test "x$cf_cv_func_mkstemp" = xmaybe ; then
857	AC_CHECK_FUNC(mkstemp)
858fi
859if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
860	AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.])
861fi
862])dnl
863dnl ---------------------------------------------------------------------------
864dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
865dnl ----------
866dnl Write a debug message to config.log, along with the line number in the
867dnl configure script.
868AC_DEFUN([CF_MSG_LOG],[
869echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
870])dnl
871dnl ---------------------------------------------------------------------------
872dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00
873dnl ------------------
874dnl see CF_WITH_NO_LEAKS
875AC_DEFUN([CF_NO_LEAKS_OPTION],[
876AC_MSG_CHECKING(if you want to use $1 for testing)
877AC_ARG_WITH($1,
878	[$2],
879	[AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
880	 $4
881])
882	: ${with_cflags:=-g}
883	: ${with_no_leaks:=yes}
884	 with_$1=yes],
885	[with_$1=])
886AC_MSG_RESULT(${with_$1:-no})
887
888case .$with_cflags in
889(.*-g*)
890	case .$CFLAGS in
891	(.*-g*)
892		;;
893	(*)
894		CF_ADD_CFLAGS([-g])
895		;;
896	esac
897	;;
898esac
899])dnl
900dnl ---------------------------------------------------------------------------
901dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57
902dnl --------------
903dnl Check the argument to see that it looks like a pathname.  Rewrite it if it
904dnl begins with one of the prefix/exec_prefix variables, and then again if the
905dnl result begins with 'NONE'.  This is necessary to work around autoconf's
906dnl delayed evaluation of those symbols.
907AC_DEFUN([CF_PATH_SYNTAX],[
908if test "x$prefix" != xNONE; then
909	cf_path_syntax="$prefix"
910else
911	cf_path_syntax="$ac_default_prefix"
912fi
913
914case ".[$]$1" in
915(.\[$]\(*\)*|.\'*\'*)
916	;;
917(..|./*|.\\*)
918	;;
919(.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX
920	;;
921(.\[$]{*prefix}*|.\[$]{*dir}*)
922	eval $1="[$]$1"
923	case ".[$]$1" in
924	(.NONE/*)
925		$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
926		;;
927	esac
928	;;
929(.no|.NONE/*)
930	$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
931	;;
932(*)
933	ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
934	;;
935esac
936])dnl
937dnl ---------------------------------------------------------------------------
938dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00
939dnl -----------------
940dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
941dnl
942dnl	POSIX.1-1990				_POSIX_SOURCE
943dnl	POSIX.1-1990 and			_POSIX_SOURCE and
944dnl		POSIX.2-1992 C-Language			_POSIX_C_SOURCE=2
945dnl		Bindings Option
946dnl	POSIX.1b-1993				_POSIX_C_SOURCE=199309L
947dnl	POSIX.1c-1996				_POSIX_C_SOURCE=199506L
948dnl	X/Open 2000				_POSIX_C_SOURCE=200112L
949dnl
950dnl Parameters:
951dnl	$1 is the nominal value for _POSIX_C_SOURCE
952AC_DEFUN([CF_POSIX_C_SOURCE],
953[
954cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
955
956cf_save_CFLAGS="$CFLAGS"
957cf_save_CPPFLAGS="$CPPFLAGS"
958
959CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
960CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
961
962AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
963	CF_MSG_LOG(if the symbol is already defined go no further)
964	AC_TRY_COMPILE([#include <sys/types.h>],[
965#ifndef _POSIX_C_SOURCE
966make an error
967#endif],
968	[cf_cv_posix_c_source=no],
969	[cf_want_posix_source=no
970	 case .$cf_POSIX_C_SOURCE in
971	 (.[[12]]??*)
972		cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
973		;;
974	 (.2)
975		cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
976		cf_want_posix_source=yes
977		;;
978	 (.*)
979		cf_want_posix_source=yes
980		;;
981	 esac
982	 if test "$cf_want_posix_source" = yes ; then
983		AC_TRY_COMPILE([#include <sys/types.h>],[
984#ifdef _POSIX_SOURCE
985make an error
986#endif],[],
987		cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
988	 fi
989	 CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
990	 CFLAGS="$cf_trim_CFLAGS"
991	 CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
992	 CF_MSG_LOG(if the second compile does not leave our definition intact error)
993	 AC_TRY_COMPILE([#include <sys/types.h>],[
994#ifndef _POSIX_C_SOURCE
995make an error
996#endif],,
997	 [cf_cv_posix_c_source=no])
998	 CFLAGS="$cf_save_CFLAGS"
999	 CPPFLAGS="$cf_save_CPPFLAGS"
1000	])
1001])
1002
1003if test "$cf_cv_posix_c_source" != no ; then
1004	CFLAGS="$cf_trim_CFLAGS"
1005	CPPFLAGS="$cf_trim_CPPFLAGS"
1006	CF_ADD_CFLAGS($cf_cv_posix_c_source)
1007fi
1008
1009])dnl
1010dnl ---------------------------------------------------------------------------
1011dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59
1012dnl -----------
1013dnl Check for awk, ensure that the check found something.
1014AC_DEFUN([CF_PROG_AWK],
1015[
1016AC_PROG_AWK
1017test -z "$AWK" && AC_MSG_ERROR(No awk program found)
1018])dnl
1019dnl ---------------------------------------------------------------------------
1020dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58
1021dnl ----------
1022dnl standard check for CC, plus followup sanity checks
1023dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
1024AC_DEFUN([CF_PROG_CC],[
1025ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
1026CF_GCC_VERSION
1027CF_ACVERSION_CHECK(2.52,
1028	[AC_PROG_CC_STDC],
1029	[CF_ANSI_CC_REQD])
1030CF_CC_ENV_FLAGS
1031])dnl
1032dnl ---------------------------------------------------------------------------
1033dnl CF_PROG_GROFF version: 2 updated: 2015/07/04 11:16:27
1034dnl -------------
1035dnl Check if groff is available, for cases (such as html output) where nroff
1036dnl is not enough.
1037AC_DEFUN([CF_PROG_GROFF],[
1038AC_PATH_PROG(GROFF_PATH,groff,no)
1039AC_PATH_PROG(NROFF_PATH,nroff,no)
1040if test "x$GROFF_PATH" = xno
1041then
1042	NROFF_NOTE=
1043	GROFF_NOTE="#"
1044else
1045	NROFF_NOTE="#"
1046	GROFF_NOTE=
1047fi
1048AC_SUBST(GROFF_NOTE)
1049AC_SUBST(NROFF_NOTE)
1050])dnl
1051dnl ---------------------------------------------------------------------------
1052dnl CF_PROG_LINT version: 3 updated: 2016/05/22 15:25:54
1053dnl ------------
1054AC_DEFUN([CF_PROG_LINT],
1055[
1056AC_CHECK_PROGS(LINT, lint cppcheck splint)
1057AC_SUBST(LINT_OPTS)
1058])dnl
1059dnl ---------------------------------------------------------------------------
1060dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
1061dnl ----------------
1062dnl Remove all -U and -D options that refer to the given symbol from a list
1063dnl of C compiler options.  This works around the problem that not all
1064dnl compilers process -U and -D options from left-to-right, so a -U option
1065dnl cannot be used to cancel the effect of a preceding -D option.
1066dnl
1067dnl $1 = target (which could be the same as the source variable)
1068dnl $2 = source (including '$')
1069dnl $3 = symbol to remove
1070define([CF_REMOVE_DEFINE],
1071[
1072$1=`echo "$2" | \
1073	sed	-e 's/-[[UD]]'"$3"'\(=[[^ 	]]*\)\?[[ 	]]/ /g' \
1074		-e 's/-[[UD]]'"$3"'\(=[[^ 	]]*\)\?[$]//g'`
1075])dnl
1076dnl ---------------------------------------------------------------------------
1077dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
1078dnl -------------------
1079dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
1080dnl can define it successfully.
1081AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
1082AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
1083	AC_TRY_COMPILE([
1084#include <stdlib.h>
1085#include <string.h>
1086#include <sys/types.h>
1087],[
1088#ifndef _XOPEN_SOURCE
1089make an error
1090#endif],
1091	[cf_cv_xopen_source=no],
1092	[cf_save="$CPPFLAGS"
1093	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1094	 AC_TRY_COMPILE([
1095#include <stdlib.h>
1096#include <string.h>
1097#include <sys/types.h>
1098],[
1099#ifdef _XOPEN_SOURCE
1100make an error
1101#endif],
1102	[cf_cv_xopen_source=no],
1103	[cf_cv_xopen_source=$cf_XOPEN_SOURCE])
1104	CPPFLAGS="$cf_save"
1105	])
1106])
1107
1108if test "$cf_cv_xopen_source" != no ; then
1109	CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
1110	CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
1111	cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
1112	CF_ADD_CFLAGS($cf_temp_xopen_source)
1113fi
1114])
1115dnl ---------------------------------------------------------------------------
1116dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
1117dnl --------
1118dnl Make an uppercase version of a variable
1119dnl $1=uppercase($2)
1120AC_DEFUN([CF_UPPER],
1121[
1122$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
1123])dnl
1124dnl ---------------------------------------------------------------------------
1125dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
1126dnl ----------
1127dnl Use AC_VERBOSE w/o the warnings
1128AC_DEFUN([CF_VERBOSE],
1129[test -n "$verbose" && echo "	$1" 1>&AC_FD_MSG
1130CF_MSG_LOG([$1])
1131])dnl
1132dnl ---------------------------------------------------------------------------
1133dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
1134dnl ----------------
1135dnl Configure-option for dbmalloc.  The optional parameter is used to override
1136dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1137AC_DEFUN([CF_WITH_DBMALLOC],[
1138CF_NO_LEAKS_OPTION(dbmalloc,
1139	[  --with-dbmalloc         test: use Conor Cahill's dbmalloc library],
1140	[USE_DBMALLOC])
1141
1142if test "$with_dbmalloc" = yes ; then
1143	AC_CHECK_HEADER(dbmalloc.h,
1144		[AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
1145fi
1146])dnl
1147dnl ---------------------------------------------------------------------------
1148dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
1149dnl ---------------
1150dnl Configure-option for dmalloc.  The optional parameter is used to override
1151dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1152AC_DEFUN([CF_WITH_DMALLOC],[
1153CF_NO_LEAKS_OPTION(dmalloc,
1154	[  --with-dmalloc          test: use Gray Watson's dmalloc library],
1155	[USE_DMALLOC])
1156
1157if test "$with_dmalloc" = yes ; then
1158	AC_CHECK_HEADER(dmalloc.h,
1159		[AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
1160fi
1161])dnl
1162dnl ---------------------------------------------------------------------------
1163dnl CF_WITH_MAN2HTML version: 5 updated: 2015/08/20 04:51:36
1164dnl ----------------
1165dnl Check for man2html and groff.  Optionally prefer man2html over groff.
1166dnl Generate a shell script which hides the differences between the two.
1167dnl
1168dnl We name that "man2html.tmp".
1169dnl
1170dnl The shell script can be removed later, e.g., using "make distclean".
1171AC_DEFUN([CF_WITH_MAN2HTML],[
1172AC_REQUIRE([CF_PROG_GROFF])
1173
1174AC_MSG_CHECKING(for program to convert manpage to html)
1175AC_ARG_WITH(man2html,
1176	[  --with-man2html=XXX     use XXX rather than groff],
1177	[cf_man2html=$withval],
1178	[cf_man2html=$GROFF_PATH])
1179
1180cf_with_groff=no
1181
1182case $cf_man2html in
1183(yes)
1184	AC_MSG_RESULT(man2html)
1185	AC_PATH_PROG(cf_man2html,man2html,no)
1186	;;
1187(no|groff|*/groff*)
1188	cf_with_groff=yes
1189	cf_man2html=$GROFF_PATH
1190	AC_MSG_RESULT($cf_man2html)
1191	;;
1192(*)
1193	AC_MSG_RESULT($cf_man2html)
1194	;;
1195esac
1196
1197MAN2HTML_TEMP="man2html.tmp"
1198	cat >$MAN2HTML_TEMP <<CF_EOF
1199#!$SHELL
1200# Temporary script generated by CF_WITH_MAN2HTML
1201# Convert inputs to html, sending result to standard output.
1202#
1203# Parameters:
1204# \${1} = rootname of file to convert
1205# \${2} = suffix of file to convert, e.g., "1"
1206# \${3} = macros to use, e.g., "man"
1207#
1208ROOT=\[$]1
1209TYPE=\[$]2
1210MACS=\[$]3
1211
1212unset LANG
1213unset LC_ALL
1214unset LC_CTYPE
1215unset LANGUAGE
1216GROFF_NO_SGR=stupid
1217export GROFF_NO_SGR
1218
1219CF_EOF
1220
1221if test "x$cf_with_groff" = xyes
1222then
1223	MAN2HTML_NOTE="$GROFF_NOTE"
1224	MAN2HTML_PATH="$GROFF_PATH"
1225	cat >>$MAN2HTML_TEMP <<CF_EOF
1226$SHELL -c "tbl \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}"
1227CF_EOF
1228else
1229	MAN2HTML_NOTE=""
1230	CF_PATH_SYNTAX(cf_man2html)
1231	MAN2HTML_PATH="$cf_man2html"
1232	AC_MSG_CHECKING(for $cf_man2html top/bottom margins)
1233
1234	# for this example, expect 3 lines of content, the remainder is head/foot
1235	cat >conftest.in <<CF_EOF
1236.TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5
1237.SH SECTION
1238MARKER
1239CF_EOF
1240
1241	LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1242
1243	cf_man2html_1st=`fgrep -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1244	cf_man2html_top=`expr $cf_man2html_1st - 2`
1245	cf_man2html_bot=`wc -l conftest.out |sed -e 's/[[^0-9]]//g'`
1246	cf_man2html_bot=`expr $cf_man2html_bot - 2 - $cf_man2html_top`
1247	cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot"
1248
1249	AC_MSG_RESULT($cf_man2html_top_bot)
1250
1251	AC_MSG_CHECKING(for pagesize to use)
1252	for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1253	do
1254	cat >>conftest.in <<CF_EOF
1255.nf
12560
12571
12582
12593
12604
12615
12626
12637
12648
12659
1266CF_EOF
1267	done
1268
1269	LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1270	cf_man2html_page=`fgrep -n HEAD1 conftest.out |tail -n 1 |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1271	test -z "$cf_man2html_page" && cf_man2html_page=99999
1272	test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999
1273
1274	rm -rf conftest*
1275	AC_MSG_RESULT($cf_man2html_page)
1276
1277	cat >>$MAN2HTML_TEMP <<CF_EOF
1278: \${MAN2HTML_PATH=$MAN2HTML_PATH}
1279MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title="\$ROOT\(\$TYPE\)" -compress -pgsize $cf_man2html_page"
1280case \${TYPE} in
1281(ms)
1282	tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS
1283	;;
1284(*)
1285	tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS
1286	;;
1287esac
1288CF_EOF
1289fi
1290
1291chmod 700 $MAN2HTML_TEMP
1292
1293AC_SUBST(MAN2HTML_NOTE)
1294AC_SUBST(MAN2HTML_PATH)
1295AC_SUBST(MAN2HTML_TEMP)
1296])dnl
1297dnl ---------------------------------------------------------------------------
1298dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
1299dnl ----------------
1300AC_DEFUN([CF_WITH_VALGRIND],[
1301CF_NO_LEAKS_OPTION(valgrind,
1302	[  --with-valgrind         test: use valgrind],
1303	[USE_VALGRIND])
1304])dnl
1305dnl ---------------------------------------------------------------------------
1306dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34
1307dnl ----------------
1308dnl Combine the checks for gcc features into a configure-script option
1309dnl
1310dnl Parameters:
1311dnl	$1 - see CF_GCC_WARNINGS
1312AC_DEFUN([CF_WITH_WARNINGS],
1313[
1314if ( test "$GCC" = yes || test "$GXX" = yes )
1315then
1316AC_MSG_CHECKING(if you want to check for gcc warnings)
1317AC_ARG_WITH(warnings,
1318	[  --with-warnings         test: turn on gcc warnings],
1319	[cf_opt_with_warnings=$withval],
1320	[cf_opt_with_warnings=no])
1321AC_MSG_RESULT($cf_opt_with_warnings)
1322if test "$cf_opt_with_warnings" != no ; then
1323	CF_GCC_ATTRIBUTES
1324	CF_GCC_WARNINGS([$1])
1325fi
1326fi
1327])dnl
1328dnl ---------------------------------------------------------------------------
1329dnl CF_XOPEN_SOURCE version: 52 updated: 2016/08/27 12:21:42
1330dnl ---------------
1331dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
1332dnl or adapt to the vendor's definitions to get equivalent functionality,
1333dnl without losing the common non-POSIX features.
1334dnl
1335dnl Parameters:
1336dnl	$1 is the nominal value for _XOPEN_SOURCE
1337dnl	$2 is the nominal value for _POSIX_C_SOURCE
1338AC_DEFUN([CF_XOPEN_SOURCE],[
1339AC_REQUIRE([AC_CANONICAL_HOST])
1340
1341cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
1342cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
1343cf_xopen_source=
1344
1345case $host_os in
1346(aix[[4-7]]*)
1347	cf_xopen_source="-D_ALL_SOURCE"
1348	;;
1349(msys)
1350	cf_XOPEN_SOURCE=600
1351	;;
1352(darwin[[0-8]].*)
1353	cf_xopen_source="-D_APPLE_C_SOURCE"
1354	;;
1355(darwin*)
1356	cf_xopen_source="-D_DARWIN_C_SOURCE"
1357	cf_XOPEN_SOURCE=
1358	;;
1359(freebsd*|dragonfly*)
1360	# 5.x headers associate
1361	#	_XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
1362	#	_XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
1363	cf_POSIX_C_SOURCE=200112L
1364	cf_XOPEN_SOURCE=600
1365	cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1366	;;
1367(hpux11*)
1368	cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
1369	;;
1370(hpux*)
1371	cf_xopen_source="-D_HPUX_SOURCE"
1372	;;
1373(irix[[56]].*)
1374	cf_xopen_source="-D_SGI_SOURCE"
1375	cf_XOPEN_SOURCE=
1376	;;
1377(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin)
1378	CF_GNU_SOURCE
1379	;;
1380(minix*)
1381	cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
1382	;;
1383(mirbsd*)
1384	# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
1385	cf_XOPEN_SOURCE=
1386	CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1387	;;
1388(netbsd*)
1389	cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
1390	;;
1391(openbsd[[4-9]]*)
1392	# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
1393	cf_xopen_source="-D_BSD_SOURCE"
1394	cf_XOPEN_SOURCE=600
1395	;;
1396(openbsd*)
1397	# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
1398	;;
1399(osf[[45]]*)
1400	cf_xopen_source="-D_OSF_SOURCE"
1401	;;
1402(nto-qnx*)
1403	cf_xopen_source="-D_QNX_SOURCE"
1404	;;
1405(sco*)
1406	# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
1407	;;
1408(solaris2.*)
1409	cf_xopen_source="-D__EXTENSIONS__"
1410	cf_cv_xopen_source=broken
1411	;;
1412(sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
1413	cf_XOPEN_SOURCE=
1414	cf_POSIX_C_SOURCE=
1415	;;
1416(*)
1417	CF_TRY_XOPEN_SOURCE
1418	CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1419	;;
1420esac
1421
1422if test -n "$cf_xopen_source" ; then
1423	CF_ADD_CFLAGS($cf_xopen_source,true)
1424fi
1425
1426dnl In anything but the default case, we may have system-specific setting
1427dnl which is still not guaranteed to provide all of the entrypoints that
1428dnl _XOPEN_SOURCE would yield.
1429if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
1430	AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
1431	AC_TRY_COMPILE([#include <stdlib.h>],[
1432#ifndef _XOPEN_SOURCE
1433make an error
1434#endif],
1435	[cf_XOPEN_SOURCE_set=yes],
1436	[cf_XOPEN_SOURCE_set=no])
1437	AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
1438	if test $cf_XOPEN_SOURCE_set = yes
1439	then
1440		AC_TRY_COMPILE([#include <stdlib.h>],[
1441#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
1442make an error
1443#endif],
1444		[cf_XOPEN_SOURCE_set_ok=yes],
1445		[cf_XOPEN_SOURCE_set_ok=no])
1446		if test $cf_XOPEN_SOURCE_set_ok = no
1447		then
1448			AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
1449		fi
1450	else
1451		CF_TRY_XOPEN_SOURCE
1452	fi
1453fi
1454])
1455