X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=aclocal.m4;h=dc4c2d5a632b068757ab9ef4dff3b0fe8ec328c2;hp=d92ca3966a94751b2c7b62854f5f39366c2feb26;hb=5ed80e8d7031c3fa12b4915d5e1f040257a24323;hpb=45291421bee33c79ffb4c8f0e1b67ca5cc262114 diff --git a/aclocal.m4 b/aclocal.m4 index d92ca396..dc4c2d5a 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,5 +1,5 @@ dnl*************************************************************************** -dnl Copyright (c) 1998-2017,2018 Free Software Foundation, Inc. * +dnl Copyright (c) 1998-2018,2019 Free Software Foundation, Inc. * dnl * dnl Permission is hereby granted, free of charge, to any person obtaining a * dnl copy of this software and associated documentation files (the * @@ -28,7 +28,7 @@ dnl*************************************************************************** dnl dnl Author: Thomas E. Dickey 1995-on dnl -dnl $Id: aclocal.m4,v 1.859 2018/12/15 19:52:08 tom Exp $ +dnl $Id: aclocal.m4,v 1.876 2019/06/30 23:46:29 tom Exp $ dnl Macros used in NCURSES auto-configuration script. dnl dnl These macros are maintained separately from NCURSES. The copyright on @@ -925,6 +925,35 @@ if test ".$system_name" != ".$cf_cv_system_name" ; then fi ])dnl dnl --------------------------------------------------------------------------- +dnl CF_CHECK_ENVIRON version: 3 updated: 2010/05/26 16:44:57 +dnl ---------------- +dnl Check for data that is usually declared in , e.g., the 'environ' +dnl variable. Define a DECL_xxx symbol if we must declare it ourselves. +dnl +dnl $1 = the name to check +dnl $2 = the assumed type +AC_DEFUN([CF_CHECK_ENVIRON], +[ +AC_CACHE_CHECK(if external $1 is declared, cf_cv_dcl_$1,[ + AC_TRY_COMPILE([ +#ifdef HAVE_STDLIB_H +#include +#endif +#include ], + ifelse([$2],,int,[$2]) x = (ifelse([$2],,int,[$2])) $1, + [cf_cv_dcl_$1=yes], + [cf_cv_dcl_$1=no]) +]) + +if test "$cf_cv_dcl_$1" = no ; then + CF_UPPER(cf_result,decl_$1) + AC_DEFINE_UNQUOTED($cf_result) +fi + +# It's possible (for near-UNIX clones) that the data doesn't exist +CF_CHECK_EXTERN_DATA($1,ifelse([$2],,int,[$2])) +])dnl +dnl --------------------------------------------------------------------------- dnl CF_CHECK_ERRNO version: 12 updated: 2015/04/18 08:56:57 dnl -------------- dnl Check for data that is usually declared in or , e.g., @@ -980,6 +1009,132 @@ if test "$cf_cv_have_$1" = yes ; then AC_DEFINE_UNQUOTED($cf_result) fi +])dnl +dnl --------------------------------------------------------------------------- +dnl CF_CHECK_GETENV version: 1 updated: 2019/06/23 15:28:15 +dnl --------------- +dnl Check if repeated getenv calls return the same pointer, e.g., it does not +dnl discard the previous pointer when returning a new one. +AC_DEFUN([CF_CHECK_GETENV], +[ +AC_REQUIRE([CF_CHECK_ENVIRON]) +AC_CHECK_FUNC( getenv, ,, AC_MSG_ERROR(getenv not found) ) +AC_CHECK_FUNCS( putenv setenv strdup ) +AC_CACHE_CHECK(if getenv returns consistent values,cf_cv_consistent_getenv,[ +AC_TRY_RUN([ +#include +#include +#include +#include +#include + +#if defined(HAVE_ENVIRON) && defined(DECL_ENVIRON) && !defined(environ) +extern char **environ; /* POSIX, but some systems are not... */ +#endif + +#if defined(HAVE_STRDUP) +#define str_alloc(s) strdup(s) +#else +#define str_alloc(s) strcpy(malloc(strlen(s) + 1, s)) +#endif + +static void set_value(const char *name, const char *value) +{ +#if defined(HAVE_SETENV) + setenv(name, value, 1); +#elif defined(HAVE_PUTENV) + char buffer[1024]; + sprintf(buffer, "%s=%s", name, value); + putenv(str_alloc(buffer)); +#else +#error neither putenv/setenv found +#endif +} +int main(void) +{ + int pass; + size_t numenv, limit, j; + char **mynames; + char **myvalues; + char **mypointer; + char *equals; + for (numenv = 0; environ[numenv]; ++numenv) ; + limit = numenv + 10; + mynames = (char **) calloc(limit + 1, sizeof(char *)); + myvalues = (char **) calloc(limit + 1, sizeof(char *)); + mypointer = (char **) calloc(limit + 1, sizeof(char *)); +#if defined(HAVE_ENVIRON) + for (j = 0; environ[j]; ++j) { + mynames[j] = str_alloc(environ[j]); + equals = strchr(mynames[j], '='); + if (equals != 0) { + *equals++ = '\0'; + myvalues[j] = str_alloc(equals); + } else { + myvalues[j] = str_alloc(""); + } + } +#endif + for (j = numenv; j < limit; ++j) { + char name[80]; + char value[80]; + size_t found; + size_t k = 0; + do { + size_t jk; + found = 0; + sprintf(name, "TERM%lu", (unsigned long) k); + for (jk = 0; jk < j; ++jk) { + if (!strcmp(name, mynames[jk])) { + found = 1; + ++k; + break; + } + } + } while (found); + sprintf(value, "%lu:%p", (unsigned long) k, &mynames[j]); + set_value(name, value); + mynames[j] = str_alloc(name); + myvalues[j] = str_alloc(value); + } + for (pass = 0; pass < 3; ++pass) { + for (j = 0; j < limit; ++j) { + char *value = getenv(mynames[j]); + if (pass) { + if (value == 0) { + fprintf(stderr, "getenv returned null for %s\n", mynames[j]); + ${cf_cv_main_return:-return}(1); + } else if (value != mypointer[j]) { + fprintf(stderr, "getenv returned different pointer for %s\n", mynames[j]); + ${cf_cv_main_return:-return}(1); + } else if (strcmp(value, myvalues[j])) { + fprintf(stderr, "getenv returned different value for %s\n", mynames[j]); + ${cf_cv_main_return:-return}(1); + } + } else { + size_t k; + mypointer[j] = value; + for (k = 0; k < j; ++k) { + if (mypointer[j] == mypointer[k]) { + fprintf(stderr, "getenv returned same pointer for %s and %s\n", mynames[j], mynames[k]); + ${cf_cv_main_return:-return}(1); + } + } + } + } + } + ${cf_cv_main_return:-return}(0); +} +], +[cf_cv_consistent_getenv=yes], +[cf_cv_consistent_getenv=no], +[cf_cv_consistent_getenv=unknown]) +]) + +if test "x$cf_cv_consistent_getenv" = xno +then + AC_DEFINE(HAVE_CONSISTENT_GETENV,1,[Define to 1 if getenv repeatably returns the same value for a given name]) +fi ])dnl dnl --------------------------------------------------------------------------- dnl CF_CHECK_GPM_WGETCH version: 3 updated: 2017/01/21 11:06:25 @@ -1253,6 +1408,60 @@ cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments" fi ]) dnl --------------------------------------------------------------------------- +dnl CF_CONST_X_STRING version: 1 updated: 2019/04/08 17:50:29 +dnl ----------------- +dnl The X11R4-X11R6 Xt specification uses an ambiguous String type for most +dnl character-strings. +dnl +dnl It is ambiguous because the specification accommodated the pre-ANSI +dnl compilers bundled by more than one vendor in lieu of providing a standard C +dnl compiler other than by costly add-ons. Because of this, the specification +dnl did not take into account the use of const for telling the compiler that +dnl string literals would be in readonly memory. +dnl +dnl As a workaround, one could (starting with X11R5) define XTSTRINGDEFINES, to +dnl let the compiler decide how to represent Xt's strings which were #define'd. +dnl That does not solve the problem of using the block of Xt's strings which +dnl are compiled into the library (and is less efficient than one might want). +dnl +dnl Xt specification 7 introduces the _CONST_X_STRING symbol which is used both +dnl when compiling the library and compiling using the library, to tell the +dnl compiler that String is const. +AC_DEFUN([CF_CONST_X_STRING], +[ +AC_TRY_COMPILE( +[ +#include +#include +], +[String foo = malloc(1)],[ + +AC_CACHE_CHECK(for X11/Xt const-feature,cf_cv_const_x_string,[ + AC_TRY_COMPILE( + [ +#define _CONST_X_STRING /* X11R7.8 (perhaps) */ +#undef XTSTRINGDEFINES /* X11R5 and later */ +#include +#include + ],[String foo = malloc(1); *foo = 0],[ + cf_cv_const_x_string=no + ],[ + cf_cv_const_x_string=yes + ]) +]) + +case $cf_cv_const_x_string in +(no) + CF_APPEND_TEXT(CPPFLAGS,-DXTSTRINGDEFINES) + ;; +(*) + CF_APPEND_TEXT(CPPFLAGS,-D_CONST_X_STRING) + ;; +esac + +]) +])dnl +dnl --------------------------------------------------------------------------- dnl CF_CPP_PARAM_INIT version: 7 updated: 2017/01/21 11:06:25 dnl ----------------- dnl Check if the C++ compiler accepts duplicate parameter initialization. This @@ -1904,6 +2113,49 @@ AC_DEFUN([CF_FIXUP_ADAFLAGS],[ AC_MSG_RESULT($ADAFLAGS) ])dnl dnl --------------------------------------------------------------------------- +dnl CF_FOPEN_BIN_R version: 1 updated: 2019/03/30 17:52:21 +dnl -------------- +dnl Check if fopen works when the "b" (binary) flag is added to the mode +dnl parameter. POSIX ignores the "b", which c89 specified. Some very old +dnl systems do not accept it. +AC_DEFUN([CF_FOPEN_BIN_R],[ +AC_CACHE_CHECK(if fopen accepts explicit binary mode,cf_cv_fopen_bin_r,[ + AC_TRY_RUN([ +#include +int main(void) { + FILE *fp = fopen("conftest.tmp", "wb"); + int rc = 0; + if (fp != 0) { + int p, q; + for (p = 0; p < 256; ++p) { + fputc(p, fp); + } + fclose(fp); + fp = fopen("conftest.tmp", "rb"); + if (fp != 0) { + for (p = 0; p < 256; ++p) { + q = fgetc(fp); + if (q != p) { + rc = 1; + break; + } + } + } else { + rc = 1; + } + } else { + rc = 1; + } + ${cf_cv_main_return:-return} (rc); +} +], + [cf_cv_fopen_bin_r=yes], + [cf_cv_fopen_bin_r=no], + [cf_cv_fopen_bin_r=unknown]) +]) +test "x$cf_cv_fopen_bin_r" != xno && AC_DEFINE(USE_FOPEN_BIN_R) +])dnl +dnl --------------------------------------------------------------------------- dnl CF_FORGET_TOOL version: 1 updated: 2013/04/06 18:03:09 dnl -------------- dnl Forget that we saw the given tool. @@ -2300,7 +2552,7 @@ if test "$GCC" = yes ; then fi ])dnl dnl --------------------------------------------------------------------------- -dnl CF_GCC_WARNINGS version: 33 updated: 2018/06/20 20:23:13 +dnl CF_GCC_WARNINGS version: 35 updated: 2019/06/16 09:45:01 dnl --------------- dnl Check if the compiler supports useful warning options. There's a few that dnl we don't use, simply because they're too noisy: @@ -2324,12 +2576,11 @@ AC_DEFUN([CF_GCC_WARNINGS], AC_REQUIRE([CF_GCC_VERSION]) CF_INTEL_COMPILER(GCC,INTEL_COMPILER,CFLAGS) CF_CLANG_COMPILER(GCC,CLANG_COMPILER,CFLAGS) - +if test "x$have_x" = xyes; then CF_CONST_X_STRING fi cat > conftest.$ac_ext <],[ +#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \ + && defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \ + && defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \ + && defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0) +#error conflicting symbols found +#endif +],[cf_cv_posix_visible=no],[cf_cv_posix_visible=yes]) +]) ])dnl dnl --------------------------------------------------------------------------- dnl CF_PREDEFINE version: 2 updated: 2010/05/26 16:44:57 @@ -6489,12 +6813,12 @@ define([CF_SHARED_SONAME], fi ]) dnl --------------------------------------------------------------------------- -dnl CF_SIGWINCH version: 1 updated: 2006/04/02 16:41:09 +dnl CF_SIGWINCH version: 2 updated: 2019/03/23 19:54:44 dnl ----------- dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all dnl programs need this test). dnl -dnl This is really a MacOS X 10.4.3 workaround. Defining _POSIX_C_SOURCE +dnl This is really a Mac OS X 10.4.3 workaround. Defining _POSIX_C_SOURCE dnl forces SIGWINCH to be undefined (breaks xterm, ncurses). Oddly, the struct dnl winsize declaration is left alone - we may revisit this if Apple choose to dnl break that part of the interface as well. @@ -8038,6 +8362,32 @@ fi AC_SUBST(PKG_CONFIG_LIBDIR) ])dnl dnl --------------------------------------------------------------------------- +dnl CF_WITH_PATH_PROG version: 1 updated: 2019/06/30 19:44:43 +dnl ----------------- +dnl Check for a given program, like CF_PATH_PROG, but allow override using a +dnl "--with-xxx" option. +dnl +dnl Parameters: +dnl $1 = environment variable to set/update +dnl $2 = program name +dnl $3 = help-text +dnl $4 = $PATH +AC_DEFUN([CF_WITH_PATH_PROG],[ +AC_ARG_WITH($2-path, + [ --with-$2-path=XXX specify path of $2 ifelse($3,,,$3)], + [AC_MSG_CHECKING(for $2 program ifelse($3,,,$3)) + $1=$withval + AC_MSG_RESULT([$]$1) + CF_PATH_SYNTAX($1) + ], + [CF_PATH_PROG($1,$2,,ifelse($4,,,$4)) + if test -z "[$]$1" + then + AC_MSG_WARN(no $2 program found ifelse($3,,,$3)) + fi + ]) +]) +dnl --------------------------------------------------------------------------- dnl CF_WITH_PTHREAD version: 7 updated: 2015/04/18 08:56:57 dnl --------------- dnl Check for POSIX thread library. @@ -8386,7 +8736,7 @@ fi AC_SUBST(no_x11_rgb) ])dnl dnl --------------------------------------------------------------------------- -dnl CF_XOPEN_SOURCE version: 54 updated: 2018/11/07 07:43:44 +dnl CF_XOPEN_SOURCE version: 55 updated: 2018/12/31 20:46:17 dnl --------------- dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions, dnl or adapt to the vendor's definitions to get equivalent functionality, @@ -8397,6 +8747,9 @@ dnl $1 is the nominal value for _XOPEN_SOURCE dnl $2 is the nominal value for _POSIX_C_SOURCE AC_DEFUN([CF_XOPEN_SOURCE],[ AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([CF_POSIX_VISIBLE]) + +if test "$cf_cv_posix_visible" = no; then cf_XOPEN_SOURCE=ifelse([$1],,500,[$1]) cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2]) @@ -8511,4 +8864,5 @@ make an error CF_TRY_XOPEN_SOURCE fi fi +fi # cf_cv_posix_visible ])