blob: fdab359ae5f1c6048c116eaf5091d27d0e751594 [file] [log] [blame]
Steve Kondikae271bc2015-11-15 02:50:53 +01001dnl***************************************************************************
micky3879b9f5e72025-07-08 18:04:53 -04002dnl Copyright 2018-2023,2024 Thomas E. Dickey *
3dnl Copyright 2003-2017,2018 Free Software Foundation, Inc. *
Steve Kondikae271bc2015-11-15 02:50:53 +01004dnl *
5dnl Permission is hereby granted, free of charge, to any person obtaining a *
6dnl copy of this software and associated documentation files (the *
7dnl "Software"), to deal in the Software without restriction, including *
8dnl without limitation the rights to use, copy, modify, merge, publish, *
9dnl distribute, distribute with modifications, sublicense, and/or sell *
10dnl copies of the Software, and to permit persons to whom the Software is *
11dnl furnished to do so, subject to the following conditions: *
12dnl *
13dnl The above copyright notice and this permission notice shall be included *
14dnl in all copies or substantial portions of the Software. *
15dnl *
16dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
17dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
18dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
19dnl IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
20dnl DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
21dnl OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
22dnl THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
23dnl *
24dnl Except as contained in this notice, the name(s) of the above copyright *
25dnl holders shall not be used in advertising or otherwise to promote the *
26dnl sale, use or other dealings in this Software without prior written *
27dnl authorization. *
28dnl***************************************************************************
29dnl
micky3879b9f5e72025-07-08 18:04:53 -040030dnl $Id: aclocal.m4,v 1.221 2024/01/19 18:27:20 tom Exp $
Steve Kondikae271bc2015-11-15 02:50:53 +010031dnl
32dnl Author: Thomas E. Dickey
33dnl
34dnl Macros used in NCURSES test programs auto-configuration script.
35dnl
36dnl These macros are maintained separately from NCURSES. The copyright on
37dnl this file applies to the aggregation of macros and does not affect use of
38dnl these macros in other applications.
39dnl
micky3879b9f5e72025-07-08 18:04:53 -040040dnl See these pages for additional information:
41dnl https://invisible-island.net/autoconf/
42dnl https://invisible-island.net/autoconf/my-autoconf.html
Steve Kondikae271bc2015-11-15 02:50:53 +010043dnl
44dnl ---------------------------------------------------------------------------
45dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -040046dnl AM_LANGINFO_CODESET version: 7 updated: 2023/01/11 04:05:23
47dnl -------------------
48dnl Inserted as requested by gettext 0.10.40
49dnl File from /usr/share/aclocal
50dnl codeset.m4
51dnl ====================
52dnl serial AM1
53dnl
54dnl From Bruno Haible.
55AC_DEFUN([AM_LANGINFO_CODESET],
56[
57AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
58 [AC_TRY_LINK([
59$ac_includes_default
60#include <langinfo.h>],
61 [char* cs = nl_langinfo(CODESET); (void)cs],
62 am_cv_langinfo_codeset=yes,
63 am_cv_langinfo_codeset=no)
64 ])
65 if test "$am_cv_langinfo_codeset" = yes; then
66 AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
67 [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
68 fi
69])dnl
70dnl ---------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +010071dnl CF_ACVERSION_CHECK version: 5 updated: 2014/06/04 19:11:49
72dnl ------------------
73dnl Conditionally generate script according to whether we're using a given autoconf.
74dnl
75dnl $1 = version to compare against
76dnl $2 = code to use if AC_ACVERSION is at least as high as $1.
77dnl $3 = code to use if AC_ACVERSION is older than $1.
78define([CF_ACVERSION_CHECK],
79[
80ifdef([AC_ACVERSION], ,[ifdef([AC_AUTOCONF_VERSION],[m4_copy([AC_AUTOCONF_VERSION],[AC_ACVERSION])],[m4_copy([m4_PACKAGE_VERSION],[AC_ACVERSION])])])dnl
81ifdef([m4_version_compare],
82[m4_if(m4_version_compare(m4_defn([AC_ACVERSION]), [$1]), -1, [$3], [$2])],
83[CF_ACVERSION_COMPARE(
84AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])),
85AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), AC_ACVERSION, [$2], [$3])])])dnl
86dnl ---------------------------------------------------------------------------
87dnl CF_ACVERSION_COMPARE version: 3 updated: 2012/10/03 18:39:53
88dnl --------------------
89dnl CF_ACVERSION_COMPARE(MAJOR1, MINOR1, TERNARY1,
90dnl MAJOR2, MINOR2, TERNARY2,
91dnl PRINTABLE2, not FOUND, FOUND)
92define([CF_ACVERSION_COMPARE],
93[ifelse(builtin([eval], [$2 < $5]), 1,
94[ifelse([$8], , ,[$8])],
95[ifelse([$9], , ,[$9])])])dnl
96dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -040097dnl CF_ADD_CFLAGS version: 15 updated: 2020/12/31 10:54:15
Steve Kondikae271bc2015-11-15 02:50:53 +010098dnl -------------
99dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
micky3879b9f5e72025-07-08 18:04:53 -0400100dnl $1 = flags to add
101dnl $2 = if given makes this macro verbose.
Steve Kondikae271bc2015-11-15 02:50:53 +0100102dnl
103dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
104dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
105dnl confused by the quotes (which require backslashes to keep them usable).
106AC_DEFUN([CF_ADD_CFLAGS],
107[
108cf_fix_cppflags=no
109cf_new_cflags=
110cf_new_cppflags=
111cf_new_extra_cppflags=
112
113for cf_add_cflags in $1
114do
micky3879b9f5e72025-07-08 18:04:53 -0400115case "$cf_fix_cppflags" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100116(no)
micky3879b9f5e72025-07-08 18:04:53 -0400117 case "$cf_add_cflags" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100118 (-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
micky3879b9f5e72025-07-08 18:04:53 -0400119 case "$cf_add_cflags" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100120 (-D*)
micky3879b9f5e72025-07-08 18:04:53 -0400121 cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
Steve Kondikae271bc2015-11-15 02:50:53 +0100122
123 test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
124 && test -z "${cf_tst_cflags}" \
125 && cf_fix_cppflags=yes
126
micky3879b9f5e72025-07-08 18:04:53 -0400127 if test "$cf_fix_cppflags" = yes ; then
128 CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100129 continue
130 elif test "${cf_tst_cflags}" = "\"'" ; then
micky3879b9f5e72025-07-08 18:04:53 -0400131 CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100132 continue
133 fi
134 ;;
135 esac
136 case "$CPPFLAGS" in
137 (*$cf_add_cflags)
138 ;;
139 (*)
micky3879b9f5e72025-07-08 18:04:53 -0400140 case "$cf_add_cflags" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100141 (-D*)
142 cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
143 CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,$cf_tst_cppflags)
144 ;;
145 esac
micky3879b9f5e72025-07-08 18:04:53 -0400146 CF_APPEND_TEXT(cf_new_cppflags,$cf_add_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100147 ;;
148 esac
149 ;;
150 (*)
micky3879b9f5e72025-07-08 18:04:53 -0400151 CF_APPEND_TEXT(cf_new_cflags,$cf_add_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100152 ;;
153 esac
154 ;;
155(yes)
micky3879b9f5e72025-07-08 18:04:53 -0400156 CF_APPEND_TEXT(cf_new_extra_cppflags,$cf_add_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100157
micky3879b9f5e72025-07-08 18:04:53 -0400158 cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[[^"]]*"'\''//'`
Steve Kondikae271bc2015-11-15 02:50:53 +0100159
160 test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
161 && test -z "${cf_tst_cflags}" \
162 && cf_fix_cppflags=no
163 ;;
164esac
165done
166
167if test -n "$cf_new_cflags" ; then
168 ifelse([$2],,,[CF_VERBOSE(add to \$CFLAGS $cf_new_cflags)])
micky3879b9f5e72025-07-08 18:04:53 -0400169 CF_APPEND_TEXT(CFLAGS,$cf_new_cflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100170fi
171
172if test -n "$cf_new_cppflags" ; then
173 ifelse([$2],,,[CF_VERBOSE(add to \$CPPFLAGS $cf_new_cppflags)])
micky3879b9f5e72025-07-08 18:04:53 -0400174 CF_APPEND_TEXT(CPPFLAGS,$cf_new_cppflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100175fi
176
177if test -n "$cf_new_extra_cppflags" ; then
178 ifelse([$2],,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
micky3879b9f5e72025-07-08 18:04:53 -0400179 CF_APPEND_TEXT(EXTRA_CPPFLAGS,$cf_new_extra_cppflags)
Steve Kondikae271bc2015-11-15 02:50:53 +0100180fi
181
182AC_SUBST(EXTRA_CPPFLAGS)
183
184])dnl
185dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400186dnl CF_ADD_INCDIR version: 17 updated: 2021/09/04 06:35:04
Steve Kondikae271bc2015-11-15 02:50:53 +0100187dnl -------------
micky3879b9f5e72025-07-08 18:04:53 -0400188dnl Add an include-directory to $CPPFLAGS. Don't add /usr/include, since it is
Steve Kondikae271bc2015-11-15 02:50:53 +0100189dnl redundant. We don't normally need to add -I/usr/local/include for gcc,
190dnl but old versions (and some misinstalled ones) need that. To make things
191dnl worse, gcc 3.x may give error messages if -I/usr/local/include is added to
192dnl the include-path).
193AC_DEFUN([CF_ADD_INCDIR],
194[
195if test -n "$1" ; then
196 for cf_add_incdir in $1
197 do
micky3879b9f5e72025-07-08 18:04:53 -0400198 while test "$cf_add_incdir" != /usr/include
Steve Kondikae271bc2015-11-15 02:50:53 +0100199 do
micky3879b9f5e72025-07-08 18:04:53 -0400200 if test -d "$cf_add_incdir"
Steve Kondikae271bc2015-11-15 02:50:53 +0100201 then
202 cf_have_incdir=no
203 if test -n "$CFLAGS$CPPFLAGS" ; then
204 # a loop is needed to ensure we can add subdirs of existing dirs
205 for cf_test_incdir in $CFLAGS $CPPFLAGS ; do
206 if test ".$cf_test_incdir" = ".-I$cf_add_incdir" ; then
207 cf_have_incdir=yes; break
208 fi
209 done
210 fi
211
212 if test "$cf_have_incdir" = no ; then
213 if test "$cf_add_incdir" = /usr/local/include ; then
214 if test "$GCC" = yes
215 then
216 cf_save_CPPFLAGS=$CPPFLAGS
micky3879b9f5e72025-07-08 18:04:53 -0400217 CF_APPEND_TEXT(CPPFLAGS,-I$cf_add_incdir)
Steve Kondikae271bc2015-11-15 02:50:53 +0100218 AC_TRY_COMPILE([#include <stdio.h>],
219 [printf("Hello")],
220 [],
221 [cf_have_incdir=yes])
222 CPPFLAGS=$cf_save_CPPFLAGS
223 fi
224 fi
225 fi
226
227 if test "$cf_have_incdir" = no ; then
228 CF_VERBOSE(adding $cf_add_incdir to include-path)
229 ifelse([$2],,CPPFLAGS,[$2])="$ifelse([$2],,CPPFLAGS,[$2]) -I$cf_add_incdir"
230
micky3879b9f5e72025-07-08 18:04:53 -0400231 cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
Steve Kondikae271bc2015-11-15 02:50:53 +0100232 test "$cf_top_incdir" = "$cf_add_incdir" && break
233 cf_add_incdir="$cf_top_incdir"
234 else
235 break
236 fi
237 else
238 break
239 fi
240 done
241 done
242fi
243])dnl
244dnl ---------------------------------------------------------------------------
245dnl CF_ADD_LIB version: 2 updated: 2010/06/02 05:03:05
246dnl ----------
247dnl Add a library, used to enforce consistency.
248dnl
249dnl $1 = library to add, without the "-l"
250dnl $2 = variable to update (default $LIBS)
251AC_DEFUN([CF_ADD_LIB],[CF_ADD_LIBS(-l$1,ifelse($2,,LIBS,[$2]))])dnl
252dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400253dnl CF_ADD_LIBDIR version: 11 updated: 2020/12/31 20:19:42
Steve Kondikae271bc2015-11-15 02:50:53 +0100254dnl -------------
255dnl Adds to the library-path
256dnl
257dnl Some machines have trouble with multiple -L options.
258dnl
259dnl $1 is the (list of) directory(s) to add
260dnl $2 is the optional name of the variable to update (default LDFLAGS)
261dnl
262AC_DEFUN([CF_ADD_LIBDIR],
263[
264if test -n "$1" ; then
265 for cf_add_libdir in $1
266 do
micky3879b9f5e72025-07-08 18:04:53 -0400267 if test "$cf_add_libdir" = /usr/lib ; then
Steve Kondikae271bc2015-11-15 02:50:53 +0100268 :
micky3879b9f5e72025-07-08 18:04:53 -0400269 elif test -d "$cf_add_libdir"
Steve Kondikae271bc2015-11-15 02:50:53 +0100270 then
271 cf_have_libdir=no
272 if test -n "$LDFLAGS$LIBS" ; then
273 # a loop is needed to ensure we can add subdirs of existing dirs
274 for cf_test_libdir in $LDFLAGS $LIBS ; do
275 if test ".$cf_test_libdir" = ".-L$cf_add_libdir" ; then
276 cf_have_libdir=yes; break
277 fi
278 done
279 fi
280 if test "$cf_have_libdir" = no ; then
281 CF_VERBOSE(adding $cf_add_libdir to library-path)
282 ifelse([$2],,LDFLAGS,[$2])="-L$cf_add_libdir $ifelse([$2],,LDFLAGS,[$2])"
283 fi
284 fi
285 done
286fi
287])dnl
288dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400289dnl CF_ADD_LIBS version: 3 updated: 2019/11/02 16:47:33
Steve Kondikae271bc2015-11-15 02:50:53 +0100290dnl -----------
291dnl Add one or more libraries, used to enforce consistency. Libraries are
292dnl prepended to an existing list, since their dependencies are assumed to
293dnl already exist in the list.
294dnl
295dnl $1 = libraries to add, with the "-l", etc.
296dnl $2 = variable to update (default $LIBS)
297AC_DEFUN([CF_ADD_LIBS],[
micky3879b9f5e72025-07-08 18:04:53 -0400298cf_add_libs="[$]ifelse($2,,LIBS,[$2])"
299# reverse order
300cf_add_0lib=
301for cf_add_1lib in $1; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
302# filter duplicates
303for cf_add_1lib in $cf_add_0lib; do
304 for cf_add_2lib in $cf_add_libs; do
305 if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
Steve Kondikae271bc2015-11-15 02:50:53 +0100306 cf_add_1lib=
307 break
308 fi
309 done
micky3879b9f5e72025-07-08 18:04:53 -0400310 test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
Steve Kondikae271bc2015-11-15 02:50:53 +0100311done
312ifelse($2,,LIBS,[$2])="$cf_add_libs"
313])dnl
314dnl ---------------------------------------------------------------------------
315dnl CF_ADD_LIB_AFTER version: 3 updated: 2013/07/09 21:27:22
316dnl ----------------
317dnl Add a given library after another, e.g., following the one it satisfies a
318dnl dependency for.
319dnl
320dnl $1 = the first library
321dnl $2 = its dependency
322AC_DEFUN([CF_ADD_LIB_AFTER],[
323CF_VERBOSE(...before $LIBS)
324LIBS=`echo "$LIBS" | sed -e "s/[[ ]][[ ]]*/ /g" -e "s%$1 %$1 $2 %" -e 's% % %g'`
325CF_VERBOSE(...after $LIBS)
326])dnl
327dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400328dnl CF_ADD_SUBDIR_PATH version: 5 updated: 2020/12/31 20:19:42
Steve Kondikae271bc2015-11-15 02:50:53 +0100329dnl ------------------
330dnl Append to a search-list for a nonstandard header/lib-file
331dnl $1 = the variable to return as result
332dnl $2 = the package name
333dnl $3 = the subdirectory, e.g., bin, include or lib
334dnl $4 = the directory under which we will test for subdirectories
335dnl $5 = a directory that we do not want $4 to match
336AC_DEFUN([CF_ADD_SUBDIR_PATH],
337[
338test "x$4" != "x$5" && \
339test -d "$4" && \
micky3879b9f5e72025-07-08 18:04:53 -0400340ifelse([$5],NONE,,[{ test -z "$5" || test "x$5" = xNONE || test "x$4" != "x$5"; } &&]) {
Steve Kondikae271bc2015-11-15 02:50:53 +0100341 test -n "$verbose" && echo " ... testing for $3-directories under $4"
micky3879b9f5e72025-07-08 18:04:53 -0400342 test -d "$4/$3" && $1="[$]$1 $4/$3"
343 test -d "$4/$3/$2" && $1="[$]$1 $4/$3/$2"
344 test -d "$4/$3/$2/$3" && $1="[$]$1 $4/$3/$2/$3"
345 test -d "$4/$2/$3" && $1="[$]$1 $4/$2/$3"
346 test -d "$4/$2/$3/$2" && $1="[$]$1 $4/$2/$3/$2"
Steve Kondikae271bc2015-11-15 02:50:53 +0100347}
348])dnl
349dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400350dnl CF_APPEND_CFLAGS version: 3 updated: 2021/09/05 17:25:40
351dnl ----------------
352dnl Use CF_ADD_CFLAGS after first checking for potential redefinitions.
353dnl $1 = flags to add
354dnl $2 = if given makes this macro verbose.
355define([CF_APPEND_CFLAGS],
356[
357for cf_add_cflags in $1
358do
359 case "x$cf_add_cflags" in
360 (x-[[DU]]*)
361 CF_REMOVE_CFLAGS($cf_add_cflags,CFLAGS,[$2])
362 CF_REMOVE_CFLAGS($cf_add_cflags,CPPFLAGS,[$2])
363 ;;
364 esac
365 CF_ADD_CFLAGS([$cf_add_cflags],[$2])
366done
367])dnl
368dnl ---------------------------------------------------------------------------
369dnl CF_APPEND_TEXT version: 1 updated: 2017/02/25 18:58:55
370dnl --------------
371dnl use this macro for appending text without introducing an extra blank at
372dnl the beginning
373define([CF_APPEND_TEXT],
374[
375 test -n "[$]$1" && $1="[$]$1 "
376 $1="[$]{$1}$2"
377])dnl
378dnl ---------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +0100379dnl CF_ARG_DISABLE version: 3 updated: 1999/03/30 17:24:31
380dnl --------------
381dnl Allow user to disable a normally-on option.
382AC_DEFUN([CF_ARG_DISABLE],
383[CF_ARG_OPTION($1,[$2],[$3],[$4],yes)])dnl
384dnl ---------------------------------------------------------------------------
385dnl CF_ARG_ENABLE version: 3 updated: 1999/03/30 17:24:31
386dnl -------------
387dnl Allow user to enable a normally-off option.
388AC_DEFUN([CF_ARG_ENABLE],
389[CF_ARG_OPTION($1,[$2],[$3],[$4],no)])dnl
390dnl ---------------------------------------------------------------------------
391dnl CF_ARG_OPTION version: 5 updated: 2015/05/10 19:52:14
392dnl -------------
393dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
394dnl values.
395dnl
396dnl Parameters:
397dnl $1 = option name
398dnl $2 = help-string
399dnl $3 = action to perform if option is not default
400dnl $4 = action if perform if option is default
401dnl $5 = default option value (either 'yes' or 'no')
402AC_DEFUN([CF_ARG_OPTION],
403[AC_ARG_ENABLE([$1],[$2],[test "$enableval" != ifelse([$5],no,yes,no) && enableval=ifelse([$5],no,no,yes)
404 if test "$enableval" != "$5" ; then
405ifelse([$3],,[ :]dnl
406,[ $3]) ifelse([$4],,,[
407 else
408 $4])
409 fi],[enableval=$5 ifelse([$4],,,[
410 $4
411])dnl
412])])dnl
413dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400414dnl CF_C11_NORETURN version: 4 updated: 2023/02/18 17:41:25
415dnl ---------------
416AC_DEFUN([CF_C11_NORETURN],
417[
418AC_MSG_CHECKING(if you want to use C11 _Noreturn feature)
419CF_ARG_ENABLE(stdnoreturn,
420 [ --enable-stdnoreturn enable C11 _Noreturn feature for diagnostics],
421 [enable_stdnoreturn=yes],
422 [enable_stdnoreturn=no])
423AC_MSG_RESULT($enable_stdnoreturn)
424
425if test $enable_stdnoreturn = yes; then
426AC_CACHE_CHECK([for C11 _Noreturn feature], cf_cv_c11_noreturn,
427 [AC_TRY_COMPILE([
428$ac_includes_default
429#include <stdnoreturn.h>
430static _Noreturn void giveup(void) { exit(0); }
431 ],
432 [if (feof(stdin)) giveup()],
433 cf_cv_c11_noreturn=yes,
434 cf_cv_c11_noreturn=no)
435 ])
436else
437 cf_cv_c11_noreturn=no,
438fi
439
440if test "$cf_cv_c11_noreturn" = yes; then
441 AC_DEFINE(HAVE_STDNORETURN_H, 1,[Define if <stdnoreturn.h> header is available and working])
442 AC_DEFINE_UNQUOTED(STDC_NORETURN,_Noreturn,[Define if C11 _Noreturn keyword is supported])
443 HAVE_STDNORETURN_H=1
444else
445 HAVE_STDNORETURN_H=0
446fi
447
448AC_SUBST(HAVE_STDNORETURN_H)
449AC_SUBST(STDC_NORETURN)
450])dnl
451dnl ---------------------------------------------------------------------------
452dnl CF_CC_ENV_FLAGS version: 11 updated: 2023/02/20 11:15:46
Steve Kondikae271bc2015-11-15 02:50:53 +0100453dnl ---------------
454dnl Check for user's environment-breakage by stuffing CFLAGS/CPPFLAGS content
micky3879b9f5e72025-07-08 18:04:53 -0400455dnl into CC. This will not help with broken scripts that wrap the compiler
456dnl with options, but eliminates a more common category of user confusion.
457dnl
458dnl In particular, it addresses the problem of being able to run the C
459dnl preprocessor in a consistent manner.
460dnl
461dnl Caveat: this also disallows blanks in the pathname for the compiler, but
462dnl the nuisance of having inconsistent settings for compiler and preprocessor
463dnl outweighs that limitation.
Steve Kondikae271bc2015-11-15 02:50:53 +0100464AC_DEFUN([CF_CC_ENV_FLAGS],
465[
466# This should have been defined by AC_PROG_CC
micky3879b9f5e72025-07-08 18:04:53 -0400467: "${CC:=cc}"
468
469AC_MSG_CHECKING(\$CFLAGS variable)
470case "x$CFLAGS" in
471(*-[[IUD]]*)
472 AC_MSG_RESULT(broken)
473 AC_MSG_WARN(your environment uses the CFLAGS variable to hold CPPFLAGS options)
474 cf_flags="$CFLAGS"
475 CFLAGS=
476 for cf_arg in $cf_flags
477 do
478 CF_ADD_CFLAGS($cf_arg)
479 done
480 ;;
481(*)
482 AC_MSG_RESULT(ok)
483 ;;
484esac
Steve Kondikae271bc2015-11-15 02:50:53 +0100485
486AC_MSG_CHECKING(\$CC variable)
487case "$CC" in
micky3879b9f5e72025-07-08 18:04:53 -0400488(*[[\ \ ]]-*)
Steve Kondikae271bc2015-11-15 02:50:53 +0100489 AC_MSG_RESULT(broken)
micky3879b9f5e72025-07-08 18:04:53 -0400490 AC_MSG_WARN(your environment uses the CC variable to hold CFLAGS/CPPFLAGS options)
Steve Kondikae271bc2015-11-15 02:50:53 +0100491 # humor him...
micky3879b9f5e72025-07-08 18:04:53 -0400492 cf_prog=`echo "$CC" | sed -e 's/ / /g' -e 's/[[ ]]* / /g' -e 's/[[ ]]*[[ ]]-[[^ ]].*//'`
493 cf_flags=`echo "$CC" | sed -e "s%^$cf_prog%%"`
494 CC="$cf_prog"
495 for cf_arg in $cf_flags
496 do
497 case "x$cf_arg" in
498 (x-[[IUDfgOW]]*)
499 CF_ADD_CFLAGS($cf_arg)
500 ;;
501 (*)
502 CC="$CC $cf_arg"
503 ;;
504 esac
505 done
506 CF_VERBOSE(resulting CC: '$CC')
507 CF_VERBOSE(resulting CFLAGS: '$CFLAGS')
508 CF_VERBOSE(resulting CPPFLAGS: '$CPPFLAGS')
Steve Kondikae271bc2015-11-15 02:50:53 +0100509 ;;
510(*)
511 AC_MSG_RESULT(ok)
512 ;;
513esac
514])dnl
515dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400516dnl CF_CHECK_CACHE version: 13 updated: 2020/12/31 10:54:15
Steve Kondikae271bc2015-11-15 02:50:53 +0100517dnl --------------
518dnl Check if we're accidentally using a cache from a different machine.
519dnl Derive the system name, as a check for reusing the autoconf cache.
520dnl
521dnl If we've packaged config.guess and config.sub, run that (since it does a
522dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow
523dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM
524dnl which is useful in cross-compiles.
525dnl
526dnl Note: we would use $ac_config_sub, but that is one of the places where
527dnl autoconf 2.5x broke compatibility with autoconf 2.13
528AC_DEFUN([CF_CHECK_CACHE],
529[
micky3879b9f5e72025-07-08 18:04:53 -0400530if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then
Steve Kondikae271bc2015-11-15 02:50:53 +0100531 ifelse([$1],,[AC_CANONICAL_HOST],[$1])
532 system_name="$host_os"
533else
534 system_name="`(uname -s -r) 2>/dev/null`"
535 if test -z "$system_name" ; then
536 system_name="`(hostname) 2>/dev/null`"
537 fi
538fi
539test -n "$system_name" && AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name",[Define to the system name.])
540AC_CACHE_VAL(cf_cv_system_name,[cf_cv_system_name="$system_name"])
541
542test -z "$system_name" && system_name="$cf_cv_system_name"
543test -n "$cf_cv_system_name" && AC_MSG_RESULT(Configuring for $cf_cv_system_name)
544
545if test ".$system_name" != ".$cf_cv_system_name" ; then
546 AC_MSG_RESULT(Cached system name ($system_name) does not agree with actual ($cf_cv_system_name))
547 AC_MSG_ERROR("Please remove config.cache and try again.")
548fi
549])dnl
550dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400551dnl CF_CHECK_CFLAGS version: 4 updated: 2021/01/02 19:22:58
Steve Kondikae271bc2015-11-15 02:50:53 +0100552dnl ---------------
553dnl Conditionally add to $CFLAGS and $CPPFLAGS values which are derived from
554dnl a build-configuration such as imake. These have the pitfall that they
555dnl often contain compiler-specific options which we cannot use, mixed with
556dnl preprocessor options that we usually can.
557AC_DEFUN([CF_CHECK_CFLAGS],
558[
559CF_VERBOSE(checking additions to CFLAGS)
560cf_check_cflags="$CFLAGS"
561cf_check_cppflags="$CPPFLAGS"
562CF_ADD_CFLAGS($1,yes)
563if test "x$cf_check_cflags" != "x$CFLAGS" ; then
564AC_TRY_LINK([#include <stdio.h>],[printf("Hello world");],,
565 [CF_VERBOSE(test-compile failed. Undoing change to \$CFLAGS)
566 if test "x$cf_check_cppflags" != "x$CPPFLAGS" ; then
567 CF_VERBOSE(but keeping change to \$CPPFLAGS)
568 fi
micky3879b9f5e72025-07-08 18:04:53 -0400569 CFLAGS="$cf_check_cflags"])
Steve Kondikae271bc2015-11-15 02:50:53 +0100570fi
571])dnl
572dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400573dnl CF_CHECK_CURSES_LIB version: 4 updated: 2021/09/05 17:25:40
Steve Kondikae271bc2015-11-15 02:50:53 +0100574dnl -------------------
575dnl $1 = nominal library name, used also for header lookup
576dnl $2 = suffix to append to library name
577dnl $3 = function to check for using AC_CHECK_LIB
micky3879b9f5e72025-07-08 18:04:53 -0400578dnl $4 = optional parameter list for $3
Steve Kondikae271bc2015-11-15 02:50:53 +0100579AC_DEFUN([CF_CHECK_CURSES_LIB],
580[
micky3879b9f5e72025-07-08 18:04:53 -0400581AC_REQUIRE([CF_PKG_CONFIG])
582
583cf_have_curses_lib=no
584
585: ${NCURSES_CONFIG_PKG:=none}
586if test "x${NCURSES_CONFIG_PKG}" = xnone; then
587 :
588elif test "x${PKG_CONFIG:=none}" != xnone; then
589 AC_MSG_CHECKING(pkg-config for $1$2)
590 if "$PKG_CONFIG" --exists "$1$2" ; then
591 AC_MSG_RESULT(yes)
592
593 AC_MSG_CHECKING(if the $1$2 package files work)
594
595 cf_save_CFLAGS="$CFLAGS"
596 cf_save_CPPFLAGS="$CPPFLAGS"
597 cf_save_LIBS="$LIBS"
598
599 CF_APPEND_CFLAGS(`$PKG_CONFIG --cflags "$1$2"`)
600 CF_ADD_LIBS(`$PKG_CONFIG --libs "$1$2"`)
601
602 AC_TRY_LINK([#include <$1.h>],
603 [(void) $3 ( ]ifelse([$4],,,[[$4]])[ );],
604 [AC_TRY_RUN([#include <$1.h>
605 int main(void)
606 { (void) $3 ( ]ifelse([$4],,,[[$4]])[ ); return 0; }],
607 [cf_have_curses_lib=yes],
608 [cf_have_curses_lib=no],
609 [cf_have_curses_lib=maybe])],
610 [cf_have_curses_lib=no])
611 AC_MSG_RESULT($cf_have_curses_lib)
612 test "$cf_have_curses_lib" = maybe && cf_have_curses_lib=yes
613 if test "$cf_have_curses_lib" = "yes"
614 then
615 CF_UPPER(cf_upper,have_lib$1)
616 AC_DEFINE_UNQUOTED($cf_upper,1)
617 else
618 CFLAGS="$cf_save_CFLAGS"
619 CPPFLAGS="$cf_save_CPPFLAGS"
620 LIBS="$cf_save_LIBS"
621 fi
622 fi
623fi
624if test "$cf_have_curses_lib" = no; then
625 AC_CHECK_LIB($1$2,$3,[
626 CF_UPPER(cf_upper,have_lib$1)
627 CF_ADD_LIBS(-l$1$2)
628 AC_DEFINE_UNQUOTED($cf_upper,1)])
629fi
Steve Kondikae271bc2015-11-15 02:50:53 +0100630])dnl
631dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400632dnl CF_CLANG_COMPILER version: 9 updated: 2023/02/18 17:41:25
Steve Kondikae271bc2015-11-15 02:50:53 +0100633dnl -----------------
634dnl Check if the given compiler is really clang. clang's C driver defines
635dnl __GNUC__ (fooling the configure script into setting $GCC to yes) but does
636dnl not ignore some gcc options.
637dnl
638dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
639dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
640dnl the wrappers for gcc and g++ warnings.
641dnl
642dnl $1 = GCC (default) or GXX
643dnl $2 = CLANG_COMPILER (default)
644dnl $3 = CFLAGS (default) or CXXFLAGS
645AC_DEFUN([CF_CLANG_COMPILER],[
646ifelse([$2],,CLANG_COMPILER,[$2])=no
647
648if test "$ifelse([$1],,[$1],GCC)" = yes ; then
649 AC_MSG_CHECKING(if this is really Clang ifelse([$1],GXX,C++,C) compiler)
650 cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
Steve Kondikae271bc2015-11-15 02:50:53 +0100651 AC_TRY_COMPILE([],[
652#ifdef __clang__
653#else
micky3879b9f5e72025-07-08 18:04:53 -0400654#error __clang__ is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +0100655#endif
656],[ifelse([$2],,CLANG_COMPILER,[$2])=yes
Steve Kondikae271bc2015-11-15 02:50:53 +0100657],[])
658 ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
659 AC_MSG_RESULT($ifelse([$2],,CLANG_COMPILER,[$2]))
660fi
micky3879b9f5e72025-07-08 18:04:53 -0400661
662CLANG_VERSION=none
663
664if test "x$ifelse([$2],,CLANG_COMPILER,[$2])" = "xyes" ; then
665 case "$CC" in
666 (c[[1-9]][[0-9]]|*/c[[1-9]][[0-9]])
667 AC_MSG_WARN(replacing broken compiler alias $CC)
668 CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
669 CC=clang
670 ;;
671 esac
672
673 AC_MSG_CHECKING(version of $CC)
674 CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[[^)]]*) //' -e 's/^.*(Debian[[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
675 test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
676 AC_MSG_RESULT($CLANG_VERSION)
677
678 for cf_clang_opt in \
679 -Qunused-arguments \
680 -Wno-error=implicit-function-declaration
681 do
682 AC_MSG_CHECKING(if option $cf_clang_opt works)
683 cf_save_CFLAGS="$CFLAGS"
684 CFLAGS="$CFLAGS $cf_clang_opt"
685 AC_TRY_LINK([
686 #include <stdio.h>],[
687 printf("hello!\\n");],[
688 cf_clang_optok=yes],[
689 cf_clang_optok=no])
690 AC_MSG_RESULT($cf_clang_optok)
691 CFLAGS="$cf_save_CFLAGS"
692 if test "$cf_clang_optok" = yes; then
693 CF_VERBOSE(adding option $cf_clang_opt)
694 CF_APPEND_TEXT(CFLAGS,$cf_clang_opt)
695 fi
696 done
697fi
Steve Kondikae271bc2015-11-15 02:50:53 +0100698])
699dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400700dnl CF_CONST_X_STRING version: 8 updated: 2023/12/01 17:22:50
701dnl -----------------
702dnl The X11R4-X11R6 Xt specification uses an ambiguous String type for most
703dnl character-strings.
704dnl
705dnl It is ambiguous because the specification accommodated the pre-ANSI
706dnl compilers bundled by more than one vendor in lieu of providing a standard C
707dnl compiler other than by costly add-ons. Because of this, the specification
708dnl did not take into account the use of const for telling the compiler that
709dnl string literals would be in readonly memory.
710dnl
711dnl As a workaround, one could (starting with X11R5) define XTSTRINGDEFINES, to
712dnl let the compiler decide how to represent Xt's strings which were #define'd.
713dnl That does not solve the problem of using the block of Xt's strings which
714dnl are compiled into the library (and is less efficient than one might want).
715dnl
716dnl Xt specification 7 introduces the _CONST_X_STRING symbol which is used both
717dnl when compiling the library and compiling using the library, to tell the
718dnl compiler that String is const.
719AC_DEFUN([CF_CONST_X_STRING],
720[
721AC_REQUIRE([AC_PATH_XTRA])
722
723CF_SAVE_XTRA_FLAGS([CF_CONST_X_STRING])
724
725AC_TRY_COMPILE(
726[
727#include <stdlib.h>
728#include <X11/Intrinsic.h>
729],
730[String foo = malloc(1); free((void*)foo)],[
731
732AC_CACHE_CHECK(for X11/Xt const-feature,cf_cv_const_x_string,[
733 AC_TRY_COMPILE(
734 [
735#undef _CONST_X_STRING
736#define _CONST_X_STRING /* X11R7.8 (perhaps) */
737#undef XTSTRINGDEFINES /* X11R5 and later */
738#include <stdlib.h>
739#include <X11/Intrinsic.h>
740 ],[String foo = malloc(1); *foo = 0],[
741 cf_cv_const_x_string=no
742 ],[
743 cf_cv_const_x_string=yes
744 ])
745])
746
747CF_RESTORE_XTRA_FLAGS([CF_CONST_X_STRING])
748
749case "$cf_cv_const_x_string" in
750(no)
751 CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES)
752 ;;
753(*)
754 CF_APPEND_TEXT(CPPFLAGS,-D_CONST_X_STRING)
755 ;;
756esac
757
758])
759])dnl
760dnl ---------------------------------------------------------------------------
761dnl CF_CURSES_ACS_MAP version: 8 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +0100762dnl -----------------
763dnl Check for likely values of acs_map[]:
764AC_DEFUN([CF_CURSES_ACS_MAP],
765[
766AC_REQUIRE([CF_NCURSES_WRAP_PREFIX])dnl
767AC_CACHE_CHECK(for alternate character set array, cf_cv_curses_acs_map,[
768cf_cv_curses_acs_map=unknown
769for name in acs_map _acs_map __acs_map ${NCURSES_WRAP_PREFIX}acs_map
770do
771AC_TRY_LINK([
772#include <${cf_cv_ncurses_header:-curses.h}>
773],[
micky3879b9f5e72025-07-08 18:04:53 -0400774${name}['k'] = ACS_PLUS
Steve Kondikae271bc2015-11-15 02:50:53 +0100775],[cf_cv_curses_acs_map=$name; break])
776done
777])
778
779test "$cf_cv_curses_acs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_ACS_ARRAY,$cf_cv_curses_acs_map,[Define as needed to override ncurses prefix _nc_])
780])
781dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400782dnl CF_CURSES_CHECK_DATA version: 10 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +0100783dnl --------------------
784dnl Check if curses.h defines the given data/variable.
785dnl Use this after CF_NCURSES_CONFIG or CF_CURSES_CONFIG.
micky3879b9f5e72025-07-08 18:04:53 -0400786dnl
787dnl $1 = data item(s) to check for
788dnl $2 = action on success, e.g., "break" to quit checking a series of choices
Steve Kondikae271bc2015-11-15 02:50:53 +0100789AC_DEFUN([CF_CURSES_CHECK_DATA],
790[
micky3879b9f5e72025-07-08 18:04:53 -0400791for cf_data in $1
792do
793AC_MSG_CHECKING(for data $cf_data declaration in ${cf_cv_ncurses_header:-curses.h})
Steve Kondikae271bc2015-11-15 02:50:53 +0100794
micky3879b9f5e72025-07-08 18:04:53 -0400795AC_TRY_COMPILE(CF__CURSES_HEAD,
796CF__CURSES_DATA(foo,$cf_data)
797,[cf_result=yes
798],[cf_result=no])
Steve Kondikae271bc2015-11-15 02:50:53 +0100799AC_MSG_RESULT($cf_result)
800
micky3879b9f5e72025-07-08 18:04:53 -0400801if test "$cf_result" = yes ; then
802 CF_UPPER(cf_result,have_curses_data_$cf_data)
Steve Kondikae271bc2015-11-15 02:50:53 +0100803 AC_DEFINE_UNQUOTED($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -0400804 ifelse($2,,,[$2])
Steve Kondikae271bc2015-11-15 02:50:53 +0100805else
micky3879b9f5e72025-07-08 18:04:53 -0400806 AC_MSG_CHECKING(for data $cf_data in library)
Steve Kondikae271bc2015-11-15 02:50:53 +0100807 # BSD linkers insist on making weak linkage, but resolve at runtime.
808 AC_TRY_RUN(CF__CURSES_HEAD
809[
micky3879b9f5e72025-07-08 18:04:53 -0400810extern char $cf_data;
Steve Kondikae271bc2015-11-15 02:50:53 +0100811int main(void)
812{
micky3879b9f5e72025-07-08 18:04:53 -0400813 ]CF__CURSES_DATA(foo,$cf_data)[
Steve Kondikae271bc2015-11-15 02:50:53 +0100814 ${cf_cv_main_return:-return}(foo == 0);
micky3879b9f5e72025-07-08 18:04:53 -0400815}],[cf_result=yes
816],[cf_result=no],[
Steve Kondikae271bc2015-11-15 02:50:53 +0100817 # cross-compiling
818 AC_TRY_LINK(CF__CURSES_HEAD
micky3879b9f5e72025-07-08 18:04:53 -0400819[extern char $cf_data;],[
Steve Kondikae271bc2015-11-15 02:50:53 +0100820 do {
micky3879b9f5e72025-07-08 18:04:53 -0400821 ]CF__CURSES_DATA(foo,$cf_data)[
Steve Kondikae271bc2015-11-15 02:50:53 +0100822 ${cf_cv_main_return:-return}(foo == 0);
823 } while (0)
824],[cf_result=yes],[cf_result=no])
825])
826 AC_MSG_RESULT($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -0400827 if test "$cf_result" = yes ; then
828 CF_UPPER(cf_result,decl_curses_data_$cf_data)
Steve Kondikae271bc2015-11-15 02:50:53 +0100829 AC_DEFINE_UNQUOTED($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -0400830 # do not exit loop here, since we prefer system's declarations
Steve Kondikae271bc2015-11-15 02:50:53 +0100831 fi
832fi
micky3879b9f5e72025-07-08 18:04:53 -0400833done
Steve Kondikae271bc2015-11-15 02:50:53 +0100834])dnl
835dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400836dnl CF_CURSES_CHECK_TYPE version: 5 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +0100837dnl --------------------
838dnl Check if curses.h defines the given type
839AC_DEFUN([CF_CURSES_CHECK_TYPE],
840[
841AC_MSG_CHECKING(for type $1 in ${cf_cv_ncurses_header:-curses.h})
842AC_TRY_COMPILE([
843#ifndef _XOPEN_SOURCE_EXTENDED
844#define _XOPEN_SOURCE_EXTENDED
845#endif
846#include <${cf_cv_ncurses_header:-curses.h}>],[
847$1 foo
848],cf_result=yes,cf_result=no)
849AC_MSG_RESULT($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -0400850if test "$cf_result" = yes ; then
Steve Kondikae271bc2015-11-15 02:50:53 +0100851 CF_UPPER(cf_result,have_type_$1)
852 AC_DEFINE_UNQUOTED($cf_result,1,[Define to 1 if we have type $1])
853else
854 AC_DEFINE_UNQUOTED($1,$2,[Define to appropriate type if $1 is not declared])
855fi
856])dnl
857dnl ---------------------------------------------------------------------------
858dnl CF_CURSES_CONFIG version: 2 updated: 2006/10/29 11:06:27
859dnl ----------------
860dnl Tie together the configure-script macros for curses. It may be ncurses,
861dnl but unless asked, we do not make a special search for ncurses. However,
862dnl still check for the ncurses version number, for use in other macros.
863AC_DEFUN([CF_CURSES_CONFIG],
864[
865CF_CURSES_CPPFLAGS
866CF_NCURSES_VERSION
867CF_CURSES_LIBS
868])dnl
869dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400870dnl CF_CURSES_CPPFLAGS version: 14 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +0100871dnl ------------------
872dnl Look for the curses headers.
873AC_DEFUN([CF_CURSES_CPPFLAGS],[
874
875AC_CACHE_CHECK(for extra include directories,cf_cv_curses_incdir,[
876cf_cv_curses_incdir=no
micky3879b9f5e72025-07-08 18:04:53 -0400877case "$host_os" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100878(hpux10.*)
879 if test "x$cf_cv_screen" = "xcurses_colr"
880 then
881 test -d /usr/include/curses_colr && \
882 cf_cv_curses_incdir="-I/usr/include/curses_colr"
883 fi
884 ;;
885(sunos3*|sunos4*)
886 if test "x$cf_cv_screen" = "xcurses_5lib"
887 then
888 test -d /usr/5lib && \
889 test -d /usr/5include && \
890 cf_cv_curses_incdir="-I/usr/5include"
891 fi
892 ;;
893esac
894])
micky3879b9f5e72025-07-08 18:04:53 -0400895if test "$cf_cv_curses_incdir" != no
896then
897 CF_APPEND_TEXT(CPPFLAGS,$cf_cv_curses_incdir)
898fi
Steve Kondikae271bc2015-11-15 02:50:53 +0100899
900CF_CURSES_HEADER
901CF_TERM_HEADER
902])dnl
903dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400904dnl CF_CURSES_FUNCS version: 20 updated: 2020/12/31 20:19:42
Steve Kondikae271bc2015-11-15 02:50:53 +0100905dnl ---------------
906dnl Curses-functions are a little complicated, since a lot of them are macros.
907AC_DEFUN([CF_CURSES_FUNCS],
908[
909AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
910AC_REQUIRE([CF_XOPEN_CURSES])
911AC_REQUIRE([CF_CURSES_TERM_H])
912AC_REQUIRE([CF_CURSES_UNCTRL_H])
913for cf_func in $1
914do
915 CF_UPPER(cf_tr_func,$cf_func)
916 AC_MSG_CHECKING(for ${cf_func})
917 CF_MSG_LOG(${cf_func})
918 AC_CACHE_VAL(cf_cv_func_$cf_func,[
919 eval cf_result='$ac_cv_func_'$cf_func
920 if test ".$cf_result" != ".no"; then
921 AC_TRY_LINK(CF__CURSES_HEAD,
922 [
923#ifndef ${cf_func}
924long foo = (long)(&${cf_func});
micky3879b9f5e72025-07-08 18:04:53 -0400925fprintf(stderr, "testing linkage of $cf_func:%p\\n", (void *)foo);
926if (foo + 1234L > 5678L)
927 ${cf_cv_main_return:-return}(foo != 0);
Steve Kondikae271bc2015-11-15 02:50:53 +0100928#endif
929 ],
930 [cf_result=yes],
931 [cf_result=no])
932 fi
micky3879b9f5e72025-07-08 18:04:53 -0400933 eval 'cf_cv_func_'$cf_func'="$cf_result"'
Steve Kondikae271bc2015-11-15 02:50:53 +0100934 ])
935 # use the computed/retrieved cache-value:
936 eval 'cf_result=$cf_cv_func_'$cf_func
937 AC_MSG_RESULT($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -0400938 if test "$cf_result" != no; then
Steve Kondikae271bc2015-11-15 02:50:53 +0100939 AC_DEFINE_UNQUOTED(HAVE_${cf_tr_func})
940 fi
941done
942])dnl
943dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400944dnl CF_CURSES_HEADER version: 6 updated: 2022/12/02 20:06:52
Steve Kondikae271bc2015-11-15 02:50:53 +0100945dnl ----------------
946dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common
947dnl variations of ncurses' installs.
948dnl
949dnl $1 = ncurses when looking for ncurses, or is empty
950AC_DEFUN([CF_CURSES_HEADER],[
951AC_CACHE_CHECK(if we have identified curses headers,cf_cv_ncurses_header,[
952cf_cv_ncurses_header=none
953for cf_header in \
954 ncurses.h ifelse($1,,,[$1/ncurses.h]) \
955 curses.h ifelse($1,,,[$1/curses.h]) ifelse($1,,[ncurses/ncurses.h ncurses/curses.h])
956do
957AC_TRY_COMPILE([#include <${cf_header}>],
micky3879b9f5e72025-07-08 18:04:53 -0400958 [initscr(); endwin()],
Steve Kondikae271bc2015-11-15 02:50:53 +0100959 [cf_cv_ncurses_header=$cf_header; break],[])
960done
961])
962
963if test "$cf_cv_ncurses_header" = none ; then
964 AC_MSG_ERROR(No curses header-files found)
965fi
966
967# cheat, to get the right #define's for HAVE_NCURSES_H, etc.
968AC_CHECK_HEADERS($cf_cv_ncurses_header)
969])dnl
970dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -0400971dnl CF_CURSES_LIBS version: 45 updated: 2022/12/02 20:06:52
Steve Kondikae271bc2015-11-15 02:50:53 +0100972dnl --------------
973dnl Look for the curses libraries. Older curses implementations may require
974dnl termcap/termlib to be linked as well. Call CF_CURSES_CPPFLAGS first.
975AC_DEFUN([CF_CURSES_LIBS],[
976
977AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
978AC_MSG_CHECKING(if we have identified curses libraries)
979AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
micky3879b9f5e72025-07-08 18:04:53 -0400980 [initscr(); endwin()],
Steve Kondikae271bc2015-11-15 02:50:53 +0100981 cf_result=yes,
982 cf_result=no)
983AC_MSG_RESULT($cf_result)
984
985if test "$cf_result" = no ; then
micky3879b9f5e72025-07-08 18:04:53 -0400986case "$host_os" in
Steve Kondikae271bc2015-11-15 02:50:53 +0100987(freebsd*)
988 AC_CHECK_LIB(mytinfo,tgoto,[CF_ADD_LIBS(-lmytinfo)])
989 ;;
990(hpux10.*)
991 # Looking at HPUX 10.20, the Hcurses library is the oldest (1997), cur_colr
992 # next (1998), and xcurses "newer" (2000). There is no header file for
993 # Hcurses; the subdirectory curses_colr has the headers (curses.h and
994 # term.h) for cur_colr
995 if test "x$cf_cv_screen" = "xcurses_colr"
996 then
997 AC_CHECK_LIB(cur_colr,initscr,[
998 CF_ADD_LIBS(-lcur_colr)
999 ac_cv_func_initscr=yes
1000 ],[
1001 AC_CHECK_LIB(Hcurses,initscr,[
1002 # HP's header uses __HP_CURSES, but user claims _HP_CURSES.
1003 CF_ADD_LIBS(-lHcurses)
micky3879b9f5e72025-07-08 18:04:53 -04001004 CF_APPEND_TEXT(CPPFLAGS,-D__HP_CURSES -D_HP_CURSES)
Steve Kondikae271bc2015-11-15 02:50:53 +01001005 ac_cv_func_initscr=yes
1006 ])])
1007 fi
1008 ;;
1009(linux*)
1010 case `arch 2>/dev/null` in
1011 (x86_64)
1012 if test -d /lib64
1013 then
1014 CF_ADD_LIBDIR(/lib64)
1015 else
1016 CF_ADD_LIBDIR(/lib)
1017 fi
1018 ;;
1019 (*)
1020 CF_ADD_LIBDIR(/lib)
1021 ;;
1022 esac
1023 ;;
1024(sunos3*|sunos4*)
1025 if test "x$cf_cv_screen" = "xcurses_5lib"
1026 then
1027 if test -d /usr/5lib ; then
1028 CF_ADD_LIBDIR(/usr/5lib)
1029 CF_ADD_LIBS(-lcurses -ltermcap)
1030 fi
1031 fi
1032 ac_cv_func_initscr=yes
1033 ;;
1034esac
1035
1036if test ".$ac_cv_func_initscr" != .yes ; then
1037 cf_save_LIBS="$LIBS"
1038
1039 if test ".${cf_cv_ncurses_version:-no}" != .no
1040 then
1041 cf_check_list="ncurses curses cursesX"
1042 else
1043 cf_check_list="cursesX curses ncurses"
1044 fi
1045
1046 # Check for library containing tgoto. Do this before curses library
1047 # because it may be needed to link the test-case for initscr.
1048 if test "x$cf_term_lib" = x
1049 then
1050 AC_CHECK_FUNC(tgoto,[cf_term_lib=predefined],[
1051 for cf_term_lib in $cf_check_list otermcap termcap tinfo termlib unknown
1052 do
micky3879b9f5e72025-07-08 18:04:53 -04001053 AC_CHECK_LIB($cf_term_lib,tgoto,[
1054 : "${cf_nculib_root:=$cf_term_lib}"
1055 break
1056 ])
Steve Kondikae271bc2015-11-15 02:50:53 +01001057 done
1058 ])
1059 fi
1060
1061 # Check for library containing initscr
1062 test "$cf_term_lib" != predefined && test "$cf_term_lib" != unknown && LIBS="-l$cf_term_lib $cf_save_LIBS"
1063 if test "x$cf_curs_lib" = x
1064 then
1065 for cf_curs_lib in $cf_check_list xcurses jcurses pdcurses unknown
1066 do
micky3879b9f5e72025-07-08 18:04:53 -04001067 LIBS="-l$cf_curs_lib $cf_save_LIBS"
1068 if test "$cf_term_lib" = unknown || test "$cf_term_lib" = "$cf_curs_lib" ; then
1069 AC_MSG_CHECKING(if we can link with $cf_curs_lib library)
1070 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
1071 [initscr()],
1072 [cf_result=yes],
1073 [cf_result=no])
1074 AC_MSG_RESULT($cf_result)
1075 test "$cf_result" = yes && break
1076 elif test "$cf_curs_lib" = "$cf_term_lib" ; then
1077 cf_result=no
1078 elif test "$cf_term_lib" != predefined ; then
1079 AC_MSG_CHECKING(if we need both $cf_curs_lib and $cf_term_lib libraries)
1080 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
1081 [initscr(); endwin();],
1082 [cf_result=no],
1083 [
1084 LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
1085 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
1086 [initscr()],
1087 [cf_result=yes],
1088 [cf_result=error])
1089 ])
1090 AC_MSG_RESULT($cf_result)
1091 test "$cf_result" != error && break
1092 fi
Steve Kondikae271bc2015-11-15 02:50:53 +01001093 done
1094 fi
micky3879b9f5e72025-07-08 18:04:53 -04001095 test "$cf_curs_lib" = unknown && AC_MSG_ERROR(no curses library found)
Steve Kondikae271bc2015-11-15 02:50:53 +01001096fi
1097fi
1098
1099])dnl
1100dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001101dnl CF_CURSES_TERM_H version: 16 updated: 2024/01/07 06:34:16
Steve Kondikae271bc2015-11-15 02:50:53 +01001102dnl ----------------
1103dnl SVr4 curses should have term.h as well (where it puts the definitions of
1104dnl the low-level interface). This may not be true in old/broken implementations,
1105dnl as well as in misconfigured systems (e.g., gcc configured for Solaris 2.4
1106dnl running with Solaris 2.5.1).
1107AC_DEFUN([CF_CURSES_TERM_H],
1108[
1109AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
1110
1111AC_CACHE_CHECK(for term.h, cf_cv_term_header,[
1112
1113# If we found <ncurses/curses.h>, look for <ncurses/term.h>, but always look
1114# for <term.h> if we do not find the variant.
1115
1116cf_header_list="term.h ncurses/term.h ncursesw/term.h"
1117
micky3879b9f5e72025-07-08 18:04:53 -04001118case "${cf_cv_ncurses_header:-curses.h}" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001119(*/*)
micky3879b9f5e72025-07-08 18:04:53 -04001120 cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`term.h
Steve Kondikae271bc2015-11-15 02:50:53 +01001121 cf_header_list="$cf_header_item $cf_header_list"
1122 ;;
1123esac
1124
1125for cf_header in $cf_header_list
1126do
1127 AC_TRY_COMPILE([
1128#include <${cf_cv_ncurses_header:-curses.h}>
1129#include <${cf_header}>],
micky3879b9f5e72025-07-08 18:04:53 -04001130 [WINDOW *x; (void)x],
Steve Kondikae271bc2015-11-15 02:50:53 +01001131 [cf_cv_term_header=$cf_header
1132 break],
1133 [cf_cv_term_header=no])
1134done
1135
micky3879b9f5e72025-07-08 18:04:53 -04001136case "$cf_cv_term_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001137(no)
1138 # If curses is ncurses, some packagers still mess it up by trying to make
1139 # us use GNU termcap. This handles the most common case.
1140 for cf_header in ncurses/term.h ncursesw/term.h
1141 do
1142 AC_TRY_COMPILE([
1143#include <${cf_cv_ncurses_header:-curses.h}>
1144#ifdef NCURSES_VERSION
1145#include <${cf_header}>
1146#else
micky3879b9f5e72025-07-08 18:04:53 -04001147#error expected NCURSES_VERSION to be defined
Steve Kondikae271bc2015-11-15 02:50:53 +01001148#endif],
micky3879b9f5e72025-07-08 18:04:53 -04001149 [WINDOW *x; (void)x],
Steve Kondikae271bc2015-11-15 02:50:53 +01001150 [cf_cv_term_header=$cf_header
1151 break],
1152 [cf_cv_term_header=no])
1153 done
1154 ;;
1155esac
1156])
1157
micky3879b9f5e72025-07-08 18:04:53 -04001158case "$cf_cv_term_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001159(term.h)
1160 AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h])
1161 ;;
1162(ncurses/term.h)
1163 AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h])
1164 ;;
1165(ncursesw/term.h)
1166 AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h])
1167 ;;
1168esac
1169])dnl
1170dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001171dnl CF_CURSES_UNCTRL_H version: 8 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +01001172dnl ------------------
1173dnl Any X/Open curses implementation must have unctrl.h, but ncurses packages
1174dnl may put it in a subdirectory (along with ncurses' other headers, of
1175dnl course). Packages which put the headers in inconsistent locations are
1176dnl broken).
1177AC_DEFUN([CF_CURSES_UNCTRL_H],
1178[
1179AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
1180
1181AC_CACHE_CHECK(for unctrl.h, cf_cv_unctrl_header,[
1182
1183# If we found <ncurses/curses.h>, look for <ncurses/unctrl.h>, but always look
1184# for <unctrl.h> if we do not find the variant.
1185
1186cf_header_list="unctrl.h ncurses/unctrl.h ncursesw/unctrl.h"
1187
micky3879b9f5e72025-07-08 18:04:53 -04001188case "${cf_cv_ncurses_header:-curses.h}" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001189(*/*)
micky3879b9f5e72025-07-08 18:04:53 -04001190 cf_header_item=`echo "${cf_cv_ncurses_header:-curses.h}" | sed -e 's%\..*%%' -e 's%/.*%/%'`unctrl.h
Steve Kondikae271bc2015-11-15 02:50:53 +01001191 cf_header_list="$cf_header_item $cf_header_list"
1192 ;;
1193esac
1194
1195for cf_header in $cf_header_list
1196do
1197 AC_TRY_COMPILE([
1198#include <${cf_cv_ncurses_header:-curses.h}>
1199#include <${cf_header}>],
micky3879b9f5e72025-07-08 18:04:53 -04001200 [WINDOW *x; (void)x],
Steve Kondikae271bc2015-11-15 02:50:53 +01001201 [cf_cv_unctrl_header=$cf_header
1202 break],
1203 [cf_cv_unctrl_header=no])
1204done
1205])
1206
micky3879b9f5e72025-07-08 18:04:53 -04001207case "$cf_cv_unctrl_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001208(no)
1209 AC_MSG_WARN(unctrl.h header not found)
1210 ;;
1211esac
1212
micky3879b9f5e72025-07-08 18:04:53 -04001213case "$cf_cv_unctrl_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001214(unctrl.h)
1215 AC_DEFINE(HAVE_UNCTRL_H,1,[Define to 1 if we have unctrl.h])
1216 ;;
1217(ncurses/unctrl.h)
1218 AC_DEFINE(HAVE_NCURSES_UNCTRL_H,1,[Define to 1 if we have ncurses/unctrl.h])
1219 ;;
1220(ncursesw/unctrl.h)
1221 AC_DEFINE(HAVE_NCURSESW_UNCTRL_H,1,[Define to 1 if we have ncursesw/unctrl.h])
1222 ;;
1223esac
1224])dnl
1225dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001226dnl CF_CURSES_WACS_MAP version: 8 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +01001227dnl ------------------
1228dnl Check for likely values of wacs_map[].
1229AC_DEFUN([CF_CURSES_WACS_MAP],
1230[
1231AC_CACHE_CHECK(for wide alternate character set array, cf_cv_curses_wacs_map,[
1232 cf_cv_curses_wacs_map=unknown
1233 for name in wacs_map _wacs_map __wacs_map _nc_wacs _wacs_char
1234 do
1235 AC_TRY_LINK([
1236#ifndef _XOPEN_SOURCE_EXTENDED
1237#define _XOPEN_SOURCE_EXTENDED
1238#endif
1239#include <${cf_cv_ncurses_header:-curses.h}>],
micky3879b9f5e72025-07-08 18:04:53 -04001240 [void *foo = &(${name}['k']); (void)foo],
Steve Kondikae271bc2015-11-15 02:50:53 +01001241 [cf_cv_curses_wacs_map=$name
1242 break])
1243 done])
1244
1245test "$cf_cv_curses_wacs_map" != unknown && AC_DEFINE_UNQUOTED(CURSES_WACS_ARRAY,$cf_cv_curses_wacs_map,[Define to name of (n)curses wide-character array])
1246])dnl
1247dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001248dnl CF_CURSES_WACS_SYMBOLS version: 4 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +01001249dnl ----------------------
1250dnl Do a check to see if the WACS_xxx constants are defined compatibly with
1251dnl X/Open Curses. In particular, NetBSD's implementation of the WACS_xxx
1252dnl constants is broken since those constants do not point to cchar_t's.
1253AC_DEFUN([CF_CURSES_WACS_SYMBOLS],
1254[
1255AC_REQUIRE([CF_CURSES_WACS_MAP])
1256
1257AC_CACHE_CHECK(for wide alternate character constants, cf_cv_curses_wacs_symbols,[
1258cf_cv_curses_wacs_symbols=no
1259if test "$cf_cv_curses_wacs_map" != unknown
1260then
1261 AC_TRY_LINK([
1262#ifndef _XOPEN_SOURCE_EXTENDED
1263#define _XOPEN_SOURCE_EXTENDED
1264#endif
1265#include <${cf_cv_ncurses_header:-curses.h}>],
1266 [cchar_t *foo = WACS_PLUS;
micky3879b9f5e72025-07-08 18:04:53 -04001267 ${cf_cv_curses_wacs_map}['k'] = *WACS_PLUS; (void)foo],
Steve Kondikae271bc2015-11-15 02:50:53 +01001268 [cf_cv_curses_wacs_symbols=yes])
1269else
1270 AC_TRY_LINK([
1271#ifndef _XOPEN_SOURCE_EXTENDED
1272#define _XOPEN_SOURCE_EXTENDED
1273#endif
1274#include <${cf_cv_ncurses_header:-curses.h}>],
micky3879b9f5e72025-07-08 18:04:53 -04001275 [cchar_t *foo = WACS_PLUS; (void)foo],
Steve Kondikae271bc2015-11-15 02:50:53 +01001276 [cf_cv_curses_wacs_symbols=yes])
1277fi
1278])
1279
1280test "$cf_cv_curses_wacs_symbols" != no && AC_DEFINE(CURSES_WACS_SYMBOLS,1,[Define to 1 if (n)curses supports wide-character WACS_ symbols])
1281])dnl
1282dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001283dnl CF_DIRNAME version: 5 updated: 2020/12/31 20:19:42
Steve Kondikae271bc2015-11-15 02:50:53 +01001284dnl ----------
1285dnl "dirname" is not portable, so we fake it with a shell script.
micky3879b9f5e72025-07-08 18:04:53 -04001286AC_DEFUN([CF_DIRNAME],[$1=`echo "$2" | sed -e 's%/[[^/]]*$%%'`])dnl
Steve Kondikae271bc2015-11-15 02:50:53 +01001287dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001288dnl CF_DISABLE_ECHO version: 14 updated: 2021/09/04 06:35:04
Steve Kondikae271bc2015-11-15 02:50:53 +01001289dnl ---------------
micky3879b9f5e72025-07-08 18:04:53 -04001290dnl You can always use "make -n" to see the actual options, but it is hard to
Steve Kondikae271bc2015-11-15 02:50:53 +01001291dnl pick out/analyze warning messages when the compile-line is long.
1292dnl
1293dnl Sets:
1294dnl ECHO_LT - symbol to control if libtool is verbose
1295dnl ECHO_LD - symbol to prefix "cc -o" lines
1296dnl RULE_CC - symbol to put before implicit "cc -c" lines (e.g., .c.o)
1297dnl SHOW_CC - symbol to put before explicit "cc -c" lines
1298dnl ECHO_CC - symbol to put before any "cc" line
1299dnl
1300AC_DEFUN([CF_DISABLE_ECHO],[
1301AC_MSG_CHECKING(if you want to see long compiling messages)
1302CF_ARG_DISABLE(echo,
1303 [ --disable-echo do not display "compiling" commands],
1304 [
1305 ECHO_LT='--silent'
1306 ECHO_LD='@echo linking [$]@;'
1307 RULE_CC='@echo compiling [$]<'
1308 SHOW_CC='@echo compiling [$]@'
1309 ECHO_CC='@'
1310],[
1311 ECHO_LT=''
1312 ECHO_LD=''
1313 RULE_CC=''
1314 SHOW_CC=''
1315 ECHO_CC=''
1316])
1317AC_MSG_RESULT($enableval)
1318AC_SUBST(ECHO_LT)
1319AC_SUBST(ECHO_LD)
1320AC_SUBST(RULE_CC)
1321AC_SUBST(SHOW_CC)
1322AC_SUBST(ECHO_CC)
1323])dnl
1324dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001325dnl CF_DISABLE_LEAKS version: 9 updated: 2021/04/03 16:41:50
Steve Kondikae271bc2015-11-15 02:50:53 +01001326dnl ----------------
1327dnl Combine no-leak checks with the libraries or tools that are used for the
1328dnl checks.
1329AC_DEFUN([CF_DISABLE_LEAKS],[
1330
1331AC_REQUIRE([CF_WITH_DMALLOC])
1332AC_REQUIRE([CF_WITH_DBMALLOC])
1333AC_REQUIRE([CF_WITH_VALGRIND])
1334
1335AC_MSG_CHECKING(if you want to perform memory-leak testing)
1336AC_ARG_ENABLE(leaks,
1337 [ --disable-leaks test: free permanent memory, analyze leaks],
micky3879b9f5e72025-07-08 18:04:53 -04001338 [enable_leaks=$enableval],
1339 [enable_leaks=yes])
1340dnl with_no_leaks is more readable...
1341if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
Steve Kondikae271bc2015-11-15 02:50:53 +01001342AC_MSG_RESULT($with_no_leaks)
1343
micky3879b9f5e72025-07-08 18:04:53 -04001344if test "$enable_leaks" = no ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01001345 AC_DEFINE(NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
1346 AC_DEFINE(YY_NO_LEAKS,1,[Define to 1 if you want to perform memory-leak testing.])
1347fi
1348])dnl
1349dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001350dnl CF_DISABLE_RPATH_HACK version: 3 updated: 2021/01/05 20:14:44
Steve Kondikae271bc2015-11-15 02:50:53 +01001351dnl ---------------------
1352dnl The rpath-hack makes it simpler to build programs, particularly with the
1353dnl *BSD ports which may have essential libraries in unusual places. But it
1354dnl can interfere with building an executable for the base system. Use this
1355dnl option in that case.
1356AC_DEFUN([CF_DISABLE_RPATH_HACK],
1357[
1358AC_MSG_CHECKING(if rpath-hack should be disabled)
1359CF_ARG_DISABLE(rpath-hack,
1360 [ --disable-rpath-hack don't add rpath options for additional libraries],
micky3879b9f5e72025-07-08 18:04:53 -04001361 [enable_rpath_hack=no],
1362 [enable_rpath_hack=yes])
1363dnl TODO - drop cf_disable_rpath_hack
1364if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi
Steve Kondikae271bc2015-11-15 02:50:53 +01001365AC_MSG_RESULT($cf_disable_rpath_hack)
micky3879b9f5e72025-07-08 18:04:53 -04001366
1367if test "$enable_rpath_hack" = yes ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01001368 CF_RPATH_HACK
1369fi
1370])
1371dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001372dnl CF_ENABLE_STRING_HACKS version: 6 updated: 2021/01/05 19:23:48
1373dnl ----------------------
1374dnl On a few platforms, the compiler and/or loader nags with untruthful
1375dnl comments stating that "most" uses of strcat/strcpy/sprintf are incorrect,
1376dnl and implying that most uses of the recommended alternatives are correct.
1377dnl
1378dnl Factually speaking, no one has actually counted the number of uses of these
1379dnl functions versus the total of incorrect uses. Samples of a few thousand
1380dnl instances are meaningless compared to the hundreds of millions of lines of
1381dnl existing C code.
1382dnl
1383dnl strlcat/strlcpy are (as of 2012) non-standard, and are available on some
1384dnl platforms, in implementations of varying quality. Likewise, snprintf is
1385dnl standard - but evolved through phases, and older implementations are likely
1386dnl to yield surprising results, as documented in manpages on various systems.
1387AC_DEFUN([CF_ENABLE_STRING_HACKS],
1388[
1389AC_MSG_CHECKING(if you want to work around bogus compiler/loader warnings)
1390AC_ARG_ENABLE(string-hacks,
1391 [ --enable-string-hacks work around bogus compiler/loader warnings],
1392 [enable_string_hacks=$enableval],
1393 [enable_string_hacks=no])
1394AC_MSG_RESULT($enable_string_hacks)
1395
1396if test "x$enable_string_hacks" = "xyes"; then
1397 AC_DEFINE(USE_STRING_HACKS,1,[Define to 1 to work around bogus compiler/loader warnings])
1398 AC_MSG_WARN(enabling string-hacks to work around bogus compiler/loader warnings)
1399 AC_CHECK_FUNC(strlcat,[
1400 AC_DEFINE(HAVE_STRLCAT,1,[Define to 1 if we have strlcat function])
1401 ],[
1402 AC_CHECK_LIB(bsd,strlcat,[
1403 CF_ADD_LIB(bsd)
1404 AC_CHECK_HEADERS(bsd/string.h)
1405 AC_DEFINE(HAVE_STRLCAT,1,[Define to 1 if we have strlcat function])
1406 ])
1407 ])
1408 AC_CHECK_FUNCS( strlcpy snprintf )
Steve Kondikae271bc2015-11-15 02:50:53 +01001409fi
1410])dnl
1411dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001412dnl CF_ENABLE_WARNINGS version: 9 updated: 2021/01/05 19:40:50
1413dnl ------------------
1414dnl Configure-option to enable gcc warnings
1415dnl
1416dnl $1 = extra options to add, if supported
1417dnl $2 = option for checking attributes. By default, this is done when
1418dnl warnings are enabled. For other values:
1419dnl yes: always do this, e.g., to use in generated library-headers
1420dnl no: never do this
1421AC_DEFUN([CF_ENABLE_WARNINGS],[
1422if test "$GCC" = yes || test "$GXX" = yes
1423then
1424CF_FIX_WARNINGS(CFLAGS)
1425CF_FIX_WARNINGS(CPPFLAGS)
1426CF_FIX_WARNINGS(LDFLAGS)
1427AC_MSG_CHECKING(if you want to turn on gcc warnings)
1428CF_ARG_ENABLE(warnings,
1429 [ --enable-warnings test: turn on gcc compiler warnings],
1430 [enable_warnings=yes],
1431 [enable_warnings=no])
1432AC_MSG_RESULT($enable_warnings)
1433if test "$enable_warnings" = "yes"
1434then
1435 ifelse($2,,[CF_GCC_ATTRIBUTES])
1436 CF_GCC_WARNINGS($1)
1437fi
1438ifelse($2,yes,[CF_GCC_ATTRIBUTES])
1439fi
1440])dnl
1441dnl ---------------------------------------------------------------------------
1442dnl CF_FIND_LIBRARY version: 11 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +01001443dnl ---------------
1444dnl Look for a non-standard library, given parameters for AC_TRY_LINK. We
1445dnl prefer a standard location, and use -L options only if we do not find the
1446dnl library in the standard library location(s).
1447dnl $1 = library name
1448dnl $2 = library class, usually the same as library name
1449dnl $3 = includes
1450dnl $4 = code fragment to compile/link
1451dnl $5 = corresponding function-name
1452dnl $6 = flag, nonnull if failure should not cause an error-exit
1453dnl
1454dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had
1455dnl to use a -L option.
1456AC_DEFUN([CF_FIND_LIBRARY],
1457[
micky3879b9f5e72025-07-08 18:04:53 -04001458 eval 'cf_cv_have_lib_'"$1"'=no'
Steve Kondikae271bc2015-11-15 02:50:53 +01001459 cf_libdir=""
1460 AC_CHECK_FUNC($5,
micky3879b9f5e72025-07-08 18:04:53 -04001461 eval 'cf_cv_have_lib_'"$1"'=yes',[
Steve Kondikae271bc2015-11-15 02:50:53 +01001462 cf_save_LIBS="$LIBS"
1463 AC_MSG_CHECKING(for $5 in -l$1)
1464 LIBS="-l$1 $LIBS"
1465 AC_TRY_LINK([$3],[$4],
1466 [AC_MSG_RESULT(yes)
micky3879b9f5e72025-07-08 18:04:53 -04001467 eval 'cf_cv_have_lib_'"$1"'=yes'
Steve Kondikae271bc2015-11-15 02:50:53 +01001468 ],
1469 [AC_MSG_RESULT(no)
1470 CF_LIBRARY_PATH(cf_search,$2)
1471 for cf_libdir in $cf_search
1472 do
1473 AC_MSG_CHECKING(for -l$1 in $cf_libdir)
1474 LIBS="-L$cf_libdir -l$1 $cf_save_LIBS"
1475 AC_TRY_LINK([$3],[$4],
1476 [AC_MSG_RESULT(yes)
micky3879b9f5e72025-07-08 18:04:53 -04001477 eval 'cf_cv_have_lib_'"$1"'=yes'
Steve Kondikae271bc2015-11-15 02:50:53 +01001478 break],
1479 [AC_MSG_RESULT(no)
1480 LIBS="$cf_save_LIBS"])
1481 done
1482 ])
1483 ])
micky3879b9f5e72025-07-08 18:04:53 -04001484eval 'cf_found_library="[$]cf_cv_have_lib_'"$1"\"
Steve Kondikae271bc2015-11-15 02:50:53 +01001485ifelse($6,,[
micky3879b9f5e72025-07-08 18:04:53 -04001486if test "$cf_found_library" = no ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01001487 AC_MSG_ERROR(Cannot link $1 library)
1488fi
1489])
1490])dnl
1491dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001492dnl CF_FIND_LINKAGE version: 22 updated: 2020/12/31 20:19:42
Steve Kondikae271bc2015-11-15 02:50:53 +01001493dnl ---------------
1494dnl Find a library (specifically the linkage used in the code fragment),
1495dnl searching for it if it is not already in the library path.
1496dnl See also CF_ADD_SEARCHPATH.
1497dnl
1498dnl Parameters (4-on are optional):
1499dnl $1 = headers for library entrypoint
1500dnl $2 = code fragment for library entrypoint
1501dnl $3 = the library name without the "-l" option or ".so" suffix.
1502dnl $4 = action to perform if successful (default: update CPPFLAGS, etc)
1503dnl $5 = action to perform if not successful
1504dnl $6 = module name, if not the same as the library name
1505dnl $7 = extra libraries
1506dnl
1507dnl Sets these variables:
1508dnl $cf_cv_find_linkage_$3 - yes/no according to whether linkage is found
1509dnl $cf_cv_header_path_$3 - include-directory if needed
1510dnl $cf_cv_library_path_$3 - library-directory if needed
1511dnl $cf_cv_library_file_$3 - library-file if needed, e.g., -l$3
1512AC_DEFUN([CF_FIND_LINKAGE],[
1513
1514# If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these
1515# will be set on completion of the AC_TRY_LINK below.
1516cf_cv_header_path_$3=
1517cf_cv_library_path_$3=
1518
1519CF_MSG_LOG([Starting [FIND_LINKAGE]($3,$6)])
1520
1521cf_save_LIBS="$LIBS"
1522
1523AC_TRY_LINK([$1],[$2],[
1524 cf_cv_find_linkage_$3=yes
1525 cf_cv_header_path_$3=/usr/include
1526 cf_cv_library_path_$3=/usr/lib
1527],[
1528
1529LIBS="-l$3 $7 $cf_save_LIBS"
1530
1531AC_TRY_LINK([$1],[$2],[
1532 cf_cv_find_linkage_$3=yes
1533 cf_cv_header_path_$3=/usr/include
1534 cf_cv_library_path_$3=/usr/lib
1535 cf_cv_library_file_$3="-l$3"
1536],[
1537 cf_cv_find_linkage_$3=no
1538 LIBS="$cf_save_LIBS"
1539
1540 CF_VERBOSE(find linkage for $3 library)
1541 CF_MSG_LOG([Searching for headers in [FIND_LINKAGE]($3,$6)])
1542
1543 cf_save_CPPFLAGS="$CPPFLAGS"
1544 cf_test_CPPFLAGS="$CPPFLAGS"
1545
1546 CF_HEADER_PATH(cf_search,ifelse([$6],,[$3],[$6]))
1547 for cf_cv_header_path_$3 in $cf_search
1548 do
micky3879b9f5e72025-07-08 18:04:53 -04001549 if test -d "$cf_cv_header_path_$3" ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01001550 CF_VERBOSE(... testing $cf_cv_header_path_$3)
micky3879b9f5e72025-07-08 18:04:53 -04001551 CPPFLAGS="$cf_save_CPPFLAGS"
1552 CF_APPEND_TEXT(CPPFLAGS,-I$cf_cv_header_path_$3)
Steve Kondikae271bc2015-11-15 02:50:53 +01001553 AC_TRY_COMPILE([$1],[$2],[
1554 CF_VERBOSE(... found $3 headers in $cf_cv_header_path_$3)
1555 cf_cv_find_linkage_$3=maybe
1556 cf_test_CPPFLAGS="$CPPFLAGS"
1557 break],[
1558 CPPFLAGS="$cf_save_CPPFLAGS"
1559 ])
1560 fi
1561 done
1562
1563 if test "$cf_cv_find_linkage_$3" = maybe ; then
1564
1565 CF_MSG_LOG([Searching for $3 library in [FIND_LINKAGE]($3,$6)])
1566
1567 cf_save_LIBS="$LIBS"
1568 cf_save_LDFLAGS="$LDFLAGS"
1569
1570 ifelse([$6],,,[
1571 CPPFLAGS="$cf_test_CPPFLAGS"
1572 LIBS="-l$3 $7 $cf_save_LIBS"
1573 AC_TRY_LINK([$1],[$2],[
1574 CF_VERBOSE(... found $3 library in system)
1575 cf_cv_find_linkage_$3=yes])
1576 CPPFLAGS="$cf_save_CPPFLAGS"
1577 LIBS="$cf_save_LIBS"
1578 ])
1579
1580 if test "$cf_cv_find_linkage_$3" != yes ; then
1581 CF_LIBRARY_PATH(cf_search,$3)
1582 for cf_cv_library_path_$3 in $cf_search
1583 do
micky3879b9f5e72025-07-08 18:04:53 -04001584 if test -d "$cf_cv_library_path_$3" ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01001585 CF_VERBOSE(... testing $cf_cv_library_path_$3)
1586 CPPFLAGS="$cf_test_CPPFLAGS"
1587 LIBS="-l$3 $7 $cf_save_LIBS"
1588 LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_$3"
1589 AC_TRY_LINK([$1],[$2],[
1590 CF_VERBOSE(... found $3 library in $cf_cv_library_path_$3)
1591 cf_cv_find_linkage_$3=yes
1592 cf_cv_library_file_$3="-l$3"
1593 break],[
1594 CPPFLAGS="$cf_save_CPPFLAGS"
1595 LIBS="$cf_save_LIBS"
1596 LDFLAGS="$cf_save_LDFLAGS"
1597 ])
1598 fi
1599 done
1600 CPPFLAGS="$cf_save_CPPFLAGS"
1601 LDFLAGS="$cf_save_LDFLAGS"
1602 fi
1603
1604 else
1605 cf_cv_find_linkage_$3=no
1606 fi
1607 ],$7)
1608])
1609
1610LIBS="$cf_save_LIBS"
1611
1612if test "$cf_cv_find_linkage_$3" = yes ; then
1613ifelse([$4],,[
1614 CF_ADD_INCDIR($cf_cv_header_path_$3)
1615 CF_ADD_LIBDIR($cf_cv_library_path_$3)
1616 CF_ADD_LIB($3)
1617],[$4])
1618else
1619ifelse([$5],,AC_MSG_WARN(Cannot find $3 library),[$5])
1620fi
1621])dnl
1622dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001623dnl CF_FIX_WARNINGS version: 4 updated: 2021/12/16 18:22:31
1624dnl ---------------
1625dnl Warning flags do not belong in CFLAGS, CPPFLAGS, etc. Any of gcc's
1626dnl "-Werror" flags can interfere with configure-checks. Those go into
1627dnl EXTRA_CFLAGS.
1628dnl
1629dnl $1 = variable name to repair
1630define([CF_FIX_WARNINGS],[
1631if test "$GCC" = yes || test "$GXX" = yes
1632then
1633 case [$]$1 in
1634 (*-Werror=*)
1635 cf_temp_flags=
1636 for cf_temp_scan in [$]$1
1637 do
1638 case "x$cf_temp_scan" in
1639 (x-Werror=format*)
1640 CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan)
1641 ;;
1642 (x-Werror=*)
1643 CF_APPEND_TEXT(EXTRA_CFLAGS,$cf_temp_scan)
1644 ;;
1645 (*)
1646 CF_APPEND_TEXT(cf_temp_flags,$cf_temp_scan)
1647 ;;
1648 esac
1649 done
1650 if test "x[$]$1" != "x$cf_temp_flags"
1651 then
1652 CF_VERBOSE(repairing $1: [$]$1)
1653 $1="$cf_temp_flags"
1654 CF_VERBOSE(... fixed [$]$1)
1655 CF_VERBOSE(... extra $EXTRA_CFLAGS)
1656 fi
1657 ;;
1658 esac
1659fi
1660AC_SUBST(EXTRA_CFLAGS)
1661])dnl
1662dnl ---------------------------------------------------------------------------
1663dnl CF_FUNC_CURSES_VERSION version: 9 updated: 2023/01/05 18:06:10
Steve Kondikae271bc2015-11-15 02:50:53 +01001664dnl ----------------------
1665dnl Solaris has a data item 'curses_version', which confuses AC_CHECK_FUNCS.
1666dnl It's a character string "SVR4", not documented.
1667AC_DEFUN([CF_FUNC_CURSES_VERSION],
1668[
1669AC_CACHE_CHECK(for function curses_version, cf_cv_func_curses_version,[
1670AC_TRY_RUN([
micky3879b9f5e72025-07-08 18:04:53 -04001671$ac_includes_default
1672
Steve Kondikae271bc2015-11-15 02:50:53 +01001673#include <${cf_cv_ncurses_header:-curses.h}>
micky3879b9f5e72025-07-08 18:04:53 -04001674
1675int main(void)
Steve Kondikae271bc2015-11-15 02:50:53 +01001676{
1677 char temp[1024];
micky3879b9f5e72025-07-08 18:04:53 -04001678 sprintf(temp, "%.999s\\n", curses_version());
Steve Kondikae271bc2015-11-15 02:50:53 +01001679 ${cf_cv_main_return:-return}(0);
1680}]
1681,[cf_cv_func_curses_version=yes]
1682,[cf_cv_func_curses_version=no]
1683,[cf_cv_func_curses_version=unknown])
1684rm -f core])
1685test "$cf_cv_func_curses_version" = yes && AC_DEFINE(HAVE_CURSES_VERSION,1,[Define to 1 if we have curses_version function])
1686])
1687dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001688dnl CF_FUNC_GETTIME version: 2 updated: 2023/02/25 08:45:56
1689dnl ---------------
1690dnl Check for gettimeofday or clock_gettime. In 2023, the former is still more
1691dnl widely supported, but "deprecated" (2008), so we will use the latter if it
1692dnl is available, to reduce compiler warnings.
1693AC_DEFUN([CF_FUNC_GETTIME],[
1694AC_CACHE_CHECK(for clock_gettime,cf_cv_func_clock_gettime,[
1695 AC_TRY_LINK([#include <time.h>],
1696 [struct timespec ts;
1697 int rc = clock_gettime(CLOCK_REALTIME, &ts); (void) rc; (void)ts],
1698 [cf_cv_func_clock_gettime=yes],
1699 [cf_cv_func_clock_gettime=no])
1700])
1701
1702if test "$cf_cv_func_clock_gettime" = yes
1703then
1704 AC_DEFINE(HAVE_CLOCK_GETTIME,1,[Define to 1 if we have clock_gettime function])
1705else
1706AC_CHECK_FUNC(gettimeofday,
1707 AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function]),[
1708
1709AC_CHECK_LIB(bsd, gettimeofday,
1710 AC_DEFINE(HAVE_GETTIMEOFDAY,1,[Define to 1 if we have gettimeofday function])
1711 CF_ADD_LIB(bsd))])dnl CLIX: bzero, select, gettimeofday
1712fi
1713])dnl
1714dnl ---------------------------------------------------------------------------
1715dnl CF_FUNC_OPENPTY version: 7 updated: 2023/12/03 09:21:34
1716dnl ---------------
1717dnl Check for openpty() function, along with <pty.h> header. It may need the
1718dnl "util" library as well.
1719AC_DEFUN([CF_FUNC_OPENPTY],
1720[
1721AC_CHECK_LIB(util,openpty,cf_cv_lib_util=yes,cf_cv_lib_util=no)
1722AC_CACHE_CHECK(for openpty header,cf_cv_func_openpty,[
1723 cf_save_LIBS="$LIBS"
1724 test "$cf_cv_lib_util" = yes && { CF_ADD_LIB(util) }
1725 for cf_header in pty.h libutil.h util.h
1726 do
1727 AC_TRY_LINK([
1728#include <$cf_header>
1729],[
1730 int x = openpty((int *)0, (int *)0, (char *)0,
1731 (struct termios *)0, (struct winsize *)0);
1732 (void)x;
1733],[
1734 cf_cv_func_openpty=$cf_header
1735 break
1736],[
1737 cf_cv_func_openpty=no
1738])
1739 done
1740 LIBS="$cf_save_LIBS"
1741])
1742])dnl
1743dnl ---------------------------------------------------------------------------
1744dnl CF_GCC_ATTRIBUTES version: 24 updated: 2021/03/20 12:00:25
Steve Kondikae271bc2015-11-15 02:50:53 +01001745dnl -----------------
1746dnl Test for availability of useful gcc __attribute__ directives to quiet
1747dnl compiler warnings. Though useful, not all are supported -- and contrary
1748dnl to documentation, unrecognized directives cause older compilers to barf.
1749AC_DEFUN([CF_GCC_ATTRIBUTES],
micky3879b9f5e72025-07-08 18:04:53 -04001750[AC_REQUIRE([AC_PROG_FGREP])dnl
1751AC_REQUIRE([CF_C11_NORETURN])dnl
1752
1753if test "$GCC" = yes || test "$GXX" = yes
Steve Kondikae271bc2015-11-15 02:50:53 +01001754then
1755cat > conftest.i <<EOF
1756#ifndef GCC_PRINTF
1757#define GCC_PRINTF 0
1758#endif
1759#ifndef GCC_SCANF
1760#define GCC_SCANF 0
1761#endif
1762#ifndef GCC_NORETURN
1763#define GCC_NORETURN /* nothing */
1764#endif
1765#ifndef GCC_UNUSED
1766#define GCC_UNUSED /* nothing */
1767#endif
1768EOF
1769if test "$GCC" = yes
1770then
1771 AC_CHECKING([for $CC __attribute__ directives])
micky3879b9f5e72025-07-08 18:04:53 -04001772cat > "conftest.$ac_ext" <<EOF
Steve Kondikae271bc2015-11-15 02:50:53 +01001773#line __oline__ "${as_me:-configure}"
micky3879b9f5e72025-07-08 18:04:53 -04001774#include <stdio.h>
Steve Kondikae271bc2015-11-15 02:50:53 +01001775#include "confdefs.h"
1776#include "conftest.h"
1777#include "conftest.i"
1778#if GCC_PRINTF
1779#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
1780#else
1781#define GCC_PRINTFLIKE(fmt,var) /*nothing*/
1782#endif
1783#if GCC_SCANF
1784#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
1785#else
1786#define GCC_SCANFLIKE(fmt,var) /*nothing*/
1787#endif
1788extern void wow(char *,...) GCC_SCANFLIKE(1,2);
micky3879b9f5e72025-07-08 18:04:53 -04001789extern GCC_NORETURN void oops(char *,...) GCC_PRINTFLIKE(1,2);
1790extern GCC_NORETURN void foo(void);
1791int main(int argc GCC_UNUSED, char *argv[[]] GCC_UNUSED) { (void)argc; (void)argv; return 0; }
Steve Kondikae271bc2015-11-15 02:50:53 +01001792EOF
1793 cf_printf_attribute=no
1794 cf_scanf_attribute=no
1795 for cf_attribute in scanf printf unused noreturn
1796 do
1797 CF_UPPER(cf_ATTRIBUTE,$cf_attribute)
1798 cf_directive="__attribute__(($cf_attribute))"
1799 echo "checking for $CC $cf_directive" 1>&AC_FD_CC
1800
micky3879b9f5e72025-07-08 18:04:53 -04001801 case "$cf_attribute" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001802 (printf)
1803 cf_printf_attribute=yes
1804 cat >conftest.h <<EOF
1805#define GCC_$cf_ATTRIBUTE 1
1806EOF
1807 ;;
1808 (scanf)
1809 cf_scanf_attribute=yes
1810 cat >conftest.h <<EOF
1811#define GCC_$cf_ATTRIBUTE 1
1812EOF
1813 ;;
1814 (*)
1815 cat >conftest.h <<EOF
1816#define GCC_$cf_ATTRIBUTE $cf_directive
1817EOF
1818 ;;
1819 esac
1820
1821 if AC_TRY_EVAL(ac_compile); then
1822 test -n "$verbose" && AC_MSG_RESULT(... $cf_attribute)
1823 cat conftest.h >>confdefs.h
micky3879b9f5e72025-07-08 18:04:53 -04001824 case "$cf_attribute" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001825 (noreturn)
1826 AC_DEFINE_UNQUOTED(GCC_NORETURN,$cf_directive,[Define to noreturn-attribute for gcc])
1827 ;;
1828 (printf)
1829 cf_value='/* nothing */'
1830 if test "$cf_printf_attribute" != no ; then
1831 cf_value='__attribute__((format(printf,fmt,var)))'
1832 AC_DEFINE(GCC_PRINTF,1,[Define to 1 if the compiler supports gcc-like printf attribute.])
1833 fi
1834 AC_DEFINE_UNQUOTED(GCC_PRINTFLIKE(fmt,var),$cf_value,[Define to printf-attribute for gcc])
1835 ;;
1836 (scanf)
1837 cf_value='/* nothing */'
1838 if test "$cf_scanf_attribute" != no ; then
1839 cf_value='__attribute__((format(scanf,fmt,var)))'
1840 AC_DEFINE(GCC_SCANF,1,[Define to 1 if the compiler supports gcc-like scanf attribute.])
1841 fi
1842 AC_DEFINE_UNQUOTED(GCC_SCANFLIKE(fmt,var),$cf_value,[Define to sscanf-attribute for gcc])
1843 ;;
1844 (unused)
1845 AC_DEFINE_UNQUOTED(GCC_UNUSED,$cf_directive,[Define to unused-attribute for gcc])
1846 ;;
1847 esac
1848 fi
1849 done
1850else
micky3879b9f5e72025-07-08 18:04:53 -04001851 ${FGREP-fgrep} define conftest.i >>confdefs.h
Steve Kondikae271bc2015-11-15 02:50:53 +01001852fi
micky3879b9f5e72025-07-08 18:04:53 -04001853rm -rf ./conftest*
Steve Kondikae271bc2015-11-15 02:50:53 +01001854fi
1855])dnl
1856dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001857dnl CF_GCC_VERSION version: 9 updated: 2023/03/05 14:30:13
Steve Kondikae271bc2015-11-15 02:50:53 +01001858dnl --------------
micky3879b9f5e72025-07-08 18:04:53 -04001859dnl Find version of gcc, and (because icc/clang pretend to be gcc without being
1860dnl compatible), attempt to determine if icc/clang is actually used.
Steve Kondikae271bc2015-11-15 02:50:53 +01001861AC_DEFUN([CF_GCC_VERSION],[
1862AC_REQUIRE([AC_PROG_CC])
1863GCC_VERSION=none
1864if test "$GCC" = yes ; then
1865 AC_MSG_CHECKING(version of $CC)
micky3879b9f5e72025-07-08 18:04:53 -04001866 GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^[[^(]]*([[^)]][[^)]]*) //' -e 's/^[[^0-9.]]*//' -e 's/[[^0-9.]].*//'`"
Steve Kondikae271bc2015-11-15 02:50:53 +01001867 test -z "$GCC_VERSION" && GCC_VERSION=unknown
1868 AC_MSG_RESULT($GCC_VERSION)
1869fi
micky3879b9f5e72025-07-08 18:04:53 -04001870CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS)
1871CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS)
Steve Kondikae271bc2015-11-15 02:50:53 +01001872])dnl
1873dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001874dnl CF_GCC_WARNINGS version: 41 updated: 2021/01/01 16:53:59
Steve Kondikae271bc2015-11-15 02:50:53 +01001875dnl ---------------
1876dnl Check if the compiler supports useful warning options. There's a few that
1877dnl we don't use, simply because they're too noisy:
1878dnl
1879dnl -Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
micky3879b9f5e72025-07-08 18:04:53 -04001880dnl -Winline (usually not worthwhile)
Steve Kondikae271bc2015-11-15 02:50:53 +01001881dnl -Wredundant-decls (system headers make this too noisy)
1882dnl -Wtraditional (combines too many unrelated messages, only a few useful)
1883dnl -Wwrite-strings (too noisy, but should review occasionally). This
1884dnl is enabled for ncurses using "--enable-const".
1885dnl -pedantic
1886dnl
1887dnl Parameter:
1888dnl $1 is an optional list of gcc warning flags that a particular
1889dnl application might want to use, e.g., "no-unused" for
1890dnl -Wno-unused
1891dnl Special:
1892dnl If $with_ext_const is "yes", add a check for -Wwrite-strings
1893dnl
1894AC_DEFUN([CF_GCC_WARNINGS],
1895[
1896AC_REQUIRE([CF_GCC_VERSION])
micky3879b9f5e72025-07-08 18:04:53 -04001897if test "x$have_x" = xyes; then CF_CONST_X_STRING fi
1898cat > "conftest.$ac_ext" <<EOF
Steve Kondikae271bc2015-11-15 02:50:53 +01001899#line __oline__ "${as_me:-configure}"
1900int main(int argc, char *argv[[]]) { return (argv[[argc-1]] == 0) ; }
1901EOF
Steve Kondikae271bc2015-11-15 02:50:53 +01001902if test "$INTEL_COMPILER" = yes
1903then
1904# The "-wdXXX" options suppress warnings:
1905# remark #1419: external declaration in primary source file
1906# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
1907# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
1908# remark #193: zero used for undefined preprocessing identifier
1909# remark #593: variable "curs_sb_left_arrow" was set but never used
1910# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
1911# remark #869: parameter "tw" was never referenced
1912# remark #981: operands are evaluated in unspecified order
1913# warning #279: controlling expression is constant
1914
1915 AC_CHECKING([for $CC warning options])
1916 cf_save_CFLAGS="$CFLAGS"
micky3879b9f5e72025-07-08 18:04:53 -04001917 EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall"
Steve Kondikae271bc2015-11-15 02:50:53 +01001918 for cf_opt in \
1919 wd1419 \
1920 wd1683 \
1921 wd1684 \
1922 wd193 \
1923 wd593 \
1924 wd279 \
1925 wd810 \
1926 wd869 \
1927 wd981
1928 do
1929 CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
1930 if AC_TRY_EVAL(ac_compile); then
1931 test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
1932 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
1933 fi
1934 done
1935 CFLAGS="$cf_save_CFLAGS"
micky3879b9f5e72025-07-08 18:04:53 -04001936elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown"
Steve Kondikae271bc2015-11-15 02:50:53 +01001937then
1938 AC_CHECKING([for $CC warning options])
1939 cf_save_CFLAGS="$CFLAGS"
Steve Kondikae271bc2015-11-15 02:50:53 +01001940 cf_warn_CONST=""
1941 test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
1942 cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
1943 test "x$CLANG_COMPILER" = xyes && cf_gcc_warnings=
1944 for cf_opt in W Wall \
1945 Wbad-function-cast \
1946 Wcast-align \
1947 Wcast-qual \
1948 Wdeclaration-after-statement \
1949 Wextra \
1950 Winline \
1951 Wmissing-declarations \
1952 Wmissing-prototypes \
1953 Wnested-externs \
1954 Wpointer-arith \
1955 Wshadow \
1956 Wstrict-prototypes \
micky3879b9f5e72025-07-08 18:04:53 -04001957 Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST $1
Steve Kondikae271bc2015-11-15 02:50:53 +01001958 do
1959 CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
1960 if AC_TRY_EVAL(ac_compile); then
1961 test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
micky3879b9f5e72025-07-08 18:04:53 -04001962 case "$cf_opt" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001963 (Winline)
micky3879b9f5e72025-07-08 18:04:53 -04001964 case "$GCC_VERSION" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001965 ([[34]].*)
1966 CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
1967 continue;;
1968 esac
1969 ;;
1970 (Wpointer-arith)
micky3879b9f5e72025-07-08 18:04:53 -04001971 case "$GCC_VERSION" in
Steve Kondikae271bc2015-11-15 02:50:53 +01001972 ([[12]].*)
1973 CF_VERBOSE(feature is broken in gcc $GCC_VERSION)
1974 continue;;
1975 esac
1976 ;;
1977 esac
1978 EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
1979 fi
1980 done
1981 CFLAGS="$cf_save_CFLAGS"
1982fi
micky3879b9f5e72025-07-08 18:04:53 -04001983rm -rf ./conftest*
Steve Kondikae271bc2015-11-15 02:50:53 +01001984
1985AC_SUBST(EXTRA_CFLAGS)
1986])dnl
1987dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04001988dnl CF_GETOPT_HEADER version: 8 updated: 2021/06/19 19:16:16
Steve Kondikae271bc2015-11-15 02:50:53 +01001989dnl ----------------
1990dnl Check for getopt's variables which are commonly defined in stdlib.h,
1991dnl unistd.h or (nonstandard) in getopt.h
1992AC_DEFUN([CF_GETOPT_HEADER],
1993[
1994AC_HAVE_HEADERS(unistd.h getopt.h)
1995AC_CACHE_CHECK(for header declaring getopt variables,cf_cv_getopt_header,[
1996cf_cv_getopt_header=none
1997for cf_header in stdio.h stdlib.h unistd.h getopt.h
1998do
1999AC_TRY_COMPILE([
2000#include <$cf_header>],
micky3879b9f5e72025-07-08 18:04:53 -04002001[int x = optind; char *y = optarg; (void)x; (void)y],
Steve Kondikae271bc2015-11-15 02:50:53 +01002002[cf_cv_getopt_header=$cf_header
2003 break])
2004done
2005])
micky3879b9f5e72025-07-08 18:04:53 -04002006if test "$cf_cv_getopt_header" != none ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01002007 AC_DEFINE(HAVE_GETOPT_HEADER,1,[Define to 1 if getopt variables are declared in header])
2008fi
micky3879b9f5e72025-07-08 18:04:53 -04002009if test "$cf_cv_getopt_header" = getopt.h ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01002010 AC_DEFINE(NEED_GETOPT_H,1,[Define to 1 if we must include getopt.h])
2011fi
2012])dnl
2013dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002014dnl CF_GNU_SOURCE version: 10 updated: 2018/12/10 20:09:41
Steve Kondikae271bc2015-11-15 02:50:53 +01002015dnl -------------
2016dnl Check if we must define _GNU_SOURCE to get a reasonable value for
2017dnl _XOPEN_SOURCE, upon which many POSIX definitions depend. This is a defect
2018dnl (or misfeature) of glibc2, which breaks portability of many applications,
2019dnl since it is interwoven with GNU extensions.
2020dnl
2021dnl Well, yes we could work around it...
micky3879b9f5e72025-07-08 18:04:53 -04002022dnl
2023dnl Parameters:
2024dnl $1 is the nominal value for _XOPEN_SOURCE
Steve Kondikae271bc2015-11-15 02:50:53 +01002025AC_DEFUN([CF_GNU_SOURCE],
2026[
micky3879b9f5e72025-07-08 18:04:53 -04002027cf_gnu_xopen_source=ifelse($1,,500,$1)
2028
2029AC_CACHE_CHECK(if this is the GNU C library,cf_cv_gnu_library,[
Steve Kondikae271bc2015-11-15 02:50:53 +01002030AC_TRY_COMPILE([#include <sys/types.h>],[
micky3879b9f5e72025-07-08 18:04:53 -04002031 #if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0
2032 return 0;
2033 #elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0
2034 return 0;
2035 #else
2036 # error not GNU C library
2037 #endif],
2038 [cf_cv_gnu_library=yes],
2039 [cf_cv_gnu_library=no])
Steve Kondikae271bc2015-11-15 02:50:53 +01002040])
micky3879b9f5e72025-07-08 18:04:53 -04002041
2042if test x$cf_cv_gnu_library = xyes; then
2043
2044 # With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE
2045 # was changed to help a little. newlib incorporated the change about 4
2046 # years later.
2047 AC_CACHE_CHECK(if _DEFAULT_SOURCE can be used as a basis,cf_cv_gnu_library_219,[
2048 cf_save="$CPPFLAGS"
2049 CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE)
2050 AC_TRY_COMPILE([#include <sys/types.h>],[
2051 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2)
2052 return 0;
2053 #elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3)
2054 return 0;
2055 #else
2056 # error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old
2057 #endif],
2058 [cf_cv_gnu_library_219=yes],
2059 [cf_cv_gnu_library_219=no])
2060 CPPFLAGS="$cf_save"
2061 ])
2062
2063 if test "x$cf_cv_gnu_library_219" = xyes; then
2064 cf_save="$CPPFLAGS"
2065 AC_CACHE_CHECK(if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE,cf_cv_gnu_dftsrc_219,[
2066 CF_ADD_CFLAGS(-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source)
2067 AC_TRY_COMPILE([
2068 #include <limits.h>
2069 #include <sys/types.h>
2070 ],[
2071 #if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1)
2072 return 0;
2073 #else
2074 # error GNU C library is too old
2075 #endif],
2076 [cf_cv_gnu_dftsrc_219=yes],
2077 [cf_cv_gnu_dftsrc_219=no])
2078 ])
2079 test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save"
2080 else
2081 cf_cv_gnu_dftsrc_219=maybe
2082 fi
2083
2084 if test "x$cf_cv_gnu_dftsrc_219" != xyes; then
2085
2086 AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
2087 AC_TRY_COMPILE([#include <sys/types.h>],[
2088 #ifndef _XOPEN_SOURCE
2089 #error expected _XOPEN_SOURCE to be defined
2090 #endif],
2091 [cf_cv_gnu_source=no],
2092 [cf_save="$CPPFLAGS"
2093 CF_ADD_CFLAGS(-D_GNU_SOURCE)
2094 AC_TRY_COMPILE([#include <sys/types.h>],[
2095 #ifdef _XOPEN_SOURCE
2096 #error expected _XOPEN_SOURCE to be undefined
2097 #endif],
2098 [cf_cv_gnu_source=no],
2099 [cf_cv_gnu_source=yes])
2100 CPPFLAGS="$cf_save"
2101 ])
2102 ])
2103
2104 if test "$cf_cv_gnu_source" = yes
2105 then
2106 AC_CACHE_CHECK(if we should also define _DEFAULT_SOURCE,cf_cv_default_source,[
2107 CF_APPEND_TEXT(CPPFLAGS,-D_GNU_SOURCE)
2108 AC_TRY_COMPILE([#include <sys/types.h>],[
2109 #ifdef _DEFAULT_SOURCE
2110 #error expected _DEFAULT_SOURCE to be undefined
2111 #endif],
2112 [cf_cv_default_source=no],
2113 [cf_cv_default_source=yes])
2114 ])
2115 if test "$cf_cv_default_source" = yes
2116 then
2117 CF_APPEND_TEXT(CPPFLAGS,-D_DEFAULT_SOURCE)
2118 fi
2119 fi
2120 fi
2121
2122fi
Steve Kondikae271bc2015-11-15 02:50:53 +01002123])dnl
2124dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002125dnl CF_HEADER_PATH version: 15 updated: 2021/01/01 13:31:04
Steve Kondikae271bc2015-11-15 02:50:53 +01002126dnl --------------
2127dnl Construct a search-list of directories for a nonstandard header-file
2128dnl
2129dnl Parameters
2130dnl $1 = the variable to return as result
2131dnl $2 = the package name
2132AC_DEFUN([CF_HEADER_PATH],
2133[
2134$1=
2135
2136# collect the current set of include-directories from compiler flags
2137cf_header_path_list=""
2138if test -n "${CFLAGS}${CPPFLAGS}" ; then
2139 for cf_header_path in $CPPFLAGS $CFLAGS
2140 do
micky3879b9f5e72025-07-08 18:04:53 -04002141 case "$cf_header_path" in
Steve Kondikae271bc2015-11-15 02:50:53 +01002142 (-I*)
2143 cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'`
2144 CF_ADD_SUBDIR_PATH($1,$2,include,$cf_header_path,NONE)
2145 cf_header_path_list="$cf_header_path_list [$]$1"
2146 ;;
2147 esac
2148 done
2149fi
2150
2151# add the variations for the package we are looking for
2152CF_SUBDIR_PATH($1,$2,include)
2153
2154test "$includedir" != NONE && \
2155test "$includedir" != "/usr/include" && \
2156test -d "$includedir" && {
micky3879b9f5e72025-07-08 18:04:53 -04002157 test -d "$includedir" && $1="[$]$1 $includedir"
2158 test -d "$includedir/$2" && $1="[$]$1 $includedir/$2"
Steve Kondikae271bc2015-11-15 02:50:53 +01002159}
2160
2161test "$oldincludedir" != NONE && \
2162test "$oldincludedir" != "/usr/include" && \
2163test -d "$oldincludedir" && {
micky3879b9f5e72025-07-08 18:04:53 -04002164 test -d "$oldincludedir" && $1="[$]$1 $oldincludedir"
2165 test -d "$oldincludedir/$2" && $1="[$]$1 $oldincludedir/$2"
Steve Kondikae271bc2015-11-15 02:50:53 +01002166}
2167
2168$1="[$]$1 $cf_header_path_list"
2169])dnl
2170dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002171dnl CF_HELP_MESSAGE version: 4 updated: 2019/12/31 08:53:54
Steve Kondikae271bc2015-11-15 02:50:53 +01002172dnl ---------------
2173dnl Insert text into the help-message, for readability, from AC_ARG_WITH.
2174AC_DEFUN([CF_HELP_MESSAGE],
micky3879b9f5e72025-07-08 18:04:53 -04002175[CF_ACVERSION_CHECK(2.53,[],[
2176AC_DIVERT_HELP($1)])dnl
Steve Kondikae271bc2015-11-15 02:50:53 +01002177])dnl
2178dnl ---------------------------------------------------------------------------
2179dnl CF_INHERIT_SCRIPT version: 2 updated: 2003/03/01 23:50:42
2180dnl -----------------
2181dnl If we do not have a given script, look for it in the parent directory.
2182AC_DEFUN([CF_INHERIT_SCRIPT],
2183[
2184test -f $1 || ( test -f ../$1 && cp ../$1 ./ )
2185])dnl
2186dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002187dnl CF_INSTALL_OPTS version: 3 updated: 2023/06/03 15:17:30
2188dnl ---------------
2189dnl prompt for/fill-in useful install-program options
2190AC_DEFUN([CF_INSTALL_OPTS],
2191[
2192CF_INSTALL_OPT_S
2193CF_INSTALL_OPT_P
2194CF_INSTALL_OPT_O
2195CF_INSTALL_OPT_STRIP_PROG
2196])dnl
2197dnl ---------------------------------------------------------------------------
2198dnl CF_INSTALL_OPT_O version: 3 updated: 2020/12/31 20:19:42
2199dnl ----------------
2200dnl Almost all "install" programs default to the current user's ownership.
2201dnl Almost - MINIX is an exception.
2202AC_DEFUN([CF_INSTALL_OPT_O],
2203[
2204AC_MSG_CHECKING(if install needs to be told about ownership)
2205case `$ac_config_guess` in
2206(*minix)
2207 with_install_o=yes
2208 ;;
2209(*)
2210 with_install_o=no
2211 ;;
2212esac
2213
2214AC_MSG_RESULT($with_install_o)
2215if test "x$with_install_o" = xyes
2216then
2217 INSTALL_OPT_O="`id root|sed -e 's/uid=[[0-9]]*(/ -o /' -e 's/gid=[[0-9]]*(/ -g /' -e 's/ [[^=[:space:]]][[^=[:space:]]]*=.*/ /' -e 's/)//g'`"
2218else
2219 INSTALL_OPT_O=
2220fi
2221
2222AC_SUBST(INSTALL_OPT_O)
2223])dnl
2224dnl ---------------------------------------------------------------------------
2225dnl CF_INSTALL_OPT_P version: 3 updated: 2021/01/01 13:31:04
2226dnl ----------------
2227dnl Some install-programs accept a "-p" option to preserve file modification
2228dnl timestamps. That can be useful as an install option, as well as a way to
2229dnl avoid the need for ranlib after copying a static archive.
2230AC_DEFUN([CF_INSTALL_OPT_P],
2231[
2232: "${INSTALL:=install}"
2233AC_CACHE_CHECK(if install accepts -p option, cf_cv_install_p,[
2234 rm -rf ./conftest*
2235 date >conftest.in
2236 mkdir conftest.out
2237 sleep 3
2238 if $INSTALL -p conftest.in conftest.out 2>/dev/null
2239 then
2240 if test -f conftest.out/conftest.in
2241 then
2242 test conftest.in -nt conftest.out/conftest.in 2>conftest.err && \
2243 test conftest.out/conftest.in -nt conftest.in 2>conftest.err
2244 if test -s conftest.err
2245 then
2246 cf_cv_install_p=no
2247 else
2248 cf_cv_install_p=yes
2249 fi
2250 else
2251 cf_cv_install_p=no
2252 fi
2253 else
2254 cf_cv_install_p=no
2255 fi
2256 rm -rf ./conftest*
2257])
2258])dnl
2259dnl ---------------------------------------------------------------------------
2260dnl CF_INSTALL_OPT_S version: 3 updated: 2021/01/05 19:23:48
2261dnl ----------------
2262dnl By default, we should strip executables which are installed, but leave the
2263dnl ability to suppress that for unit-testing.
2264AC_DEFUN([CF_INSTALL_OPT_S],
2265[
2266AC_MSG_CHECKING(if you want to install stripped executables)
2267CF_ARG_DISABLE(stripping,
2268 [ --disable-stripping do not strip (debug info) installed executables],
2269 [enable_stripping=no],
2270 [enable_stripping=yes])
2271AC_MSG_RESULT($enable_stripping)
2272
2273if test "$enable_stripping" = yes
2274then
2275 INSTALL_OPT_S="-s"
2276else
2277 INSTALL_OPT_S=
2278fi
2279AC_SUBST(INSTALL_OPT_S)
2280])dnl
2281dnl ---------------------------------------------------------------------------
2282dnl CF_INSTALL_OPT_STRIP_PROG version: 1 updated: 2023/06/03 15:17:30
2283dnl -------------------------
2284dnl Provide an option for overriding the strip program used in install "-s"
2285dnl
2286dnl coreutils install provides a --strip-program option
2287dnl FreeBSD uses STRIPBIN environment variable, while NetBSD and OpenBSD use
2288dnl STRIP environment variable. Other versions of install do not support this.
2289AC_DEFUN([CF_INSTALL_OPT_STRIP_PROG],
2290[
2291AC_REQUIRE([CF_INSTALL_OPT_S])
2292if test -n "$INSTALL_OPT_S"
2293then
2294 AC_MSG_CHECKING(if you want to specify strip-program)
2295 AC_ARG_WITH(strip-program,
2296 [ --with-strip-program=XX specify program to use when stripping in install],
2297 [with_strip_program=$withval],
2298 [with_strip_program=no])
2299 AC_MSG_RESULT($with_strip_program)
2300 if test "$with_strip_program" != no
2301 then
2302 AC_MSG_CHECKING(if strip-program is supported with this installer)
2303 cf_install_program=`echo "$INSTALL" | sed -e 's%[[ ]]*[[ ]]-.%%'`
2304 check_install_strip=no
2305 if test -f "$cf_install_program"
2306 then
2307 check_install_version=`"$cf_install_program" --version 2>/dev/null | head -n 1 | grep coreutils`
2308 if test -n "$check_install_version"
2309 then
2310 check_install_strip="option"
2311 else
2312 for check_strip_variable in STRIPBIN STRIP
2313 do
2314 if strings "$cf_install_program" | grep "^$check_strip_variable[$]" >/dev/null
2315 then
2316 check_install_strip="environ"
2317 break
2318 fi
2319 done
2320 fi
2321 fi
2322 AC_MSG_RESULT($check_install_strip)
2323 case "$check_install_strip" in
2324 (no)
2325 AC_MSG_WARN($cf_install_program does not support strip program option)
2326 with_strip_program=no
2327 ;;
2328 (environ)
2329 cat >install.tmp <<-CF_EOF
2330 #! $SHELL
2331 STRIPBIN="$with_strip_program" \\
2332 STRIP="$with_strip_program" \\
2333 $INSTALL "[$]@"
2334 CF_EOF
2335 INSTALL="`pwd`/install.tmp"
2336 chmod +x "$INSTALL"
2337 CF_VERBOSE(created $INSTALL)
2338 ;;
2339 (option)
2340 INSTALL_OPT_S="$INSTALL_OPT_S --strip-program=\"$with_strip_program\""
2341 ;;
2342 esac
2343 fi
2344fi
2345AC_SUBST(INSTALL_OPT_S)
2346])dnl
2347dnl ---------------------------------------------------------------------------
2348dnl CF_INTEL_COMPILER version: 9 updated: 2023/02/18 17:41:25
Steve Kondikae271bc2015-11-15 02:50:53 +01002349dnl -----------------
2350dnl Check if the given compiler is really the Intel compiler for Linux. It
2351dnl tries to imitate gcc, but does not return an error when it finds a mismatch
2352dnl between prototypes, e.g., as exercised by CF_MISSING_CHECK.
2353dnl
2354dnl This macro should be run "soon" after AC_PROG_CC or AC_PROG_CPLUSPLUS, to
2355dnl ensure that it is not mistaken for gcc/g++. It is normally invoked from
2356dnl the wrappers for gcc and g++ warnings.
2357dnl
2358dnl $1 = GCC (default) or GXX
2359dnl $2 = INTEL_COMPILER (default) or INTEL_CPLUSPLUS
2360dnl $3 = CFLAGS (default) or CXXFLAGS
2361AC_DEFUN([CF_INTEL_COMPILER],[
2362AC_REQUIRE([AC_CANONICAL_HOST])
2363ifelse([$2],,INTEL_COMPILER,[$2])=no
2364
2365if test "$ifelse([$1],,[$1],GCC)" = yes ; then
micky3879b9f5e72025-07-08 18:04:53 -04002366 case "$host_os" in
Steve Kondikae271bc2015-11-15 02:50:53 +01002367 (linux*|gnu*)
2368 AC_MSG_CHECKING(if this is really Intel ifelse([$1],GXX,C++,C) compiler)
2369 cf_save_CFLAGS="$ifelse([$3],,CFLAGS,[$3])"
2370 ifelse([$3],,CFLAGS,[$3])="$ifelse([$3],,CFLAGS,[$3]) -no-gcc"
2371 AC_TRY_COMPILE([],[
2372#ifdef __INTEL_COMPILER
2373#else
micky3879b9f5e72025-07-08 18:04:53 -04002374#error __INTEL_COMPILER is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01002375#endif
2376],[ifelse([$2],,INTEL_COMPILER,[$2])=yes
2377cf_save_CFLAGS="$cf_save_CFLAGS -we147"
2378],[])
2379 ifelse([$3],,CFLAGS,[$3])="$cf_save_CFLAGS"
2380 AC_MSG_RESULT($ifelse([$2],,INTEL_COMPILER,[$2]))
2381 ;;
2382 esac
2383fi
2384])dnl
2385dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002386dnl CF_LD_RPATH_OPT version: 9 updated: 2021/01/01 13:31:04
Steve Kondikae271bc2015-11-15 02:50:53 +01002387dnl ---------------
2388dnl For the given system and compiler, find the compiler flags to pass to the
2389dnl loader to use the "rpath" feature.
2390AC_DEFUN([CF_LD_RPATH_OPT],
2391[
2392AC_REQUIRE([CF_CHECK_CACHE])
2393
2394LD_RPATH_OPT=
micky3879b9f5e72025-07-08 18:04:53 -04002395if test "x$cf_cv_enable_rpath" != xno
2396then
2397 AC_MSG_CHECKING(for an rpath option)
2398 case "$cf_cv_system_name" in
2399 (irix*)
2400 if test "$GCC" = yes; then
2401 LD_RPATH_OPT="-Wl,-rpath,"
2402 else
2403 LD_RPATH_OPT="-rpath "
2404 fi
2405 ;;
2406 (linux*|gnu*|k*bsd*-gnu|freebsd*)
Steve Kondikae271bc2015-11-15 02:50:53 +01002407 LD_RPATH_OPT="-Wl,-rpath,"
micky3879b9f5e72025-07-08 18:04:53 -04002408 ;;
2409 (openbsd[[2-9]].*|mirbsd*)
2410 LD_RPATH_OPT="-Wl,-rpath,"
2411 ;;
2412 (dragonfly*)
Steve Kondikae271bc2015-11-15 02:50:53 +01002413 LD_RPATH_OPT="-rpath "
micky3879b9f5e72025-07-08 18:04:53 -04002414 ;;
2415 (netbsd*)
2416 LD_RPATH_OPT="-Wl,-rpath,"
2417 ;;
2418 (osf*|mls+*)
2419 LD_RPATH_OPT="-rpath "
2420 ;;
2421 (solaris2*)
2422 LD_RPATH_OPT="-R"
2423 ;;
2424 (*)
2425 ;;
2426 esac
2427 AC_MSG_RESULT($LD_RPATH_OPT)
Steve Kondikae271bc2015-11-15 02:50:53 +01002428
micky3879b9f5e72025-07-08 18:04:53 -04002429 case "x$LD_RPATH_OPT" in
2430 (x-R*)
2431 AC_MSG_CHECKING(if we need a space after rpath option)
2432 cf_save_LIBS="$LIBS"
2433 CF_ADD_LIBS(${LD_RPATH_OPT}$libdir)
2434 AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes)
2435 LIBS="$cf_save_LIBS"
2436 AC_MSG_RESULT($cf_rpath_space)
2437 test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
2438 ;;
2439 esac
2440fi
Steve Kondikae271bc2015-11-15 02:50:53 +01002441])dnl
2442dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002443dnl CF_LIBRARY_PATH version: 11 updated: 2021/01/01 13:31:04
Steve Kondikae271bc2015-11-15 02:50:53 +01002444dnl ---------------
2445dnl Construct a search-list of directories for a nonstandard library-file
2446dnl
2447dnl Parameters
2448dnl $1 = the variable to return as result
2449dnl $2 = the package name
2450AC_DEFUN([CF_LIBRARY_PATH],
2451[
2452$1=
2453cf_library_path_list=""
2454if test -n "${LDFLAGS}${LIBS}" ; then
2455 for cf_library_path in $LDFLAGS $LIBS
2456 do
micky3879b9f5e72025-07-08 18:04:53 -04002457 case "$cf_library_path" in
Steve Kondikae271bc2015-11-15 02:50:53 +01002458 (-L*)
2459 cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'`
2460 CF_ADD_SUBDIR_PATH($1,$2,lib,$cf_library_path,NONE)
2461 cf_library_path_list="$cf_library_path_list [$]$1"
2462 ;;
2463 esac
2464 done
2465fi
2466
2467CF_SUBDIR_PATH($1,$2,lib)
2468
2469$1="$cf_library_path_list [$]$1"
2470])dnl
2471dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002472dnl CF_MAKE_PHONY version: 3 updated: 2021/01/08 16:08:21
2473dnl -------------
2474dnl Check if the make-program handles a ".PHONY" target, e.g,. a target which
2475dnl acts as a placeholder.
2476dnl
2477dnl The ".PHONY" feature was proposed in 2011 here
2478dnl https://www.austingroupbugs.net/view.php?id=523
2479dnl and is scheduled for release in P1003.1 Issue 8 (late 2022).
2480dnl
2481dnl This is not supported by SVr4 make (or SunOS 4, 4.3SD, etc), but works with
2482dnl a few others (i.e., GNU make and the non-POSIX "BSD" make):
2483dnl
2484dnl + This is a GNU make feature (since April 1988, but in turn from binutils,
2485dnl date unspecified).
2486dnl
2487dnl + It was adopted in NetBSD make in June 1995.
2488dnl
2489dnl + The other BSD make programs are derived from the NetBSD make (and for
2490dnl that reason are not actually different "implementations").
2491dnl
2492dnl + Some features of NetBSD make were actually adapted from pmake, which
2493dnl began as a modified GNU make starting in 1993.
2494dnl
2495dnl + Version 3.8 of the dmake program in January 1992 also implemented this
2496dnl GNU make extension, but is less well known than the BSD make.
2497AC_DEFUN([CF_MAKE_PHONY],[
2498AC_CACHE_CHECK(for \".PHONY\" make-support, cf_cv_make_PHONY,[
2499 rm -rf conftest*
2500 (
2501 mkdir conftest || exit 1
2502 cd conftest
2503 cat >makefile <<'CF_EOF'
2504.PHONY: always
2505DATA=0
2506always: always.out
2507 @echo "** making [$]@ [$](DATA)"
2508once: once.out
2509 @echo "** making [$]@ [$](DATA)"
2510always.out:
2511 @echo "** making [$]@ [$](DATA)"
2512 echo [$](DATA) > [$]@
2513once.out:
2514 @echo "** making [$]@ [$](DATA)"
2515 echo [$](DATA) > [$]@
2516CF_EOF
2517 for cf_data in 1 2 3
2518 do
2519 ${MAKE:-make} always DATA=$cf_data
2520 ${MAKE:-make} once DATA=$cf_data
2521 ${MAKE:-make} -t always once
2522 if test -f always ; then
2523 echo "no (case 1)" > ../conftest.tmp
2524 elif test ! -f always.out ; then
2525 echo "no (case 2)" > ../conftest.tmp
2526 elif test ! -f once.out ; then
2527 echo "no (case 3)" > ../conftest.tmp
2528 elif ! cmp -s always.out once.out ; then
2529 echo "no (case 4)" > ../conftest.tmp
2530 diff always.out once.out
2531 else
2532 cf_check="`cat always.out`"
2533 if test "x$cf_check" != "x$cf_data" ; then
2534 echo "no (case 5)" > ../conftest.tmp
2535 else
2536 echo yes > ../conftest.tmp
2537 rm -f ./*.out
2538 continue
2539 fi
2540 fi
2541 break
2542 done
2543 ) >&AC_FD_CC 2>&1
2544 cf_cv_make_PHONY="`cat conftest.tmp`"
2545 rm -rf conftest*
2546])
2547MAKE_NO_PHONY="#"
2548MAKE_PHONY="#"
2549test "x$cf_cv_make_PHONY" = xyes && MAKE_PHONY=
2550test "x$cf_cv_make_PHONY" != xyes && MAKE_NO_PHONY=
2551AC_SUBST(MAKE_NO_PHONY)
2552AC_SUBST(MAKE_PHONY)
2553])dnl
2554dnl ---------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01002555dnl CF_MAKE_TAGS version: 6 updated: 2010/10/23 15:52:32
2556dnl ------------
2557dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have
2558dnl a monocase filesystem.
2559AC_DEFUN([CF_MAKE_TAGS],[
2560AC_REQUIRE([CF_MIXEDCASE_FILENAMES])
2561
2562AC_CHECK_PROGS(CTAGS, exctags ctags)
2563AC_CHECK_PROGS(ETAGS, exetags etags)
2564
2565AC_CHECK_PROG(MAKE_LOWER_TAGS, ${CTAGS:-ctags}, yes, no)
2566
2567if test "$cf_cv_mixedcase" = yes ; then
2568 AC_CHECK_PROG(MAKE_UPPER_TAGS, ${ETAGS:-etags}, yes, no)
2569else
2570 MAKE_UPPER_TAGS=no
2571fi
2572
2573if test "$MAKE_UPPER_TAGS" = yes ; then
2574 MAKE_UPPER_TAGS=
2575else
2576 MAKE_UPPER_TAGS="#"
2577fi
2578
2579if test "$MAKE_LOWER_TAGS" = yes ; then
2580 MAKE_LOWER_TAGS=
2581else
2582 MAKE_LOWER_TAGS="#"
2583fi
2584
2585AC_SUBST(CTAGS)
2586AC_SUBST(ETAGS)
2587
2588AC_SUBST(MAKE_UPPER_TAGS)
2589AC_SUBST(MAKE_LOWER_TAGS)
2590])dnl
2591dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002592dnl CF_MATH_LIB version: 11 updated: 2022/07/27 19:01:48
Steve Kondikae271bc2015-11-15 02:50:53 +01002593dnl -----------
2594dnl Checks for libraries. At least one UNIX system, Apple Macintosh
2595dnl Rhapsody 5.5, does not have -lm. We cannot use the simpler
2596dnl AC_CHECK_LIB(m,sin), because that fails for C++.
2597AC_DEFUN([CF_MATH_LIB],
2598[
2599AC_CACHE_CHECK(if -lm needed for math functions,
2600 cf_cv_need_libm,[
2601 AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04002602 #include <stdio.h>
2603 #include <stdlib.h>
2604 #include <math.h>
Steve Kondikae271bc2015-11-15 02:50:53 +01002605 ],
micky3879b9f5e72025-07-08 18:04:53 -04002606 [double x = rand(); printf("result = %g\\n", ]ifelse([$2],,sin(x),$2)[)],
Steve Kondikae271bc2015-11-15 02:50:53 +01002607 [cf_cv_need_libm=no],
2608 [cf_cv_need_libm=yes])])
micky3879b9f5e72025-07-08 18:04:53 -04002609
Steve Kondikae271bc2015-11-15 02:50:53 +01002610if test "$cf_cv_need_libm" = yes
2611then
micky3879b9f5e72025-07-08 18:04:53 -04002612
2613 cf_save_LIBS="$LIBS"
2614 LIBS="$LIBS -lm"
2615 AC_CACHE_CHECK(if -lm is available for math functions,
2616 cf_cv_have_libm,[
2617 AC_TRY_LINK([
2618 #include <stdio.h>
2619 #include <stdlib.h>
2620 #include <math.h>
2621 ],
2622 [double x = rand(); printf("result = %g\\n", ]ifelse([$2],,sin(x),$2)[)],
2623 [cf_cv_have_libm=yes],
2624 [cf_cv_have_libm=no])])
2625 LIBS="$cf_save_LIBS"
2626
2627 if test "$cf_cv_have_libm" = yes
2628 then
2629 ifelse($1,,[CF_ADD_LIB(m)],[$1=-lm])
2630 fi
2631else
2632 cf_cv_have_libm=yes
2633fi
2634
2635if test "$cf_cv_have_libm" = yes
2636then
2637 AC_DEFINE(HAVE_MATH_FUNCS,1,[Define to 1 if math functions are available])
Steve Kondikae271bc2015-11-15 02:50:53 +01002638fi
2639])
2640dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002641dnl CF_MIXEDCASE_FILENAMES version: 9 updated: 2021/01/01 16:53:59
Steve Kondikae271bc2015-11-15 02:50:53 +01002642dnl ----------------------
2643dnl Check if the file-system supports mixed-case filenames. If we're able to
2644dnl create a lowercase name and see it as uppercase, it doesn't support that.
2645AC_DEFUN([CF_MIXEDCASE_FILENAMES],
2646[
2647AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[
2648if test "$cross_compiling" = yes ; then
micky3879b9f5e72025-07-08 18:04:53 -04002649 case "$target_alias" in
2650 (*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*)
Steve Kondikae271bc2015-11-15 02:50:53 +01002651 cf_cv_mixedcase=no
2652 ;;
2653 (*)
2654 cf_cv_mixedcase=yes
2655 ;;
2656 esac
2657else
2658 rm -f conftest CONFTEST
2659 echo test >conftest
2660 if test -f CONFTEST ; then
2661 cf_cv_mixedcase=no
2662 else
2663 cf_cv_mixedcase=yes
2664 fi
2665 rm -f conftest CONFTEST
2666fi
2667])
2668test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES,1,[Define to 1 if filesystem supports mixed-case filenames.])
2669])dnl
2670dnl ---------------------------------------------------------------------------
2671dnl CF_MSG_LOG version: 5 updated: 2010/10/23 15:52:32
2672dnl ----------
2673dnl Write a debug message to config.log, along with the line number in the
2674dnl configure script.
2675AC_DEFUN([CF_MSG_LOG],[
2676echo "${as_me:-configure}:__oline__: testing $* ..." 1>&AC_FD_CC
2677])dnl
2678dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002679dnl CF_NCURSES_CC_CHECK version: 6 updated: 2023/02/18 17:47:58
Steve Kondikae271bc2015-11-15 02:50:53 +01002680dnl -------------------
2681dnl Check if we can compile with ncurses' header file
2682dnl $1 is the cache variable to set
2683dnl $2 is the header-file to include
2684dnl $3 is the root name (ncurses or ncursesw)
2685AC_DEFUN([CF_NCURSES_CC_CHECK],[
2686 AC_TRY_COMPILE([
2687]ifelse($3,ncursesw,[
2688#define _XOPEN_SOURCE_EXTENDED
2689#undef HAVE_LIBUTF8_H /* in case we used CF_UTF8_LIB */
2690#define HAVE_LIBUTF8_H /* to force ncurses' header file to use cchar_t */
2691])[
2692#include <$2>],[
2693#ifdef NCURSES_VERSION
2694]ifelse($3,ncursesw,[
2695#ifndef WACS_BSSB
micky3879b9f5e72025-07-08 18:04:53 -04002696 #error WACS_BSSB is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01002697#endif
2698])[
micky3879b9f5e72025-07-08 18:04:53 -04002699printf("%s\\n", NCURSES_VERSION);
Steve Kondikae271bc2015-11-15 02:50:53 +01002700#else
2701#ifdef __NCURSES_H
micky3879b9f5e72025-07-08 18:04:53 -04002702printf("old\\n");
Steve Kondikae271bc2015-11-15 02:50:53 +01002703#else
micky3879b9f5e72025-07-08 18:04:53 -04002704 #error __NCURSES_H is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01002705#endif
2706#endif
2707 ]
2708 ,[$1=$2]
2709 ,[$1=no])
2710])dnl
2711dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002712dnl CF_NCURSES_CONFIG version: 28 updated: 2021/08/28 15:20:37
Steve Kondikae271bc2015-11-15 02:50:53 +01002713dnl -----------------
2714dnl Tie together the configure-script macros for ncurses, preferring these in
2715dnl order:
2716dnl a) ".pc" files for pkg-config, using $NCURSES_CONFIG_PKG
2717dnl b) the "-config" script from ncurses, using $NCURSES_CONFIG
2718dnl c) just plain libraries
2719dnl
2720dnl $1 is the root library name (default: "ncurses")
2721AC_DEFUN([CF_NCURSES_CONFIG],[
2722AC_REQUIRE([CF_PKG_CONFIG])
2723cf_ncuconfig_root=ifelse($1,,ncurses,$1)
2724cf_have_ncuconfig=no
2725
2726if test "x${PKG_CONFIG:=none}" != xnone; then
2727 AC_MSG_CHECKING(pkg-config for $cf_ncuconfig_root)
2728 if "$PKG_CONFIG" --exists $cf_ncuconfig_root ; then
2729 AC_MSG_RESULT(yes)
2730
2731 AC_MSG_CHECKING(if the $cf_ncuconfig_root package files work)
2732 cf_have_ncuconfig=unknown
2733
micky3879b9f5e72025-07-08 18:04:53 -04002734 cf_save_CFLAGS="$CFLAGS"
Steve Kondikae271bc2015-11-15 02:50:53 +01002735 cf_save_CPPFLAGS="$CPPFLAGS"
2736 cf_save_LIBS="$LIBS"
2737
micky3879b9f5e72025-07-08 18:04:53 -04002738 cf_pkg_cflags="`$PKG_CONFIG --cflags $cf_ncuconfig_root`"
2739 cf_pkg_libs="`$PKG_CONFIG --libs $cf_ncuconfig_root`"
2740
2741 # while -W for passing linker flags is prevalent, it is not "standard".
2742 # At least one wrapper for c89/c99 (in Apple's xcode) has its own
2743 # incompatible _and_ non-standard -W option which gives an error. Work
2744 # around that pitfall.
2745 case "x${CC}@@${cf_pkg_libs}@${cf_pkg_cflags}" in
2746 (x*c[[89]]9@@*-W*)
2747 CF_ADD_CFLAGS($cf_pkg_cflags)
2748 CF_ADD_LIBS($cf_pkg_libs)
2749
2750 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
2751 [initscr(); mousemask(0,0); tigetstr((char *)0);],
2752 [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}>
2753 int main(void)
2754 { const char *xx = curses_version(); return (xx == 0); }],
2755 [cf_test_ncuconfig=yes],
2756 [cf_test_ncuconfig=no],
2757 [cf_test_ncuconfig=maybe])],
2758 [cf_test_ncuconfig=no])
2759
2760 CFLAGS="$cf_save_CFLAGS"
2761 CPPFLAGS="$cf_save_CPPFLAGS"
2762 LIBS="$cf_save_LIBS"
2763
2764 if test "x$cf_test_ncuconfig" != xyes; then
2765 cf_temp=`echo "x$cf_pkg_cflags" | sed -e s/^x// -e 's/-W[[^ ]]*//g'`
2766 cf_pkg_cflags="$cf_temp"
2767 cf_temp=`echo "x$cf_pkg_libs" | sed -e s/^x// -e 's/-W[[^ ]]*//g'`
2768 cf_pkg_libs="$cf_temp"
2769 fi
2770 ;;
2771 esac
2772
2773 CF_APPEND_CFLAGS($cf_pkg_cflags)
2774 CF_ADD_LIBS($cf_pkg_libs)
Steve Kondikae271bc2015-11-15 02:50:53 +01002775
2776 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
micky3879b9f5e72025-07-08 18:04:53 -04002777 [initscr(); mousemask(0,0); tigetstr((char *)0);],
Steve Kondikae271bc2015-11-15 02:50:53 +01002778 [AC_TRY_RUN([#include <${cf_cv_ncurses_header:-curses.h}>
2779 int main(void)
micky3879b9f5e72025-07-08 18:04:53 -04002780 { const char *xx = curses_version(); return (xx == 0); }],
Steve Kondikae271bc2015-11-15 02:50:53 +01002781 [cf_have_ncuconfig=yes],
2782 [cf_have_ncuconfig=no],
2783 [cf_have_ncuconfig=maybe])],
2784 [cf_have_ncuconfig=no])
2785 AC_MSG_RESULT($cf_have_ncuconfig)
2786 test "$cf_have_ncuconfig" = maybe && cf_have_ncuconfig=yes
2787 if test "$cf_have_ncuconfig" != "yes"
2788 then
2789 CPPFLAGS="$cf_save_CPPFLAGS"
2790 LIBS="$cf_save_LIBS"
2791 NCURSES_CONFIG_PKG=none
2792 else
2793 AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries])
2794 NCURSES_CONFIG_PKG=$cf_ncuconfig_root
micky3879b9f5e72025-07-08 18:04:53 -04002795 CF_TERM_HEADER
Steve Kondikae271bc2015-11-15 02:50:53 +01002796 fi
2797
2798 else
2799 AC_MSG_RESULT(no)
2800 NCURSES_CONFIG_PKG=none
2801 fi
2802else
2803 NCURSES_CONFIG_PKG=none
2804fi
2805
2806if test "x$cf_have_ncuconfig" = "xno"; then
micky3879b9f5e72025-07-08 18:04:53 -04002807 cf_ncurses_config="${cf_ncuconfig_root}${NCURSES_CONFIG_SUFFIX}-config"; echo "Looking for ${cf_ncurses_config}"
Steve Kondikae271bc2015-11-15 02:50:53 +01002808
2809 CF_ACVERSION_CHECK(2.52,
micky3879b9f5e72025-07-08 18:04:53 -04002810 [AC_CHECK_TOOLS(NCURSES_CONFIG, ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)],
2811 [AC_PATH_PROGS(NCURSES_CONFIG, ${cf_ncurses_config} ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}6-config ${cf_ncuconfig_root}5-config, none)])
Steve Kondikae271bc2015-11-15 02:50:53 +01002812
2813 if test "$NCURSES_CONFIG" != none ; then
2814
micky3879b9f5e72025-07-08 18:04:53 -04002815 CF_APPEND_CFLAGS(`$NCURSES_CONFIG --cflags`)
Steve Kondikae271bc2015-11-15 02:50:53 +01002816 CF_ADD_LIBS(`$NCURSES_CONFIG --libs`)
2817
2818 # even with config script, some packages use no-override for curses.h
2819 CF_CURSES_HEADER(ifelse($1,,ncurses,$1))
2820
2821 dnl like CF_NCURSES_CPPFLAGS
2822 AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries])
2823
2824 dnl like CF_NCURSES_LIBS
2825 CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_ncuconfig_root)
2826 AC_DEFINE_UNQUOTED($cf_nculib_ROOT)
2827
2828 dnl like CF_NCURSES_VERSION
micky3879b9f5e72025-07-08 18:04:53 -04002829 cf_cv_ncurses_version="`$NCURSES_CONFIG --version`"
Steve Kondikae271bc2015-11-15 02:50:53 +01002830
2831 else
2832
2833 CF_NCURSES_CPPFLAGS(ifelse($1,,ncurses,$1))
2834 CF_NCURSES_LIBS(ifelse($1,,ncurses,$1))
2835
2836 fi
2837else
2838 NCURSES_CONFIG=none
2839fi
2840])dnl
2841dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002842dnl CF_NCURSES_CPPFLAGS version: 22 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +01002843dnl -------------------
2844dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting
2845dnl the CPPFLAGS variable so we can include its header.
2846dnl
2847dnl The header files may be installed as either curses.h, or ncurses.h (would
2848dnl be obsolete, except that some packagers prefer this name to distinguish it
2849dnl from a "native" curses implementation). If not installed for overwrite,
2850dnl the curses.h file would be in an ncurses subdirectory (e.g.,
2851dnl /usr/include/ncurses), but someone may have installed overwriting the
2852dnl vendor's curses. Only very old versions (pre-1.9.2d, the first autoconf'd
2853dnl version) of ncurses don't define either __NCURSES_H or NCURSES_VERSION in
2854dnl the header.
2855dnl
2856dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header
2857dnl is already in the include-path, don't even bother with this, since we cannot
2858dnl easily determine which file it is. In this case, it has to be <curses.h>.
2859dnl
2860dnl The optional parameter gives the root name of the library, in case it is
2861dnl not installed as the default curses library. That is how the
2862dnl wide-character version of ncurses is installed.
2863AC_DEFUN([CF_NCURSES_CPPFLAGS],
2864[AC_REQUIRE([CF_WITH_CURSES_DIR])
2865
2866AC_PROVIDE([CF_CURSES_CPPFLAGS])dnl
2867cf_ncuhdr_root=ifelse($1,,ncurses,$1)
2868
2869test -n "$cf_cv_curses_dir" && \
2870test "$cf_cv_curses_dir" != "no" && { \
2871 CF_ADD_INCDIR($cf_cv_curses_dir/include/$cf_ncuhdr_root)
2872}
2873
2874AC_CACHE_CHECK(for $cf_ncuhdr_root header in include-path, cf_cv_ncurses_h,[
2875 cf_header_list="$cf_ncuhdr_root/curses.h $cf_ncuhdr_root/ncurses.h"
micky3879b9f5e72025-07-08 18:04:53 -04002876 { test "$cf_ncuhdr_root" = ncurses || test "$cf_ncuhdr_root" = ncursesw; } && cf_header_list="$cf_header_list curses.h ncurses.h"
Steve Kondikae271bc2015-11-15 02:50:53 +01002877 for cf_header in $cf_header_list
2878 do
2879 CF_NCURSES_CC_CHECK(cf_cv_ncurses_h,$cf_header,$1)
2880 test "$cf_cv_ncurses_h" != no && break
2881 done
2882])
2883
2884CF_NCURSES_HEADER
2885CF_TERM_HEADER
2886
2887# some applications need this, but should check for NCURSES_VERSION
2888AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries])
2889
2890CF_NCURSES_VERSION
2891])dnl
2892dnl ---------------------------------------------------------------------------
2893dnl CF_NCURSES_EXT_FUNCS version: 4 updated: 2012/10/06 16:39:58
2894dnl --------------------
2895dnl Since 2007/11/17, ncurses has defined NCURSES_EXT_FUNCS; earlier versions
2896dnl may provide these functions. Define the symbol if it is not defined, and
2897dnl if it is valid.
2898AC_DEFUN([CF_NCURSES_EXT_FUNCS],
2899[
2900AC_CACHE_CHECK(for ncurses extended functions,cf_cv_ncurses_ext_funcs,[
2901AC_TRY_COMPILE([
2902#include <${cf_cv_ncurses_header:-curses.h}>],
2903[
2904int x = NCURSES_EXT_FUNCS
2905],[cf_cv_ncurses_ext_funcs=defined],[
2906AC_TRY_LINK([
2907#include <${cf_cv_ncurses_header:-curses.h}>],
2908[
2909 (void) assume_default_colors (0, 0);
2910 (void) curses_version ();
2911 (void) define_key (0, 0);
2912 (void) is_term_resized (0, 0);
2913 (void) key_defined (0);
2914 (void) keybound (0, 0);
2915 (void) keyok (0, 0);
2916 (void) resize_term (0, 0);
2917 (void) resizeterm (0, 0);
2918 (void) use_default_colors ();
2919 (void) use_extended_names (0);
2920 (void) wresize (0, 0, 0);],
2921 [cf_cv_ncurses_ext_funcs=yes],
2922 [cf_cv_ncurses_ext_funcs=no])
2923])
2924])
2925test "$cf_cv_ncurses_ext_funcs" = yes && AC_DEFINE(NCURSES_EXT_FUNCS,1,[Define to 1 if we have ncurses extensions])
2926])dnl
2927dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002928dnl CF_NCURSES_HEADER version: 7 updated: 2021/01/04 19:33:05
Steve Kondikae271bc2015-11-15 02:50:53 +01002929dnl -----------------
2930dnl Find a "curses" header file, e.g,. "curses.h", or one of the more common
2931dnl variations of ncurses' installs.
2932dnl
2933dnl See also CF_CURSES_HEADER, which sets the same cache variable.
2934AC_DEFUN([CF_NCURSES_HEADER],[
2935
2936if test "$cf_cv_ncurses_h" != no ; then
2937 cf_cv_ncurses_header=$cf_cv_ncurses_h
2938else
2939
2940AC_CACHE_CHECK(for $cf_ncuhdr_root include-path, cf_cv_ncurses_h2,[
2941 test -n "$verbose" && echo
2942 CF_HEADER_PATH(cf_search,$cf_ncuhdr_root)
micky3879b9f5e72025-07-08 18:04:53 -04002943 test -n "$verbose" && echo "search path $cf_search"
Steve Kondikae271bc2015-11-15 02:50:53 +01002944 cf_save2_CPPFLAGS="$CPPFLAGS"
2945 for cf_incdir in $cf_search
2946 do
2947 CF_ADD_INCDIR($cf_incdir)
2948 for cf_header in \
2949 ncurses.h \
2950 curses.h
2951 do
2952 CF_NCURSES_CC_CHECK(cf_cv_ncurses_h2,$cf_header,$1)
2953 if test "$cf_cv_ncurses_h2" != no ; then
2954 cf_cv_ncurses_h2=$cf_incdir/$cf_header
micky3879b9f5e72025-07-08 18:04:53 -04002955 test -n "$verbose" && echo $ECHO_N " ... found $ECHO_C" 1>&AC_FD_MSG
Steve Kondikae271bc2015-11-15 02:50:53 +01002956 break
2957 fi
2958 test -n "$verbose" && echo " ... tested $cf_incdir/$cf_header" 1>&AC_FD_MSG
2959 done
2960 CPPFLAGS="$cf_save2_CPPFLAGS"
2961 test "$cf_cv_ncurses_h2" != no && break
2962 done
2963 test "$cf_cv_ncurses_h2" = no && AC_MSG_ERROR(not found)
2964 ])
2965
2966 CF_DIRNAME(cf_1st_incdir,$cf_cv_ncurses_h2)
micky3879b9f5e72025-07-08 18:04:53 -04002967 cf_cv_ncurses_header="`basename "$cf_cv_ncurses_h2"`"
2968 if test "`basename "$cf_1st_incdir"`" = "$cf_ncuhdr_root" ; then
2969 cf_cv_ncurses_header="$cf_ncuhdr_root/$cf_cv_ncurses_header"
Steve Kondikae271bc2015-11-15 02:50:53 +01002970 fi
2971 CF_ADD_INCDIR($cf_1st_incdir)
2972
2973fi
2974
2975# Set definitions to allow ifdef'ing for ncurses.h
2976
micky3879b9f5e72025-07-08 18:04:53 -04002977case "$cf_cv_ncurses_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01002978(*ncurses.h)
2979 AC_DEFINE(HAVE_NCURSES_H,1,[Define to 1 if we have ncurses.h])
2980 ;;
2981esac
2982
micky3879b9f5e72025-07-08 18:04:53 -04002983case "$cf_cv_ncurses_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01002984(ncurses/curses.h|ncurses/ncurses.h)
2985 AC_DEFINE(HAVE_NCURSES_NCURSES_H,1,[Define to 1 if we have ncurses/ncurses.h])
2986 ;;
2987(ncursesw/curses.h|ncursesw/ncurses.h)
2988 AC_DEFINE(HAVE_NCURSESW_NCURSES_H,1,[Define to 1 if we have ncursesw/ncurses.h])
2989 ;;
2990esac
2991
2992])dnl
2993dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04002994dnl CF_NCURSES_LIBS version: 21 updated: 2021/09/04 06:37:12
Steve Kondikae271bc2015-11-15 02:50:53 +01002995dnl ---------------
2996dnl Look for the ncurses library. This is a little complicated on Linux,
2997dnl because it may be linked with the gpm (general purpose mouse) library.
2998dnl Some distributions have gpm linked with (bsd) curses, which makes it
2999dnl unusable with ncurses. However, we don't want to link with gpm unless
3000dnl ncurses has a dependency, since gpm is normally set up as a shared library,
3001dnl and the linker will record a dependency.
3002dnl
3003dnl The optional parameter gives the root name of the library, in case it is
3004dnl not installed as the default curses library. That is how the
3005dnl wide-character version of ncurses is installed.
3006AC_DEFUN([CF_NCURSES_LIBS],
3007[AC_REQUIRE([CF_NCURSES_CPPFLAGS])
3008
3009cf_nculib_root=ifelse($1,,ncurses,$1)
3010 # This works, except for the special case where we find gpm, but
3011 # ncurses is in a nonstandard location via $LIBS, and we really want
3012 # to link gpm.
3013cf_ncurses_LIBS=""
3014cf_ncurses_SAVE="$LIBS"
3015AC_CHECK_LIB(gpm,Gpm_Open,
3016 [AC_CHECK_LIB(gpm,initscr,
3017 [LIBS="$cf_ncurses_SAVE"],
3018 [cf_ncurses_LIBS="-lgpm"])])
3019
micky3879b9f5e72025-07-08 18:04:53 -04003020case "$host_os" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003021(freebsd*)
3022 # This is only necessary if you are linking against an obsolete
micky3879b9f5e72025-07-08 18:04:53 -04003023 # version of ncurses (but it should do no harm, since it is static).
Steve Kondikae271bc2015-11-15 02:50:53 +01003024 if test "$cf_nculib_root" = ncurses ; then
3025 AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"])
3026 fi
3027 ;;
3028esac
3029
3030CF_ADD_LIBS($cf_ncurses_LIBS)
3031
micky3879b9f5e72025-07-08 18:04:53 -04003032if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no"
Steve Kondikae271bc2015-11-15 02:50:53 +01003033then
3034 CF_ADD_LIBS(-l$cf_nculib_root)
3035else
3036 CF_FIND_LIBRARY($cf_nculib_root,$cf_nculib_root,
3037 [#include <${cf_cv_ncurses_header:-curses.h}>],
3038 [initscr()],
3039 initscr)
3040fi
3041
3042if test -n "$cf_ncurses_LIBS" ; then
3043 AC_MSG_CHECKING(if we can link $cf_nculib_root without $cf_ncurses_LIBS)
3044 cf_ncurses_SAVE="$LIBS"
3045 for p in $cf_ncurses_LIBS ; do
micky3879b9f5e72025-07-08 18:04:53 -04003046 q=`echo "$LIBS" | sed -e "s%$p %%" -e "s%$p$%%"`
Steve Kondikae271bc2015-11-15 02:50:53 +01003047 if test "$q" != "$LIBS" ; then
3048 LIBS="$q"
3049 fi
3050 done
3051 AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
micky3879b9f5e72025-07-08 18:04:53 -04003052 [initscr(); mousemask(0,0); tigetstr((char *)0);],
Steve Kondikae271bc2015-11-15 02:50:53 +01003053 [AC_MSG_RESULT(yes)],
3054 [AC_MSG_RESULT(no)
3055 LIBS="$cf_ncurses_SAVE"])
3056fi
3057
3058CF_UPPER(cf_nculib_ROOT,HAVE_LIB$cf_nculib_root)
3059AC_DEFINE_UNQUOTED($cf_nculib_ROOT)
3060])dnl
3061dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003062dnl CF_NCURSES_PTHREADS version: 2 updated: 2016/04/22 05:07:41
3063dnl -------------------
3064dnl Use this followup check to ensure that we link with pthreads if ncurses
3065dnl uses it.
3066AC_DEFUN([CF_NCURSES_PTHREADS],[
3067: ${cf_nculib_root:=ifelse($1,,ncurses,$1)}
3068AC_CHECK_LIB($cf_nculib_root,_nc_init_pthreads,
3069 cf_cv_ncurses_pthreads=yes,
3070 cf_cv_ncurses_pthreads=no)
3071if test "$cf_cv_ncurses_pthreads" = yes
3072then
3073 CF_ADD_LIBS(-lpthread)
3074fi
3075])dnl
3076dnl ---------------------------------------------------------------------------
3077dnl CF_NCURSES_VERSION version: 18 updated: 2024/01/07 06:34:16
Steve Kondikae271bc2015-11-15 02:50:53 +01003078dnl ------------------
3079dnl Check for the version of ncurses, to aid in reporting bugs, etc.
3080dnl Call CF_CURSES_CPPFLAGS first, or CF_NCURSES_CPPFLAGS. We don't use
3081dnl AC_REQUIRE since that does not work with the shell's if/then/else/fi.
3082AC_DEFUN([CF_NCURSES_VERSION],
3083[
3084AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
3085AC_CACHE_CHECK(for ncurses version, cf_cv_ncurses_version,[
3086 cf_cv_ncurses_version=no
3087 cf_tempfile=out$$
micky3879b9f5e72025-07-08 18:04:53 -04003088 rm -f "$cf_tempfile"
Steve Kondikae271bc2015-11-15 02:50:53 +01003089 AC_TRY_RUN([
micky3879b9f5e72025-07-08 18:04:53 -04003090$ac_includes_default
3091
Steve Kondikae271bc2015-11-15 02:50:53 +01003092#include <${cf_cv_ncurses_header:-curses.h}>
micky3879b9f5e72025-07-08 18:04:53 -04003093
3094int main(void)
Steve Kondikae271bc2015-11-15 02:50:53 +01003095{
3096 FILE *fp = fopen("$cf_tempfile", "w");
3097#ifdef NCURSES_VERSION
3098# ifdef NCURSES_VERSION_PATCH
micky3879b9f5e72025-07-08 18:04:53 -04003099 fprintf(fp, "%s.%d\\n", NCURSES_VERSION, NCURSES_VERSION_PATCH);
Steve Kondikae271bc2015-11-15 02:50:53 +01003100# else
micky3879b9f5e72025-07-08 18:04:53 -04003101 fprintf(fp, "%s\\n", NCURSES_VERSION);
Steve Kondikae271bc2015-11-15 02:50:53 +01003102# endif
3103#else
3104# ifdef __NCURSES_H
micky3879b9f5e72025-07-08 18:04:53 -04003105 fprintf(fp, "old\\n");
Steve Kondikae271bc2015-11-15 02:50:53 +01003106# else
micky3879b9f5e72025-07-08 18:04:53 -04003107 #error expected ncurses header to define __NCURSES_H
Steve Kondikae271bc2015-11-15 02:50:53 +01003108# endif
3109#endif
3110 ${cf_cv_main_return:-return}(0);
3111}],[
3112 cf_cv_ncurses_version=`cat $cf_tempfile`],,[
3113
3114 # This will not work if the preprocessor splits the line after the
3115 # Autoconf token. The 'unproto' program does that.
micky3879b9f5e72025-07-08 18:04:53 -04003116 cat > "conftest.$ac_ext" <<EOF
Steve Kondikae271bc2015-11-15 02:50:53 +01003117#include <${cf_cv_ncurses_header:-curses.h}>
3118#undef Autoconf
3119#ifdef NCURSES_VERSION
3120Autoconf NCURSES_VERSION
3121#else
3122#ifdef __NCURSES_H
3123Autoconf "old"
3124#endif
3125;
3126#endif
3127EOF
3128 cf_try="$ac_cpp conftest.$ac_ext 2>&AC_FD_CC | grep '^Autoconf ' >conftest.out"
3129 AC_TRY_EVAL(cf_try)
3130 if test -f conftest.out ; then
micky3879b9f5e72025-07-08 18:04:53 -04003131 cf_out=`sed -e 's%^Autoconf %%' -e 's%^[[^"]]*"%%' -e 's%".*%%' conftest.out`
Steve Kondikae271bc2015-11-15 02:50:53 +01003132 test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
3133 rm -f conftest.out
3134 fi
3135])
micky3879b9f5e72025-07-08 18:04:53 -04003136 rm -f "$cf_tempfile"
Steve Kondikae271bc2015-11-15 02:50:53 +01003137])
3138test "$cf_cv_ncurses_version" = no || AC_DEFINE(NCURSES,1,[Define to 1 if we are using ncurses headers/libraries])
3139])dnl
3140dnl ---------------------------------------------------------------------------
3141dnl CF_NCURSES_WRAP_PREFIX version: 1 updated: 2009/03/28 16:08:10
3142dnl ----------------------
3143dnl Check for ncurses "wrap-prefix" used for public variables which have been
3144dnl wrapped with a function to help with concurrency control.
3145AC_DEFUN([CF_NCURSES_WRAP_PREFIX],
3146[
3147AC_MSG_CHECKING(for ncurses wrap-prefix)
3148AC_ARG_WITH(ncurses-wrap-prefix,
3149 [ --with-ncurses-wrap-prefix naming-prefix for ncurses wrapped-variables],
3150 [NCURSES_WRAP_PREFIX=$withval],
3151 [NCURSES_WRAP_PREFIX=_nc_])
3152AC_MSG_RESULT($NCURSES_WRAP_PREFIX)
3153
3154AC_SUBST(NCURSES_WRAP_PREFIX)
3155])
3156dnl ---------------------------------------------------------------------------
3157dnl CF_NETBSD_FORM_H version: 2 updated: 2012/10/06 16:39:58
3158dnl ----------------
3159dnl Check for NetBSD's form.h, which is incompatible with SVr4 and ncurses.
3160dnl Some workarounds are needed in client programs to allow them to compile.
3161AC_DEFUN([CF_NETBSD_FORM_H],[
3162AC_CACHE_CHECK(for NetBSD form.h,cf_cv_netbsd_form_h,[
3163AC_TRY_COMPILE([
3164#include <${cf_cv_ncurses_header:-curses.h}>
3165#include <form.h>
3166],[
3167 FORM *form;
3168 int y = current_field(form)->cursor_ypos;
3169 int x = current_field(form)->cursor_xpos;
3170],[cf_cv_netbsd_form_h=yes
3171],[cf_cv_netbsd_form_h=no])
3172])
3173
3174test "$cf_cv_netbsd_form_h" = yes && AC_DEFINE(HAVE_NETBSD_FORM_H,1,[Define to 1 if we appear to be using NetBSD form.h])
3175])dnl
3176dnl ---------------------------------------------------------------------------
3177dnl CF_NETBSD_MENU_H version: 2 updated: 2012/10/06 16:39:58
3178dnl ----------------
3179dnl Check for NetBSD's menu.h, which is incompatible with SVr4 and ncurses.
3180dnl Some workarounds are needed in client programs to allow them to compile.
3181AC_DEFUN([CF_NETBSD_MENU_H],[
3182AC_CACHE_CHECK(for NetBSD menu.h,cf_cv_netbsd_menu_h,[
3183AC_TRY_COMPILE([
3184#include <${cf_cv_ncurses_header:-curses.h}>
3185#include <menu.h>
3186],[
3187 MENU *menu;
3188 int y = menu->max_item_width;
3189],[cf_cv_netbsd_menu_h=yes
3190],[cf_cv_netbsd_menu_h=no])
3191])
3192
3193test "$cf_cv_netbsd_menu_h" = yes && AC_DEFINE(HAVE_NETBSD_MENU_H,1,[Define to 1 if we appear to be using NetBSD menu.h])
3194])dnl
3195dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003196dnl CF_NO_LEAKS_OPTION version: 9 updated: 2021/06/13 19:45:41
Steve Kondikae271bc2015-11-15 02:50:53 +01003197dnl ------------------
3198dnl see CF_WITH_NO_LEAKS
micky3879b9f5e72025-07-08 18:04:53 -04003199dnl
3200dnl $1 = option/name
3201dnl $2 = help-text
3202dnl $3 = symbol to define if the option is set
3203dnl $4 = additional actions to take if the option is set
Steve Kondikae271bc2015-11-15 02:50:53 +01003204AC_DEFUN([CF_NO_LEAKS_OPTION],[
3205AC_MSG_CHECKING(if you want to use $1 for testing)
3206AC_ARG_WITH($1,
3207 [$2],
micky3879b9f5e72025-07-08 18:04:53 -04003208 [case "x$withval" in
3209 (x|xno) ;;
3210 (*)
3211 : "${with_cflags:=-g}"
3212 : "${enable_leaks:=no}"
3213 with_$1=yes
3214 AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
Steve Kondikae271bc2015-11-15 02:50:53 +01003215 $4
3216])
micky3879b9f5e72025-07-08 18:04:53 -04003217 ;;
3218 esac],
Steve Kondikae271bc2015-11-15 02:50:53 +01003219 [with_$1=])
3220AC_MSG_RESULT(${with_$1:-no})
3221
micky3879b9f5e72025-07-08 18:04:53 -04003222case ".$with_cflags" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003223(.*-g*)
3224 case .$CFLAGS in
3225 (.*-g*)
3226 ;;
3227 (*)
3228 CF_ADD_CFLAGS([-g])
3229 ;;
3230 esac
3231 ;;
3232esac
3233])dnl
3234dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003235dnl CF_PATH_SYNTAX version: 18 updated: 2020/12/31 18:40:20
Steve Kondikae271bc2015-11-15 02:50:53 +01003236dnl --------------
3237dnl Check the argument to see that it looks like a pathname. Rewrite it if it
3238dnl begins with one of the prefix/exec_prefix variables, and then again if the
3239dnl result begins with 'NONE'. This is necessary to work around autoconf's
3240dnl delayed evaluation of those symbols.
3241AC_DEFUN([CF_PATH_SYNTAX],[
3242if test "x$prefix" != xNONE; then
3243 cf_path_syntax="$prefix"
3244else
3245 cf_path_syntax="$ac_default_prefix"
3246fi
3247
3248case ".[$]$1" in
3249(.\[$]\(*\)*|.\'*\'*)
3250 ;;
3251(..|./*|.\\*)
3252 ;;
3253(.[[a-zA-Z]]:[[\\/]]*) # OS/2 EMX
3254 ;;
micky3879b9f5e72025-07-08 18:04:53 -04003255(.\[$]\{*prefix\}*|.\[$]\{*dir\}*)
Steve Kondikae271bc2015-11-15 02:50:53 +01003256 eval $1="[$]$1"
3257 case ".[$]$1" in
3258 (.NONE/*)
micky3879b9f5e72025-07-08 18:04:53 -04003259 $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%`
Steve Kondikae271bc2015-11-15 02:50:53 +01003260 ;;
3261 esac
3262 ;;
3263(.no|.NONE/*)
micky3879b9f5e72025-07-08 18:04:53 -04003264 $1=`echo "[$]$1" | sed -e s%NONE%$cf_path_syntax%`
Steve Kondikae271bc2015-11-15 02:50:53 +01003265 ;;
3266(*)
3267 ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
3268 ;;
3269esac
3270])dnl
3271dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003272dnl CF_PDCURSES_X11 version: 15 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +01003273dnl ---------------
3274dnl Configure for PDCurses' X11 library
3275AC_DEFUN([CF_PDCURSES_X11],[
3276AC_REQUIRE([CF_X_ATHENA])
3277
3278CF_ACVERSION_CHECK(2.52,
3279 [AC_CHECK_TOOLS(XCURSES_CONFIG, xcurses-config, none)],
3280 [AC_PATH_PROGS(XCURSES_CONFIG, xcurses-config, none)])
3281
3282if test "$XCURSES_CONFIG" != none ; then
3283
micky3879b9f5e72025-07-08 18:04:53 -04003284CF_ADD_CFLAGS(`$XCURSES_CONFIG --cflags`)
Steve Kondikae271bc2015-11-15 02:50:53 +01003285CF_ADD_LIBS(`$XCURSES_CONFIG --libs`)
3286
3287cf_cv_lib_XCurses=yes
3288
3289else
3290
3291LDFLAGS="$LDFLAGS $X_LIBS"
3292CF_CHECK_CFLAGS($X_CFLAGS)
3293AC_CHECK_LIB(X11,XOpenDisplay,
3294 [CF_ADD_LIBS(-lX11)],,
3295 [$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
3296AC_CACHE_CHECK(for XCurses library,cf_cv_lib_XCurses,[
3297CF_ADD_LIBS(-lXCurses)
3298AC_TRY_LINK([
3299#include <xcurses.h>
3300char *XCursesProgramName = "test";
3301],[XCursesExit();],
3302[cf_cv_lib_XCurses=yes],
3303[cf_cv_lib_XCurses=no])
3304])
3305
3306fi
3307
micky3879b9f5e72025-07-08 18:04:53 -04003308if test "$cf_cv_lib_XCurses" = yes ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01003309 AC_DEFINE(UNIX,1,[Define to 1 if using PDCurses on Unix])
3310 AC_DEFINE(XCURSES,1,[Define to 1 if using PDCurses on Unix])
3311 AC_CHECK_HEADER(xcurses.h, AC_DEFINE(HAVE_XCURSES,1,[Define to 1 if using PDCurses on Unix]))
3312else
3313 AC_MSG_ERROR(Cannot link with XCurses)
3314fi
3315])dnl
3316dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003317dnl CF_PKG_CONFIG version: 13 updated: 2023/10/28 11:59:01
Steve Kondikae271bc2015-11-15 02:50:53 +01003318dnl -------------
3319dnl Check for the package-config program, unless disabled by command-line.
micky3879b9f5e72025-07-08 18:04:53 -04003320dnl
3321dnl Sets $PKG_CONFIG to the pathname of the pkg-config program.
Steve Kondikae271bc2015-11-15 02:50:53 +01003322AC_DEFUN([CF_PKG_CONFIG],
3323[
3324AC_MSG_CHECKING(if you want to use pkg-config)
3325AC_ARG_WITH(pkg-config,
micky3879b9f5e72025-07-08 18:04:53 -04003326 [[ --with-pkg-config[=CMD] enable/disable use of pkg-config and its name CMD]],
Steve Kondikae271bc2015-11-15 02:50:53 +01003327 [cf_pkg_config=$withval],
3328 [cf_pkg_config=yes])
3329AC_MSG_RESULT($cf_pkg_config)
3330
micky3879b9f5e72025-07-08 18:04:53 -04003331case "$cf_pkg_config" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003332(no)
3333 PKG_CONFIG=none
3334 ;;
3335(yes)
3336 CF_ACVERSION_CHECK(2.52,
3337 [AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)],
3338 [AC_PATH_PROG(PKG_CONFIG, pkg-config, none)])
3339 ;;
3340(*)
3341 PKG_CONFIG=$withval
3342 ;;
3343esac
3344
3345test -z "$PKG_CONFIG" && PKG_CONFIG=none
3346if test "$PKG_CONFIG" != none ; then
3347 CF_PATH_SYNTAX(PKG_CONFIG)
3348elif test "x$cf_pkg_config" != xno ; then
3349 AC_MSG_WARN(pkg-config is not installed)
3350fi
3351
3352AC_SUBST(PKG_CONFIG)
3353])dnl
3354dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003355dnl CF_POSIX_C_SOURCE version: 12 updated: 2023/02/18 17:41:25
Steve Kondikae271bc2015-11-15 02:50:53 +01003356dnl -----------------
3357dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
3358dnl
3359dnl POSIX.1-1990 _POSIX_SOURCE
3360dnl POSIX.1-1990 and _POSIX_SOURCE and
3361dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
3362dnl Bindings Option
3363dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
3364dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
3365dnl X/Open 2000 _POSIX_C_SOURCE=200112L
3366dnl
3367dnl Parameters:
3368dnl $1 is the nominal value for _POSIX_C_SOURCE
3369AC_DEFUN([CF_POSIX_C_SOURCE],
micky3879b9f5e72025-07-08 18:04:53 -04003370[AC_REQUIRE([CF_POSIX_VISIBLE])dnl
3371
3372if test "$cf_cv_posix_visible" = no; then
3373
Steve Kondikae271bc2015-11-15 02:50:53 +01003374cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
3375
3376cf_save_CFLAGS="$CFLAGS"
3377cf_save_CPPFLAGS="$CPPFLAGS"
3378
3379CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
3380CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
3381
3382AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
3383 CF_MSG_LOG(if the symbol is already defined go no further)
3384 AC_TRY_COMPILE([#include <sys/types.h>],[
3385#ifndef _POSIX_C_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04003386#error _POSIX_C_SOURCE is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01003387#endif],
3388 [cf_cv_posix_c_source=no],
3389 [cf_want_posix_source=no
3390 case .$cf_POSIX_C_SOURCE in
3391 (.[[12]]??*)
3392 cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
3393 ;;
3394 (.2)
3395 cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
3396 cf_want_posix_source=yes
3397 ;;
3398 (.*)
3399 cf_want_posix_source=yes
3400 ;;
3401 esac
3402 if test "$cf_want_posix_source" = yes ; then
3403 AC_TRY_COMPILE([#include <sys/types.h>],[
3404#ifdef _POSIX_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04003405#error _POSIX_SOURCE is defined
Steve Kondikae271bc2015-11-15 02:50:53 +01003406#endif],[],
3407 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
3408 fi
3409 CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
3410 CFLAGS="$cf_trim_CFLAGS"
micky3879b9f5e72025-07-08 18:04:53 -04003411 CPPFLAGS="$cf_trim_CPPFLAGS"
3412 CF_APPEND_TEXT(CPPFLAGS,$cf_cv_posix_c_source)
Steve Kondikae271bc2015-11-15 02:50:53 +01003413 CF_MSG_LOG(if the second compile does not leave our definition intact error)
3414 AC_TRY_COMPILE([#include <sys/types.h>],[
3415#ifndef _POSIX_C_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04003416#error _POSIX_C_SOURCE is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01003417#endif],,
3418 [cf_cv_posix_c_source=no])
3419 CFLAGS="$cf_save_CFLAGS"
3420 CPPFLAGS="$cf_save_CPPFLAGS"
3421 ])
3422])
3423
3424if test "$cf_cv_posix_c_source" != no ; then
3425 CFLAGS="$cf_trim_CFLAGS"
3426 CPPFLAGS="$cf_trim_CPPFLAGS"
3427 CF_ADD_CFLAGS($cf_cv_posix_c_source)
3428fi
3429
micky3879b9f5e72025-07-08 18:04:53 -04003430fi # cf_cv_posix_visible
3431
Steve Kondikae271bc2015-11-15 02:50:53 +01003432])dnl
3433dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003434dnl CF_POSIX_VISIBLE version: 1 updated: 2018/12/31 20:46:17
3435dnl ----------------
3436dnl POSIX documents test-macros which an application may set before any system
3437dnl headers are included to make features available.
3438dnl
3439dnl Some BSD platforms (originally FreeBSD, but copied by a few others)
3440dnl diverged from POSIX in 2002 by setting symbols which make all of the most
3441dnl recent features visible in the system header files unless the application
3442dnl overrides the corresponding test-macros. Doing that introduces portability
3443dnl problems.
3444dnl
3445dnl This macro makes a special check for the symbols used for this, to avoid a
3446dnl conflicting definition.
3447AC_DEFUN([CF_POSIX_VISIBLE],
3448[
3449AC_CACHE_CHECK(if the POSIX test-macros are already defined,cf_cv_posix_visible,[
3450AC_TRY_COMPILE([#include <stdio.h>],[
3451#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \
3452 && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \
3453 && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \
3454 && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0)
3455#error conflicting symbols found
3456#endif
3457],[cf_cv_posix_visible=no],[cf_cv_posix_visible=yes])
3458])
3459])dnl
3460dnl ---------------------------------------------------------------------------
3461dnl CF_PRG_RULES version: 2 updated: 2021/01/01 13:31:04
Steve Kondikae271bc2015-11-15 02:50:53 +01003462dnl ------------
3463dnl Append definitions and rules for the given programs to the subdirectory
3464dnl Makefiles, and the recursion rule for the top-level Makefile.
3465dnl
3466dnl parameters
3467dnl $1 = script to run
3468dnl $2 = list of subdirectories
3469dnl
3470dnl variables
3471dnl $AWK
3472AC_DEFUN([CF_PRG_RULES],
3473[
3474for cf_dir in $2
3475do
micky3879b9f5e72025-07-08 18:04:53 -04003476 if test ! -d "$srcdir/$cf_dir" ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01003477 continue
micky3879b9f5e72025-07-08 18:04:53 -04003478 elif test -f "$srcdir/$cf_dir/programs" ; then
3479 $AWK -f $1 "$srcdir/$cf_dir/programs" >>$cf_dir/Makefile
Steve Kondikae271bc2015-11-15 02:50:53 +01003480 fi
3481done
3482
3483])dnl
3484dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003485dnl CF_PROG_CC version: 5 updated: 2019/12/31 08:53:54
Steve Kondikae271bc2015-11-15 02:50:53 +01003486dnl ----------
3487dnl standard check for CC, plus followup sanity checks
3488dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
3489AC_DEFUN([CF_PROG_CC],[
micky3879b9f5e72025-07-08 18:04:53 -04003490CF_ACVERSION_CHECK(2.53,
3491 [AC_MSG_WARN(this will incorrectly handle gnatgcc choice)
3492 AC_REQUIRE([AC_PROG_CC])],
3493 [])
Steve Kondikae271bc2015-11-15 02:50:53 +01003494ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
3495CF_GCC_VERSION
3496CF_ACVERSION_CHECK(2.52,
3497 [AC_PROG_CC_STDC],
3498 [CF_ANSI_CC_REQD])
3499CF_CC_ENV_FLAGS
3500])dnl
3501dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003502dnl CF_PROG_INSTALL version: 10 updated: 2021/01/04 19:33:05
Steve Kondikae271bc2015-11-15 02:50:53 +01003503dnl ---------------
3504dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the
3505dnl misc/tabset install won't work properly. Usually this happens only when
3506dnl using the fallback mkinstalldirs script
3507AC_DEFUN([CF_PROG_INSTALL],
3508[AC_PROG_INSTALL
3509case $INSTALL in
3510(/*)
3511 ;;
3512(*)
3513 CF_DIRNAME(cf_dir,$INSTALL)
3514 test -z "$cf_dir" && cf_dir=.
micky3879b9f5e72025-07-08 18:04:53 -04003515 INSTALL="`cd \"$cf_dir\" && pwd`"/"`echo "$INSTALL" | sed -e 's%^.*/%%'`"
Steve Kondikae271bc2015-11-15 02:50:53 +01003516 ;;
3517esac
3518])dnl
3519dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003520dnl CF_PROG_LINT version: 5 updated: 2022/08/20 15:44:13
Steve Kondikae271bc2015-11-15 02:50:53 +01003521dnl ------------
3522AC_DEFUN([CF_PROG_LINT],
3523[
micky3879b9f5e72025-07-08 18:04:53 -04003524AC_CHECK_PROGS(LINT, lint cppcheck splint)
3525case "x$LINT" in
3526(xcppcheck|x*/cppcheck)
3527 test -z "$LINT_OPTS" && LINT_OPTS="--enable=all"
3528 ;;
3529esac
Steve Kondikae271bc2015-11-15 02:50:53 +01003530AC_SUBST(LINT_OPTS)
micky3879b9f5e72025-07-08 18:04:53 -04003531AC_SUBST(LINT_LIBS)
3532])dnl
3533dnl ---------------------------------------------------------------------------
3534dnl CF_REMOVE_CFLAGS version: 3 updated: 2021/09/05 17:25:40
3535dnl ----------------
3536dnl Remove a given option from CFLAGS/CPPFLAGS
3537dnl $1 = option to remove
3538dnl $2 = variable to update
3539dnl $3 = nonempty to allow verbose message
3540define([CF_REMOVE_CFLAGS],
3541[
3542cf_tmp_cflag=`echo "x$1" | sed -e 's/^.//' -e 's/=.*//'`
3543while true
3544do
3545 cf_old_cflag=`echo "x[$]$2" | sed -e 's/^.//' -e 's/[[ ]][[ ]]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[[^ ]][[^ ]]*\\)\?%%" -e 's/^[[ ]]*//' -e 's%[[ ]][[ ]]*-D% -D%g' -e 's%[[ ]][[ ]]*-I% -I%g'`
3546 test "[$]$2" != "$cf_old_cflag" || break
3547 ifelse([$3],,,[CF_VERBOSE(removing old option $1 from $2)])
3548 $2="$cf_old_cflag"
3549done
Steve Kondikae271bc2015-11-15 02:50:53 +01003550])dnl
3551dnl ---------------------------------------------------------------------------
3552dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
3553dnl ----------------
3554dnl Remove all -U and -D options that refer to the given symbol from a list
3555dnl of C compiler options. This works around the problem that not all
3556dnl compilers process -U and -D options from left-to-right, so a -U option
3557dnl cannot be used to cancel the effect of a preceding -D option.
3558dnl
3559dnl $1 = target (which could be the same as the source variable)
3560dnl $2 = source (including '$')
3561dnl $3 = symbol to remove
3562define([CF_REMOVE_DEFINE],
3563[
3564$1=`echo "$2" | \
3565 sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \
3566 -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'`
3567])dnl
3568dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003569dnl CF_RESTORE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:47:45
3570dnl ---------------------
3571dnl Restore flags saved in CF_SAVE_XTRA_FLAGS
3572dnl $1 = name of current macro
3573define([CF_RESTORE_XTRA_FLAGS],
3574[
3575LIBS="$cf_save_LIBS_$1"
3576CFLAGS="$cf_save_CFLAGS_$1"
3577CPPFLAGS="$cf_save_CPPFLAGS_$1"
3578])dnl
3579dnl ---------------------------------------------------------------------------
3580dnl CF_RPATH_HACK version: 13 updated: 2021/01/03 18:30:50
Steve Kondikae271bc2015-11-15 02:50:53 +01003581dnl -------------
3582AC_DEFUN([CF_RPATH_HACK],
micky3879b9f5e72025-07-08 18:04:53 -04003583[AC_REQUIRE([AC_PROG_FGREP])dnl
3584AC_REQUIRE([CF_LD_RPATH_OPT])dnl
3585
Steve Kondikae271bc2015-11-15 02:50:53 +01003586AC_MSG_CHECKING(for updated LDFLAGS)
3587if test -n "$LD_RPATH_OPT" ; then
3588 AC_MSG_RESULT(maybe)
3589
3590 AC_CHECK_PROGS(cf_ldd_prog,ldd,no)
3591 cf_rpath_list="/usr/lib /lib"
3592 if test "$cf_ldd_prog" != no
3593 then
3594 cf_rpath_oops=
3595
3596AC_TRY_LINK([#include <stdio.h>],
3597 [printf("Hello");],
micky3879b9f5e72025-07-08 18:04:53 -04003598 [cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
3599 cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`])
Steve Kondikae271bc2015-11-15 02:50:53 +01003600
3601 # If we passed the link-test, but get a "not found" on a given library,
3602 # this could be due to inept reconfiguration of gcc to make it only
3603 # partly honor /usr/local/lib (or whatever). Sometimes this behavior
3604 # is intentional, e.g., installing gcc in /usr/bin and suppressing the
3605 # /usr/local libraries.
3606 if test -n "$cf_rpath_oops"
3607 then
3608 for cf_rpath_src in $cf_rpath_oops
3609 do
3610 for cf_rpath_dir in \
3611 /usr/local \
3612 /usr/pkg \
3613 /opt/sfw
3614 do
micky3879b9f5e72025-07-08 18:04:53 -04003615 if test -f "$cf_rpath_dir/lib/$cf_rpath_src"
Steve Kondikae271bc2015-11-15 02:50:53 +01003616 then
3617 CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src)
3618 LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
3619 break
3620 fi
3621 done
3622 done
3623 fi
3624 fi
3625
3626 CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS)
3627
3628 CF_RPATH_HACK_2(LDFLAGS)
3629 CF_RPATH_HACK_2(LIBS)
3630
3631 CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS)
3632else
3633 AC_MSG_RESULT(no)
3634fi
3635AC_SUBST(EXTRA_LDFLAGS)
3636])dnl
3637dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003638dnl CF_RPATH_HACK_2 version: 8 updated: 2021/01/01 13:31:04
Steve Kondikae271bc2015-11-15 02:50:53 +01003639dnl ---------------
3640dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to
3641dnl EXTRA_LDFLAGS for each -L option found.
3642dnl
3643dnl $cf_rpath_list contains a list of directories to ignore.
3644dnl
3645dnl $1 = variable name to update. The LDFLAGS variable should be the only one,
3646dnl but LIBS often has misplaced -L options.
3647AC_DEFUN([CF_RPATH_HACK_2],
3648[
3649CF_VERBOSE(...checking $1 [$]$1)
3650
3651cf_rpath_dst=
3652for cf_rpath_src in [$]$1
3653do
micky3879b9f5e72025-07-08 18:04:53 -04003654 case "$cf_rpath_src" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003655 (-L*)
3656
3657 # check if this refers to a directory which we will ignore
3658 cf_rpath_skip=no
3659 if test -n "$cf_rpath_list"
3660 then
3661 for cf_rpath_item in $cf_rpath_list
3662 do
3663 if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
3664 then
3665 cf_rpath_skip=yes
3666 break
3667 fi
3668 done
3669 fi
3670
3671 if test "$cf_rpath_skip" = no
3672 then
3673 # transform the option
3674 if test "$LD_RPATH_OPT" = "-R " ; then
3675 cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
3676 else
3677 cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
3678 fi
3679
3680 # if we have not already added this, add it now
3681 cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
3682 if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
3683 then
3684 CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp)
3685 EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
3686 fi
3687 fi
3688 ;;
3689 esac
3690 cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
3691done
3692$1=$cf_rpath_dst
3693
3694CF_VERBOSE(...checked $1 [$]$1)
3695AC_SUBST(EXTRA_LDFLAGS)
3696])dnl
3697dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003698dnl CF_SAVE_XTRA_FLAGS version: 1 updated: 2020/01/11 16:46:44
3699dnl ------------------
3700dnl Use this macro to save CFLAGS/CPPFLAGS/LIBS before checks against X headers
3701dnl and libraries which do not update those variables.
3702dnl
3703dnl $1 = name of current macro
3704define([CF_SAVE_XTRA_FLAGS],
3705[
3706cf_save_LIBS_$1="$LIBS"
3707cf_save_CFLAGS_$1="$CFLAGS"
3708cf_save_CPPFLAGS_$1="$CPPFLAGS"
3709LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}"
3710for cf_X_CFLAGS in $X_CFLAGS
3711do
3712 case "x$cf_X_CFLAGS" in
3713 x-[[IUD]]*)
3714 CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS"
3715 ;;
3716 *)
3717 CFLAGS="$CFLAGS $cf_X_CFLAGS"
3718 ;;
3719 esac
3720done
3721])dnl
3722dnl ---------------------------------------------------------------------------
3723dnl CF_SIGWINCH version: 7 updated: 2023/02/18 17:41:25
3724dnl -----------
3725dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all
3726dnl programs need this test).
3727dnl
3728dnl This is really a Mac OS X 10.4.3 workaround. Defining _POSIX_C_SOURCE
3729dnl forces SIGWINCH to be undefined (breaks xterm, ncurses). Oddly, the struct
3730dnl winsize declaration is left alone - we may revisit this if Apple choose to
3731dnl break that part of the interface as well.
3732AC_DEFUN([CF_SIGWINCH],
3733[
3734AC_CACHE_CHECK(if SIGWINCH is defined,cf_cv_define_sigwinch,[
3735 AC_TRY_COMPILE([
3736#include <sys/types.h>
3737#include <sys/signal.h>
3738],[int x = SIGWINCH; (void)x],
3739 [cf_cv_define_sigwinch=yes],
3740 [AC_TRY_COMPILE([
3741#undef _XOPEN_SOURCE
3742#undef _POSIX_SOURCE
3743#undef _POSIX_C_SOURCE
3744#include <sys/types.h>
3745#include <sys/signal.h>
3746],[int x = SIGWINCH; (void)x],
3747 [cf_cv_define_sigwinch=maybe],
3748 [cf_cv_define_sigwinch=no])
3749])
3750])
3751
3752if test "$cf_cv_define_sigwinch" = maybe ; then
3753AC_CACHE_CHECK(for actual SIGWINCH definition,cf_cv_fixup_sigwinch,[
3754cf_cv_fixup_sigwinch=unknown
3755cf_sigwinch=32
3756while test "$cf_sigwinch" != 1
3757do
3758 AC_TRY_COMPILE([
3759#undef _XOPEN_SOURCE
3760#undef _POSIX_SOURCE
3761#undef _POSIX_C_SOURCE
3762#include <sys/types.h>
3763#include <sys/signal.h>
3764],[
3765#if SIGWINCH != $cf_sigwinch
3766#error SIGWINCH is not $cf_sigwinch
3767#endif
3768int x = SIGWINCH; (void)x],
3769 [cf_cv_fixup_sigwinch=$cf_sigwinch
3770 break])
3771
3772cf_sigwinch="`expr "$cf_sigwinch" - 1`"
3773done
3774])
3775
3776 if test "$cf_cv_fixup_sigwinch" != unknown ; then
3777 CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch"
3778 fi
3779fi
3780])dnl
3781dnl ---------------------------------------------------------------------------
3782dnl CF_SIG_ATOMIC_T version: 5 updated: 2020/03/10 18:53:47
Steve Kondikae271bc2015-11-15 02:50:53 +01003783dnl ---------------
micky3879b9f5e72025-07-08 18:04:53 -04003784dnl signal handler, but there are some gcc dependencies in that recommendation.
Steve Kondikae271bc2015-11-15 02:50:53 +01003785dnl Try anyway.
3786AC_DEFUN([CF_SIG_ATOMIC_T],
3787[
3788AC_MSG_CHECKING(for signal global datatype)
3789AC_CACHE_VAL(cf_cv_sig_atomic_t,[
3790 for cf_type in \
3791 "volatile sig_atomic_t" \
3792 "sig_atomic_t" \
3793 "int"
3794 do
3795 AC_TRY_COMPILE([
3796#include <sys/types.h>
3797#include <signal.h>
3798#include <stdio.h>
3799
3800extern $cf_type x;
3801$cf_type x;
3802static void handler(int sig)
3803{
micky3879b9f5e72025-07-08 18:04:53 -04003804 (void)sig;
Steve Kondikae271bc2015-11-15 02:50:53 +01003805 x = 5;
3806}],
3807 [signal(SIGINT, handler);
3808 x = 1],
3809 [cf_cv_sig_atomic_t=$cf_type],
3810 [cf_cv_sig_atomic_t=no])
3811 test "$cf_cv_sig_atomic_t" != no && break
3812 done
3813 ])
3814AC_MSG_RESULT($cf_cv_sig_atomic_t)
3815test "$cf_cv_sig_atomic_t" != no && AC_DEFINE_UNQUOTED(SIG_ATOMIC_T, $cf_cv_sig_atomic_t,[Define to signal global datatype])
3816])dnl
3817dnl ---------------------------------------------------------------------------
3818dnl CF_SUBDIR_PATH version: 7 updated: 2014/12/04 04:33:06
3819dnl --------------
3820dnl Construct a search-list for a nonstandard header/lib-file
3821dnl $1 = the variable to return as result
3822dnl $2 = the package name
3823dnl $3 = the subdirectory, e.g., bin, include or lib
3824AC_DEFUN([CF_SUBDIR_PATH],
3825[
3826$1=
3827
3828CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE)
3829
3830for cf_subdir_prefix in \
3831 /usr \
3832 /usr/local \
3833 /usr/pkg \
3834 /opt \
3835 /opt/local \
3836 [$]HOME
3837do
3838 CF_ADD_SUBDIR_PATH($1,$2,$3,$cf_subdir_prefix,$prefix)
3839done
3840])dnl
3841dnl ---------------------------------------------------------------------------
3842dnl CF_SYS_TIME_SELECT version: 6 updated: 2015/04/18 08:56:57
3843dnl ------------------
3844dnl Check if we can include <sys/time.h> with <sys/select.h>; this breaks on
3845dnl older SCO configurations.
3846AC_DEFUN([CF_SYS_TIME_SELECT],
3847[
3848AC_MSG_CHECKING(if sys/time.h works with sys/select.h)
3849AC_CACHE_VAL(cf_cv_sys_time_select,[
3850AC_TRY_COMPILE([
3851#include <sys/types.h>
3852#ifdef HAVE_SYS_TIME_H
3853#include <sys/time.h>
3854#endif
3855#ifdef HAVE_SYS_SELECT_H
3856#include <sys/select.h>
3857#endif
3858],[],[cf_cv_sys_time_select=yes],
3859 [cf_cv_sys_time_select=no])
3860 ])
3861AC_MSG_RESULT($cf_cv_sys_time_select)
3862test "$cf_cv_sys_time_select" = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT,1,[Define to 1 if we can include <sys/time.h> with <sys/select.h>])
3863])dnl
3864dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003865dnl CF_TERM_HEADER version: 6 updated: 2021/01/02 09:31:20
Steve Kondikae271bc2015-11-15 02:50:53 +01003866dnl --------------
3867dnl Look for term.h, which is part of X/Open curses. It defines the interface
3868dnl to terminfo database. Usually it is in the same include-path as curses.h,
3869dnl but some packagers change this, breaking various applications.
3870AC_DEFUN([CF_TERM_HEADER],[
3871AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[
micky3879b9f5e72025-07-08 18:04:53 -04003872case "${cf_cv_ncurses_header}" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003873(*/ncurses.h|*/ncursesw.h)
3874 cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'`
3875 ;;
3876(*)
3877 cf_term_header=term.h
3878 ;;
3879esac
3880
3881for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h"
3882do
3883AC_TRY_COMPILE([#include <stdio.h>
3884#include <${cf_cv_ncurses_header:-curses.h}>
3885#include <$cf_test>
micky3879b9f5e72025-07-08 18:04:53 -04003886],[int x = auto_left_margin; (void)x],[
Steve Kondikae271bc2015-11-15 02:50:53 +01003887 cf_cv_term_header="$cf_test"],[
3888 cf_cv_term_header=unknown
3889 ])
3890 test "$cf_cv_term_header" != unknown && break
3891done
3892])
3893
3894# Set definitions to allow ifdef'ing to accommodate subdirectories
3895
micky3879b9f5e72025-07-08 18:04:53 -04003896case "$cf_cv_term_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003897(*term.h)
3898 AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h])
3899 ;;
3900esac
3901
micky3879b9f5e72025-07-08 18:04:53 -04003902case "$cf_cv_term_header" in
Steve Kondikae271bc2015-11-15 02:50:53 +01003903(ncurses/term.h)
3904 AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h])
3905 ;;
3906(ncursesw/term.h)
3907 AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h])
3908 ;;
3909esac
3910])dnl
3911dnl ---------------------------------------------------------------------------
3912dnl CF_TOP_BUILDDIR version: 2 updated: 2013/07/27 17:38:32
3913dnl ---------------
3914dnl Define a top_builddir symbol, for applications that need an absolute path.
3915AC_DEFUN([CF_TOP_BUILDDIR],
3916[
3917top_builddir=ifelse($1,,`pwd`,$1)
3918AC_SUBST(top_builddir)
3919])dnl
3920dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003921dnl CF_TPUTS_PROTO version: 4 updated: 2021/01/04 19:45:09
Steve Kondikae271bc2015-11-15 02:50:53 +01003922dnl --------------
3923dnl Check for type of function-pointer passed to tputs. Some old
3924dnl implementations used functions that had different prototypes, making it
3925dnl hard to compile portable programs using tputs.
3926AC_DEFUN([CF_TPUTS_PROTO],[
3927CF_CURSES_FUNCS(tputs)
micky3879b9f5e72025-07-08 18:04:53 -04003928if test "x$cf_cv_func_tputs" = xyes
Steve Kondikae271bc2015-11-15 02:50:53 +01003929then
3930 cf_done=no
3931 for cf_arg in int char
3932 do
3933 for cf_ret in int void
3934 do
micky3879b9f5e72025-07-08 18:04:53 -04003935 if test "$cf_ret" = void
Steve Kondikae271bc2015-11-15 02:50:53 +01003936 then
3937 cf_return="/* nothing */"
3938 else
3939 cf_return="return value"
3940 fi
3941 AC_TRY_COMPILE([
3942#include <${cf_cv_ncurses_header:-curses.h}>
3943#include <$cf_cv_term_header>
3944
3945static $cf_ret outc($cf_arg value) { $cf_return; }
3946],[
3947 tputs("hello", 0, outc);
3948 ${cf_cv_main_return:-return}(0);
3949],[
3950 CF_VERBOSE([prototype $cf_ret func($cf_arg value)])
3951 cat >>confdefs.h <<EOF
3952#define TPUTS_ARG $cf_arg
3953#define TPUTS_PROTO(func,value) $cf_ret func(TPUTS_ARG value)
3954#define TPUTS_RETURN(value) $cf_return
3955EOF
3956 cf_done=yes
3957 break
3958])
3959 done
micky3879b9f5e72025-07-08 18:04:53 -04003960 test "$cf_done" = yes && break
Steve Kondikae271bc2015-11-15 02:50:53 +01003961 done
3962fi
3963])dnl
3964dnl ---------------------------------------------------------------------------
3965dnl CF_TRIM_X_LIBS version: 3 updated: 2015/04/12 15:39:00
3966dnl --------------
3967dnl Trim extra base X libraries added as a workaround for inconsistent library
3968dnl dependencies returned by "new" pkg-config files.
3969AC_DEFUN([CF_TRIM_X_LIBS],[
3970 for cf_trim_lib in Xmu Xt X11
3971 do
3972 case "$LIBS" in
3973 (*-l$cf_trim_lib\ *-l$cf_trim_lib*)
3974 LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'`
3975 CF_VERBOSE(..trimmed $LIBS)
3976 ;;
3977 esac
3978 done
3979])
3980dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04003981dnl CF_TRY_PKG_CONFIG version: 6 updated: 2020/12/31 10:54:15
Steve Kondikae271bc2015-11-15 02:50:53 +01003982dnl -----------------
3983dnl This is a simple wrapper to use for pkg-config, for libraries which may be
3984dnl available in that form.
3985dnl
micky3879b9f5e72025-07-08 18:04:53 -04003986dnl $1 = package name, which may be a shell variable
Steve Kondikae271bc2015-11-15 02:50:53 +01003987dnl $2 = extra logic to use, if any, after updating CFLAGS and LIBS
3988dnl $3 = logic to use if pkg-config does not have the package
3989AC_DEFUN([CF_TRY_PKG_CONFIG],[
3990AC_REQUIRE([CF_PKG_CONFIG])
3991
micky3879b9f5e72025-07-08 18:04:53 -04003992if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$1"; then
Steve Kondikae271bc2015-11-15 02:50:53 +01003993 CF_VERBOSE(found package $1)
micky3879b9f5e72025-07-08 18:04:53 -04003994 cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$1" 2>/dev/null`"
3995 cf_pkgconfig_libs="`$PKG_CONFIG --libs "$1" 2>/dev/null`"
Steve Kondikae271bc2015-11-15 02:50:53 +01003996 CF_VERBOSE(package $1 CFLAGS: $cf_pkgconfig_incs)
3997 CF_VERBOSE(package $1 LIBS: $cf_pkgconfig_libs)
3998 CF_ADD_CFLAGS($cf_pkgconfig_incs)
3999 CF_ADD_LIBS($cf_pkgconfig_libs)
4000 ifelse([$2],,:,[$2])
4001else
4002 cf_pkgconfig_incs=
4003 cf_pkgconfig_libs=
4004 ifelse([$3],,:,[$3])
4005fi
4006])
4007dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004008dnl CF_TRY_XOPEN_SOURCE version: 4 updated: 2022/09/10 15:16:16
Steve Kondikae271bc2015-11-15 02:50:53 +01004009dnl -------------------
4010dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
4011dnl can define it successfully.
4012AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
4013AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
micky3879b9f5e72025-07-08 18:04:53 -04004014 AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY,
Steve Kondikae271bc2015-11-15 02:50:53 +01004015 [cf_cv_xopen_source=no],
4016 [cf_save="$CPPFLAGS"
micky3879b9f5e72025-07-08 18:04:53 -04004017 CF_APPEND_TEXT(CPPFLAGS,-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE)
4018 AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY,
4019 [cf_cv_xopen_source=no],
4020 [cf_cv_xopen_source=$cf_XOPEN_SOURCE])
4021 CPPFLAGS="$cf_save"
Steve Kondikae271bc2015-11-15 02:50:53 +01004022 ])
4023])
4024
4025if test "$cf_cv_xopen_source" != no ; then
4026 CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
4027 CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
4028 cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
micky3879b9f5e72025-07-08 18:04:53 -04004029 CF_APPEND_CFLAGS($cf_temp_xopen_source)
Steve Kondikae271bc2015-11-15 02:50:53 +01004030fi
4031])
4032dnl ---------------------------------------------------------------------------
4033dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
4034dnl --------
4035dnl Make an uppercase version of a variable
4036dnl $1=uppercase($2)
4037AC_DEFUN([CF_UPPER],
4038[
4039$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
4040])dnl
4041dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004042dnl CF_UTF8_LIB version: 10 updated: 2023/01/11 04:05:23
Steve Kondikae271bc2015-11-15 02:50:53 +01004043dnl -----------
4044dnl Check for multibyte support, and if not found, utf8 compatibility library
4045AC_DEFUN([CF_UTF8_LIB],
4046[
micky3879b9f5e72025-07-08 18:04:53 -04004047AC_HAVE_HEADERS(wchar.h)
Steve Kondikae271bc2015-11-15 02:50:53 +01004048AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[
4049 cf_save_LIBS="$LIBS"
4050 AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04004051$ac_includes_default
4052#ifdef HAVE_WCHAR_H
4053#include <wchar.h>
4054#endif
4055],[putwc(0,0);],
Steve Kondikae271bc2015-11-15 02:50:53 +01004056 [cf_cv_utf8_lib=yes],
4057 [CF_FIND_LINKAGE([
4058#include <libutf8.h>],[putwc(0,0);],utf8,
4059 [cf_cv_utf8_lib=add-on],
4060 [cf_cv_utf8_lib=no])
4061])])
4062
4063# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between
4064# ncurses/ncursesw:
4065if test "$cf_cv_utf8_lib" = "add-on" ; then
4066 AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h])
4067 CF_ADD_INCDIR($cf_cv_header_path_utf8)
4068 CF_ADD_LIBDIR($cf_cv_library_path_utf8)
4069 CF_ADD_LIBS($cf_cv_library_file_utf8)
4070fi
4071])dnl
4072dnl ---------------------------------------------------------------------------
4073dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
4074dnl ----------
4075dnl Use AC_VERBOSE w/o the warnings
4076AC_DEFUN([CF_VERBOSE],
4077[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG
4078CF_MSG_LOG([$1])
4079])dnl
4080dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004081dnl CF_WCHAR_TYPE version: 5 updated: 2023/12/03 09:21:34
Steve Kondikae271bc2015-11-15 02:50:53 +01004082dnl -------------
4083dnl Check if type wide-character type $1 is declared, and if so, which header
4084dnl file is needed. The second parameter is used to set a shell variable when
4085dnl the type is not found. The first parameter sets a shell variable for the
4086dnl opposite sense.
4087AC_DEFUN([CF_WCHAR_TYPE],
4088[
4089# This is needed on Tru64 5.0 to declare $1
4090AC_CACHE_CHECK(if we must include wchar.h to declare $1,cf_cv_$1,[
4091AC_TRY_COMPILE([
4092#include <stdlib.h>
4093#include <stdarg.h>
4094#include <stdio.h>
4095#ifdef HAVE_LIBUTF8_H
4096#include <libutf8.h>
4097#endif],
micky3879b9f5e72025-07-08 18:04:53 -04004098 [$1 state; (void)state],
Steve Kondikae271bc2015-11-15 02:50:53 +01004099 [cf_cv_$1=no],
4100 [AC_TRY_COMPILE([
4101#include <stdlib.h>
4102#include <stdarg.h>
4103#include <stdio.h>
4104#include <wchar.h>
4105#ifdef HAVE_LIBUTF8_H
4106#include <libutf8.h>
4107#endif],
micky3879b9f5e72025-07-08 18:04:53 -04004108 [$1 value; (void) value],
Steve Kondikae271bc2015-11-15 02:50:53 +01004109 [cf_cv_$1=yes],
4110 [cf_cv_$1=unknown])])])
4111
4112if test "$cf_cv_$1" = yes ; then
4113 AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h])
4114 NEED_WCHAR_H=1
4115fi
4116
4117ifelse([$2],,,[
4118# if we do not find $1 in either place, use substitution to provide a fallback.
4119if test "$cf_cv_$1" = unknown ; then
4120 $2=1
4121fi
4122])
4123ifelse($3,,,[
4124# if we find $1 in either place, use substitution to provide a fallback.
4125if test "$cf_cv_$1" != unknown ; then
4126 $3=1
4127fi
4128])
4129])dnl
4130dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004131dnl CF_WITH_CURSES_DIR version: 4 updated: 2021/01/02 19:22:58
Steve Kondikae271bc2015-11-15 02:50:53 +01004132dnl ------------------
4133dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses
4134dnl libraries.
4135AC_DEFUN([CF_WITH_CURSES_DIR],[
4136
4137AC_MSG_CHECKING(for specific curses-directory)
4138AC_ARG_WITH(curses-dir,
4139 [ --with-curses-dir=DIR directory in which (n)curses is installed],
4140 [cf_cv_curses_dir=$withval],
4141 [cf_cv_curses_dir=no])
4142AC_MSG_RESULT($cf_cv_curses_dir)
4143
micky3879b9f5e72025-07-08 18:04:53 -04004144if test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no"
Steve Kondikae271bc2015-11-15 02:50:53 +01004145then
4146 CF_PATH_SYNTAX(withval)
4147 if test -d "$cf_cv_curses_dir"
4148 then
4149 CF_ADD_INCDIR($cf_cv_curses_dir/include)
4150 CF_ADD_LIBDIR($cf_cv_curses_dir/lib)
4151 fi
4152fi
4153])dnl
4154dnl ---------------------------------------------------------------------------
4155dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
4156dnl ----------------
4157dnl Configure-option for dbmalloc. The optional parameter is used to override
4158dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
4159AC_DEFUN([CF_WITH_DBMALLOC],[
4160CF_NO_LEAKS_OPTION(dbmalloc,
4161 [ --with-dbmalloc test: use Conor Cahill's dbmalloc library],
4162 [USE_DBMALLOC])
4163
4164if test "$with_dbmalloc" = yes ; then
4165 AC_CHECK_HEADER(dbmalloc.h,
4166 [AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
4167fi
4168])dnl
4169dnl ---------------------------------------------------------------------------
4170dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
4171dnl ---------------
4172dnl Configure-option for dmalloc. The optional parameter is used to override
4173dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
4174AC_DEFUN([CF_WITH_DMALLOC],[
4175CF_NO_LEAKS_OPTION(dmalloc,
4176 [ --with-dmalloc test: use Gray Watson's dmalloc library],
4177 [USE_DMALLOC])
4178
4179if test "$with_dmalloc" = yes ; then
4180 AC_CHECK_HEADER(dmalloc.h,
4181 [AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
4182fi
4183])dnl
4184dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004185dnl CF_WITH_LIB_BASENAME version: 2 updated: 2023/11/22 20:48:30
4186dnl --------------------
4187dnl Allow for overriding the basename of a library, i.e., the part to which
4188dnl prefixes/suffixes are attached.
4189dnl
4190dnl $1 = variable to set
4191dnl $2 = option name
4192dnl $3 = default basename for library, if omitted use $2
4193AC_DEFUN([CF_WITH_LIB_BASENAME],
4194[
4195AC_MSG_CHECKING(for desired basename for $2 library)
4196AC_ARG_WITH($2-libname,
4197 [[ --with-$2-libname[=XXX] override ifelse($3,,$2,$3) basename of library]],
4198 [with_lib_basename=$withval],
4199 [with_lib_basename=ifelse($3,,$2,$3)])
4200$1="$with_lib_basename"
4201
4202case "x[$]$1" in
4203(x|xno|xnone|xyes)
4204 $1=ifelse($3,,$2,$3)
4205 ;;
4206(*)
4207 ;;
4208esac
4209
4210AC_MSG_RESULT([$]$1)
4211AC_SUBST($1)
4212])dnl
4213dnl ---------------------------------------------------------------------------
4214dnl CF_WITH_NCURSES_ETC version: 6 updated: 2023/01/16 10:10:06
Steve Kondikae271bc2015-11-15 02:50:53 +01004215dnl -------------------
4216dnl Use this macro for programs which use any variant of "curses", e.g.,
4217dnl "ncurses", and "PDCurses". Programs that can use curses and some unrelated
4218dnl library (such as slang) should use a "--with-screen=XXX" option.
4219dnl
4220dnl This does not use AC_DEFUN, because that would tell autoconf to run each
4221dnl of the macros inside this one - before this macro.
4222define([CF_WITH_NCURSES_ETC],[
4223CF_WITH_CURSES_DIR
4224
4225cf_cv_screen=curses
4226
4227AC_MSG_CHECKING(for specified curses library type)
4228AC_ARG_WITH(screen,
4229 [ --with-screen=XXX use specified curses-libraries],
4230 [cf_cv_screen=$withval],[
4231
4232AC_ARG_WITH(ncursesw,
4233 [ --with-ncursesw use wide ncurses-libraries],
4234 [cf_cv_screen=ncursesw],[
4235
4236AC_ARG_WITH(ncurses,
4237 [ --with-ncurses use ncurses-libraries],
4238 [cf_cv_screen=ncurses],[
4239
4240AC_ARG_WITH(pdcurses,
4241 [ --with-pdcurses compile/link with pdcurses X11 library],
4242 [cf_cv_screen=pdcurses],[
4243
4244AC_ARG_WITH(curses-colr,
4245 [ --with-curses-colr compile/link with HPUX 10.x color-curses],
4246 [cf_cv_screen=curses_colr],[
4247
4248AC_ARG_WITH(curses-5lib,
4249 [ --with-curses-5lib compile/link with SunOS 5lib curses],
4250 [cf_cv_screen=curses_5lib])])])])])])
4251
4252AC_MSG_RESULT($cf_cv_screen)
4253
4254case $cf_cv_screen in
4255(curses|curses_*)
4256 CF_CURSES_CONFIG
4257 ;;
4258(ncursesw*)
4259 CF_UTF8_LIB
4260 CF_NCURSES_CONFIG($cf_cv_screen)
4261 ;;
4262(ncurses*)
4263 CF_NCURSES_CONFIG($cf_cv_screen)
4264 ;;
4265(pdcurses)
4266 CF_PDCURSES_X11
4267 ;;
4268(*)
4269 AC_MSG_ERROR(unexpected screen-value: $cf_cv_screen)
4270 ;;
4271esac
4272
micky3879b9f5e72025-07-08 18:04:53 -04004273CF_NCURSES_PTHREADS($cf_cv_screen)
4274AC_SUBST(cf_cv_screen)
4275
4276])dnl
4277dnl ---------------------------------------------------------------------------
4278dnl CF_WITH_SCREEN_PDCURSES version: 1 updated: 2020/08/28 16:56:27
4279dnl -----------------------
4280dnl Call this macro before CF_ENABLE_WARNINGS for configure scripts which use
4281dnl the "--with-screen=pdcurses" selection. Doing that allows the configure
4282dnl script to search for the X11/Xt header files to declare (or not) the
4283dnl symbol needed to enable "const" in those header files. If that configure
4284dnl option is not used, then those checks are unnecessary.
4285AC_DEFUN([CF_WITH_SCREEN_PDCURSES],[
4286AC_PROVIDE([AC_PATH_XTRA])
4287AC_PROVIDE([AC_PATH_X])
4288if test -n "$with_screen" && test "x$with_screen" = "xpdcurses"
4289then
4290 AC_PATH_X
4291 AC_PATH_XTRA
4292fi
Steve Kondikae271bc2015-11-15 02:50:53 +01004293])dnl
4294dnl ---------------------------------------------------------------------------
4295dnl CF_WITH_VALGRIND version: 1 updated: 2006/12/14 18:00:21
4296dnl ----------------
4297AC_DEFUN([CF_WITH_VALGRIND],[
4298CF_NO_LEAKS_OPTION(valgrind,
4299 [ --with-valgrind test: use valgrind],
4300 [USE_VALGRIND])
4301])dnl
4302dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004303dnl CF_WITH_X11_RGB version: 3 updated: 2023/10/28 11:59:01
4304dnl ---------------
4305dnl Handle configure option "--with-x11-rgb", setting these shell
4306dnl variables:
4307dnl
4308dnl $RGB_PATH is the option value, used for finding the X11 rgb file.
4309dnl $no_x11_rgb is a "#" (comment) if "--without-x11-rgb" is given.
4310dnl
4311dnl Most Linux's use this:
4312dnl /usr/share/X11/rgb.txt
4313dnl Debian uses this:
4314dnl /etc/X11/rgb.txt
4315dnl DragonFlyBSD ports uses this:
4316dnl /usr/pkg/lib/X11/rgb.txt
4317dnl FreeBSD ports use these:
4318dnl /usr/local/lib/X11/rgb.txt
4319dnl /usr/local/share/X11/rgb.txt
4320dnl Mandriva has these:
4321dnl /usr/lib/X11/rgb.txt
4322dnl /usr/lib64/X11/rgb.txt
4323dnl NetBSD has these
4324dnl /usr/X11R7/lib/X11/rgb.txt
4325dnl OpenSolaris uses
4326dnl 32-bit:
4327dnl /usr/X11/etc/X11/rgb.txt
4328dnl /usr/X11/share/X11/rgb.txt
4329dnl /usr/X11/lib/X11/rgb.txt
4330dnl OSX uses
4331dnl /opt/local/share/X11/rgb.txt (MacPorts)
4332dnl /opt/X11/share/X11/rgb.txt (non-ports)
4333dnl 64-bit:
4334dnl /usr/X11/etc/X11/rgb.txt
4335dnl /usr/X11/share/X11/rgb.txt (perhaps)
4336dnl /usr/X11/lib/amd64/X11/rgb.txt
4337dnl Solaris10 uses (in this order):
4338dnl /usr/openwin/lib/X11/rgb.txt
4339dnl /usr/X11/lib/X11/rgb.txt
4340AC_DEFUN([CF_WITH_X11_RGB],[
4341AC_MSG_CHECKING(for X11 rgb file)
4342AC_ARG_WITH(x11-rgb,
4343 [ --with-x11-rgb=FILE obtain X11 color definitions from FILE (default: EPREFIX/lib/X11/rgb.txt)],
4344 [RGB_PATH=$withval],
4345 [RGB_PATH=auto])
4346
4347if test "x[$]RGB_PATH" = xauto
4348then
4349 RGB_PATH='${exec_prefix}/lib/X11/rgb.txt'
4350 for cf_path in \
4351 /opt/local/share/X11/rgb.txt \
4352 /opt/X11/share/X11/rgb.txt \
4353 /usr/share/X11/rgb.txt \
4354 /usr/X11/share/X11/rgb.txt \
4355 /usr/X11/lib/X11/rgb.txt \
4356 /usr/lib/X11/rgb.txt \
4357 /etc/X11/rgb.txt \
4358 /usr/pkg/lib/X11/rgb.txt \
4359 /usr/X11R7/lib/X11/rgb.txt \
4360 /usr/X11R6/lib/X11/rgb.txt \
4361 /usr/X11R5/lib/X11/rgb.txt \
4362 /usr/X11R4/lib/X11/rgb.txt \
4363 /usr/local/lib/X11/rgb.txt \
4364 /usr/local/share/X11/rgb.txt \
4365 /usr/lib64/X11/rgb.txt
4366 do
4367 if test -f "$cf_path" ; then
4368 RGB_PATH="$cf_path"
4369 break
4370 fi
4371 done
4372else
4373 cf_path=$RGB_PATH
4374 CF_PATH_SYNTAX(cf_path)
4375fi
4376
4377AC_MSG_RESULT($RGB_PATH)
4378AC_SUBST(RGB_PATH)
4379AC_DEFINE_UNQUOTED(RGB_PATH,"$cf_path",[Define to the full pathname of rgb.txt])
4380
4381no_x11_rgb=
4382if test "$RGB_PATH" = no
4383then
4384 no_x11_rgb="#"
4385fi
4386AC_SUBST(no_x11_rgb)
4387])dnl
4388dnl ---------------------------------------------------------------------------
4389dnl CF_XOPEN_CURSES version: 20 updated: 2024/01/07 06:54:12
Steve Kondikae271bc2015-11-15 02:50:53 +01004390dnl ---------------
4391dnl Test if we should define X/Open source for curses, needed on Digital Unix
4392dnl 4.x, to see the extended functions, but breaks on IRIX 6.x.
4393dnl
4394dnl The getbegyx() check is needed for HPUX, which omits legacy macros such
4395dnl as getbegy(). The latter is better design, but the former is standard.
4396AC_DEFUN([CF_XOPEN_CURSES],
4397[
4398AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
micky3879b9f5e72025-07-08 18:04:53 -04004399AC_CACHE_CHECK(definition to turn on extended curses functions,cf_cv_need_xopen_extension,[
4400cf_cv_need_xopen_extension=unknown
Steve Kondikae271bc2015-11-15 02:50:53 +01004401AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04004402$ac_includes_default
Steve Kondikae271bc2015-11-15 02:50:53 +01004403#include <${cf_cv_ncurses_header:-curses.h}>],[
4404#if defined(NCURSES_VERSION_PATCH)
4405#if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403)
micky3879b9f5e72025-07-08 18:04:53 -04004406 #error disallow ncurses versions between 2020/04/03 and 2010/05/01
Steve Kondikae271bc2015-11-15 02:50:53 +01004407#endif
4408#endif
micky3879b9f5e72025-07-08 18:04:53 -04004409#ifdef NCURSES_WIDECHAR
4410#error prefer to fall-through on the second checks
4411#endif
4412 static char dummy[10];
Steve Kondikae271bc2015-11-15 02:50:53 +01004413 cchar_t check;
4414 int check2 = curs_set((int)sizeof(check));
micky3879b9f5e72025-07-08 18:04:53 -04004415 long x = winnstr(stdscr, dummy, 5);
Steve Kondikae271bc2015-11-15 02:50:53 +01004416 int x1, y1;
micky3879b9f5e72025-07-08 18:04:53 -04004417 (void)check2;
4418 getbegyx(stdscr, y1, x1);
4419 (void)x;
4420 (void)y1;
4421 (void)x1;
4422 ],
4423 [cf_cv_need_xopen_extension=none],
4424 [
4425 for cf_try_xopen_extension in _XOPEN_SOURCE_EXTENDED NCURSES_WIDECHAR
4426 do
4427 AC_TRY_LINK([
4428#define $cf_try_xopen_extension 1
4429$ac_includes_default
4430#include <${cf_cv_ncurses_header:-curses.h}>],[
4431 static char dummy[10];
4432 cchar_t check;
4433 int check2 = curs_set((int)sizeof(check));
4434 long x = winnstr(stdscr, dummy, 5);
4435 int x1, y1;
4436 getbegyx(stdscr, y1, x1);
4437 (void)check2;
4438 (void)x;
4439 (void)y1;
4440 (void)x1;
4441 ],
4442 [cf_cv_need_xopen_extension=$cf_try_xopen_extension; break])
4443 done
4444 ])
4445])
4446
4447case "$cf_cv_need_xopen_extension" in
4448(*_*)
4449 CF_APPEND_TEXT(CPPFLAGS,-D$cf_cv_need_xopen_extension)
4450 ;;
4451esac
4452
Steve Kondikae271bc2015-11-15 02:50:53 +01004453])dnl
4454dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004455dnl CF_XOPEN_SOURCE version: 67 updated: 2023/09/06 18:55:27
Steve Kondikae271bc2015-11-15 02:50:53 +01004456dnl ---------------
4457dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
4458dnl or adapt to the vendor's definitions to get equivalent functionality,
4459dnl without losing the common non-POSIX features.
4460dnl
4461dnl Parameters:
4462dnl $1 is the nominal value for _XOPEN_SOURCE
4463dnl $2 is the nominal value for _POSIX_C_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04004464dnl
4465dnl The default case prefers _XOPEN_SOURCE over _POSIX_C_SOURCE if the
4466dnl implementation predefines it, because X/Open and most implementations agree
4467dnl that the latter is a legacy or "aligned" value.
4468dnl
4469dnl Because _XOPEN_SOURCE is preferred, if defining _POSIX_C_SOURCE turns
4470dnl that off, then refrain from setting _POSIX_C_SOURCE explicitly.
4471dnl
4472dnl References:
4473dnl https://pubs.opengroup.org/onlinepubs/007904975/functions/xsh_chap02_02.html
4474dnl https://docs.oracle.com/cd/E19253-01/816-5175/standards-5/index.html
4475dnl https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
Steve Kondikae271bc2015-11-15 02:50:53 +01004476AC_DEFUN([CF_XOPEN_SOURCE],[
4477AC_REQUIRE([AC_CANONICAL_HOST])
micky3879b9f5e72025-07-08 18:04:53 -04004478AC_REQUIRE([CF_POSIX_VISIBLE])
4479
4480if test "$cf_cv_posix_visible" = no; then
Steve Kondikae271bc2015-11-15 02:50:53 +01004481
4482cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
4483cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
4484cf_xopen_source=
4485
micky3879b9f5e72025-07-08 18:04:53 -04004486case "$host_os" in
Steve Kondikae271bc2015-11-15 02:50:53 +01004487(aix[[4-7]]*)
4488 cf_xopen_source="-D_ALL_SOURCE"
4489 ;;
Steve Kondikae271bc2015-11-15 02:50:53 +01004490(darwin[[0-8]].*)
4491 cf_xopen_source="-D_APPLE_C_SOURCE"
4492 ;;
4493(darwin*)
4494 cf_xopen_source="-D_DARWIN_C_SOURCE"
4495 cf_XOPEN_SOURCE=
4496 ;;
micky3879b9f5e72025-07-08 18:04:53 -04004497(freebsd*|dragonfly*|midnightbsd*)
Steve Kondikae271bc2015-11-15 02:50:53 +01004498 # 5.x headers associate
4499 # _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
4500 # _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
4501 cf_POSIX_C_SOURCE=200112L
4502 cf_XOPEN_SOURCE=600
4503 cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
4504 ;;
4505(hpux11*)
4506 cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
4507 ;;
4508(hpux*)
4509 cf_xopen_source="-D_HPUX_SOURCE"
4510 ;;
4511(irix[[56]].*)
4512 cf_xopen_source="-D_SGI_SOURCE"
4513 cf_XOPEN_SOURCE=
4514 ;;
micky3879b9f5e72025-07-08 18:04:53 -04004515(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)
4516 CF_GNU_SOURCE($cf_XOPEN_SOURCE)
Steve Kondikae271bc2015-11-15 02:50:53 +01004517 ;;
4518(minix*)
4519 cf_xopen_source="-D_NETBSD_SOURCE" # POSIX.1-2001 features are ifdef'd with this...
4520 ;;
4521(mirbsd*)
4522 # setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
4523 cf_XOPEN_SOURCE=
4524 CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
4525 ;;
4526(netbsd*)
4527 cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
4528 ;;
micky3879b9f5e72025-07-08 18:04:53 -04004529(openbsd[[6-9]]*)
4530 # OpenBSD 6.x has broken locale support, both compile-time and runtime.
4531 # see https://www.mail-archive.com/bugs@openbsd.org/msg13200.html
4532 # Abusing the conformance level is a workaround.
4533 AC_MSG_WARN(this system does not provide usable locale support)
4534 cf_xopen_source="-D_BSD_SOURCE"
4535 cf_XOPEN_SOURCE=700
4536 ;;
4537(openbsd[[4-5]]*)
Steve Kondikae271bc2015-11-15 02:50:53 +01004538 # setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
4539 cf_xopen_source="-D_BSD_SOURCE"
4540 cf_XOPEN_SOURCE=600
4541 ;;
4542(openbsd*)
4543 # setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
4544 ;;
4545(osf[[45]]*)
4546 cf_xopen_source="-D_OSF_SOURCE"
4547 ;;
4548(nto-qnx*)
4549 cf_xopen_source="-D_QNX_SOURCE"
4550 ;;
4551(sco*)
4552 # setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
4553 ;;
4554(solaris2.*)
4555 cf_xopen_source="-D__EXTENSIONS__"
4556 cf_cv_xopen_source=broken
4557 ;;
4558(sysv4.2uw2.*) # Novell/SCO UnixWare 2.x (tested on 2.1.2)
4559 cf_XOPEN_SOURCE=
4560 cf_POSIX_C_SOURCE=
4561 ;;
4562(*)
4563 CF_TRY_XOPEN_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04004564 cf_save_xopen_cppflags="$CPPFLAGS"
Steve Kondikae271bc2015-11-15 02:50:53 +01004565 CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
micky3879b9f5e72025-07-08 18:04:53 -04004566 # Some of these niche implementations use copy/paste, double-check...
4567 if test "$cf_cv_xopen_source" = no ; then
4568 CF_VERBOSE(checking if _POSIX_C_SOURCE interferes with _XOPEN_SOURCE)
4569 AC_TRY_COMPILE(CF__XOPEN_SOURCE_HEAD,CF__XOPEN_SOURCE_BODY,,[
4570 AC_MSG_WARN(_POSIX_C_SOURCE definition is not usable)
4571 CPPFLAGS="$cf_save_xopen_cppflags"])
4572 fi
Steve Kondikae271bc2015-11-15 02:50:53 +01004573 ;;
4574esac
4575
4576if test -n "$cf_xopen_source" ; then
micky3879b9f5e72025-07-08 18:04:53 -04004577 CF_APPEND_CFLAGS($cf_xopen_source,true)
Steve Kondikae271bc2015-11-15 02:50:53 +01004578fi
4579
4580dnl In anything but the default case, we may have system-specific setting
4581dnl which is still not guaranteed to provide all of the entrypoints that
4582dnl _XOPEN_SOURCE would yield.
4583if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
4584 AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
4585 AC_TRY_COMPILE([#include <stdlib.h>],[
4586#ifndef _XOPEN_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04004587#error _XOPEN_SOURCE is not defined
Steve Kondikae271bc2015-11-15 02:50:53 +01004588#endif],
4589 [cf_XOPEN_SOURCE_set=yes],
4590 [cf_XOPEN_SOURCE_set=no])
4591 AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
micky3879b9f5e72025-07-08 18:04:53 -04004592 if test "$cf_XOPEN_SOURCE_set" = yes
Steve Kondikae271bc2015-11-15 02:50:53 +01004593 then
4594 AC_TRY_COMPILE([#include <stdlib.h>],[
4595#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
micky3879b9f5e72025-07-08 18:04:53 -04004596#error (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
Steve Kondikae271bc2015-11-15 02:50:53 +01004597#endif],
4598 [cf_XOPEN_SOURCE_set_ok=yes],
4599 [cf_XOPEN_SOURCE_set_ok=no])
micky3879b9f5e72025-07-08 18:04:53 -04004600 if test "$cf_XOPEN_SOURCE_set_ok" = no
Steve Kondikae271bc2015-11-15 02:50:53 +01004601 then
4602 AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
4603 fi
4604 else
4605 CF_TRY_XOPEN_SOURCE
4606 fi
4607fi
micky3879b9f5e72025-07-08 18:04:53 -04004608fi # cf_cv_posix_visible
Steve Kondikae271bc2015-11-15 02:50:53 +01004609])
4610dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004611dnl CF_X_ATHENA version: 25 updated: 2023/01/11 04:05:23
Steve Kondikae271bc2015-11-15 02:50:53 +01004612dnl -----------
4613dnl Check for Xaw (Athena) libraries
4614dnl
4615dnl Sets $cf_x_athena according to the flavor of Xaw which is used.
4616AC_DEFUN([CF_X_ATHENA],
4617[
4618cf_x_athena=${cf_x_athena:-Xaw}
4619
4620AC_MSG_CHECKING(if you want to link with Xaw 3d library)
4621withval=
4622AC_ARG_WITH(Xaw3d,
4623 [ --with-Xaw3d link with Xaw 3d library])
4624if test "$withval" = yes ; then
4625 cf_x_athena=Xaw3d
4626 AC_MSG_RESULT(yes)
4627else
4628 AC_MSG_RESULT(no)
4629fi
4630
4631AC_MSG_CHECKING(if you want to link with Xaw 3d xft library)
4632withval=
4633AC_ARG_WITH(Xaw3dxft,
4634 [ --with-Xaw3dxft link with Xaw 3d xft library])
4635if test "$withval" = yes ; then
4636 cf_x_athena=Xaw3dxft
4637 AC_MSG_RESULT(yes)
4638else
4639 AC_MSG_RESULT(no)
4640fi
4641
4642AC_MSG_CHECKING(if you want to link with neXT Athena library)
4643withval=
4644AC_ARG_WITH(neXtaw,
4645 [ --with-neXtaw link with neXT Athena library])
4646if test "$withval" = yes ; then
4647 cf_x_athena=neXtaw
4648 AC_MSG_RESULT(yes)
4649else
4650 AC_MSG_RESULT(no)
4651fi
4652
4653AC_MSG_CHECKING(if you want to link with Athena-Plus library)
4654withval=
4655AC_ARG_WITH(XawPlus,
4656 [ --with-XawPlus link with Athena-Plus library])
4657if test "$withval" = yes ; then
4658 cf_x_athena=XawPlus
4659 AC_MSG_RESULT(yes)
4660else
4661 AC_MSG_RESULT(no)
4662fi
4663
4664cf_x_athena_lib=""
4665
4666if test "$PKG_CONFIG" != none ; then
4667 cf_athena_list=
4668 test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6"
4669 for cf_athena_pkg in \
4670 $cf_athena_list \
4671 ${cf_x_athena} \
4672 ${cf_x_athena}-devel \
4673 lib${cf_x_athena} \
4674 lib${cf_x_athena}-devel
4675 do
4676 CF_TRY_PKG_CONFIG($cf_athena_pkg,[
4677 cf_x_athena_lib="$cf_pkgconfig_libs"
4678 CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena)
4679 AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
4680
4681 CF_TRIM_X_LIBS
4682
4683AC_CACHE_CHECK(for usable $cf_x_athena/Xmu package,cf_cv_xaw_compat,[
4684AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04004685$ac_includes_default
Steve Kondikae271bc2015-11-15 02:50:53 +01004686#include <X11/Xmu/CharSet.h>
4687],[
micky3879b9f5e72025-07-08 18:04:53 -04004688int check = XmuCompareISOLatin1("big", "small");
4689(void)check;
Steve Kondikae271bc2015-11-15 02:50:53 +01004690],[cf_cv_xaw_compat=yes],[cf_cv_xaw_compat=no])])
4691
4692 if test "$cf_cv_xaw_compat" = no
4693 then
4694 # workaround for broken ".pc" files...
4695 case "$cf_x_athena_lib" in
4696 (*-lXmu*)
4697 ;;
4698 (*)
4699 CF_VERBOSE(work around broken package)
4700 cf_save_xmu="$LIBS"
4701 cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^[ ][ ]*//' -e 's/ .*//'`
4702 CF_TRY_PKG_CONFIG(xmu,[
4703 LIBS="$cf_save_xmu"
4704 CF_ADD_LIB_AFTER($cf_first_lib,$cf_pkgconfig_libs)
4705 ],[
4706 CF_ADD_LIB_AFTER($cf_first_lib,-lXmu)
4707 ])
4708 CF_TRIM_X_LIBS
4709 ;;
4710 esac
4711 fi
4712
4713 break])
4714 done
4715fi
4716
4717if test -z "$cf_x_athena_lib" ; then
4718 CF_X_EXT
4719 CF_X_TOOLKIT
4720 CF_X_ATHENA_CPPFLAGS($cf_x_athena)
4721 CF_X_ATHENA_LIBS($cf_x_athena)
4722fi
4723])dnl
4724dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004725dnl CF_X_ATHENA_CPPFLAGS version: 9 updated: 2020/12/31 10:54:15
Steve Kondikae271bc2015-11-15 02:50:53 +01004726dnl --------------------
4727dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
4728dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
4729AC_DEFUN([CF_X_ATHENA_CPPFLAGS],
4730[
micky3879b9f5e72025-07-08 18:04:53 -04004731AC_REQUIRE([AC_PATH_XTRA])
Steve Kondikae271bc2015-11-15 02:50:53 +01004732cf_x_athena_root=ifelse([$1],,Xaw,[$1])
4733cf_x_athena_inc=""
4734
4735for cf_path in default \
4736 /usr/contrib/X11R6 \
4737 /usr/contrib/X11R5 \
4738 /usr/lib/X11R5 \
4739 /usr/local
4740do
4741 if test -z "$cf_x_athena_inc" ; then
micky3879b9f5e72025-07-08 18:04:53 -04004742 CF_SAVE_XTRA_FLAGS([CF_X_ATHENA_CPPFLAGS])
Steve Kondikae271bc2015-11-15 02:50:53 +01004743 cf_test=X11/$cf_x_athena_root/SimpleMenu.h
micky3879b9f5e72025-07-08 18:04:53 -04004744 if test "$cf_path" != default ; then
4745 CF_APPEND_TEXT(CPPFLAGS,-I$cf_path/include)
Steve Kondikae271bc2015-11-15 02:50:53 +01004746 AC_MSG_CHECKING(for $cf_test in $cf_path)
4747 else
4748 AC_MSG_CHECKING(for $cf_test)
4749 fi
4750 AC_TRY_COMPILE([
4751#include <X11/Intrinsic.h>
4752#include <$cf_test>],[],
4753 [cf_result=yes],
4754 [cf_result=no])
4755 AC_MSG_RESULT($cf_result)
micky3879b9f5e72025-07-08 18:04:53 -04004756 CF_RESTORE_XTRA_FLAGS([CF_X_ATHENA_CPPFLAGS])
Steve Kondikae271bc2015-11-15 02:50:53 +01004757 if test "$cf_result" = yes ; then
micky3879b9f5e72025-07-08 18:04:53 -04004758 test "$cf_path" = default && cf_x_athena_inc=default
4759 test "$cf_path" != default && cf_x_athena_inc="$cf_path/include"
Steve Kondikae271bc2015-11-15 02:50:53 +01004760 break
Steve Kondikae271bc2015-11-15 02:50:53 +01004761 fi
4762 fi
4763done
4764
4765if test -z "$cf_x_athena_inc" ; then
micky3879b9f5e72025-07-08 18:04:53 -04004766 AC_MSG_WARN([Unable to find Athena header files])
Steve Kondikae271bc2015-11-15 02:50:53 +01004767elif test "$cf_x_athena_inc" != default ; then
micky3879b9f5e72025-07-08 18:04:53 -04004768 CF_APPEND_TEXT(CPPFLAGS,-I$cf_x_athena_inc)
Steve Kondikae271bc2015-11-15 02:50:53 +01004769fi
4770])
4771dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004772dnl CF_X_ATHENA_LIBS version: 14 updated: 2023/01/11 04:05:23
Steve Kondikae271bc2015-11-15 02:50:53 +01004773dnl ----------------
4774dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
4775dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
4776AC_DEFUN([CF_X_ATHENA_LIBS],
4777[AC_REQUIRE([CF_X_TOOLKIT])
4778cf_x_athena_root=ifelse([$1],,Xaw,[$1])
4779cf_x_athena_lib=""
4780
4781for cf_path in default \
4782 /usr/contrib/X11R6 \
4783 /usr/contrib/X11R5 \
4784 /usr/lib/X11R5 \
4785 /usr/local
4786do
4787 for cf_lib in \
4788 ${cf_x_athena_root} \
4789 ${cf_x_athena_root}7 \
4790 ${cf_x_athena_root}6
4791 do
4792 for cf_libs in \
4793 "-l$cf_lib -lXmu" \
4794 "-l$cf_lib -lXpm -lXmu" \
4795 "-l${cf_lib}_s -lXmu_s"
4796 do
micky3879b9f5e72025-07-08 18:04:53 -04004797 test -n "$cf_x_athena_lib" && break
4798
4799 CF_SAVE_XTRA_FLAGS([CF_X_ATHENA_LIBS])
4800 cf_test=XawSimpleMenuAddGlobalActions
4801 test "$cf_path" != default && cf_libs="-L$cf_path/lib $cf_libs"
4802 CF_ADD_LIBS($cf_libs)
4803 AC_MSG_CHECKING(for $cf_test in $cf_libs)
4804 AC_TRY_LINK([
4805$ac_includes_default
Steve Kondikae271bc2015-11-15 02:50:53 +01004806#include <X11/Intrinsic.h>
4807#include <X11/$cf_x_athena_root/SimpleMenu.h>
4808],[
4809$cf_test((XtAppContext) 0)],
micky3879b9f5e72025-07-08 18:04:53 -04004810 [cf_result=yes],
4811 [cf_result=no])
4812 AC_MSG_RESULT($cf_result)
4813 CF_RESTORE_XTRA_FLAGS([CF_X_ATHENA_LIBS])
4814
4815 if test "$cf_result" = yes ; then
4816 cf_x_athena_lib="$cf_libs"
4817 break
Steve Kondikae271bc2015-11-15 02:50:53 +01004818 fi
4819 done # cf_libs
4820 test -n "$cf_x_athena_lib" && break
4821 done # cf_lib
4822done
4823
4824if test -z "$cf_x_athena_lib" ; then
4825 AC_MSG_ERROR(
4826[Unable to successfully link Athena library (-l$cf_x_athena_root) with test program])
4827fi
4828
micky3879b9f5e72025-07-08 18:04:53 -04004829CF_ADD_LIBS($cf_x_athena_lib)
Steve Kondikae271bc2015-11-15 02:50:53 +01004830CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena)
4831AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
4832])
4833dnl ---------------------------------------------------------------------------
4834dnl CF_X_EXT version: 3 updated: 2010/06/02 05:03:05
4835dnl --------
4836AC_DEFUN([CF_X_EXT],[
4837CF_TRY_PKG_CONFIG(Xext,,[
4838 AC_CHECK_LIB(Xext,XextCreateExtension,
4839 [CF_ADD_LIB(Xext)])])
4840])dnl
4841dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004842dnl CF_X_TOOLKIT version: 27 updated: 2023/01/11 04:05:23
Steve Kondikae271bc2015-11-15 02:50:53 +01004843dnl ------------
4844dnl Check for X Toolkit libraries
4845AC_DEFUN([CF_X_TOOLKIT],
4846[
4847AC_REQUIRE([AC_PATH_XTRA])
4848AC_REQUIRE([CF_CHECK_CACHE])
4849
micky3879b9f5e72025-07-08 18:04:53 -04004850# OSX is schizoid about who owns /usr/X11 (old) versus /opt/X11 (new) (and
Steve Kondikae271bc2015-11-15 02:50:53 +01004851# in some cases has installed dummy files in the former, other cases replaced
4852# it with a link to the new location). This complicates the configure script.
4853# Check for that pitfall, and recover using pkg-config
4854#
4855# If none of these are set, the configuration is almost certainly broken.
4856if test -z "${X_CFLAGS}${X_PRE_LIBS}${X_LIBS}${X_EXTRA_LIBS}"
4857then
4858 CF_TRY_PKG_CONFIG(x11,,[AC_MSG_WARN(unable to find X11 library)])
4859 CF_TRY_PKG_CONFIG(ice,,[AC_MSG_WARN(unable to find ICE library)])
4860 CF_TRY_PKG_CONFIG(sm,,[AC_MSG_WARN(unable to find SM library)])
4861 CF_TRY_PKG_CONFIG(xt,,[AC_MSG_WARN(unable to find Xt library)])
micky3879b9f5e72025-07-08 18:04:53 -04004862else
4863 LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
Steve Kondikae271bc2015-11-15 02:50:53 +01004864fi
4865
4866cf_have_X_LIBS=no
4867
4868CF_TRY_PKG_CONFIG(xt,[
4869
4870 case "x$LIBS" in
4871 (*-lX11*)
4872 ;;
4873 (*)
4874# we have an "xt" package, but it may omit Xt's dependency on X11
4875AC_CACHE_CHECK(for usable X dependency,cf_cv_xt_x11_compat,[
4876AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04004877$ac_includes_default
Steve Kondikae271bc2015-11-15 02:50:53 +01004878#include <X11/Xlib.h>
4879],[
4880 int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0);
4881 int rc2 = XClearWindow((Display*) 0, (Window) 0);
4882 int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0);
4883 int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0);
4884],[cf_cv_xt_x11_compat=yes],[cf_cv_xt_x11_compat=no])])
4885 if test "$cf_cv_xt_x11_compat" = no
4886 then
4887 CF_VERBOSE(work around broken X11 dependency)
4888 # 2010/11/19 - good enough until a working Xt on Xcb is delivered.
4889 CF_TRY_PKG_CONFIG(x11,,[CF_ADD_LIB_AFTER(-lXt,-lX11)])
4890 fi
4891 ;;
4892 esac
4893
4894AC_CACHE_CHECK(for usable X Toolkit package,cf_cv_xt_ice_compat,[
4895AC_TRY_LINK([
micky3879b9f5e72025-07-08 18:04:53 -04004896$ac_includes_default
Steve Kondikae271bc2015-11-15 02:50:53 +01004897#include <X11/Shell.h>
micky3879b9f5e72025-07-08 18:04:53 -04004898],[int num = IceConnectionNumber(0); (void) num
Steve Kondikae271bc2015-11-15 02:50:53 +01004899],[cf_cv_xt_ice_compat=yes],[cf_cv_xt_ice_compat=no])])
4900
4901 if test "$cf_cv_xt_ice_compat" = no
4902 then
4903 # workaround for broken ".pc" files used for X Toolkit.
4904 case "x$X_PRE_LIBS" in
4905 (*-lICE*)
4906 case "x$LIBS" in
4907 (*-lICE*)
4908 ;;
4909 (*)
4910 CF_VERBOSE(work around broken ICE dependency)
4911 CF_TRY_PKG_CONFIG(ice,
4912 [CF_TRY_PKG_CONFIG(sm)],
4913 [CF_ADD_LIB_AFTER(-lXt,$X_PRE_LIBS)])
4914 ;;
4915 esac
4916 ;;
4917 esac
4918 fi
4919
4920 cf_have_X_LIBS=yes
4921],[
4922
4923 LDFLAGS="$X_LIBS $LDFLAGS"
4924 CF_CHECK_CFLAGS($X_CFLAGS)
4925
4926 AC_CHECK_FUNC(XOpenDisplay,,[
4927 AC_CHECK_LIB(X11,XOpenDisplay,
micky3879b9f5e72025-07-08 18:04:53 -04004928 [CF_ADD_LIB(X11)])])
Steve Kondikae271bc2015-11-15 02:50:53 +01004929
4930 AC_CHECK_FUNC(XtAppInitialize,,[
4931 AC_CHECK_LIB(Xt, XtAppInitialize,
4932 [AC_DEFINE(HAVE_LIBXT,1,[Define to 1 if we can compile with the Xt library])
4933 cf_have_X_LIBS=Xt
micky3879b9f5e72025-07-08 18:04:53 -04004934 LIBS="-lXt $LIBS"])])
Steve Kondikae271bc2015-11-15 02:50:53 +01004935])
4936
micky3879b9f5e72025-07-08 18:04:53 -04004937if test "$cf_have_X_LIBS" = no ; then
Steve Kondikae271bc2015-11-15 02:50:53 +01004938 AC_MSG_WARN(
4939[Unable to successfully link X Toolkit library (-lXt) with
4940test program. You will have to check and add the proper libraries by hand
4941to makefile.])
4942fi
4943])dnl
4944dnl ---------------------------------------------------------------------------
micky3879b9f5e72025-07-08 18:04:53 -04004945dnl CF__CURSES_DATA version: 3 updated: 2021/01/04 19:45:09
4946dnl ---------------
4947dnl Attempt to make a copy of a curses data item. This is needed in the
4948dnl check-data configure tests when using ncurses, because the symbol may be
4949dnl actually a function return-value. That could happen if the linker is
4950dnl broken (does not resolve data-only references), or if ncurses is configured
4951dnl to support re-entrant code.
4952dnl $1 = target
4953dnl $2 = source
4954define([CF__CURSES_DATA],[
4955#if defined($2) && ((defined(NCURSES_WRAPPED_VAR) && (NCURSES_VERSION_PATCH < 20200208)) || defined(NCURSES_BROKEN_LINKER) || defined(NCURSES_REENTRANT))
4956 const void *$1 = (const void *)($2);
4957#else
4958 const void *$1 = &($2);
4959#endif
4960 fprintf(stderr, "testing linkage of $2:%p\\n", (const void *)$1);
4961])dnl
4962dnl ---------------------------------------------------------------------------
Steve Kondikae271bc2015-11-15 02:50:53 +01004963dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49
4964dnl ---------------
4965dnl Define a reusable chunk which includes <curses.h> and <term.h> when they
4966dnl are both available.
4967define([CF__CURSES_HEAD],[
4968#ifdef HAVE_XCURSES
4969#include <xcurses.h>
4970char * XCursesProgramName = "test";
4971#else
4972#include <${cf_cv_ncurses_header:-curses.h}>
4973#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H)
4974#include <ncursesw/term.h>
4975#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H)
4976#include <ncurses/term.h>
4977#elif defined(HAVE_TERM_H)
4978#include <term.h>
4979#endif
4980#endif
4981])
micky3879b9f5e72025-07-08 18:04:53 -04004982dnl ---------------------------------------------------------------------------
4983dnl CF__XOPEN_SOURCE_BODY version: 2 updated: 2023/02/18 17:41:25
4984dnl ---------------------
4985dnl body of test when test-compiling for _XOPEN_SOURCE check
4986define([CF__XOPEN_SOURCE_BODY],
4987[
4988#ifndef _XOPEN_SOURCE
4989#error _XOPEN_SOURCE is not defined
4990#endif
4991])
4992dnl ---------------------------------------------------------------------------
4993dnl CF__XOPEN_SOURCE_HEAD version: 2 updated: 2023/02/18 17:41:25
4994dnl ---------------------
4995dnl headers to include when test-compiling for _XOPEN_SOURCE check
4996define([CF__XOPEN_SOURCE_HEAD],
4997[
4998$ac_includes_default
4999])