From a534728afb7341e1ddf2df16196ed501eaa378c2 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Sun, 26 Dec 2010 10:34:47 -0500 Subject: [PATCH] Only build in crashdump support on Windows if there's a working dbghelp.h. --- configure | 123 ++++++++++++++++++++++++++++++++ configure.in | 10 +++ src/Makefile.global.in | 3 + src/backend/main/main.c | 2 +- src/backend/port/win32/Makefile | 5 +- src/include/pg_config.h.in | 3 + src/include/pg_config.h.win32 | 3 + 7 files changed, 147 insertions(+), 2 deletions(-) diff --git a/configure b/configure index 51d27d8c7d..388cf34d28 100755 --- a/configure +++ b/configure @@ -667,6 +667,7 @@ PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC acx_pthread_config +have_win32_dbghelp HAVE_IPV6 LIBOBJS OSSP_UUID_LIBS @@ -20926,6 +20927,128 @@ cat >>confdefs.h <<\_ACEOF #define HAVE_SYMLINK 1 _ACEOF + { $as_echo "$as_me:$LINENO: checking for MINIDUMP_TYPE" >&5 +$as_echo_n "checking for MINIDUMP_TYPE... " >&6; } +if test "${ac_cv_type_MINIDUMP_TYPE+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_MINIDUMP_TYPE=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include + +int +main () +{ +if (sizeof (MINIDUMP_TYPE)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include + +int +main () +{ +if (sizeof ((MINIDUMP_TYPE))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_MINIDUMP_TYPE=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_MINIDUMP_TYPE" >&5 +$as_echo "$ac_cv_type_MINIDUMP_TYPE" >&6; } +if test "x$ac_cv_type_MINIDUMP_TYPE" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_MINIDUMP_TYPE 1 +_ACEOF + +pgac_minidump_type=yes +else + pgac_minidump_type=no +fi + +fi +if test x"$pgac_minidump_type" = x"yes" ; then + have_win32_dbghelp=yes + +else + have_win32_dbghelp=no + fi if test "$with_readline" = yes; then diff --git a/configure.in b/configure.in index b999b9481a..8ee2152d78 100644 --- a/configure.in +++ b/configure.in @@ -1350,6 +1350,16 @@ if test "$PORTNAME" = "win32"; then AC_LIBOBJ(win32error) AC_DEFINE([HAVE_SYMLINK], 1, [Define to 1 if you have the `symlink' function.]) + AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [ +#define WIN32_LEAN_AND_MEAN +#include +#include +#include ]) +fi +if test x"$pgac_minidump_type" = x"yes" ; then + AC_SUBST(have_win32_dbghelp,yes) +else + AC_SUBST(have_win32_dbghelp,no) fi if test "$with_readline" = yes; then diff --git a/src/Makefile.global.in b/src/Makefile.global.in index 7a61a5a1a1..ebeee0c3b2 100644 --- a/src/Makefile.global.in +++ b/src/Makefile.global.in @@ -363,6 +363,9 @@ ELF_SYSTEM= @ELF_SYS@ # Backend stack size limit has to be hard-wired on Windows (it's in bytes) WIN32_STACK_RLIMIT=4194304 +# Set if we have a working win32 crashdump header +have_win32_dbghelp = @have_win32_dbghelp@ + # Pull in platform-specific magic include $(top_builddir)/src/Makefile.port diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 6065e8c661..d3f9bcde7f 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -85,7 +85,7 @@ main(int argc, char *argv[]) * If supported on the current platform, set up a handler to be called if * the backend/postmaster crashes with a fatal signal or exception. */ -#ifdef WIN32 +#if defined(WIN32) && defined(HAVE_MINIDUMP_TYPE) pgwin32_install_crashdump_handler(); #endif diff --git a/src/backend/port/win32/Makefile b/src/backend/port/win32/Makefile index d00c33421e..820a3b3753 100644 --- a/src/backend/port/win32/Makefile +++ b/src/backend/port/win32/Makefile @@ -12,6 +12,9 @@ subdir = src/backend/port/win32 top_builddir = ../../../.. include $(top_builddir)/src/Makefile.global -OBJS = timer.o socket.o signal.o security.o mingwcompat.o crashdump.o +OBJS = timer.o socket.o signal.o security.o mingwcompat.o +ifeq ($(have_win32_dbghelp), yes) +OBJS += crashdump.o +endif include $(top_srcdir)/src/backend/common.mk diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index fd169b682f..613ef89eb6 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -342,6 +342,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if the system has the type `MINIDUMP_TYPE'. */ +#undef HAVE_MINIDUMP_TYPE + /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H diff --git a/src/include/pg_config.h.win32 b/src/include/pg_config.h.win32 index 2a383b619a..79b803616d 100644 --- a/src/include/pg_config.h.win32 +++ b/src/include/pg_config.h.win32 @@ -258,6 +258,9 @@ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 +/* Define to 1 if the system has the type `MINIDUMP_TYPE'. */ +#define HAVE_MINIDUMP_TYPE 1 + /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 -- 2.40.0