summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut2001-12-02 11:38:40 +0000
committerPeter Eisentraut2001-12-02 11:38:40 +0000
commit15abc7788e66ab4b456dabdc8ebb0565113b1b32 (patch)
tree727fee4b96031c96c2fcae4060a85c912d3c01f4
parentad81c999846e2360a5bf55c6e4d49696b72009b6 (diff)
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.
-rw-r--r--config/c-compiler.m433
-rwxr-xr-xconfigure224
-rw-r--r--configure.in20
-rw-r--r--src/include/c.h34
-rw-r--r--src/include/pg_config.h.in10
-rw-r--r--src/interfaces/odbc/md5.h4
6 files changed, 181 insertions, 144 deletions
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 8db95b90ac2..e9771141951 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(<<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
diff --git a/configure b/configure
index 346c02e3502..1e66c582ad4 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 <<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
diff --git a/configure.in b/configure.in
index 66e1bd399b0..45667b2ad3e 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 <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
diff --git a/src/include/c.h b/src/include/c.h
index 65fde5a4d61..201552d72b7 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 c513f4fc5be..19766b81830 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 3daaf16c3fb..2e2429d33d0 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,