xref: /freebsd/contrib/byacc/aclocal.m4 (revision 3ffd35307077b69e8e71772d0e2603f8ffbc4804)
1dnl $Id: aclocal.m4,v 1.41 2016/12/02 13:03:06 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: 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: 9 updated: 2012/10/03 04:34:49
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_CACHE_CHECK(for working mkstemp, cf_cv_func_mkstemp,[
812rm -rf conftest*
813AC_TRY_RUN([
814#include <sys/types.h>
815#include <stdlib.h>
816#include <stdio.h>
817#include <string.h>
818#include <sys/stat.h>
819int main()
820{
821	char *tmpl = "conftestXXXXXX";
822	char name[2][80];
823	int n;
824	int result = 0;
825	int fd;
826	struct stat sb;
827
828	umask(077);
829	for (n = 0; n < 2; ++n) {
830		strcpy(name[n], tmpl);
831		if ((fd = mkstemp(name[n])) >= 0) {
832			if (!strcmp(name[n], tmpl)
833			 || stat(name[n], &sb) != 0
834			 || (sb.st_mode & S_IFMT) != S_IFREG
835			 || (sb.st_mode & 077) != 0) {
836				result = 1;
837			}
838			close(fd);
839		}
840	}
841	if (result == 0
842	 && !strcmp(name[0], name[1]))
843		result = 1;
844	${cf_cv_main_return:-return}(result);
845}
846],[cf_cv_func_mkstemp=yes
847],[cf_cv_func_mkstemp=no
848],[cf_cv_func_mkstemp=maybe])
849])
850if test "x$cf_cv_func_mkstemp" = xmaybe ; then
851	AC_CHECK_FUNC(mkstemp)
852fi
853if test "x$cf_cv_func_mkstemp" = xyes || test "x$ac_cv_func_mkstemp" = xyes ; then
854	AC_DEFINE(HAVE_MKSTEMP,1,[Define to 1 if mkstemp() is available and working.])
855fi
856])dnl
857dnl ---------------------------------------------------------------------------
858dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
859dnl ----------
860dnl Write a debug message to config.log, along with the line number in the
861dnl configure script.
862AC_DEFUN([CF_MSG_LOG],[
863echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
864])dnl
865dnl ---------------------------------------------------------------------------
866dnl CF_NO_LEAKS_OPTION version: 6 updated: 2015/04/12 15:39:00
867dnl ------------------
868dnl see CF_WITH_NO_LEAKS
869AC_DEFUN([CF_NO_LEAKS_OPTION],[
870AC_MSG_CHECKING(if you want to use $1 for testing)
871AC_ARG_WITH($1,
872	[$2],
873	[AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
874	 $4
875])
876	: ${with_cflags:=-g}
877	: ${with_no_leaks:=yes}
878	 with_$1=yes],
879	[with_$1=])
880AC_MSG_RESULT(${with_$1:-no})
881
882case .$with_cflags in
883(.*-g*)
884	case .$CFLAGS in
885	(.*-g*)
886		;;
887	(*)
888		CF_ADD_CFLAGS([-g])
889		;;
890	esac
891	;;
892esac
893])dnl
894dnl ---------------------------------------------------------------------------
895dnl CF_PATH_SYNTAX version: 16 updated: 2015/04/18 08:56:57
896dnl --------------
897dnl Check the argument to see that it looks like a pathname.  Rewrite it if it
898dnl begins with one of the prefix/exec_prefix variables, and then again if the
899dnl result begins with 'NONE'.  This is necessary to work around autoconf's
900dnl delayed evaluation of those symbols.
901AC_DEFUN([CF_PATH_SYNTAX],[
902if test "x$prefix" != xNONE; then
903	cf_path_syntax="$prefix"
904else
905	cf_path_syntax="$ac_default_prefix"
906fi
907
908case ".[$]$1" in
909(.\[$]\(*\)*|.\'*\'*)
910	;;
911(..|./*|.\\*)
912	;;
913(.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX
914	;;
915(.\[$]{*prefix}*|.\[$]{*dir}*)
916	eval $1="[$]$1"
917	case ".[$]$1" in
918	(.NONE/*)
919		$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
920		;;
921	esac
922	;;
923(.no|.NONE/*)
924	$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
925	;;
926(*)
927	ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
928	;;
929esac
930])dnl
931dnl ---------------------------------------------------------------------------
932dnl CF_POSIX_C_SOURCE version: 9 updated: 2015/04/12 15:39:00
933dnl -----------------
934dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
935dnl
936dnl	POSIX.1-1990				_POSIX_SOURCE
937dnl	POSIX.1-1990 and			_POSIX_SOURCE and
938dnl		POSIX.2-1992 C-Language			_POSIX_C_SOURCE=2
939dnl		Bindings Option
940dnl	POSIX.1b-1993				_POSIX_C_SOURCE=199309L
941dnl	POSIX.1c-1996				_POSIX_C_SOURCE=199506L
942dnl	X/Open 2000				_POSIX_C_SOURCE=200112L
943dnl
944dnl Parameters:
945dnl	$1 is the nominal value for _POSIX_C_SOURCE
946AC_DEFUN([CF_POSIX_C_SOURCE],
947[
948cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
949
950cf_save_CFLAGS="$CFLAGS"
951cf_save_CPPFLAGS="$CPPFLAGS"
952
953CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
954CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
955
956AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
957	CF_MSG_LOG(if the symbol is already defined go no further)
958	AC_TRY_COMPILE([#include <sys/types.h>],[
959#ifndef _POSIX_C_SOURCE
960make an error
961#endif],
962	[cf_cv_posix_c_source=no],
963	[cf_want_posix_source=no
964	 case .$cf_POSIX_C_SOURCE in
965	 (.[[12]]??*)
966		cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
967		;;
968	 (.2)
969		cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
970		cf_want_posix_source=yes
971		;;
972	 (.*)
973		cf_want_posix_source=yes
974		;;
975	 esac
976	 if test "$cf_want_posix_source" = yes ; then
977		AC_TRY_COMPILE([#include <sys/types.h>],[
978#ifdef _POSIX_SOURCE
979make an error
980#endif],[],
981		cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
982	 fi
983	 CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
984	 CFLAGS="$cf_trim_CFLAGS"
985	 CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
986	 CF_MSG_LOG(if the second compile does not leave our definition intact error)
987	 AC_TRY_COMPILE([#include <sys/types.h>],[
988#ifndef _POSIX_C_SOURCE
989make an error
990#endif],,
991	 [cf_cv_posix_c_source=no])
992	 CFLAGS="$cf_save_CFLAGS"
993	 CPPFLAGS="$cf_save_CPPFLAGS"
994	])
995])
996
997if test "$cf_cv_posix_c_source" != no ; then
998	CFLAGS="$cf_trim_CFLAGS"
999	CPPFLAGS="$cf_trim_CPPFLAGS"
1000	CF_ADD_CFLAGS($cf_cv_posix_c_source)
1001fi
1002
1003])dnl
1004dnl ---------------------------------------------------------------------------
1005dnl CF_PROG_AWK version: 1 updated: 2006/09/16 11:40:59
1006dnl -----------
1007dnl Check for awk, ensure that the check found something.
1008AC_DEFUN([CF_PROG_AWK],
1009[
1010AC_PROG_AWK
1011test -z "$AWK" && AC_MSG_ERROR(No awk program found)
1012])dnl
1013dnl ---------------------------------------------------------------------------
1014dnl CF_PROG_CC version: 4 updated: 2014/07/12 18:57:58
1015dnl ----------
1016dnl standard check for CC, plus followup sanity checks
1017dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
1018AC_DEFUN([CF_PROG_CC],[
1019ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
1020CF_GCC_VERSION
1021CF_ACVERSION_CHECK(2.52,
1022	[AC_PROG_CC_STDC],
1023	[CF_ANSI_CC_REQD])
1024CF_CC_ENV_FLAGS
1025])dnl
1026dnl ---------------------------------------------------------------------------
1027dnl CF_PROG_GROFF version: 2 updated: 2015/07/04 11:16:27
1028dnl -------------
1029dnl Check if groff is available, for cases (such as html output) where nroff
1030dnl is not enough.
1031AC_DEFUN([CF_PROG_GROFF],[
1032AC_PATH_PROG(GROFF_PATH,groff,no)
1033AC_PATH_PROG(NROFF_PATH,nroff,no)
1034if test "x$GROFF_PATH" = xno
1035then
1036	NROFF_NOTE=
1037	GROFF_NOTE="#"
1038else
1039	NROFF_NOTE="#"
1040	GROFF_NOTE=
1041fi
1042AC_SUBST(GROFF_NOTE)
1043AC_SUBST(NROFF_NOTE)
1044])dnl
1045dnl ---------------------------------------------------------------------------
1046dnl CF_PROG_LINT version: 3 updated: 2016/05/22 15:25:54
1047dnl ------------
1048AC_DEFUN([CF_PROG_LINT],
1049[
1050AC_CHECK_PROGS(LINT, lint cppcheck splint)
1051AC_SUBST(LINT_OPTS)
1052])dnl
1053dnl ---------------------------------------------------------------------------
1054dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
1055dnl ----------------
1056dnl Remove all -U and -D options that refer to the given symbol from a list
1057dnl of C compiler options.  This works around the problem that not all
1058dnl compilers process -U and -D options from left-to-right, so a -U option
1059dnl cannot be used to cancel the effect of a preceding -D option.
1060dnl
1061dnl $1 = target (which could be the same as the source variable)
1062dnl $2 = source (including '$')
1063dnl $3 = symbol to remove
1064define([CF_REMOVE_DEFINE],
1065[
1066$1=`echo "$2" | \
1067	sed	-e 's/-[[UD]]'"$3"'\(=[[^ 	]]*\)\?[[ 	]]/ /g' \
1068		-e 's/-[[UD]]'"$3"'\(=[[^ 	]]*\)\?[$]//g'`
1069])dnl
1070dnl ---------------------------------------------------------------------------
1071dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
1072dnl -------------------
1073dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
1074dnl can define it successfully.
1075AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
1076AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
1077	AC_TRY_COMPILE([
1078#include <stdlib.h>
1079#include <string.h>
1080#include <sys/types.h>
1081],[
1082#ifndef _XOPEN_SOURCE
1083make an error
1084#endif],
1085	[cf_cv_xopen_source=no],
1086	[cf_save="$CPPFLAGS"
1087	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1088	 AC_TRY_COMPILE([
1089#include <stdlib.h>
1090#include <string.h>
1091#include <sys/types.h>
1092],[
1093#ifdef _XOPEN_SOURCE
1094make an error
1095#endif],
1096	[cf_cv_xopen_source=no],
1097	[cf_cv_xopen_source=$cf_XOPEN_SOURCE])
1098	CPPFLAGS="$cf_save"
1099	])
1100])
1101
1102if test "$cf_cv_xopen_source" != no ; then
1103	CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
1104	CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
1105	cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
1106	CF_ADD_CFLAGS($cf_temp_xopen_source)
1107fi
1108])
1109dnl ---------------------------------------------------------------------------
1110dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
1111dnl --------
1112dnl Make an uppercase version of a variable
1113dnl $1=uppercase($2)
1114AC_DEFUN([CF_UPPER],
1115[
1116$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
1117])dnl
1118dnl ---------------------------------------------------------------------------
1119dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
1120dnl ----------
1121dnl Use AC_VERBOSE w/o the warnings
1122AC_DEFUN([CF_VERBOSE],
1123[test -n "$verbose" && echo "	$1" 1>&AC_FD_MSG
1124CF_MSG_LOG([$1])
1125])dnl
1126dnl ---------------------------------------------------------------------------
1127dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
1128dnl ----------------
1129dnl Configure-option for dbmalloc.  The optional parameter is used to override
1130dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1131AC_DEFUN([CF_WITH_DBMALLOC],[
1132CF_NO_LEAKS_OPTION(dbmalloc,
1133	[  --with-dbmalloc         test: use Conor Cahill's dbmalloc library],
1134	[USE_DBMALLOC])
1135
1136if test "$with_dbmalloc" = yes ; then
1137	AC_CHECK_HEADER(dbmalloc.h,
1138		[AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
1139fi
1140])dnl
1141dnl ---------------------------------------------------------------------------
1142dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
1143dnl ---------------
1144dnl Configure-option for dmalloc.  The optional parameter is used to override
1145dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
1146AC_DEFUN([CF_WITH_DMALLOC],[
1147CF_NO_LEAKS_OPTION(dmalloc,
1148	[  --with-dmalloc          test: use Gray Watson's dmalloc library],
1149	[USE_DMALLOC])
1150
1151if test "$with_dmalloc" = yes ; then
1152	AC_CHECK_HEADER(dmalloc.h,
1153		[AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
1154fi
1155])dnl
1156dnl ---------------------------------------------------------------------------
1157dnl CF_WITH_MAN2HTML version: 5 updated: 2015/08/20 04:51:36
1158dnl ----------------
1159dnl Check for man2html and groff.  Optionally prefer man2html over groff.
1160dnl Generate a shell script which hides the differences between the two.
1161dnl
1162dnl We name that "man2html.tmp".
1163dnl
1164dnl The shell script can be removed later, e.g., using "make distclean".
1165AC_DEFUN([CF_WITH_MAN2HTML],[
1166AC_REQUIRE([CF_PROG_GROFF])
1167
1168AC_MSG_CHECKING(for program to convert manpage to html)
1169AC_ARG_WITH(man2html,
1170	[  --with-man2html=XXX     use XXX rather than groff],
1171	[cf_man2html=$withval],
1172	[cf_man2html=$GROFF_PATH])
1173
1174cf_with_groff=no
1175
1176case $cf_man2html in
1177(yes)
1178	AC_MSG_RESULT(man2html)
1179	AC_PATH_PROG(cf_man2html,man2html,no)
1180	;;
1181(no|groff|*/groff*)
1182	cf_with_groff=yes
1183	cf_man2html=$GROFF_PATH
1184	AC_MSG_RESULT($cf_man2html)
1185	;;
1186(*)
1187	AC_MSG_RESULT($cf_man2html)
1188	;;
1189esac
1190
1191MAN2HTML_TEMP="man2html.tmp"
1192	cat >$MAN2HTML_TEMP <<CF_EOF
1193#!$SHELL
1194# Temporary script generated by CF_WITH_MAN2HTML
1195# Convert inputs to html, sending result to standard output.
1196#
1197# Parameters:
1198# \${1} = rootname of file to convert
1199# \${2} = suffix of file to convert, e.g., "1"
1200# \${3} = macros to use, e.g., "man"
1201#
1202ROOT=\[$]1
1203TYPE=\[$]2
1204MACS=\[$]3
1205
1206unset LANG
1207unset LC_ALL
1208unset LC_CTYPE
1209unset LANGUAGE
1210GROFF_NO_SGR=stupid
1211export GROFF_NO_SGR
1212
1213CF_EOF
1214
1215if test "x$cf_with_groff" = xyes
1216then
1217	MAN2HTML_NOTE="$GROFF_NOTE"
1218	MAN2HTML_PATH="$GROFF_PATH"
1219	cat >>$MAN2HTML_TEMP <<CF_EOF
1220$SHELL -c "tbl \${ROOT}.\${TYPE} | $GROFF_PATH -P -o0 -I\${ROOT}_ -Thtml -\${MACS}"
1221CF_EOF
1222else
1223	MAN2HTML_NOTE=""
1224	CF_PATH_SYNTAX(cf_man2html)
1225	MAN2HTML_PATH="$cf_man2html"
1226	AC_MSG_CHECKING(for $cf_man2html top/bottom margins)
1227
1228	# for this example, expect 3 lines of content, the remainder is head/foot
1229	cat >conftest.in <<CF_EOF
1230.TH HEAD1 HEAD2 HEAD3 HEAD4 HEAD5
1231.SH SECTION
1232MARKER
1233CF_EOF
1234
1235	LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1236
1237	cf_man2html_1st=`fgrep -n MARKER conftest.out |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1238	cf_man2html_top=`expr $cf_man2html_1st - 2`
1239	cf_man2html_bot=`wc -l conftest.out |sed -e 's/[[^0-9]]//g'`
1240	cf_man2html_bot=`expr $cf_man2html_bot - 2 - $cf_man2html_top`
1241	cf_man2html_top_bot="-topm=$cf_man2html_top -botm=$cf_man2html_bot"
1242
1243	AC_MSG_RESULT($cf_man2html_top_bot)
1244
1245	AC_MSG_CHECKING(for pagesize to use)
1246	for cf_block in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1247	do
1248	cat >>conftest.in <<CF_EOF
1249.nf
12500
12511
12522
12533
12544
12555
12566
12577
12588
12599
1260CF_EOF
1261	done
1262
1263	LC_ALL=C LC_CTYPE=C LANG=C LANGUAGE=C nroff -man conftest.in >conftest.out
1264	cf_man2html_page=`fgrep -n HEAD1 conftest.out |tail -n 1 |sed -e 's/^[[^0-9]]*://' -e 's/:.*//'`
1265	test -z "$cf_man2html_page" && cf_man2html_page=99999
1266	test "$cf_man2html_page" -gt 100 && cf_man2html_page=99999
1267
1268	rm -rf conftest*
1269	AC_MSG_RESULT($cf_man2html_page)
1270
1271	cat >>$MAN2HTML_TEMP <<CF_EOF
1272: \${MAN2HTML_PATH=$MAN2HTML_PATH}
1273MAN2HTML_OPTS="\$MAN2HTML_OPTS -index -title="\$ROOT\(\$TYPE\)" -compress -pgsize $cf_man2html_page"
1274case \${TYPE} in
1275(ms)
1276	tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH -topm=0 -botm=0 \$MAN2HTML_OPTS
1277	;;
1278(*)
1279	tbl \${ROOT}.\${TYPE} | nroff -\${MACS} | \$MAN2HTML_PATH $cf_man2html_top_bot \$MAN2HTML_OPTS
1280	;;
1281esac
1282CF_EOF
1283fi
1284
1285chmod 700 $MAN2HTML_TEMP
1286
1287AC_SUBST(MAN2HTML_NOTE)
1288AC_SUBST(MAN2HTML_PATH)
1289AC_SUBST(MAN2HTML_TEMP)
1290])dnl
1291dnl ---------------------------------------------------------------------------
1292dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
1293dnl ----------------
1294AC_DEFUN([CF_WITH_VALGRIND],[
1295CF_NO_LEAKS_OPTION(valgrind,
1296	[  --with-valgrind         test: use valgrind],
1297	[USE_VALGRIND])
1298])dnl
1299dnl ---------------------------------------------------------------------------
1300dnl CF_WITH_WARNINGS version: 5 updated: 2004/07/23 14:40:34
1301dnl ----------------
1302dnl Combine the checks for gcc features into a configure-script option
1303dnl
1304dnl Parameters:
1305dnl	$1 - see CF_GCC_WARNINGS
1306AC_DEFUN([CF_WITH_WARNINGS],
1307[
1308if ( test "$GCC" = yes || test "$GXX" = yes )
1309then
1310AC_MSG_CHECKING(if you want to check for gcc warnings)
1311AC_ARG_WITH(warnings,
1312	[  --with-warnings         test: turn on gcc warnings],
1313	[cf_opt_with_warnings=$withval],
1314	[cf_opt_with_warnings=no])
1315AC_MSG_RESULT($cf_opt_with_warnings)
1316if test "$cf_opt_with_warnings" != no ; then
1317	CF_GCC_ATTRIBUTES
1318	CF_GCC_WARNINGS([$1])
1319fi
1320fi
1321])dnl
1322dnl ---------------------------------------------------------------------------
1323dnl CF_XOPEN_SOURCE version: 52 updated: 2016/08/27 12:21:42
1324dnl ---------------
1325dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
1326dnl or adapt to the vendor's definitions to get equivalent functionality,
1327dnl without losing the common non-POSIX features.
1328dnl
1329dnl Parameters:
1330dnl	$1 is the nominal value for _XOPEN_SOURCE
1331dnl	$2 is the nominal value for _POSIX_C_SOURCE
1332AC_DEFUN([CF_XOPEN_SOURCE],[
1333AC_REQUIRE([AC_CANONICAL_HOST])
1334
1335cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
1336cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
1337cf_xopen_source=
1338
1339case $host_os in
1340(aix[[4-7]]*)
1341	cf_xopen_source="-D_ALL_SOURCE"
1342	;;
1343(msys)
1344	cf_XOPEN_SOURCE=600
1345	;;
1346(darwin[[0-8]].*)
1347	cf_xopen_source="-D_APPLE_C_SOURCE"
1348	;;
1349(darwin*)
1350	cf_xopen_source="-D_DARWIN_C_SOURCE"
1351	cf_XOPEN_SOURCE=
1352	;;
1353(freebsd*|dragonfly*)
1354	# 5.x headers associate
1355	#	_XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
1356	#	_XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
1357	cf_POSIX_C_SOURCE=200112L
1358	cf_XOPEN_SOURCE=600
1359	cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
1360	;;
1361(hpux11*)
1362	cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
1363	;;
1364(hpux*)
1365	cf_xopen_source="-D_HPUX_SOURCE"
1366	;;
1367(irix[[56]].*)
1368	cf_xopen_source="-D_SGI_SOURCE"
1369	cf_XOPEN_SOURCE=
1370	;;
1371(linux*|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin)
1372	CF_GNU_SOURCE
1373	;;
1374(minix*)
1375	cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
1376	;;
1377(mirbsd*)
1378	# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
1379	cf_XOPEN_SOURCE=
1380	CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1381	;;
1382(netbsd*)
1383	cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
1384	;;
1385(openbsd[[4-9]]*)
1386	# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
1387	cf_xopen_source="-D_BSD_SOURCE"
1388	cf_XOPEN_SOURCE=600
1389	;;
1390(openbsd*)
1391	# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
1392	;;
1393(osf[[45]]*)
1394	cf_xopen_source="-D_OSF_SOURCE"
1395	;;
1396(nto-qnx*)
1397	cf_xopen_source="-D_QNX_SOURCE"
1398	;;
1399(sco*)
1400	# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
1401	;;
1402(solaris2.*)
1403	cf_xopen_source="-D__EXTENSIONS__"
1404	cf_cv_xopen_source=broken
1405	;;
1406(sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
1407	cf_XOPEN_SOURCE=
1408	cf_POSIX_C_SOURCE=
1409	;;
1410(*)
1411	CF_TRY_XOPEN_SOURCE
1412	CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
1413	;;
1414esac
1415
1416if test -n "$cf_xopen_source" ; then
1417	CF_ADD_CFLAGS($cf_xopen_source,true)
1418fi
1419
1420dnl In anything but the default case, we may have system-specific setting
1421dnl which is still not guaranteed to provide all of the entrypoints that
1422dnl _XOPEN_SOURCE would yield.
1423if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
1424	AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
1425	AC_TRY_COMPILE([#include <stdlib.h>],[
1426#ifndef _XOPEN_SOURCE
1427make an error
1428#endif],
1429	[cf_XOPEN_SOURCE_set=yes],
1430	[cf_XOPEN_SOURCE_set=no])
1431	AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
1432	if test $cf_XOPEN_SOURCE_set = yes
1433	then
1434		AC_TRY_COMPILE([#include <stdlib.h>],[
1435#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
1436make an error
1437#endif],
1438		[cf_XOPEN_SOURCE_set_ok=yes],
1439		[cf_XOPEN_SOURCE_set_ok=no])
1440		if test $cf_XOPEN_SOURCE_set_ok = no
1441		then
1442			AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
1443		fi
1444	else
1445		CF_TRY_XOPEN_SOURCE
1446	fi
1447fi
1448])
1449