changeset 13265:8168d141969e draft

(svn r17774) -Codechange: show the version of the (dynamically) linked library instead of the one we compiled against in the crash log
author rubidium <rubidium@openttd.org>
date Wed, 14 Oct 2009 08:20:42 +0000
parents fd77863ff104
children 88d55acd53db
files src/crashlog.cpp src/sdl.cpp src/sdl.h
diffstat 3 files changed, 38 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/crashlog.cpp
+++ b/src/crashlog.cpp
@@ -115,37 +115,65 @@
 #	include <allegro.h>
 #endif /* WITH_ALLEGRO */
 #ifdef WITH_FONTCONFIG
-#include <fontconfig/fontconfig.h>
+#	include <fontconfig/fontconfig.h>
 #endif /* WITH_FONTCONFIG */
+#ifdef WITH_PNG
+	/* pngconf.h, included by png.h doesn't like something in the
+	 * freetype headers. As such it's not alphabetically sorted. */
+#	include <png.h>
+#endif /* WITH_PNG */
 #ifdef WITH_FREETYPE
-#include <ft2build.h>
-#include FT_FREETYPE_H
+#	include <ft2build.h>
+#	include FT_FREETYPE_H
 #endif /* WITH_FREETYPE */
 #ifdef WITH_ICU
 #	include <unicode/uversion.h>
 #endif /* WITH_ICU */
 #ifdef WITH_SDL
+#	include "sdl.h"
 #	include <SDL.h>
 #endif /* WITH_SDL */
 
 char *CrashLog::LogLibraries(char *buffer, const char *last) const
 {
 	buffer += seprintf(buffer, last, "Libraries:\n");
+
 #ifdef WITH_ALLEGRO
-	buffer += seprintf(buffer, last, " Allegro:    %s\n", ALLEGRO_VERSION_STR);
+	buffer += seprintf(buffer, last, " Allegro:    %s\n", allegro_id);
 #endif /* WITH_ALLEGRO */
+
 #ifdef WITH_FONTCONFIG
-	buffer += seprintf(buffer, last, " FontConfig: %d.%d.%d\n", FC_MAJOR, FC_MINOR, FC_REVISION);
+	int version = FcGetVersion();
+	buffer += seprintf(buffer, last, " FontConfig: %d.%d.%d\n", version / 10000, (version / 100) % 100, version % 100);
 #endif /* WITH_FONTCONFIG */
+
 #ifdef WITH_FREETYPE
-	buffer += seprintf(buffer, last, " FreeType:   %d.%d.%d\n", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
+	FT_Library library;
+	int major, minor, patch;
+	FT_Init_FreeType(&library);
+	FT_Library_Version(library, &major, &minor, &patch);
+	FT_Done_FreeType(library);
+	buffer += seprintf(buffer, last, " FreeType:   %d.%d.%d\n", major, minor, patch);
 #endif /* WITH_FREETYPE */
+
 #ifdef WITH_ICU
-	buffer += seprintf(buffer, last, " ICU:        %s\n", U_ICU_VERSION);
+	/* 4 times 0-255, separated by dots (.) and a trailing '\0' */
+	char buf[4 * 3 + 3 + 1];
+	UVersionInfo ver;
+	u_getVersion(ver);
+	u_versionToString(ver, buf);
+	buffer += seprintf(buffer, last, " ICU:        %s\n", buf);
 #endif /* WITH_ICU */
+
+#ifdef WITH_PNG
+	buffer += seprintf(buffer, last, " PNG:        %s\n", png_get_libpng_ver(NULL));
+#endif /* WITH_PNG */
+
 #ifdef WITH_SDL
-	buffer += seprintf(buffer, last, " SDL:        %d.%d.%d\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL);
+	const SDL_version *v = SDL_CALL SDL_Linked_Version();
+	buffer += seprintf(buffer, last, " SDL:        %d.%d.%d\n", v->major, v->minor, v->patch);
 #endif /* WITH_SDL */
+
 	buffer += seprintf(buffer, last, "\n");
 	return buffer;
 }
--- a/src/sdl.cpp
+++ b/src/sdl.cpp
@@ -57,6 +57,7 @@
 	M("SDL_SetColorKey")
 	M("SDL_WM_SetIcon")
 	M("SDL_MapRGB")
+	M("SDL_Linked_Version")
 	M("")
 ;
 #undef M
--- a/src/sdl.h
+++ b/src/sdl.h
@@ -56,6 +56,7 @@
 		void (SDLCALL *SDL_WM_SetIcon)(SDL_Surface *, Uint8 *);
 		Uint32 (SDLCALL *SDL_MapRGB)(SDL_PixelFormat *, Uint8, Uint8, Uint8);
 		int (SDLCALL *SDL_VideoModeOK)(int, int, int, Uint32);
+		SDL_version *(SDLCALL *SDL_Linked_Version)();
 	};
 
 	extern SDLProcs sdl_proc;