]> granicus.if.org Git - postgresql/commitdiff
More correct way to check for existence of types, which allows to specify
authorPeter Eisentraut <peter_e@gmx.net>
Sun, 2 Dec 2001 11:38:40 +0000 (11:38 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
Sun, 2 Dec 2001 11:38:40 +0000 (11:38 +0000)
which include files to consider.  Should fix BeOS problems with int8 types.

config/c-compiler.m4
configure
configure.in
src/include/c.h
src/include/pg_config.h.in
src/interfaces/odbc/md5.h

index 8db95b90ac24557600a2dd8511fea69778c0bbf4..e9771141951ebb1b87d18bc3109b1b255229c85b 100644 (file)
@@ -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(<<AC_TYPE_NAME>>, translit(have_$1, [a-z *], [A-Z_P]))dnl
+dnl The cache variable name.
+define(<<AC_CV_NAME>>, 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
index 346c02e3502dcb38c034d5ea3168559a56a768a5..1e66c582ad4a6948bfdf92e59165778eff45b2aa 100755 (executable)
--- 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 <<EOF
 EOF
 
 
+
 # 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.
-echo $ac_n "checking size of int8""... $ac_c" 1>&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 <stdio.h>
+#ifdef HAVE_SUPPORTDEFS_H
+#include <SupportDefs.h>
+#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 <<EOF
-#line 8295 "configure"
+#line 8299 "configure"
 #include "confdefs.h"
-#include <stdio.h>
-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 <<EOF
-#define SIZEOF_INT8 $ac_cv_sizeof_int8
+echo "$ac_t""$pgac_cv_have_int8" 1>&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 <<EOF
-#line 8334 "configure"
+#line 8335 "configure"
 #include "confdefs.h"
-#include <stdio.h>
-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 <<EOF
-#define SIZEOF_UINT8 $ac_cv_sizeof_uint8
+echo "$ac_t""$pgac_cv_have_uint8" 1>&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 <<EOF
-#line 8373 "configure"
+#line 8371 "configure"
 #include "confdefs.h"
-#include <stdio.h>
-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 <<EOF
-#define SIZEOF_INT64 $ac_cv_sizeof_int64
+echo "$ac_t""$pgac_cv_have_int64" 1>&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 <<EOF
-#line 8412 "configure"
+#line 8407 "configure"
 #include "confdefs.h"
-#include <stdio.h>
-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 <<EOF
-#define SIZEOF_UINT64 $ac_cv_sizeof_uint64
+echo "$ac_t""$pgac_cv_have_uint64" 1>&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 <<EOF
-#line 8449 "configure"
+#line 8445 "configure"
 #include "confdefs.h"
 #include <signal.h>
 
@@ -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
index 66e1bd399b028a15d2696743d1d3aa9714968d38..45667b2ad3e266197aa73aa40a95d1dd7e56c7a5 100644 (file)
@@ -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 <stdio.h>
+#ifdef HAVE_SUPPORTDEFS_H
+#include <SupportDefs.h>
+#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
 
index 65fde5a4d61bffbbaf6b15d2875ba66a2ddfc55d..201552d72b77816f0dde1c341e1e8ee99dd0c2cf 100644 (file)
@@ -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
index c513f4fc5be19fec991962fc8cdf0669d849c6cb..19766b81830bb29303f89dfcbc7f03b9fef26a57 100644 (file)
@@ -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
 
 /*
  *------------------------------------------------------------------------
index 3daaf16c3fbff15b25c77de612af2d8366a6b71d..2e2429d33d012a8384b2a2585f05b51012041a77 100644 (file)
@@ -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,