diff -r 92af50454cf2 -r 8054d9d775fd QTfrontend/ui/widget/about.cpp --- 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("
")); #endif + const SDL_version *sdl_ver = SDL_Linked_Version(); libinfo.append(QString("SDL version: %1.%2.%3
") - .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("SDL_mixer version: %1.%2.%3
") + .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("SDL_net version: %1.%2.%3
") + .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("SDL_image version: %1.%2.%3
") + .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("SDL_ttf version: %1.%2.%3
") + .arg(sdlttf_ver->major) + .arg(sdlttf_ver->minor) + .arg(sdlttf_ver->patch)); + } + SDL_UnloadObject(sdlnet_handle); + } + libinfo.append(QString("Qt version: %1
").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);