diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt
index 30e15053..82486d44 100644
--- a/cockatrice/CMakeLists.txt
+++ b/cockatrice/CMakeLists.txt
@@ -69,7 +69,8 @@ SET(cockatrice_SOURCES
src/localserverinterface.cpp
src/localclient.cpp
src/priceupdater.cpp
- src/soundengine.cpp
+ src/soundengine.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/../common/version_string.cpp
)
SET(cockatrice_HEADERS
src/abstractcounter.h
@@ -153,7 +154,7 @@ set(cockatrice_TS
translations/cockatrice_pt.ts
translations/cockatrice_ru.ts
translations/cockatrice_sk.ts
-)
+)
if(WIN32)
set(cockatrice_SOURCES ${cockatrice_SOURCES} cockatrice.rc)
diff --git a/cockatrice/src/main.h b/cockatrice/src/main.h
index 34ee91df..8b66b716 100644
--- a/cockatrice/src/main.h
+++ b/cockatrice/src/main.h
@@ -9,7 +9,6 @@ extern CardDatabase *db;
extern QTranslator *translator;
const QString translationPrefix = "cockatrice";
-const QString versionString = "0.20111113";
void installNewTranslator();
diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp
index 573653d2..01d47b2d 100644
--- a/cockatrice/src/window_main.cpp
+++ b/cockatrice/src/window_main.cpp
@@ -40,6 +40,8 @@
#include "settingscache.h"
#include "tab_game.h"
+#include "version_string.h"
+
#include "pb/game_replay.pb.h"
#include "pb/room_commands.pb.h"
#include "pb/event_connection_closed.pb.h"
@@ -210,7 +212,7 @@ void MainWindow::actAbout()
{
QMessageBox::about(this, tr("About Cockatrice"), QString(
"Cockatrice
"
- + tr("Version %1").arg(versionString)
+ + tr("Version %1").arg(VERSION_STRING)
+ "
" + tr("Authors:") + "
Max-Wilhelm Bruker
Marcus Schütz
"
+ "" + tr("Translators:") + "
"
+ tr("Spanish:") + " Víctor Martínez
"
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt
index 1b35a2e1..38490913 100644
--- a/common/CMakeLists.txt
+++ b/common/CMakeLists.txt
@@ -45,3 +45,10 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
add_subdirectory(pb)
add_library(cockatrice_common ${common_SOURCES} ${common_HEADERS_MOC})
target_link_libraries(cockatrice_common cockatrice_protocol)
+
+add_custom_target(versionheader ALL DEPENDS version_header)
+add_custom_command(
+ OUTPUT version_header ${CMAKE_CURRENT_BINARY_DIR}/versionheader.h
+ COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/getversion.cmake
+)
+
diff --git a/common/getversion.cmake b/common/getversion.cmake
new file mode 100644
index 00000000..ec5fe753
--- /dev/null
+++ b/common/getversion.cmake
@@ -0,0 +1,29 @@
+find_package(Git)
+if(GIT_FOUND)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} describe --long --always
+ RESULT_VARIABLE res_var
+ OUTPUT_VARIABLE GIT_COM_ID
+ )
+ if( NOT ${res_var} EQUAL 0 )
+ set( GIT_COMMIT_ID "git commit id unknown")
+ message( WARNING "Git failed (not a repo, or no tags). Build will not contain git revision info." )
+ endif()
+ string( REPLACE "\n" "" GIT_COMMIT_ID "${GIT_COM_ID}" )
+else()
+ set( GIT_COMMIT_ID "unknown (git not found!)")
+ message( WARNING "Git not found. Build will not contain git revision info." )
+endif()
+
+set( hstring "extern const char *VERSION_STRING\;\n" )
+set( cppstring "const char * VERSION_STRING = \"${GIT_COMMIT_ID}\"\;\n")
+
+file(WRITE version_string.cpp.txt ${cppstring} )
+file(WRITE version_string.h.txt ${hstring} )
+
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different version_string.h.txt ${CMAKE_CURRENT_BINARY_DIR}/version_string.h
+)
+execute_process(
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different version_string.cpp.txt ${CMAKE_CURRENT_BINARY_DIR}/version_string.cpp
+)
diff --git a/servatrice/CMakeLists.txt b/servatrice/CMakeLists.txt
index 1f50bded..a14223c0 100644
--- a/servatrice/CMakeLists.txt
+++ b/servatrice/CMakeLists.txt
@@ -2,8 +2,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
PROJECT(servatrice)
-#add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../common ${CMAKE_CURRENT_BINARY_DIR}/common)
-
SET(servatrice_SOURCES
src/main.cpp
src/passwordhasher.cpp
@@ -11,6 +9,7 @@ SET(servatrice_SOURCES
src/server_logger.cpp
src/serversocketinterface.cpp
src/serversocketthread.cpp
+ ${CMAKE_CURRENT_BINARY_DIR}/../common/version_string.cpp
)
SET(servatrice_HEADERS
src/servatrice.h
@@ -26,7 +25,8 @@ FIND_PACKAGE(Qt4 REQUIRED)
FIND_PACKAGE(Protobuf REQUIRED)
FIND_PACKAGE(Libgcrypt REQUIRED)
-set(CMAKE_BUILD_TYPE Release)
+#set(CMAKE_BUILD_TYPE Release)
+set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -O2")
set(CMAKE_CXX_FLAGS_RELEASE "-O2")
QT4_WRAP_CPP(servatrice_HEADERS_MOC ${servatrice_HEADERS})
diff --git a/servatrice/src/main.cpp b/servatrice/src/main.cpp
index 02da15df..a0e1e26b 100644
--- a/servatrice/src/main.cpp
+++ b/servatrice/src/main.cpp
@@ -28,6 +28,7 @@
#include "servatrice.h"
#include "server_logger.h"
#include "rng_sfmt.h"
+#include "version_string.h"
#ifdef Q_OS_UNIX
#include
#endif
@@ -137,7 +138,7 @@ int main(int argc, char *argv[])
#endif
rng = new RNG_SFMT;
- std::cerr << "Servatrice " << Servatrice::versionString.toStdString() << " starting." << std::endl;
+ std::cerr << "Servatrice " << VERSION_STRING << " starting." << std::endl;
std::cerr << "-------------------------" << std::endl;
if (testRandom)
diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp
index 028bf1b3..22b2b265 100644
--- a/servatrice/src/servatrice.cpp
+++ b/servatrice/src/servatrice.cpp
@@ -630,5 +630,3 @@ void Servatrice::shutdownTimeout()
if (!shutdownMinutes)
deleteLater();
}
-
-const QString Servatrice::versionString = "Servatrice 0.20111113";
diff --git a/servatrice/src/servatrice.h b/servatrice/src/servatrice.h
index 3904947e..08b98612 100644
--- a/servatrice/src/servatrice.h
+++ b/servatrice/src/servatrice.h
@@ -53,7 +53,6 @@ private slots:
void shutdownTimeout();
public:
mutable QMutex dbMutex;
- static const QString versionString;
Servatrice(QSettings *_settings, QObject *parent = 0);
~Servatrice();
bool openDatabase();
diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp
index 0cf3a52c..d14e8ca0 100644
--- a/servatrice/src/serversocketinterface.cpp
+++ b/servatrice/src/serversocketinterface.cpp
@@ -45,6 +45,7 @@
#include "pb/serverinfo_user.pb.h"
#include "pb/serverinfo_deckstorage.pb.h"
+#include "version_string.h"
#include
#include
@@ -61,7 +62,7 @@ ServerSocketInterface::ServerSocketInterface(Servatrice *_server, QTcpSocket *_s
Event_ServerIdentification identEvent;
identEvent.set_server_name(servatrice->getServerName().toStdString());
- identEvent.set_server_version(Servatrice::versionString.toStdString());
+ identEvent.set_server_version(VERSION_STRING);
identEvent.set_protocol_version(protocolVersion);
SessionEvent *identSe = prepareSessionEvent(identEvent);
sendProtocolItem(*identSe);