From eba0fdf86629607c8e412a7d942ef923f38fbf20 Mon Sep 17 00:00:00 2001 From: Amar Takhar Date: Sat, 31 Oct 2009 02:27:13 +0000 Subject: [PATCH] Merge r3369 and r3451 (partial) to get precompiled header support in unix, and exception handling when in debug mode. Originally committed to SVN as r3753. --- aegisub/configure.in | 26 ++++++++++++++++++++++++++ aegisub/src/Makefile.am | 17 ++++++++++++++++- aegisub/src/main.cpp | 6 +++--- aegisub/src/main.h | 2 +- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/aegisub/configure.in b/aegisub/configure.in index 1e7492edd..ab86dbb88 100644 --- a/aegisub/configure.in +++ b/aegisub/configure.in @@ -1066,6 +1066,21 @@ if test "$with_agi_cv_wxstc" = "no" || test "$enable_check_wx_stc:" = "yes"; the fi +############################ +# Precompiled Header Support +# Only works with gcc! +############################ + +AC_MSG_CHECKING([whether to use precompiled headers]) +AC_ARG_ENABLE(gcc-prec, [ --enable-gcc-prec enable GCC precompiled headers (default=no)]) +if test "$enable_gcc_prec" = "yes"; then + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL([PRECOMPILED_HEADER], [test "$enable_gcc_prec" = "yes"]) + + ###################################################### # Debugging support # This is added last so it doesn't slow down configure @@ -1102,6 +1117,17 @@ fi AC_SUBST(PACKAGE_DEBUG) +AC_MSG_CHECKING([whether to use exception handling in debug mode]) +AC_ARG_ENABLE(debug-exceptions, [ --enable-debug-exceptions + enable exception handling in debug mode (default=no)]) +if test "$enable_debug_exceptions" = "yes"; then + AC_DEFINE(WITH_EXCEPTIONS, 1, [Enable exception handling in debug mode. (--enable-debug) This is always enabled when debug mode is off.]) + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + + ########### # Profiling ########### diff --git a/aegisub/src/Makefile.am b/aegisub/src/Makefile.am index dd23a5b96..3a4af9957 100644 --- a/aegisub/src/Makefile.am +++ b/aegisub/src/Makefile.am @@ -1,6 +1,7 @@ AUTOMAKE_OPTIONS = foreign SUFFIXES = .c .cpp .rc noinst_LIBRARIES= +AM_CXXFLAGS = if BUILD_DARWIN libosxutil_subdir = libosxutil @@ -12,13 +13,20 @@ if HAVE_AUTO3_LUA libauto3 = libauto3 endif +if PRECOMPILED_HEADER +BUILT_SOURCES = stdwx.h.gch +precompiled_header = stdwx.h +AM_CXXFLAGS += -Winvalid-pch -fpch-deps -fpch-preprocess -include stdwx.h +nodist_aegisub_2_1_SOURCES = stdwx.h.gch +endif + SUBDIRS = \ bitmaps \ libresrc \ $(libauto3) \ $(libosxutil_subdir) -AM_CXXFLAGS = -DAEGISUB -Iinclude -I../libffms/include @WX_CPPFLAGS@ @OPENMP_CXXFLAGS@ @LIBAVFORMAT_CFLAGS@ @LIBAVCODEC_CFLAGS@ @LIBSWSCALE_CFLAGS@ @LIBAVUTIL_CFLAGS@ +AM_CXXFLAGS += -DAEGISUB -Iinclude -I../libffms/include @WX_CPPFLAGS@ @OPENMP_CXXFLAGS@ @LIBAVFORMAT_CFLAGS@ @LIBAVCODEC_CFLAGS@ @LIBSWSCALE_CFLAGS@ @LIBAVUTIL_CFLAGS@ bin_PROGRAMS = aegisub-2.1 aegisub_2_1_LDADD = libresrc/libresrc.a $(libosxutil_lib) @@ -26,6 +34,12 @@ aegisub_2_1_CPPFLAGS = @FREETYPE_CFLAGS@ aegisub_2_1_LDFLAGS = @DEBUG_FLAGS@ @PROFILE_FLAGS@ @GL_LIBS@ @PTHREAD_LIBS@ @WX_LIBS@ @ICONV_LDFLAGS@ $(libosxutil_ldflags) @CCMALLOC_LDFLAGS@ @EFENCE_LDFLAGS@ LIBS += @FREETYPE_LIBS@ @FONTCONFIG_LIBS@ @CCMALLOC_LIBS@ +if PRECOMPILED_HEADER +# This doesn't depend on Makefile on purpose, you should already know what you're doing when using this. +stdwx.h.gch: stdwx.h + @CXX@ -include ../acconf.h $(DEFAULT_INCLUDES) @CXXFLAGS@ $(AM_CXXFLAGS) @DEBUG_FLAGS@ @PROFILE_FLAGS@ stdwx.h +endif + if BUILD_DARWIN aegisub_2_1_LDFLAGS += -L/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries endif @@ -178,6 +192,7 @@ endif ## These aren't built, but are listed here so 'make dist' can always find all the sources ## This should also list all Win32 specific files EXTRA_aegisub_2_1_SOURCES = \ + $(precompiled_header) \ font_file_lister.cpp \ $(FONT_LISTER) \ audio_player_dsound.cpp \ diff --git a/aegisub/src/main.cpp b/aegisub/src/main.cpp index ef86dbee6..cc79c9b8f 100644 --- a/aegisub/src/main.cpp +++ b/aegisub/src/main.cpp @@ -138,7 +138,7 @@ bool AegisubApp::OnInit() { #endif // Crash handling -#ifndef _DEBUG +#if !defined(_DEBUG) || defined(WITH_EXCEPTIONS) StartupLog(_T("Install exception handler")); wxHandleFatalExceptions(true); #endif @@ -205,7 +205,7 @@ bool AegisubApp::OnInit() { AssExportFilterChain::PrepareFilters(); // Set association -#ifndef _DEBUG +#if !defined(_DEBUG) || defined(WITH_EXCEPTIONS) StartupLog(_T("Install file type associations")); if (!Options.AsBool(_T("Local config"))) RegistryAssociate(); @@ -253,7 +253,7 @@ int AegisubApp::OnExit() { } -#ifndef _DEBUG +#if !defined(_DEBUG) || defined(WITH_EXCEPTIONS) ///////////////////////////////////////////// // Message displayed on unhandled exceptions const static wxChar unhandled_exception_message[] = _T("Oops, Aegisub has crashed!\n\nI have tried to emergency-save a copy of your file, and a crash log file has been generated.\n\nYou can find the emergency-saved file in:\n%s\n\nIf you submit the crash log to the Aegisub team, we will investigate the problem and attempt to fix it. You can find the crashlog in:\n%s\n\nAegisub will now close."); diff --git a/aegisub/src/main.h b/aegisub/src/main.h index 8b68c0d92..af1802ff7 100644 --- a/aegisub/src/main.h +++ b/aegisub/src/main.h @@ -86,7 +86,7 @@ public: virtual void MacOpenFile(const wxString &filename); #endif -#ifndef _DEBUG +#if !defined(_DEBUG) || defined(WITH_EXCEPTIONS) void OnUnhandledException(); void OnFatalException(); #endif