From a81d5bb62c236d1fc8acc3130f271a97460a9830 Mon Sep 17 00:00:00 2001 From: Michael Wetherell Date: Mon, 23 Oct 2006 21:20:26 +0000 Subject: [PATCH] On unicode builds detect gcc 3.4 precompiled header bug (bugzilla 13361). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42302 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- configure | 55 +++++++++++++++++++++++++++++++++++++++++++++---- configure.in | 58 +++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 102 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 87b9dbee5b..3cdc5dc7d8 100755 --- a/configure +++ b/configure @@ -47084,6 +47084,43 @@ if test "$wxUSE_MAC" = 1 ; then # The makefile currently uses AR and RANLIB, which libtool apparently supercedes. fi +if test "$wxUSE_UNICODE" = yes -a "$GCC" = yes -a "$bk_use_pch" != no +then + echo "$as_me:$LINENO: checking for gcc precompiled header bug" >&5 +echo $ECHO_N "checking for gcc precompiled header bug... $ECHO_C" >&6 +if test "${wx_cv_gcc_pch_bug+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + wx_cv_gcc_pch_bug=no + echo 'const wchar_t test_var[] = L"wide string";' > conftest.h + + if $CXX conftest.h >& /dev/null + then + { + echo '#include "conftest.h"' + echo 'const wchar_t *test() { return test_var; }' + } > conftest.cpp + + if $CXX -c -o conftest.o conftest.cpp >& /dev/null + then + tr -dc 'a-z' < conftest.o | + grep 'widestring' >& /dev/null || + wx_cv_gcc_pch_bug=yes + fi + fi + + rm -f conftest.h conftest.gch conftest.cpp conftest.o + +fi +echo "$as_me:$LINENO: result: $wx_cv_gcc_pch_bug" >&5 +echo "${ECHO_T}$wx_cv_gcc_pch_bug" >&6 + + if test "$wx_cv_gcc_pch_bug" = yes; then + bk_use_pch=no + fi +fi + @@ -50018,6 +50055,20 @@ echo "$as_me: error: Versions of Bakefile used to generate makefiles ($BAKEFILE_ fi +if test $GCC_PCH = 1 +then + if test "$wx_cv_gcc_pch_bug" = yes; then + { echo "$as_me:$LINENO: WARNING: *** Precompiled header support is broken on this compiler" >&5 +echo "$as_me: WARNING: *** Precompiled header support is broken on this compiler" >&2;} + { echo "$as_me:$LINENO: WARNING: *** --enable-precomp-headers is not recommended" >&5 +echo "$as_me: WARNING: *** --enable-precomp-headers is not recommended" >&2;} + { echo "$as_me:$LINENO: WARNING: *** see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13361" >&5 +echo "$as_me: WARNING: *** see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13361" >&2;} + fi + + CPPFLAGS="-DWX_PRECOMP $CPPFLAGS" +fi + if test "$wxUSE_MAC" = 1 ; then if test "x$wxUSE_UNIVERSAL_BINARY" != "xno" ; then @@ -50055,10 +50106,6 @@ if test "$wxUSE_OMF" = "yes"; then esac fi -if test $GCC_PCH = 1 ; then - CPPFLAGS="-DWX_PRECOMP $CPPFLAGS" -fi - WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS $TOOLCHAIN_DEFS" SAMPLES_SUBDIRS="`echo $SAMPLES_SUBDIRS | tr -s ' ' | tr ' ' '\n' | sort | uniq | tr '\n' ' '| tr -d '\r'`" diff --git a/configure.in b/configure.in index f3df19aa1f..1dfe34170f 100644 --- a/configure.in +++ b/configure.in @@ -7583,8 +7583,59 @@ if test "$wxUSE_MAC" = 1 ; then # The makefile currently uses AR and RANLIB, which libtool apparently supercedes. fi +dnl gcc 3.4 has a pch bug which truncates wide character constants in headers. +dnl Hopefully for a non-unicode build there aren't any wide constants in +dnl headers, but for a unicode build it's best to disable pch. +if test "$wxUSE_UNICODE" = yes -a "$GCC" = yes -a "$bk_use_pch" != no +then + AC_CACHE_CHECK( + [for gcc precompiled header bug], + [wx_cv_gcc_pch_bug], + [[ + wx_cv_gcc_pch_bug=no + echo 'const wchar_t test_var[] = L"wide string";' > conftest.h + + if $CXX conftest.h >& /dev/null + then + { + echo '#include "conftest.h"' + echo 'const wchar_t *test() { return test_var; }' + } > conftest.cpp + + if $CXX -c -o conftest.o conftest.cpp >& /dev/null + then + tr -dc 'a-z' < conftest.o | + grep 'widestring' >& /dev/null || + wx_cv_gcc_pch_bug=yes + fi + fi + + rm -f conftest.h conftest.gch conftest.cpp conftest.o + ]]) + + if test "$wx_cv_gcc_pch_bug" = yes; then + dnl make the default for pch 'no' + dnl further below check whether the user overrode and warn them + bk_use_pch=no + fi +fi + AC_BAKEFILE([m4_include(autoconf_inc.m4)]) +dnl find out if the compiler supports PCH +dnl +dnl TODO: this should be in bakefile +if test $GCC_PCH = 1 +then + if test "$wx_cv_gcc_pch_bug" = yes; then + AC_MSG_WARN([*** Precompiled header support is broken on this compiler]) + AC_MSG_WARN([*** --enable-precomp-headers is not recommended]) + AC_MSG_WARN([*** see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13361]) + fi + + CPPFLAGS="-DWX_PRECOMP $CPPFLAGS" +fi + dnl HACK ALERT!! dnl For now, we need to alter bk-deps not to generate deps dnl when we've configured a Universal binary build. @@ -7637,13 +7688,6 @@ if test "$wxUSE_OMF" = "yes"; then esac fi -dnl find out if the compiler supports PCH -dnl -dnl TODO: this should be in bakefile -if test $GCC_PCH = 1 ; then - CPPFLAGS="-DWX_PRECOMP $CPPFLAGS" -fi - dnl TOOLCHAIN_DEFS should be used for both wx and client code WXCONFIG_CPPFLAGS="$WXCONFIG_CPPFLAGS $TOOLCHAIN_DEFS" -- 2.47.2