From 15abc7788e66ab4b456dabdc8ebb0565113b1b32 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Sun, 2 Dec 2001 11:38:40 +0000 Subject: [PATCH] More correct way to check for existence of types, which allows to specify which include files to consider. Should fix BeOS problems with int8 types. --- config/c-compiler.m4 | 33 +++++- configure | 224 ++++++++++++++++++------------------- configure.in | 20 +++- src/include/c.h | 34 +++--- src/include/pg_config.h.in | 10 +- src/interfaces/odbc/md5.h | 4 +- 6 files changed, 181 insertions(+), 144 deletions(-) diff --git a/config/c-compiler.m4 b/config/c-compiler.m4 index 8db95b90ac..e977114195 100644 --- a/config/c-compiler.m4 +++ b/config/c-compiler.m4 @@ -1,5 +1,5 @@ # Macros to detect C compiler features -# $Header: /cvsroot/pgsql/config/c-compiler.m4,v 1.3 2000/08/29 09:36:37 petere Exp $ +# $Header: /cvsroot/pgsql/config/c-compiler.m4,v 1.4 2001/12/02 11:38:40 petere Exp $ # PGAC_C_SIGNED @@ -117,3 +117,34 @@ AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The alignment requirement of a `] undefine([AC_TYPE_NAME])dnl undefine([AC_CV_NAME])dnl ])# PGAC_CHECK_ALIGNOF + + +# PGAC_CHECK_TYPE(TYPE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], [INCLUDES]) +# --------------------------------------------------------------------------- + +AC_DEFUN([PGAC_CHECK_TYPE], +[changequote(<<,>>)dnl +dnl The name to #define +define(<>, translit(have_$1, [a-z *], [A-Z_P]))dnl +dnl The cache variable name. +define(<>, translit(pgac_cv_have_$1, [ *], [_p]))dnl +changequote([, ])dnl +AC_CACHE_CHECK([for $1], AC_CV_NAME, +[AC_TRY_COMPILE([$4], +[if (($1 *) 0) + return 0; +if (sizeof ($1)) + return 0;], +AC_CV_NAME[=yes], +AC_CV_NAME[=no])]) +if test "$AC_CV_NAME" = yes; then + AC_DEFINE(AC_TYPE_NAME, 1, [Define to 1 if you have `]$1[']) + ifelse($2,,,[$2 +])[]dnl +ifelse($3,,,[else + $3 +])[]dnl +fi +undefine([AC_TYPE_NAME])dnl +undefine([AC_CV_NAME])dnl +])# PGAC_CHECK_TYPE diff --git a/configure b/configure index 346c02e350..1e66c582ad 100755 --- a/configure +++ b/configure @@ -1481,7 +1481,7 @@ else if { (eval echo configure:1482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in - *.c | *.C | *.o | *.obj) ;; + *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done @@ -8279,173 +8279,169 @@ cat >> confdefs.h <&6 -echo "configure:8287: checking size of int8" >&5 -if eval "test \"`echo '$''{'ac_cv_sizeof_int8'+set}'`\" = set"; then +# a (hopefully) representative subset. + +pgac_type_includes="\ +#include +#ifdef HAVE_SUPPORTDEFS_H +#include +#endif" + +echo $ac_n "checking for int8""... $ac_c" 1>&6 +echo "configure:8294: checking for int8" >&5 +if eval "test \"`echo '$''{'pgac_cv_have_int8'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_sizeof_int8=0 else cat > conftest.$ac_ext < -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(int8)); - exit(0); -} +$pgac_type_includes +int main() { +if ((int8 *) 0) + return 0; +if (sizeof (int8)) + return 0; +; return 0; } EOF -if { (eval echo configure:8306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_sizeof_int8=`cat conftestval` +if { (eval echo configure:8309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + pgac_cv_have_int8=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_int8=0 + rm -rf conftest* + pgac_cv_have_int8=no fi -rm -fr conftest* +rm -f conftest* fi -fi -echo "$ac_t""$ac_cv_sizeof_int8" 1>&6 -cat >> confdefs.h <&6 +if test "$pgac_cv_have_int8" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_INT8 1 EOF + fi -echo $ac_n "checking size of uint8""... $ac_c" 1>&6 -echo "configure:8326: checking size of uint8" >&5 -if eval "test \"`echo '$''{'ac_cv_sizeof_uint8'+set}'`\" = set"; then +echo $ac_n "checking for uint8""... $ac_c" 1>&6 +echo "configure:8330: checking for uint8" >&5 +if eval "test \"`echo '$''{'pgac_cv_have_uint8'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_sizeof_uint8=0 else cat > conftest.$ac_ext < -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(uint8)); - exit(0); -} +$pgac_type_includes +int main() { +if ((uint8 *) 0) + return 0; +if (sizeof (uint8)) + return 0; +; return 0; } EOF -if { (eval echo configure:8345: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_sizeof_uint8=`cat conftestval` +if { (eval echo configure:8345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + pgac_cv_have_uint8=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_uint8=0 + rm -rf conftest* + pgac_cv_have_uint8=no fi -rm -fr conftest* +rm -f conftest* fi -fi -echo "$ac_t""$ac_cv_sizeof_uint8" 1>&6 -cat >> confdefs.h <&6 +if test "$pgac_cv_have_uint8" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_UINT8 1 EOF + fi -echo $ac_n "checking size of int64""... $ac_c" 1>&6 -echo "configure:8365: checking size of int64" >&5 -if eval "test \"`echo '$''{'ac_cv_sizeof_int64'+set}'`\" = set"; then +echo $ac_n "checking for int64""... $ac_c" 1>&6 +echo "configure:8366: checking for int64" >&5 +if eval "test \"`echo '$''{'pgac_cv_have_int64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_sizeof_int64=0 else cat > conftest.$ac_ext < -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(int64)); - exit(0); -} +$pgac_type_includes +int main() { +if ((int64 *) 0) + return 0; +if (sizeof (int64)) + return 0; +; return 0; } EOF -if { (eval echo configure:8384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_sizeof_int64=`cat conftestval` +if { (eval echo configure:8381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + pgac_cv_have_int64=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_int64=0 + rm -rf conftest* + pgac_cv_have_int64=no fi -rm -fr conftest* +rm -f conftest* fi -fi -echo "$ac_t""$ac_cv_sizeof_int64" 1>&6 -cat >> confdefs.h <&6 +if test "$pgac_cv_have_int64" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_INT64 1 EOF + fi -echo $ac_n "checking size of uint64""... $ac_c" 1>&6 -echo "configure:8404: checking size of uint64" >&5 -if eval "test \"`echo '$''{'ac_cv_sizeof_uint64'+set}'`\" = set"; then +echo $ac_n "checking for uint64""... $ac_c" 1>&6 +echo "configure:8402: checking for uint64" >&5 +if eval "test \"`echo '$''{'pgac_cv_have_uint64'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_sizeof_uint64=0 else cat > conftest.$ac_ext < -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(uint64)); - exit(0); -} +$pgac_type_includes +int main() { +if ((uint64 *) 0) + return 0; +if (sizeof (uint64)) + return 0; +; return 0; } EOF -if { (eval echo configure:8423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_sizeof_uint64=`cat conftestval` +if { (eval echo configure:8417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + pgac_cv_have_uint64=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_uint64=0 + rm -rf conftest* + pgac_cv_have_uint64=no fi -rm -fr conftest* +rm -f conftest* fi -fi -echo "$ac_t""$ac_cv_sizeof_uint64" 1>&6 -cat >> confdefs.h <&6 +if test "$pgac_cv_have_uint64" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_UINT64 1 EOF + fi + echo $ac_n "checking for POSIX signal interface""... $ac_c" 1>&6 -echo "configure:8444: checking for POSIX signal interface" >&5 +echo "configure:8440: checking for POSIX signal interface" >&5 if eval "test \"`echo '$''{'pgac_cv_func_posix_signals'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -8456,7 +8452,7 @@ act.sa_flags = SA_RESTART; sigaction(0, &act, &oact); ; return 0; } EOF -if { (eval echo configure:8460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:8456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* pgac_cv_func_posix_signals=yes else @@ -8486,7 +8482,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8490: checking for $ac_word" >&5 +echo "configure:8486: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_TCLSH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8522,7 +8518,7 @@ test -n "$TCLSH" && break done echo $ac_n "checking for tclConfig.sh""... $ac_c" 1>&6 -echo "configure:8526: checking for tclConfig.sh" >&5 +echo "configure:8522: checking for tclConfig.sh" >&5 # Let user override test if test -z "$TCL_CONFIG_SH"; then pgac_test_dirs="$with_tclconfig" @@ -8555,7 +8551,7 @@ fi # Check for Tk configuration script tkConfig.sh if test "$with_tk" = yes; then echo $ac_n "checking for tkConfig.sh""... $ac_c" 1>&6 -echo "configure:8559: checking for tkConfig.sh" >&5 +echo "configure:8555: checking for tkConfig.sh" >&5 # Let user override test if test -z "$TK_CONFIG_SH"; then pgac_test_dirs="$with_tkconfig $with_tclconfig" @@ -8594,7 +8590,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8598: checking for $ac_word" >&5 +echo "configure:8594: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_NSGMLS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8630,7 +8626,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8634: checking for $ac_word" >&5 +echo "configure:8630: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_JADE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8661,7 +8657,7 @@ done echo $ac_n "checking for DocBook V3.1""... $ac_c" 1>&6 -echo "configure:8665: checking for DocBook V3.1" >&5 +echo "configure:8661: checking for DocBook V3.1" >&5 if eval "test \"`echo '$''{'pgac_cv_check_docbook'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8694,7 +8690,7 @@ have_docbook=$pgac_cv_check_docbook echo $ac_n "checking for DocBook stylesheets""... $ac_c" 1>&6 -echo "configure:8698: checking for DocBook stylesheets" >&5 +echo "configure:8694: checking for DocBook stylesheets" >&5 if eval "test \"`echo '$''{'pgac_cv_path_stylesheets'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -8733,7 +8729,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:8737: checking for $ac_word" >&5 +echo "configure:8733: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_SGMLSPL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else diff --git a/configure.in b/configure.in index 66e1bd399b..45667b2ad3 100644 --- a/configure.in +++ b/configure.in @@ -1169,13 +1169,21 @@ else fi AC_DEFINE_UNQUOTED(MAXIMUM_ALIGNOF, $MAX_ALIGNOF, [Define as the maximum alignment requirement of any type]) + # Some platforms predefine the types int8, int16, etc. Only check -# a (hopefully) representative subset. Don't use AC_CHECK_TYPE, which -# doesn't work the way we want to. -AC_CHECK_SIZEOF(int8, 0) -AC_CHECK_SIZEOF(uint8, 0) -AC_CHECK_SIZEOF(int64, 0) -AC_CHECK_SIZEOF(uint64, 0) +# a (hopefully) representative subset. + +pgac_type_includes="\ +#include +#ifdef HAVE_SUPPORTDEFS_H +#include +#endif" + +PGAC_CHECK_TYPE(int8, [], [], [$pgac_type_includes]) +PGAC_CHECK_TYPE(uint8, [], [], [$pgac_type_includes]) +PGAC_CHECK_TYPE(int64, [], [], [$pgac_type_includes]) +PGAC_CHECK_TYPE(uint64, [], [], [$pgac_type_includes]) + PGAC_FUNC_POSIX_SIGNALS diff --git a/src/include/c.h b/src/include/c.h index 65fde5a4d6..201552d72b 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -12,7 +12,7 @@ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $Id: c.h,v 1.111 2001/11/15 16:35:19 momjian Exp $ + * $Id: c.h,v 1.112 2001/12/02 11:38:40 petere Exp $ * *------------------------------------------------------------------------- */ @@ -205,11 +205,11 @@ typedef char *Pointer; * used for numerical computations and the * frontend/backend protocol. */ -#if SIZEOF_INT8 == 0 +#ifndef HAVE_INT8 typedef signed char int8; /* == 8 bits */ typedef signed short int16; /* == 16 bits */ typedef signed int int32; /* == 32 bits */ -#endif /* SIZEOF_INT8 == 0 */ +#endif /* not HAVE_INT8 */ /* * uintN @@ -218,11 +218,11 @@ typedef signed int int32; /* == 32 bits */ * frontend/backend protocol. */ /* Also defined in interfaces/odbc/md5.h */ -#if SIZEOF_UINT8 == 0 +#ifndef HAVE_UINT8 typedef unsigned char uint8; /* == 8 bits */ typedef unsigned short uint16; /* == 16 bits */ typedef unsigned int uint32; /* == 32 bits */ -#endif /* SIZEOF_UINT8 == 0 */ +#endif /* not HAVE_UINT8 */ /* * boolN @@ -270,35 +270,37 @@ typedef double *float64; */ #ifdef HAVE_LONG_INT_64 /* Plain "long int" fits, use it */ -#if SIZEOF_INT64 == 0 + +#ifndef HAVE_INT64 typedef long int int64; #endif -#if SIZEOF_UINT64 == 0 +#ifndef HAVE_UINT64 typedef unsigned long int uint64; #endif -#else -#ifdef HAVE_LONG_LONG_INT_64 +#elif defined(HAVE_LONG_LONG_INT_64) /* We have working support for "long long int", use that */ -#if SIZEOF_INT64 == 0 + +#ifndef HAVE_INT64 typedef long long int int64; #endif -#if SIZEOF_UINT64 == 0 +#ifndef HAVE_UINT64 typedef unsigned long long int uint64; #endif -#else +#else /* not HAVE_LONG_INT_64 and not HAVE_LONG_LONG_INT_64 */ + /* Won't actually work, but fall back to long int so that code compiles */ -#if SIZEOF_INT64 == 0 +#ifndef HAVE_INT64 typedef long int int64; #endif -#if SIZEOF_UINT64 == 0 +#ifndef HAVE_UINT64 typedef unsigned long int uint64; #endif #define INT64_IS_BUSTED -#endif -#endif + +#endif /* not HAVE_LONG_INT_64 and not HAVE_LONG_LONG_INT_64 */ /* * Size diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index c513f4fc5b..19766b8183 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -8,7 +8,7 @@ * or in pg_config.h afterwards. Of course, if you edit pg_config.h, then your * changes will be overwritten the next time you run configure. * - * $Id: pg_config.h.in,v 1.13 2001/11/15 16:35:19 momjian Exp $ + * $Id: pg_config.h.in,v 1.14 2001/12/02 11:38:40 petere Exp $ */ #ifndef PG_CONFIG_H @@ -697,10 +697,10 @@ extern int fdatasync(int fildes); /* Define if you have on_exit() */ #undef HAVE_ON_EXIT -#undef SIZEOF_INT8 -#undef SIZEOF_UINT8 -#undef SIZEOF_INT64 -#undef SIZEOF_UINT64 +#undef HAVE_INT8 +#undef HAVE_UINT8 +#undef HAVE_INT64 +#undef HAVE_UINT64 /* *------------------------------------------------------------------------ diff --git a/src/interfaces/odbc/md5.h b/src/interfaces/odbc/md5.h index 3daaf16c3f..2e2429d33d 100644 --- a/src/interfaces/odbc/md5.h +++ b/src/interfaces/odbc/md5.h @@ -36,11 +36,11 @@ typedef char bool; #endif /* __BEOS__ */ /* Also defined in include/c.h */ -#if SIZEOF_UINT8 == 0 +#ifndef HAVE_UINT8 typedef unsigned char uint8; /* == 8 bits */ typedef unsigned short uint16; /* == 16 bits */ typedef unsigned int uint32; /* == 32 bits */ -#endif /* SIZEOF_UINT8 == 0 */ +#endif /* not HAVE_UINT8 */ extern bool md5_hash(const void *buff, size_t len, char *hexsum); extern bool EncryptMD5(const char *passwd, const char *salt,