QTfrontend/ui/widget/about.cpp
branchwebgl
changeset 9521 8054d9d775fd
parent 9160 fc46e75f6b72
parent 9337 c9d4daae1dee
child 9950 2759212a27de
--- a/QTfrontend/ui/widget/about.cpp	Fri Oct 11 11:55:31 2013 +0200
+++ b/QTfrontend/ui/widget/about.cpp	Fri Oct 11 17:43:13 2013 +0200
@@ -39,6 +39,15 @@
 }
 #endif
 
+
+#if defined(Q_OS_WINDOWS)
+#define sopath(x) x ".dll"
+#elif defined(Q_OS_MAC)
+#define sopath(x) "@executable_path/../Frameworks/" x ".framework/" x
+#else
+#define sopath(x) "lib" x ".so"
+#endif
+
 #include "about.h"
 
 About::About(QWidget * parent) :
@@ -90,10 +99,62 @@
     libinfo.append(QString(tr("Unknown Compiler")).arg(__VERSION__) + QString("<br>"));
 #endif
 
+    const SDL_version *sdl_ver = SDL_Linked_Version();
     libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL</a> version: %1.%2.%3<br>")
-        .arg(SDL_MAJOR_VERSION)
-        .arg(SDL_MINOR_VERSION)
-        .arg(SDL_PATCHLEVEL));
+        .arg(sdl_ver->major)
+        .arg(sdl_ver->minor)
+        .arg(sdl_ver->patch));
+
+    const SDL_version *sdlmixer_ver = Mix_Linked_Version();
+    libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL_mixer</a> version: %1.%2.%3<br>")
+        .arg(sdlmixer_ver->major)
+        .arg(sdlmixer_ver->minor)
+        .arg(sdlmixer_ver->patch));
+
+    // the remaining sdl modules used only in engine, so instead of needlessly linking them here
+    // we dynamically call the function returning the linked version
+    void *sdlnet_handle = SDL_LoadObject(sopath("SDL_net"));
+    if (sdlnet_handle != NULL) {
+        SDL_version *(*sdlnet_ver_get)(void) = NULL;
+        sdlnet_ver_get = (SDL_version *(*)(void)) SDL_LoadFunction(sdlnet_handle, "SDLNet_Linked_Version");
+        if (sdlnet_ver_get != NULL) {
+            SDL_version *sdlnet_ver = sdlnet_ver_get();
+            libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL_net</a> version: %1.%2.%3<br>")
+                .arg(sdlnet_ver->major)
+                .arg(sdlnet_ver->minor)
+                .arg(sdlnet_ver->patch));
+        }
+        SDL_UnloadObject(sdlnet_handle);
+    }
+
+    void *sdlimage_handle = SDL_LoadObject(sopath("SDL_image"));
+    if (sdlimage_handle != NULL) {
+        SDL_version *(*sdlimage_ver_get)(void) = NULL;
+        sdlimage_ver_get = (SDL_version *(*)(void)) SDL_LoadFunction(sdlimage_handle, "IMG_Linked_Version");
+        if (sdlimage_ver_get != NULL) {
+            SDL_version *sdlimage_ver = sdlimage_ver_get();
+            libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL_image</a> version: %1.%2.%3<br>")
+                .arg(sdlimage_ver->major)
+                .arg(sdlimage_ver->minor)
+                .arg(sdlimage_ver->patch));
+        }
+        SDL_UnloadObject(sdlnet_handle);
+    }
+
+    void *sdlttf_handle = SDL_LoadObject(sopath("SDL_ttf"));
+    if (sdlttf_handle != NULL) {
+        SDL_version *(*sdlttf_ver_get)(void) = NULL;
+        sdlttf_ver_get = (SDL_version *(*)(void)) SDL_LoadFunction(sdlttf_handle, "TTF_Linked_Version");
+        if (sdlttf_ver_get != NULL) {
+            SDL_version *sdlttf_ver = sdlttf_ver_get();
+            libinfo.append(QString("<a href=\"http://www.libsdl.org/\">SDL_ttf</a> version: %1.%2.%3<br>")
+                .arg(sdlttf_ver->major)
+                .arg(sdlttf_ver->minor)
+                .arg(sdlttf_ver->patch));
+        }
+        SDL_UnloadObject(sdlnet_handle);
+    }
+
 
     libinfo.append(QString("<a href=\"http://qt-project.org/\">Qt</a> version: %1<br>").arg(QT_VERSION_STR));
 
@@ -109,6 +170,8 @@
         .arg(PHYSFS_VER_MINOR)
         .arg(PHYSFS_VER_PATCH));
 
+    // TODO: how to add Lua information?
+
     QLabel * lblLibInfo = new QLabel();
     lblLibInfo->setOpenExternalLinks(true);
     lblLibInfo->setText(libinfo);