X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=aclocal.m4;h=6782f0fb183fdad6083f570690e1c6cab1e07af2;hp=dbc6baa2d118d388b6015accfee8c7794253ac30;hb=c633e5103a29a38532cf1925257b91cea33fd090;hpb=661078ddbde3ce0f3b06e95642fbb9b5fef7dca1 diff --git a/aclocal.m4 b/aclocal.m4 index dbc6baa2..6782f0fb 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,5 +1,5 @@ dnl*************************************************************************** -dnl Copyright (c) 1998 Free Software Foundation, Inc. * +dnl Copyright (c) 1998-2000 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 * @@ -26,11 +26,13 @@ dnl sale, use or other dealings in this Software without prior written * dnl authorization. * dnl*************************************************************************** dnl -dnl Author: Thomas E. Dickey 1996,1997,1998 +dnl Author: Thomas E. Dickey 1996,1997,1998,1999,2000 dnl -dnl $Id: aclocal.m4,v 1.121 1998/02/11 12:13:40 tom Exp $ +dnl $Id: aclocal.m4,v 1.238 2000/10/20 22:57:49 tom Exp $ dnl Macros used in NCURSES auto-configuration script. dnl +dnl See http://dickey.his.com/autoconf/ for additional information. +dnl dnl --------------------------------------------------------------------------- dnl --------------------------------------------------------------------------- dnl Construct the list of include-options for the C programs in the Ada95 @@ -41,7 +43,7 @@ ACPPFLAGS="$ACPPFLAGS -I. -I../../include" if test "$srcdir" != "."; then ACPPFLAGS="$ACPPFLAGS -I\$(srcdir)/../../include" fi -if test -z "$GCC"; then +if test "$GCC" != yes; then ACPPFLAGS="$ACPPFLAGS -I\$(includedir)" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then @@ -55,6 +57,72 @@ fi AC_SUBST(ACPPFLAGS) ])dnl dnl --------------------------------------------------------------------------- +dnl This is adapted from the macros 'fp_PROG_CC_STDC' and 'fp_C_PROTOTYPES' +dnl in the sharutils 4.2 distribution. +AC_DEFUN([CF_ANSI_CC_CHECK], +[ +AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) +AC_CACHE_VAL(cf_cv_ansi_cc,[ +cf_cv_ansi_cc=no +cf_save_CFLAGS="$CFLAGS" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc +# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes) +for cf_arg in "-DCC_HAS_PROTOS" \ + "" \ + -qlanglvl=ansi \ + -std1 \ + -Ae \ + "-Aa -D_HPUX_SOURCE" \ + -Xc +do + CFLAGS="$cf_save_CFLAGS $cf_arg" + AC_TRY_COMPILE( +[ +#ifndef CC_HAS_PROTOS +#if !defined(__STDC__) || (__STDC__ != 1) +choke me +#endif +#endif +],[ + int test (int i, double x); + struct s1 {int (*f) (int a);}; + struct s2 {int (*f) (double a);};], + [cf_cv_ansi_cc="$cf_arg"; break]) +done +CFLAGS="$cf_save_CFLAGS" +]) +AC_MSG_RESULT($cf_cv_ansi_cc) + +if test "$cf_cv_ansi_cc" != "no"; then +if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then + CFLAGS="$CFLAGS $cf_cv_ansi_cc" +else + AC_DEFINE(CC_HAS_PROTOS) +fi +fi +])dnl +dnl --------------------------------------------------------------------------- +dnl For programs that must use an ANSI compiler, obtain compiler options that +dnl will make it recognize prototypes. We'll do preprocessor checks in other +dnl macros, since tools such as unproto can fake prototypes, but only part of +dnl the preprocessor. +AC_DEFUN([CF_ANSI_CC_REQD], +[AC_REQUIRE([CF_ANSI_CC_CHECK]) +if test "$cf_cv_ansi_cc" = "no"; then + AC_ERROR( +[Your compiler does not appear to recognize prototypes. +You have the following choices: + a. adjust your compiler options + b. get an up-to-date compiler + c. use a wrapper such as unproto]) +fi +])dnl +dnl --------------------------------------------------------------------------- dnl Test if 'bool' is a builtin type in the configured C++ compiler. Some dnl older compilers (e.g., gcc 2.5.8) don't support 'bool' directly; gcc dnl 2.6.3 does, in anticipation of the ANSI C++ standard. @@ -63,13 +131,16 @@ dnl Treat the configuration-variable specially here, since we're directly dnl substituting its value (i.e., 1/0). AC_DEFUN([CF_BOOL_DECL], [ -AC_MSG_CHECKING([for builtin c++ bool type]) -AC_CACHE_VAL(cf_cv_builtin_bool,[ - AC_TRY_COMPILE([],[bool x = false], - [cf_cv_builtin_bool=1], - [cf_cv_builtin_bool=0]) +AC_MSG_CHECKING([for builtin bool type]) +AC_CACHE_VAL(ifelse($1,,cf_cv_builtin_bool,[$1]),[ + AC_TRY_COMPILE([ +#include +#include +],[bool x = false], + [ifelse($1,,cf_cv_builtin_bool,[$1])=1], + [ifelse($1,,cf_cv_builtin_bool,[$1])=0]) ]) -if test $cf_cv_builtin_bool = 1 +if test "$ifelse($1,,cf_cv_builtin_bool,[$1])" = 1 then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi @@ -79,13 +150,17 @@ dnl Test for the size of 'bool' in the configured C++ compiler (e.g., a type). dnl Don't bother looking for bool.h, since it's been deprecated. AC_DEFUN([CF_BOOL_SIZE], [ -AC_MSG_CHECKING([for size of c++ bool]) +AC_MSG_CHECKING([for size of bool]) AC_CACHE_VAL(cf_cv_type_of_bool,[ rm -f cf_test.out AC_TRY_RUN([ #include #include -#if HAVE_BUILTIN_H +#ifdef HAVE_GXX_BUILTIN_H +#include +#elif HAVE_GPP_BUILTIN_H +#include +#elif HAVE_BUILTIN_H #include #endif main() @@ -93,7 +168,7 @@ main() FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { bool x = true; - if ((-x) >= 0) + if ((bool)(-x) >= 0) fputs("unsigned ", fp); if (sizeof(x) == sizeof(int)) fputs("int", fp); else if (sizeof(x) == sizeof(char)) fputs("char", fp); @@ -168,47 +243,6 @@ AC_MSG_RESULT($includedir) fi ])dnl dnl --------------------------------------------------------------------------- -dnl Check for data that is usually declared in or -dnl $1 = the name to check -AC_DEFUN([CF_CHECK_ERRNO], -[ -AC_MSG_CHECKING([declaration of $1]) -AC_CACHE_VAL(cf_cv_dcl_$1,[ - AC_TRY_COMPILE([ -#include -#include -#include ], - [long x = (long) $1], - [eval 'cf_cv_dcl_'$1'=yes'], - [eval 'cf_cv_dcl_'$1'=no]')]) -eval 'cf_result=$cf_cv_dcl_'$1 -AC_MSG_RESULT($cf_result) - -# It's possible (for near-UNIX clones) that the data doesn't exist -AC_CACHE_VAL(cf_cv_have_$1,[ -if test $cf_result = no ; then - eval 'cf_result=DECL_'$1 - CF_UPPER(cf_result,$cf_result) - AC_DEFINE_UNQUOTED($cf_result) - AC_MSG_CHECKING([existence of $1]) - AC_TRY_LINK([ -#undef $1 -extern long $1; -], - [$1 = 2], - [eval 'cf_cv_have_'$1'=yes'], - [eval 'cf_cv_have_'$1'=no']) - eval 'cf_result=$cf_cv_have_'$1 - AC_MSG_RESULT($cf_result) -else - eval 'cf_cv_have_'$1'=yes' -fi -]) -eval 'cf_result=HAVE_'$1 -CF_UPPER(cf_result,$cf_result) -eval 'test $cf_cv_have_'$1' = yes && AC_DEFINE_UNQUOTED($cf_result)' -])dnl -dnl --------------------------------------------------------------------------- dnl Check if the terminal-capability database functions are available. If not, dnl ncurses has a much-reduced version. AC_DEFUN([CF_CGETENT],[ @@ -227,18 +261,20 @@ AC_TRY_LINK([ [cf_cv_cgetent=no]) ]) AC_MSG_RESULT($cf_cv_cgetent) -test $cf_cv_cgetent = yes && AC_DEFINE(HAVE_BSD_CGETENT) +test "$cf_cv_cgetent" = yes && AC_DEFINE(HAVE_BSD_CGETENT) ])dnl dnl --------------------------------------------------------------------------- dnl Check if we're accidentally using a cache from a different machine. dnl Derive the system name, as a check for reusing the autoconf cache. dnl dnl If we've packaged config.guess and config.sub, run that (since it does a -dnl better job than uname). +dnl better job than uname). Normally we'll use AC_CANONICAL_HOST, but allow +dnl an extra parameter that we may override, e.g., for AC_CANONICAL_SYSTEM +dnl which is useful in cross-compiles. AC_DEFUN([CF_CHECK_CACHE], [ if test -f $srcdir/config.guess ; then - AC_CANONICAL_HOST + ifelse([$1],,[AC_CANONICAL_HOST],[$1]) system_name="$host_os" else system_name="`(uname -s -r) 2>/dev/null`" @@ -258,26 +294,99 @@ if test ".$system_name" != ".$cf_cv_system_name" ; then fi ])dnl dnl --------------------------------------------------------------------------- -dnl If we're trying to use g++, test if libg++ is installed (a rather common -dnl problem :-). If we have the compiler but no library, we'll be able to -dnl configure, but won't be able to build the c++ demo program. -AC_DEFUN([CF_CXX_LIBRARY], +dnl Check for data that is usually declared in or , e.g., +dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it +dnl ourselves. +dnl +dnl (I would use AC_CACHE_CHECK here, but it will not work when called in a +dnl loop from CF_SYS_ERRLIST). +dnl +dnl $1 = the name to check +AC_DEFUN([CF_CHECK_ERRNO], [ -cf_cxx_library=unknown -if test $ac_cv_prog_gxx = yes; then - AC_MSG_CHECKING([for libg++]) - cf_save="$LIBS" - LIBS="$LIBS -lg++ -lm" - AC_TRY_LINK([ -#include - ], - [float foo=abs(1.0)], - [cf_cxx_library=yes - CXXLIBS="$CXXLIBS -lg++ -lm"], - [cf_cxx_library=no]) - LIBS="$cf_save" - AC_MSG_RESULT($cf_cxx_library) +AC_MSG_CHECKING(if external $1 is declared) +AC_CACHE_VAL(cf_cv_dcl_$1,[ + AC_TRY_COMPILE([ +#ifdef HAVE_STDLIB_H +#include +#endif +#include +#include +#include ], + [long x = (long) $1], + [eval 'cf_cv_dcl_'$1'=yes'], + [eval 'cf_cv_dcl_'$1'=no']) +]) + +eval 'cf_result=$cf_cv_dcl_'$1 +AC_MSG_RESULT($cf_result) + +if test "$cf_result" = no ; then + eval 'cf_result=DECL_'$1 + CF_UPPER(cf_result,$cf_result) + AC_DEFINE_UNQUOTED($cf_result) fi + +# It's possible (for near-UNIX clones) that the data doesn't exist +CF_CHECK_EXTERN_DATA($1,int) +])dnl +dnl --------------------------------------------------------------------------- +dnl Check for existence of external data in the current set of libraries. If +dnl we can modify it, it's real enough. +dnl $1 = the name to check +dnl $2 = its type +AC_DEFUN([CF_CHECK_EXTERN_DATA], +[ +AC_MSG_CHECKING(if external $1 exists) +AC_CACHE_VAL(cf_cv_have_$1,[ + AC_TRY_LINK([ +#undef $1 +extern $2 $1; +], + [$1 = 2], + [eval 'cf_cv_have_'$1'=yes'], + [eval 'cf_cv_have_'$1'=no'])]) + +eval 'cf_result=$cf_cv_have_'$1 +AC_MSG_RESULT($cf_result) + +if test "$cf_result" = yes ; then + eval 'cf_result=HAVE_'$1 + CF_UPPER(cf_result,$cf_result) + AC_DEFINE_UNQUOTED($cf_result) +fi + +])dnl +dnl --------------------------------------------------------------------------- +dnl Check if the C++ compiler accepts duplicate parameter initialization. This +dnl is a late feature for the standard and is not in some recent compilers +dnl (1999/9/11). +AC_DEFUN([CF_CPP_PARAM_INIT], +[ +if test "$CXX" = yes ; then +AC_CACHE_CHECK(if $CXX accepts parameter initialization,cf_cv_cpp_param_init,[ + AC_LANG_CPLUSPLUS + AC_TRY_RUN([ +class TEST { +private: + int value; +public: + TEST(int x = 1); + ~TEST(); +}; + +TEST::TEST(int x = 1) // some compilers do not like second initializer +{ + value = x; +} +void main() { } +], + [cf_cv_cpp_param_init=yes], + [cf_cv_cpp_param_init=no], + [cf_cv_cpp_param_init=unknown]) +]) +fi +test "$cf_cv_cpp_param_init" = yes && AC_DEFINE(CPP_HAS_PARAM_INIT) ])dnl dnl --------------------------------------------------------------------------- AC_DEFUN([CF_DIRS_TO_MAKE], @@ -301,12 +410,123 @@ AC_DEFUN([CF_ERRNO], CF_CHECK_ERRNO(errno) ])dnl dnl --------------------------------------------------------------------------- +dnl Test for conflicting definitions of exception in gcc 2.8.0, etc., between +dnl math.h and builtin.h, only for ncurses +AC_DEFUN([CF_ETIP_DEFINES], +[ +AC_MSG_CHECKING(for special defines needed for etip.h) +cf_save_CXXFLAGS="$CXXFLAGS" +cf_result="none" +for cf_math in "" MATH_H +do +for cf_excp in "" MATH_EXCEPTION +do + CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu" + test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}" + test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}" +AC_TRY_COMPILE([ +#include +],[],[ + test -n "$cf_math" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_math}) + test -n "$cf_excp" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_excp}) + cf_result="$cf_math $cf_excp" + break +],[]) +done +done +AC_MSG_RESULT($cf_result) +CXXFLAGS="$cf_save_CXXFLAGS" +]) +dnl --------------------------------------------------------------------------- +dnl Check for memmove, or a bcopy that can handle overlapping copy. If neither +dnl is found, add our own version of memmove to the list of objects. +AC_DEFUN([CF_FUNC_MEMMOVE], +[ +AC_CHECK_FUNC(memmove,,[ +AC_CHECK_FUNC(bcopy,[ + AC_CACHE_CHECK(if bcopy does overlapping moves,cf_cv_good_bcopy,[ + AC_TRY_RUN([ +int main() { + static char data[] = "abcdefghijklmnopqrstuwwxyz"; + char temp[40]; + bcopy(data, temp, sizeof(data)); + bcopy(temp+10, temp, 15); + bcopy(temp+5, temp+15, 10); + exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz")); +} + ], + [cf_cv_good_bcopy=yes], + [cf_cv_good_bcopy=no], + [cf_cv_good_bcopy=unknown]) + ]) + ],[cf_cv_good_bcopy=no]) + if test "$cf_cv_good_bcopy" = yes ; then + AC_DEFINE(USE_OK_BCOPY) + else + AC_DEFINE(USE_MY_MEMMOVE) + fi +])])dnl +dnl --------------------------------------------------------------------------- +dnl See if the poll function really works. Some platforms have poll(), but +dnl it does not work for terminals or files. +AC_DEFUN([CF_FUNC_POLL],[ +AC_CACHE_CHECK(if poll really works,cf_cv_working_poll,[ +AC_TRY_RUN([ +#include +#ifdef HAVE_POLL_H +#include +#else +#include +#endif +int main() { + struct pollfd myfds; + int ret; + + myfds.fd = 0; + myfds.events = POLLIN; + + ret = poll(&myfds, 1, 100); + exit(ret != 0); +}], + [cf_cv_working_poll=yes], + [cf_cv_working_poll=no], + [cf_cv_working_poll=unknown])]) +test "$cf_cv_working_poll" = "yes" && AC_DEFINE(HAVE_WORKING_POLL) +])dnl +dnl --------------------------------------------------------------------------- +dnl Some old/broken variations define tcgetattr() only as a macro in +dnl termio(s).h +AC_DEFUN([CF_FUNC_TERMIOS],[ +AC_REQUIRE([CF_STRUCT_TERMIOS]) +AC_CACHE_CHECK(for tcgetattr, cf_cv_have_tcgetattr,[ +AC_TRY_LINK([ +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_TERMIOS_H +#include +#define TTY struct termios +#else +#ifdef HAVE_TERMIO_H +#include +#define TTY struct termio +#endif +#endif +],[ +TTY foo; +tcgetattr(1, &foo);], +[cf_cv_have_tcgetattr=yes], +[cf_cv_have_tcgetattr=no])]) +test "$cf_cv_have_tcgetattr" = yes && AC_DEFINE(HAVE_TCGETATTR) +])dnl +dnl --------------------------------------------------------------------------- dnl Test for availability of useful gcc __attribute__ directives to quiet dnl compiler warnings. Though useful, not all are supported -- and contrary dnl to documentation, unrecognized directives cause older compilers to barf. AC_DEFUN([CF_GCC_ATTRIBUTES], [ -if test -n "$GCC" +if test "$GCC" = yes then cat > conftest.i < conftest.i < conftest.$ac_ext <&AC_FD_CC + echo "checking for $CC $cf_directive" 1>&AC_FD_CC case $cf_attribute in scanf|printf) cat >conftest.h < conftest.$ac_ext <>conftest.ads <>conftest.adb <&AC_FD_CC 2>&1 ) ; then + if ( ./conftest 1>&AC_FD_CC 2>&1 ) ; then +ifelse($3,, :,[ $3]) +ifelse($4,,,[ else + $4]) + fi +ifelse($4,,,[else + $4]) +fi +rm -f conftest* +])dnl +dnl --------------------------------------------------------------------------- dnl Verify Version of GNAT. AC_DEFUN([CF_GNAT_VERSION], [ @@ -434,23 +677,67 @@ changequote(<<, >>)dnl cf_cv_gnat_version=`$cf_ada_make -v 2>&1 | grep '[0-9].[0-9][0-9]*' |\ sed -e 's/[^0-9 \.]//g' | $AWK '{print $<<1>>;}'` case $cf_cv_gnat_version in - 3.[1-9]*|[4-9].*) - ac_cv_prog_gnat_correct=yes + 3.1[1-9]*|3.[2-9]*|[4-9].*) + cf_cv_prog_gnat_correct=yes ;; - *) echo Unsupported GNAT version $cf_cv_gnat_version. Required is 3.10 or better. Disabling Ada95 binding. - ac_cv_prog_gnat_correct=no + *) echo Unsupported GNAT version $cf_cv_gnat_version. Required is 3.11 or better. Disabling Ada95 binding. + cf_cv_prog_gnat_correct=no ;; esac case $cf_cv_gnat_version in 3.1*|[4-9].*) cf_compile_generics=generics + cf_generic_objects="\$(GENOBJS)" ;; *) cf_compile_generics= + cf_generic_objects= ;; esac changequote([, ])dnl ]) dnl --------------------------------------------------------------------------- +dnl If we're trying to use g++, test if libg++ is installed (a rather common +dnl problem :-). If we have the compiler but no library, we'll be able to +dnl configure, but won't be able to build the c++ demo program. +AC_DEFUN([CF_GPP_LIBRARY], +[ +cf_cxx_library=unknown +case $cf_cv_system_name in #(vi +os2*) #(vi + cf_gpp_libname=gpp + ;; +*) + cf_gpp_libname=g++ + ;; +esac +if test "$ac_cv_prog_gxx" = yes; then + AC_MSG_CHECKING([for lib$cf_gpp_libname]) + cf_save="$LIBS" + LIBS="$LIBS -l$cf_gpp_libname" + AC_TRY_LINK([ +#include <$cf_gpp_libname/builtin.h> + ], + [two_arg_error_handler_t foo2 = lib_error_handler], + [cf_cxx_library=yes + CXXLIBS="$CXXLIBS -l$cf_gpp_libname" + if test "$cf_gpp_libname" = cpp ; then + AC_DEFINE(HAVE_GPP_BUILTIN_H) + else + AC_DEFINE(HAVE_GXX_BUILTIN_H) + fi], + [AC_TRY_LINK([ +#include + ], + [two_arg_error_handler_t foo2 = lib_error_handler], + [cf_cxx_library=yes + CXXLIBS="$CXXLIBS -l$cf_gpp_libname" + AC_DEFINE(HAVE_BUILTIN_H)], + [cf_cxx_library=no])]) + LIBS="$cf_save" + AC_MSG_RESULT($cf_cxx_library) +fi +])dnl +dnl --------------------------------------------------------------------------- dnl Insert text into the help-message, for readability, from AC_ARG_WITH. AC_DEFUN([CF_HELP_MESSAGE], [AC_DIVERT_HELP([$1])dnl @@ -466,7 +753,7 @@ CPPFLAGS="$CPPFLAGS -I. -I../include" if test "$srcdir" != "."; then CPPFLAGS="$CPPFLAGS -I\$(srcdir)/../include" fi -if test -z "$GCC"; then +if test "$GCC" != yes; then CPPFLAGS="$CPPFLAGS -I\$(includedir)" elif test "$includedir" != "/usr/include"; then if test "$includedir" = '${prefix}/include' ; then @@ -490,7 +777,19 @@ AC_CACHE_VAL(cf_cv_have_isascii,[ [cf_cv_have_isascii=no]) ])dnl AC_MSG_RESULT($cf_cv_have_isascii) -test $cf_cv_have_isascii = yes && AC_DEFINE(HAVE_ISASCII) +test "$cf_cv_have_isascii" = yes && AC_DEFINE(HAVE_ISASCII) +])dnl +dnl --------------------------------------------------------------------------- +dnl Compute the library-prefix for the given host system +dnl $1 = variable to set +AC_DEFUN([CF_LIB_PREFIX], +[ + case $cf_cv_system_name in + os2) LIB_PREFIX='' ;; + *) LIB_PREFIX='lib' ;; + esac +ifelse($1,,,[$1=$LIB_PREFIX]) + AC_SUBST(LIB_PREFIX) ])dnl dnl --------------------------------------------------------------------------- dnl Append definitions and rules for the given models to the subdirectory @@ -516,16 +815,24 @@ do for cf_item in $CF_LIST_MODELS do CF_LIB_SUFFIX($cf_item,cf_suffix) + if test $cf_item = shared ; then + if test "$cf_cv_do_symlinks" = yes ; then + case "$cf_cv_shlib_version" in #(vi + rel) cf_suffix="$cf_suffix"'.$(REL_VERSION)' ;; #(vi + abi) cf_suffix="$cf_suffix"'.$(ABI_VERSION)' ;; + esac + fi + fi cf_libs_to_make="$cf_libs_to_make ../lib/${cf_prefix}${cf_dir}${cf_suffix}" done if test $cf_dir = ncurses ; then - case "$LIB_SUBSETS" in + case "$LIB_SUBSETS" in #(vi termlib+*) #(vi ;; *) #(vi cf_item=`echo $cf_libs_to_make |sed -e s/$LIB_NAME/$TINFO_NAME/g` - cf_libs_to_make="$cf_libs_to_make $cf_item" + cf_libs_to_make="$cf_item $cf_libs_to_make" ;; esac fi @@ -564,11 +871,13 @@ do do $AWK -f $srcdir/mk-1st.awk \ name=$cf_dir \ + traces=$LIB_TRACING \ MODEL=$CF_ITEM \ model=$cf_subdir \ prefix=$cf_prefix \ suffix=$cf_suffix \ subset=$cf_subset \ + ShlibVer=$cf_cv_shlib_version \ DoLinks=$cf_cv_do_symlinks \ rmSoLocs=$cf_cv_rm_so_locs \ ldconfig="$LDCONFIG" \ @@ -579,6 +888,7 @@ do test $cf_dir = ncurses && WITH_OVERWRITE=no $AWK -f $srcdir/mk-2nd.awk \ name=$cf_dir \ + traces=$LIB_TRACING \ MODEL=$CF_ITEM \ model=$cf_subdir \ subset=$cf_subset \ @@ -597,6 +907,7 @@ do if test -f $cf_dir/Makefile ; then case "$cf_dir" in Ada95) #(vi + echo 'libs \' >> Makefile echo 'install.libs \' >> Makefile echo 'uninstall.libs ::' >> Makefile echo ' cd '$cf_dir' && $(MAKE) $(CF_MFLAGS) [$]@' >> Makefile @@ -616,6 +927,7 @@ if test "$cf_dir" != "c++" ; then echo 'lint \' >> Makefile fi cat >> Makefile <> Makefile <> Makefile <> Makefile <>headers.sh </<\$END\/\$NAME>/" >> ../headers.sed - done - fi - rm -f \$TMP - sed -f ../headers.sed \$SRC > \$TMP - eval \$PRG \$TMP \$DST - rm -f \$TMP + END=\`basename \$DST\` + for i in \`cat \$REF/../*/headers |fgrep -v "#"\` + do + NAME=\`basename \$i\` + echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED + done + ;; +*) + echo "" >> \$TMPSED + ;; +esac +CF_EOF +else + cat >>headers.sh <//" >> \$TMPSED + NAME=ncurses.h + fi + echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED + done ;; *) - eval \$PRG \$SRC \$DST + echo "s///" >> \$TMPSED ;; esac CF_EOF +fi +cat >>headers.sh < \$TMPSRC +NAME=\`basename \$SRC\` +CF_EOF +if test $WITH_CURSES_H != yes; then + cat >>headers.sh <>headers.sh <>$cf_dir/Makefile <>$cf_dir/Makefile for i in `cat $srcdir/$cf_dir/headers |fgrep -v "#"` do - echo " @ (cd \$(INSTALL_PREFIX)\$(includedir) && rm -f `basename $i`) ; ../headers.sh \$(INSTALL_DATA) \$(INSTALL_PREFIX)\$(includedir) \$(srcdir) $i" >>$cf_dir/Makefile - test $i = curses.h && echo " @ (cd \$(INSTALL_PREFIX)\$(includedir) && rm -f ncurses.h && \$(LN_S) curses.h ncurses.h)" >>$cf_dir/Makefile + echo " @ (cd \$(DESTDIR)\$(includedir) && rm -f `basename $i`) ; ../headers.sh \$(INSTALL_DATA) \$(DESTDIR)\$(includedir) \$(srcdir) $i" >>$cf_dir/Makefile + test $i = curses.h && test $WITH_CURSES_H = yes && echo " @ (cd \$(DESTDIR)\$(includedir) && rm -f ncurses.h && \$(LN_S) curses.h ncurses.h)" >>$cf_dir/Makefile done cat >>$cf_dir/Makefile <>$cf_dir/Makefile - test $i = curses.h && echo " -@ (cd \$(INSTALL_PREFIX)\$(includedir) && rm -f ncurses.h)" >>$cf_dir/Makefile + echo " -@ (cd \$(DESTDIR)\$(includedir) && rm -f $i)" >>$cf_dir/Makefile + test $i = curses.h && echo " -@ (cd \$(DESTDIR)\$(includedir) && rm -f ncurses.h)" >>$cf_dir/Makefile done fi done ])dnl dnl --------------------------------------------------------------------------- -dnl Compute the library-prefix for the given host system -dnl $1 = variable to set -AC_DEFUN([CF_LIB_PREFIX], -[ - case $cf_cv_system_name in - os2) $1='' ;; - *) $1='lib' ;; - esac -])dnl -dnl --------------------------------------------------------------------------- -dnl Compute the library-suffix from the given model name +dnl Compute the library file-suffix from the given model name dnl $1 = model name dnl $2 = variable to set +dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_SUFFIX], [ AC_REQUIRE([CF_SUBST_NCURSES_VERSION]) case $1 in + libtool) $2='.la' ;; normal) $2='.a' ;; debug) $2='_g.a' ;; profile) $2='_p.a' ;; shared) case $cf_cv_system_name in - openbsd*|netbsd*|freebsd*) - $2='.so.$(REL_VERSION)' ;; hpux*) $2='.sl' ;; *) $2='.so' ;; esac esac + test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}" ])dnl dnl --------------------------------------------------------------------------- dnl Compute the string to append to -library from the given model name +dnl $1 = model name +dnl $2 = variable to set +dnl The variable $LIB_SUFFIX, if set, prepends the variable to set. AC_DEFUN([CF_LIB_TYPE], [ case $1 in + libtool) $2='' ;; normal) $2='' ;; debug) $2='_g' ;; profile) $2='_p' ;; shared) $2='' ;; esac + test -n "$LIB_SUFFIX" && $2="${LIB_SUFFIX}[$]{$2}" ])dnl dnl --------------------------------------------------------------------------- dnl Some systems have a non-ANSI linker that doesn't pull in modules that have @@ -837,50 +1194,150 @@ EOF LIBS="$cf_saveLIBS" ]) AC_MSG_RESULT($cf_cv_link_dataonly) -test $cf_cv_link_dataonly = no && AC_DEFINE(BROKEN_LINKER) +test "$cf_cv_link_dataonly" = no && AC_DEFINE(BROKEN_LINKER) +])dnl +dnl --------------------------------------------------------------------------- +dnl Most Unix systems have both link and symlink, a few don't have symlink. +dnl A few non-Unix systems implement symlink, but not link. +dnl A few non-systems implement neither (or have nonfunctional versions). +AC_DEFUN([CF_LINK_FUNCS], +[ +AC_CHECK_FUNCS( \ + remove \ + unlink ) + +if test "$ac_cv_prog_cc_cross" = yes ; then + AC_CHECK_FUNCS( \ + link \ + symlink ) +else + AC_CACHE_CHECK(if link/symlink functions work,cf_cv_link_funcs,[ + cf_cv_link_funcs= + for cf_func in link symlink ; do + AC_TRY_RUN([ +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +int main() +{ + int fail = 0; + char *src = "config.log"; + char *dst = "conftest.chk"; + struct stat src_sb; + struct stat dst_sb; + + stat(src, &src_sb); + fail = ($cf_func("config.log", "conftest.chk") < 0) + || (stat(dst, &dst_sb) < 0) + || (dst_sb.st_mtime != src_sb.st_mtime); +#ifdef HAVE_UNLINK + unlink(dst); +#else + remove(dst); +#endif + exit (fail); +} + ],[ + cf_cv_link_funcs="$cf_cv_link_funcs $cf_func" + eval 'ac_cv_func_'$cf_func'=yes'],[ + eval 'ac_cv_func_'$cf_func'=no'],[ + eval 'ac_cv_func_'$cf_func'=error']) + done + test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no + ]) + test "$ac_cv_func_link" = yes && AC_DEFINE(HAVE_LINK) + test "$ac_cv_func_symlink" = yes && AC_DEFINE(HAVE_SYMLINK) +fi ])dnl dnl --------------------------------------------------------------------------- dnl Some 'make' programs support $(MAKEFLAGS), some $(MFLAGS), to pass 'make' dnl options to lower-levels. It's very useful for "make -n" -- if we have it. -dnl (GNU 'make' does both :-) +dnl (GNU 'make' does both, something POSIX 'make', which happens to make the +dnl $(MAKEFLAGS) variable incompatible because it adds the assignments :-) AC_DEFUN([CF_MAKEFLAGS], [ AC_MSG_CHECKING([for makeflags variable]) AC_CACHE_VAL(cf_cv_makeflags,[ cf_cv_makeflags='' - for cf_option in '$(MFLAGS)' '-$(MAKEFLAGS)' + for cf_option in '-$(MAKEFLAGS)' '$(MFLAGS)' do cat >cf_makeflags.tmp </dev/null` - if test "$cf_result" != "." - then - cf_cv_makeflags=$cf_option + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp 2>/dev/null` + case "$cf_result" in + .*k) + cf_result=`${MAKE-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null` + case "$cf_result" in + .*CC=*) cf_cv_makeflags= + ;; + *) cf_cv_makeflags=$cf_option + ;; + esac break - fi + ;; + *) echo no match "$cf_result" + ;; + esac done rm -f cf_makeflags.tmp]) AC_MSG_RESULT($cf_cv_makeflags) AC_SUBST(cf_cv_makeflags) ])dnl dnl --------------------------------------------------------------------------- -dnl Try to determine if the man-pages on the system are compressed, and if -dnl so, what format is used. Use this information to construct a script that -dnl will install man-pages. -AC_DEFUN([CF_MAN_PAGES], -[AC_MSG_CHECKING(format of man-pages) +dnl Generate tags/TAGS targets for makefiles. Do not generate TAGS if we have +dnl a monocase filesystem. +AC_DEFUN([CF_MAKE_TAGS],[ +AC_REQUIRE([CF_MIXEDCASE_FILENAMES]) +AC_CHECK_PROG(MAKE_LOWER_TAGS, ctags, yes, no) + +if test "$cf_cv_mixedcase" = yes ; then + AC_CHECK_PROG(MAKE_UPPER_TAGS, etags, yes, no) +else + MAKE_UPPER_TAGS=no +fi + +if test "$MAKE_UPPER_TAGS" = yes ; then + MAKE_UPPER_TAGS= +else + MAKE_UPPER_TAGS="#" +fi +AC_SUBST(MAKE_UPPER_TAGS) + +if test "$MAKE_LOWER_TAGS" = yes ; then + MAKE_LOWER_TAGS= +else + MAKE_LOWER_TAGS="#" +fi +AC_SUBST(MAKE_LOWER_TAGS) +])dnl +dnl --------------------------------------------------------------------------- +dnl Option to allow user to override automatic configuration of manpage format. +dnl There are several special cases. +AC_DEFUN([CF_MANPAGE_FORMAT], +[ AC_MSG_CHECKING(format of man-pages) + +AC_ARG_WITH(manpage-format, + [ --with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and + optionally formatted, e.g., gzip,formatted], + [cf_manpage_form=$withval], + [cf_manpage_form=unknown]) + +case ".$cf_manpage_form" in +.gzip|.compress|.BSDI|.normal|.formatted) # (vi + ;; +.unknown|.) # (vi if test -z "$MANPATH" ; then MANPATH="/usr/man:/usr/share/man" fi # look for the 'date' man-page (it's most likely to be installed!) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - cf_form=unknown + cf_manpage_form=unknown for cf_dir in $MANPATH; do test -z "$cf_dir" && cf_dir=/usr/man - cf_rename="" - cf_format=no changequote({{,}})dnl for cf_name in $cf_dir/*/date.[01]* $cf_dir/*/date changequote([,])dnl @@ -888,50 +1345,140 @@ changequote([,])dnl cf_test=`echo $cf_name | sed -e 's/*//'` if test "x$cf_test" = "x$cf_name" ; then case "$cf_name" in - *.gz) cf_form=gzip; cf_name=`basename $cf_name .gz`;; - *.Z) cf_form=compress; cf_name=`basename $cf_name .Z`;; - *.0) cf_form=BSDI; cf_format=yes;; - *) cf_form=cat;; + *.gz) cf_manpage_form=gzip;; + *.Z) cf_manpage_form=compress;; + *.0) cf_manpage_form=BSDI,formatted;; + *) cf_manpage_form=normal;; esac break fi done - if test "$cf_form" != "unknown" ; then + if test "$cf_manpage_form" != "unknown" ; then break fi done IFS="$ac_save_ifs" - if test "$prefix" = "NONE" ; then - cf_prefix="$ac_default_prefix" + ;; +.*) # (vi + AC_MSG_WARN(Unexpected manpage-format) + ;; +esac + +AC_MSG_RESULT($cf_manpage_form) +])dnl +dnl --------------------------------------------------------------------------- +dnl The Debian people have their own naming convention for manpages. This +dnl option lets us override the name of the file containing renaming, or +dnl disable it altogether. +AC_DEFUN([CF_MANPAGE_RENAMES], +[ +AC_MSG_CHECKING(for manpage renaming) + +AC_ARG_WITH(manpage-renames, + [ --with-manpage-renames specify manpage-renaming], + [cf_manpage_renames=$withval], + [cf_manpage_renames=yes]) + +case ".$cf_manpage_renames" in #(vi +.no) #(vi + ;; +.|.yes) + # Debian 'man' program? + if test -f /etc/debian_version ; then + cf_manpage_renames=`cd $srcdir && pwd`/man/man_db.renames else - cf_prefix="$prefix" + cf_manpage_renames=no fi + ;; +esac - # Debian 'man' program? - test -f /etc/debian_version && \ - cf_rename=`cd $srcdir && pwd`/man/man_db.renames +if test "$cf_manpage_renames" != no ; then + if test ! -f $cf_manpage_renames ; then + AC_MSG_ERROR(not a filename: $cf_manpage_renames) + fi test ! -d man && mkdir man # Construct a sed-script to perform renaming within man-pages - if test -n "$cf_rename" ; then - $srcdir/man/make_sed.sh $cf_rename >man/edit_man.sed + if test -n "$cf_manpage_renames" ; then + test ! -d man && mkdir man + $srcdir/man/make_sed.sh $cf_manpage_renames >man/edit_man.sed fi - if test $cf_format = yes ; then - cf_subdir='$mandir/cat' +fi + +AC_MSG_RESULT($cf_manpage_renames) +])dnl +dnl --------------------------------------------------------------------------- +dnl Some people expect each tool to make all aliases for manpages in the +dnl man-directory. This accommodates the older, less-capable implementations +dnl of 'man', and is optional. +AC_DEFUN([CF_MANPAGE_SYMLINKS], +[ +AC_MSG_CHECKING(for manpage symlinks) + +AC_ARG_WITH(manpage-symlinks, + [ --with-manpage-symlinks specify manpage-symlinks], + [cf_manpage_symlinks=$withval], + [cf_manpage_symlinks=yes]) + +AC_MSG_RESULT($cf_manpage_symlinks) +])dnl +dnl --------------------------------------------------------------------------- +dnl This option causes manpages to be run through tbl(1) to generate tables +dnl correctly. +AC_DEFUN([CF_MANPAGE_TBL], +[ +AC_MSG_CHECKING(for manpage tbl) + +AC_ARG_WITH(manpage-tbl, + [ --with-manpage-tbl specify manpage processing with tbl], + [cf_manpage_tbl=$withval], + [cf_manpage_tbl=no]) + +AC_MSG_RESULT($cf_manpage_tbl) +])dnl +dnl --------------------------------------------------------------------------- +dnl Try to determine if the man-pages on the system are compressed, and if +dnl so, what format is used. Use this information to construct a script that +dnl will install man-pages. +AC_DEFUN([CF_MAN_PAGES], +[ +CF_HELP_MESSAGE(Options to Specify How Manpages are Installed:) +CF_MANPAGE_FORMAT +CF_MANPAGE_RENAMES +CF_MANPAGE_SYMLINKS +CF_MANPAGE_TBL + + if test "$prefix" = "NONE" ; then + cf_prefix="$ac_default_prefix" else - cf_subdir='$mandir/man' + cf_prefix="$prefix" fi + case "$cf_manpage_form" in # (vi + *formatted*) # (vi + cf_subdir='$mandir/cat' + cf_format=yes + ;; + *) + cf_subdir='$mandir/man' + cf_format=no + ;; + esac + +test ! -d man && mkdir man cat >man/edit_man.sh <>man/edit_man.sh <\$TMP + aliases=\`sed -f \$srcdir/manlinks.sed \$inalias | sort -u\` +CF_EOF +fi +if test "$cf_manpage_renames" = no ; then +cat >>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <\$TMP CF_EOF else cat >>man/edit_man.sh <>man/edit_man.sh <\$TMP CF_EOF fi -if test \$verb = installing ; then +if test $cf_manpage_tbl = yes ; then +cat >>man/edit_man.sh <\$TMP.out + mv \$TMP.out \$TMP +CF_EOF +fi +if test $with_curses_h != yes ; then +cat >>man/edit_man.sh <\$TMP.out + mv \$TMP.out \$TMP +CF_EOF +fi if test $cf_format = yes ; then cat >>man/edit_man.sh <\$TMP.out mv \$TMP.out \$TMP CF_EOF fi -fi -case "$cf_form" in -compress) +case "$cf_manpage_form" in #(vi +*compress*) #(vi cat >>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh <>man/edit_man.sh < + #include + ], + [double x = rand(); printf("result = %g\n", ]ifelse($2,,sin(x),$2)[)], + [cf_cv_need_libm=no], + [cf_cv_need_libm=yes])]) +if test "$cf_cv_need_libm" = yes +then +ifelse($1,,[ + LIBS="$LIBS -lm" +],[$1=-lm]) +fi +]) +dnl --------------------------------------------------------------------------- +dnl Check if the file-system supports mixed-case filenames. If we're able to +dnl create a lowercase name and see it as uppercase, it doesn't support that. +AC_DEFUN([CF_MIXEDCASE_FILENAMES], +[ +AC_CACHE_CHECK(if filesystem supports mixed-case filenames,cf_cv_mixedcase,[ + rm -f conftest CONFTEST + echo test >conftest + if test -f CONFTEST ; then + cf_cv_mixedcase=no + else + cf_cv_mixedcase=yes + fi + rm -f conftest CONFTEST +]) +test "$cf_cv_mixedcase" = yes && AC_DEFINE(MIXEDCASE_FILENAMES) ])dnl dnl --------------------------------------------------------------------------- dnl Compute the object-directory name from the given model name AC_DEFUN([CF_OBJ_SUBDIR], [ case $1 in + libtool) $2='obj_lo' ;; normal) $2='objects' ;; debug) $2='obj_g' ;; profile) $2='obj_p' ;; @@ -1034,23 +1721,51 @@ AC_DEFUN([CF_OBJ_SUBDIR], esac ])dnl dnl --------------------------------------------------------------------------- -dnl Within AC_OUTPUT, check if the given file differs from the target, and -dnl update it if so. Otherwise, remove the generated file. -dnl -dnl Parameters: -dnl $1 = input, which configure has done substitutions upon -dnl $2 = target file -dnl -AC_DEFUN([CF_OUTPUT_IF_CHANGED],[ -if ( cmp -s $1 $2 2>/dev/null ) -then - echo "$2 is unchanged" - rm -f $1 -else - echo "creating $2" - rm -f $2 - mv $1 $2 -fi +dnl Check the argument to see that it looks like a pathname. Rewrite it if it +dnl begins with one of the prefix/exec_prefix variables, and then again if the +dnl result begins with 'NONE'. This is necessary to workaround autoconf's +dnl delayed evaluation of those symbols. +AC_DEFUN([CF_PATH_SYNTAX],[ +case ".[$]$1" in #(vi +./*) #(vi + ;; +.[a-zA-Z]:[\\/]*) #(vi OS/2 EMX + ;; +.\[$]{*prefix}*) #(vi + eval $1="[$]$1" + case ".[$]$1" in #(vi + .NONE/*) + $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@` + ;; + esac + ;; #(vi +.NONE/*) + $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@` + ;; +*) + AC_ERROR(expected a pathname) + ;; +esac +])dnl +dnl --------------------------------------------------------------------------- +dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX. +AC_DEFUN([CF_PROG_EXT], +[ +AC_REQUIRE([CF_CHECK_CACHE]) +PROG_EXT= +case $cf_cv_system_name in +os2*) + # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@ + CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__" + CXXFLAGS="$CXXFLAGS -Zmt -D__ST_MT_ERRNO__" + LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"` + PROG_EXT=".exe" + ;; +cygwin*) + PROG_EXT=".exe" + ;; +esac +AC_SUBST(PROG_EXT) ])dnl dnl --------------------------------------------------------------------------- dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the @@ -1103,55 +1818,10 @@ case $cf_cv_regex in esac ])dnl dnl --------------------------------------------------------------------------- -dnl This bypasses the normal autoconf process because we're generating an -dnl arbitrary number of NEED_xxxx definitions with the CF_HAVE_FUNCS macro. -dnl Rather than populate an aclocal.h file with all of those definitions, we do -dnl it here. -dnl -dnl Parameters: -dnl $1 = input, which configure has done substitutions upon (will delete) -dnl $2 = target file -dnl $3 = preamble, if any (a 'here' document) -dnl $4 = trailer, if any (a 'here' document) -dnl -AC_DEFUN([CF_SED_CONFIG_H],[ -cf_config_h=conf$$ -rm -f $cf_config_h -## PREAMBLE -ifelse($3,,[ -echo '/* generated by configure-script */' >$cf_config_h -],[cat >$cf_config_h <$cf_config_h - $ac_cv_path_TD_CONFIG $1 |egrep '^#' | sort >>$cf_config_h -else -grep -v '^ -D' $1 >>$cf_config_h -changequote(,)dnl -sed -e '/^ -D/!d' \ - -e '/^# /d' \ - -e 's/ -D/\ -#define /g' \ - -e 's/\(#define [A-Za-z_][A-Za-z0-9_]*\)=/\1 /g' \ - -e 's@\\@@g' \ - $1 | sort >>$cf_config_h -changequote([,])dnl -fi -## TRAILER -ifelse($4,,, -[cat >>$cf_config_h <],[int x = 1],[break],[]) + done + AC_MSG_RESULT($CC_SHARED_OPTS) + CFLAGS="$cf_save_CFLAGS" + fi + case $cf_cv_system_name in + beos*) + MK_SHARED_LIB='$(CC) -o $[@] -Xlinker -soname=`basename $[@]` -nostart -e 0' + ;; hpux*) # (tested with gcc 2.7.2 -- I don't have c89) - if test "${CC}" = "gcc"; then - CC_SHARED_OPTS='-fPIC' + if test "$GCC" = yes; then LD_SHARED_OPTS='-Xlinker +b -Xlinker $(libdir)' else CC_SHARED_OPTS='+Z' - LD_SHARED_OPTS='+b $(libdir)' + LD_SHARED_OPTS='-Wl,+b,$(libdir)' fi - MK_SHARED_LIB='$(LD) -b -o $[@]' + MK_SHARED_LIB='$(LD) +b $(libdir) -b -o $[@]' # HP-UX shared libraries must be executable, and should be # readonly to exploit a quirk in the memory manager. INSTALL_LIB="-m 555" ;; irix*) + if test "$cf_cv_ld_rpath" = yes ; then + cf_ld_rpath_opt="-Wl,-rpath," + EXTRA_LDFLAGS="-Wl,-rpath,\$(libdir) $EXTRA_LDFLAGS" + fi # tested with IRIX 5.2 and 'cc'. - if test "${CC}" = "gcc"; then - CC_SHARED_OPTS='-fPIC' - else + if test "$GCC" != yes; then CC_SHARED_OPTS='-KPIC' fi MK_SHARED_LIB='$(LD) -shared -rdata_shared -soname `basename $[@]` -o $[@]' cf_cv_rm_so_locs=yes ;; - linux*) - # tested with Linux 2.0.29 and gcc 2.7.2 (ELF) - CC_SHARED_OPTS='-fPIC' - MK_SHARED_LIB='gcc -o $[@].$(REL_VERSION) -L../lib -L\$(libdir) -shared -Wl,-soname,`basename $[@].$(ABI_VERSION)`,-stats,$(SHLIB_LIST)-lc' - test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-Wl,-rpath," - if test $DFT_LWR_MODEL = "shared" ; then - LOCAL_LDFLAGS='-Wl,-rpath,../lib' - LOCAL_LDFLAGS2='-Wl,-rpath,../../lib' + linux*|gnu*) + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" fi - cf_cv_do_symlinks=yes + if test "$cf_cv_ld_rpath" = yes ; then + cf_ld_rpath_opt="-Wl,-rpath," + EXTRA_LDFLAGS="$LOCAL_LDFLAGS $EXTRA_LDFLAGS" + fi + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $[@] .$(REL_VERSION)`.$(ABI_VERSION),-stats,-lc -o $[@]' + ;; + openbsd2*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + MK_SHARED_LIB='$(LD) -Bshareable -soname,`basename $[@].$(ABI_VERSION)` -o $[@]' ;; - openbsd*|netbsd*|freebsd*) - CC_SHARED_OPTS='-fpic -DPIC' + openbsd*|freebsd*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" MK_SHARED_LIB='$(LD) -Bshareable -o $[@]' + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + ;; + netbsd*) + CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC" + test "$cf_cv_ld_rpath" = yes && cf_ld_rpath_opt="-Wl,-rpath," + if test "$DFT_LWR_MODEL" = "shared" && test "$cf_cv_ld_rpath" = yes ; then + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + EXTRA_LDFLAGS="-Wl,-rpath,\$(libdir) $EXTRA_LDFLAGS" + MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $[@] .$(REL_VERSION)`.$(ABI_VERSION) -o $[@]' + if test "$cf_cv_shlib_version" = auto; then + if test ! -f /usr/libexec/ld.elf_so; then + cf_cv_shlib_version=rel + fi + fi + else + MK_SHARED_LIB='$(LD) -Bshareable -o $[@]' + fi ;; osf*|mls+*) # tested with OSF/1 V3.2 and 'cc' # tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't # link with shared libs). - CC_SHARED_OPTS='' - MK_SHARED_LIB='$(LD) -o $[@].$(REL_VERSION) -set_version $(ABI_VERSION):$(REL_VERSION) -expect_unresolved "*" -shared -soname `basename $[@].$(ABI_VERSION)`' - test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-rpath" + MK_SHARED_LIB='$(LD) -set_version $(REL_VERSION):$(ABI_VERSION) -expect_unresolved "*" -shared -soname `basename $[@]`' case $host_os in osf4*) MK_SHARED_LIB="${MK_SHARED_LIB} -msym" ;; esac - if test $DFT_LWR_MODEL = "shared" ; then - LOCAL_LDFLAGS='-Wl,-rpath,../lib' - LOCAL_LDFLAGS2='-Wl,-rpath,../../lib' + MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]' + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-Wl,-rpath,`pwd`/lib" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + if test "$cf_cv_ld_rpath" = yes ; then + cf_ld_rpath_opt="-rpath" + # EXTRA_LDFLAGS="$LOCAL_LDFLAGS $EXTRA_LDFLAGS" fi - cf_cv_do_symlinks=yes cf_cv_rm_so_locs=yes ;; + sco3.2v5*) # (also uw2* and UW7) hops 13-Apr-98 + # tested with osr5.0.5 + if test "$ac_cv_prog_gcc" != yes; then + CC_SHARED_OPTS='-belf -KPIC' + fi + MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@] .$(REL_VERSION)`.$(ABI_VERSION) -o [$]@' + if test "$cf_cv_ld_rpath" = yes ; then + # only way is to set LD_RUN_PATH but no switch for it + RUN_PATH=$libdir + fi + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel + LINK_PROGS='LD_RUN_PATH=$(libdir)' + LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib' + ;; sunos4*) # tested with SunOS 4.1.1 and gcc 2.7.0 - if test $ac_cv_prog_gcc = yes; then - CC_SHARED_OPTS='-fpic' - else + if test "$ac_cv_prog_gcc" != yes; then CC_SHARED_OPTS='-KPIC' fi - MK_SHARED_LIB='$(LD) -assert pure-text -o $[@].$(REL_VERSION)' - cf_cv_do_symlinks=yes + MK_SHARED_LIB='$(LD) -assert pure-text -o $[@]' + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; solaris2*) # tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2 - if test $ac_cv_prog_gcc = yes; then - CC_SHARED_OPTS='-fpic' - else + if test "$ac_cv_prog_gcc" != yes; then CC_SHARED_OPTS='-KPIC' fi - MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@].$(ABI_VERSION)` -o $[@].$(REL_VERSION)' - if test $cf_cv_ld_rpath = yes ; then + MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@] .$(REL_VERSION)`.$(ABI_VERSION) -o $[@]' + if test "$DFT_LWR_MODEL" = "shared" ; then + LOCAL_LDFLAGS="-R `pwd`/lib:\$(libdir)" + LOCAL_LDFLAGS2="$LOCAL_LDFLAGS" + fi + if test "$cf_cv_ld_rpath" = yes ; then cf_ld_rpath_opt="-R" - EXTRA_LDFLAGS="-R ../lib:\$(libdir) $EXTRA_LDFLAGS" + EXTRA_LDFLAGS="$LOCAL_LDFLAGS $EXTRA_LDFLAGS" fi - cf_cv_do_symlinks=yes + test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel ;; - unix_sv*) - # tested with UnixWare 1.1.2 - CC_SHARED_OPTS='-KPIC' - MK_SHARED_LIB='$(LD) -d y -G -o $[@]' + sysv5uw7*|unix_sv*) + # tested with UnixWare 7.1.0 (gcc 2.95.2 and cc) + if test "$ac_cv_prog_gcc" != yes; then + CC_SHARED_OPTS='-KPIC' + fi + MK_SHARED_LIB='$(LD) -d y -G -o [$]@' ;; *) CC_SHARED_OPTS='unknown' @@ -1267,20 +2019,36 @@ AC_DEFUN([CF_SHARED_OPTS], ;; esac + # This works if the last tokens in $MK_SHARED_LIB are the -o target. + case "$cf_cv_shlib_version" in #(vi + rel|abi) + case "$MK_SHARED_LIB" in #(vi + *'-o $[@]') + test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes + ;; + *) + AC_MSG_WARN(ignored --with-shlib-version) + ;; + esac + ;; + esac + if test -n "$cf_ld_rpath_opt" ; then AC_MSG_CHECKING(if we need a space after rpath option) cf_save_LIBS="$LIBS" - LIBS="$LIBS ${cf_ld_rpath_opt}/usr/lib" + LIBS="$LIBS ${cf_ld_rpath_opt}$libdir" AC_TRY_LINK(, , cf_rpath_space=no, cf_rpath_space=yes) LIBS="$cf_save_LIBS" AC_MSG_RESULT($cf_rpath_space) - test $cf_rpath_space = yes && cf_ld_rpath_opt="$cf_ld_rpath_opt " + test "$cf_rpath_space" = yes && cf_ld_rpath_opt="$cf_ld_rpath_opt " MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\$(libdir)" fi AC_SUBST(CC_SHARED_OPTS) AC_SUBST(LD_SHARED_OPTS) AC_SUBST(MK_SHARED_LIB) + AC_SUBST(LINK_PROGS) + AC_SUBST(LINK_TESTS) AC_SUBST(EXTRA_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_LDFLAGS2) @@ -1291,8 +2059,8 @@ dnl Check for definitions & structures needed for window size-changing dnl FIXME: check that this works with "snake" (HP-UX 10.x) AC_DEFUN([CF_SIZECHANGE], [ -AC_MSG_CHECKING([declaration of size-change]) -AC_CACHE_VAL(cf_cv_sizechange,[ +AC_REQUIRE([CF_STRUCT_TERMIOS]) +AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[ cf_cv_sizechange=unknown cf_save_CFLAGS="$CFLAGS" @@ -1302,14 +2070,14 @@ do CFLAGS="$cf_save_CFLAGS" test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts" AC_TRY_COMPILE([#include -#if HAVE_TERMIOS_H +#ifdef HAVE_TERMIOS_H #include #else -#if HAVE_TERMIO_H +#ifdef HAVE_TERMIO_H #include #endif #endif -#if NEED_PTEM_H +#ifdef NEED_PTEM_H /* This is a workaround for SCO: they neglected to define struct winsize in * termios.h -- it's only in termio.h and ptem.h */ @@ -1340,32 +2108,19 @@ do CFLAGS="$cf_save_CFLAGS" if test "$cf_cv_sizechange" = yes ; then echo "size-change succeeded ($cf_opts)" >&AC_FD_CC - test -n "$cf_opts" && AC_DEFINE_UNQUOTED($cf_opts) + test -n "$cf_opts" && cf_cv_sizechange="$cf_opts" break fi done - ]) -AC_MSG_RESULT($cf_cv_sizechange) -test $cf_cv_sizechange != no && AC_DEFINE(HAVE_SIZECHANGE) -])dnl -dnl --------------------------------------------------------------------------- -dnl Check for datatype 'speed_t', which is normally declared via either -dnl sys/types.h or termios.h -AC_DEFUN([CF_SPEED_TYPE], -[ -AC_MSG_CHECKING([for speed_t]) -AC_CACHE_VAL(cf_cv_type_speed_t,[ - AC_TRY_COMPILE([ -#include -#if HAVE_TERMIOS_H -#include -#endif], - [speed_t x = 0], - [cf_cv_type_speed_t=yes], - [cf_cv_type_speed_t=no]) - ]) -AC_MSG_RESULT($cf_cv_type_speed_t) -test $cf_cv_type_speed_t != yes && AC_DEFINE(speed_t,unsigned) +]) +if test "$cf_cv_sizechange" != no ; then + AC_DEFINE(HAVE_SIZECHANGE) + case $cf_cv_sizechange in #(vi + NEED*) + AC_DEFINE_UNQUOTED($cf_cv_sizechange ) + ;; + esac +fi ])dnl dnl --------------------------------------------------------------------------- dnl For each parameter, test if the source-directory exists, and if it contains @@ -1379,8 +2134,12 @@ AC_DEFUN([CF_SRC_MODULES], AC_MSG_CHECKING(for src modules) # dependencies and linker-arguments for test-programs -TEST_DEPS="${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS" -TEST_ARGS="-l${LIB_NAME}${DFT_ARG_SUFFIX} $TEST_ARGS" +TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS" +if test "$DFT_LWR_MODEL" = "libtool"; then + TEST_ARGS="${TEST_DEPS}" +else + TEST_ARGS="-l${LIB_NAME}${DFT_ARG_SUFFIX} $TEST_ARGS" +fi # dependencies and linker-arguments for utility-programs PROG_ARGS="$TEST_ARGS" @@ -1414,8 +2173,12 @@ do CF_UPPER(cf_have_include,$cf_dir) AC_DEFINE_UNQUOTED(HAVE_${cf_have_include}_H) AC_DEFINE_UNQUOTED(HAVE_LIB${cf_have_include}) - TEST_DEPS="${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS" - TEST_ARGS="-l${cf_dir}${DFT_ARG_SUFFIX} $TEST_ARGS" + TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS" + if test "$DFT_LWR_MODEL" = "libtool"; then + TEST_ARGS="${TEST_DEPS}" + else + TEST_ARGS="-l${cf_dir}${DFT_ARG_SUFFIX} $TEST_ARGS" + fi fi fi done @@ -1433,12 +2196,12 @@ do SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir" done SRC_SUBDIRS="$SRC_SUBDIRS misc test" -test $cf_cxx_library != no && SRC_SUBDIRS="$SRC_SUBDIRS c++" +test "$cf_with_cxx_binding" != no && SRC_SUBDIRS="$SRC_SUBDIRS c++" ADA_SUBDIRS= -if test "$ac_cv_prog_gnat_correct" = yes && test -d $srcdir/Ada95; then +if test "$cf_cv_prog_gnat_correct" = yes && test -f $srcdir/Ada95/Makefile.in; then SRC_SUBDIRS="$SRC_SUBDIRS Ada95" - ADA_SUBDIRS="gen ada_include samples" + ADA_SUBDIRS="gen src samples" fi SUB_MAKEFILES= @@ -1449,13 +2212,41 @@ done if test -n "$ADA_SUBDIRS"; then for cf_dir in $ADA_SUBDIRS - do + do SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile" done AC_SUBST(ADA_SUBDIRS) fi ])dnl dnl --------------------------------------------------------------------------- +dnl Check for -lstdc++, which is GNU's standard C++ library. +AC_DEFUN([CF_STDCPP_LIBRARY], +[ +if test -n "$GXX" ; then +case $cf_cv_system_name in #(vi +os2*) #(vi + cf_stdcpp_libname=stdcpp + ;; +*) + cf_stdcpp_libname=stdc++ + ;; +esac +AC_CACHE_CHECK(for library $cf_stdcpp_libname,cf_cv_libstdcpp,[ + cf_save="$LIBS" + LIBS="$LIBS -l$cf_stdcpp_libname" +AC_TRY_LINK([ +#include ],[ +char buf[80]; +strstreambuf foo(buf, sizeof(buf)) +], + [cf_cv_libstdcpp=yes], + [cf_cv_libstdcpp=no]) + LIBS="$cf_save" +]) +test "$cf_cv_libstdcpp" = yes && CXXLIBS="$CXXLIBS -l$cf_stdcpp_libname" +fi +])dnl +dnl --------------------------------------------------------------------------- dnl Remove "-g" option from the compiler options AC_DEFUN([CF_STRIP_G_OPT], [$1=`echo ${$1} | sed -e 's/-g //' -e 's/-g$//'`])dnl @@ -1465,7 +2256,7 @@ dnl do this if we've found the sigaction function. dnl dnl If needed, define SVR4_ACTION. AC_DEFUN([CF_STRUCT_SIGACTION],[ -if test $ac_cv_func_sigaction = yes; then +if test "$ac_cv_func_sigaction" = yes; then AC_MSG_CHECKING(whether sigaction needs _POSIX_SOURCE) AC_TRY_COMPILE([ #include @@ -1488,13 +2279,21 @@ dnl --------------------------------------------------------------------------- dnl Some machines require _POSIX_SOURCE to completely define struct termios. dnl If so, define SVR4_TERMIO AC_DEFUN([CF_STRUCT_TERMIOS],[ -if test $ac_cv_header_termios_h = yes ; then +AC_CHECK_HEADERS( \ +termio.h \ +termios.h \ +unistd.h \ +) +if test "$ISC" = yes ; then + AC_CHECK_HEADERS( sys/termio.h ) +fi +if test "$ac_cv_header_termios_h" = yes ; then case "$CFLAGS" in *-D_POSIX_SOURCE*) termios_bad=dunno ;; *) termios_bad=maybe ;; esac - if test $termios_bad = maybe ; then + if test "$termios_bad" = maybe ; then AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE) AC_TRY_COMPILE([#include ], [struct termios foo; int x = foo.c_iflag], @@ -1546,8 +2345,9 @@ AC_SUBST(NCURSES_PATCH) dnl We need these values in the generated makefiles AC_SUBST(cf_cv_rel_version) AC_SUBST(cf_cv_abi_version) +AC_SUBST(cf_cv_cc_bool_type) AC_SUBST(cf_cv_builtin_bool) -AC_SUBST(cf_cv_type_of_bool) +AC_SUBST(cf_cv_type_of_bool)dnl ])dnl dnl --------------------------------------------------------------------------- dnl Check if we can include with ; this breaks on @@ -1558,17 +2358,17 @@ AC_MSG_CHECKING(if sys/time.h works with sys/select.h) AC_CACHE_VAL(cf_cv_sys_time_select,[ AC_TRY_COMPILE([ #include -#if HAVE_SYS_TIME_H +#ifdef HAVE_SYS_TIME_H #include #endif -#if HAVE_SYS_SELECT_H +#ifdef HAVE_SYS_SELECT_H #include #endif ],[],[cf_cv_sys_time_select=yes], [cf_cv_sys_time_select=no]) ]) AC_MSG_RESULT($cf_cv_sys_time_select) -test $cf_cv_sys_time_select = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT) +test "$cf_cv_sys_time_select" = yes && AC_DEFINE(HAVE_SYS_TIME_SELECT) ])dnl dnl --------------------------------------------------------------------------- dnl Determine the type we should use for chtype (and attr_t, which is treated @@ -1581,7 +2381,7 @@ AC_REQUIRE([CF_UNSIGNED_LITERALS]) AC_MSG_CHECKING([for type of chtype]) AC_CACHE_VAL(cf_cv_typeof_chtype,[ AC_TRY_RUN([ -#if USE_WIDEC_SUPPORT +#ifdef USE_WIDEC_SUPPORT #include /* we want wchar_t */ #define WANT_BITS 39 #else @@ -1593,7 +2393,7 @@ int main() FILE *fp = fopen("cf_test.out", "w"); if (fp != 0) { char *result = "long"; -#if USE_WIDEC_SUPPORT +#ifdef USE_WIDEC_SUPPORT /* * If wchar_t is smaller than a long, it must be an int or a * short. We prefer not to use a short anyway. @@ -1651,7 +2451,7 @@ AC_CACHE_VAL(cf_cv_type_sigaction,[ [cf_cv_type_sigaction=yes], [cf_cv_type_sigaction=no])]) AC_MSG_RESULT($cf_cv_type_sigaction) -test $cf_cv_type_sigaction = yes && AC_DEFINE(HAVE_TYPE_SIGACTION) +test "$cf_cv_type_sigaction" = yes && AC_DEFINE(HAVE_TYPE_SIGACTION) ])dnl dnl --------------------------------------------------------------------------- dnl Test if the compiler supports 'U' and 'L' suffixes. Only old compilers @@ -1672,7 +2472,7 @@ dnl $1=uppercase($2) AC_DEFUN([CF_UPPER], [ changequote(,)dnl -$1=`echo $2 | tr '[a-z]' '[A-Z]'` +$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%` changequote([,])dnl ])dnl dnl --------------------------------------------------------------------------- @@ -1741,24 +2541,33 @@ dnl AC_DEFUN([CF_WITH_PATH], [AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),, ifelse($4,,[withval="${$3}"],[withval="${$3-ifelse($5,,$4,$5)}"]))dnl -case ".$withval" in #(vi -./*) #(vi - ;; -.\[$]{*prefix}*) #(vi - eval withval="$withval" - case ".$withval" in #(vi - .NONE/*) - withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@` - ;; - esac - ;; #(vi -.NONE/*) - withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@` - ;; -*) - AC_ERROR(expected a pathname for $1) - ;; -esac +CF_PATH_SYNTAX(withval) eval $3="$withval" AC_SUBST($3)dnl ])dnl +dnl --------------------------------------------------------------------------- +dnl Process an option specifying a list of colon-separated paths. +dnl +dnl $1 = option name +dnl $2 = help-text +dnl $3 = environment variable to set +dnl $4 = default value, shown in the help-message, must be a constant +dnl $5 = default value, if it's an expression & cannot be in the help-message +dnl +AC_DEFUN([CF_WITH_PATHLIST],[ +AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),, +ifelse($4,,[withval="${$3}"],[withval="${$3-ifelse($5,,$4,$5)}"]))dnl + +IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" +cf_dst_path= +for cf_src_path in $withval +do + CF_PATH_SYNTAX(cf_src_path) + test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}:" + cf_dst_path="${cf_dst_path}${cf_src_path}" +done +IFS="$ac_save_ifs" + +eval $3="$cf_dst_path" +AC_SUBST($3)dnl +])dnl