diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | cmake/Modules/GenerateVersion.cmake | 20 | ||||
-rw-r--r-- | src/CMakeLists.txt | 12 | ||||
-rw-r--r-- | src/cmake_config.h.in | 2 | ||||
-rw-r--r-- | src/cmake_config_githash.h.in | 10 | ||||
-rw-r--r-- | src/config.h | 6 | ||||
-rw-r--r-- | src/game.cpp | 10 | ||||
-rw-r--r-- | src/guiEngine.cpp | 5 | ||||
-rw-r--r-- | src/guiPauseMenu.cpp | 3 | ||||
-rw-r--r-- | src/main.cpp | 3 | ||||
-rw-r--r-- | src/script/lua_api/l_mainmenu.cpp | 3 | ||||
-rw-r--r-- | src/server.cpp | 9 | ||||
-rw-r--r-- | src/serverlist.cpp | 3 | ||||
-rw-r--r-- | src/version.cpp | 39 | ||||
-rw-r--r-- | src/version.h | 30 |
16 files changed, 137 insertions, 22 deletions
diff --git a/.gitignore b/.gitignore index db131c29f..2e1584b1d 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ CMakeFiles/* src/CMakeFiles/* src/Makefile src/cmake_config.h +src/cmake_config_githash.h src/cmake_install.cmake src/script/CMakeFiles/* src/script/common/CMakeFiles/* diff --git a/CMakeLists.txt b/CMakeLists.txt index 2db4e4a76..f9fff75db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,9 @@ set(VERSION_MINOR 4) set(VERSION_PATCH 7) if(VERSION_EXTRA) set(VERSION_PATCH ${VERSION_PATCH}-${VERSION_EXTRA}) +else() + # Comment the following line during release + set(VERSION_PATCH ${VERSION_PATCH}-dev) endif() set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") diff --git a/cmake/Modules/GenerateVersion.cmake b/cmake/Modules/GenerateVersion.cmake new file mode 100644 index 000000000..4a7f183da --- /dev/null +++ b/cmake/Modules/GenerateVersion.cmake @@ -0,0 +1,20 @@ +# Always run during 'make' + +if(VERSION_EXTRA) + set(VERSION_GITHASH "${VERSION_STRING}") +else(VERSION_EXTRA) + execute_process(COMMAND git describe --always --tag --dirty + WORKING_DIRECTORY "${GENERATE_VERSION_SOURCE_DIR}" + OUTPUT_VARIABLE VERSION_GITHASH OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + + if(VERSION_GITHASH) + message(STATUS "*** Detected git version ${VERSION_GITHASH} ***") + else() + set(VERSION_GITHASH "${VERSION_STRING}") + endif() +endif() + +configure_file( + ${GENERATE_VERSION_SOURCE_DIR}/cmake_config_githash.h.in + ${GENERATE_VERSION_BINARY_DIR}/cmake_config_githash.h) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a5212dca..4d99f5acd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -225,11 +225,21 @@ configure_file( "${PROJECT_BINARY_DIR}/cmake_config.h" ) +# Add a target that always rebuilds cmake_config_githash.h +add_custom_target(GenerateVersion + COMMAND ${CMAKE_COMMAND} + -D "GENERATE_VERSION_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}" + -D "GENERATE_VERSION_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}" + -D "VERSION_STRING=${VERSION_STRING}" + -P "${CMAKE_SOURCE_DIR}/cmake/Modules/GenerateVersion.cmake" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") + add_subdirectory(jthread) add_subdirectory(script) add_subdirectory(util) set(common_SRCS + version.cpp rollback_interface.cpp rollback.cpp genericobject.cpp @@ -406,6 +416,7 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin") if(BUILD_CLIENT) add_executable(${PROJECT_NAME} ${minetest_SRCS}) + add_dependencies(${PROJECT_NAME} GenerateVersion) target_link_libraries( ${PROJECT_NAME} ${ZLIB_LIBRARIES} @@ -444,6 +455,7 @@ endif(BUILD_CLIENT) if(BUILD_SERVER) add_executable(${PROJECT_NAME}server ${minetestserver_SRCS}) + add_dependencies(${PROJECT_NAME}server GenerateVersion) target_link_libraries( ${PROJECT_NAME}server ${ZLIB_LIBRARIES} diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index c83df8e47..7cc2fb99e 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -18,7 +18,7 @@ #else #define CMAKE_BUILD_TYPE "Debug" #endif -#define CMAKE_BUILD_INFO "VER=@VERSION_STRING@ BUILD_TYPE="CMAKE_BUILD_TYPE" RUN_IN_PLACE=@RUN_IN_PLACE@ USE_GETTEXT=@USE_GETTEXT@ USE_SOUND=@USE_SOUND@ USE_CURL=@USE_CURL@ USE_FREETYPE=@USE_FREETYPE@ USE_LUAJIT=@USE_LUAJIT@ STATIC_SHAREDIR=@SHAREDIR@" +#define CMAKE_BUILD_INFO "BUILD_TYPE="CMAKE_BUILD_TYPE" RUN_IN_PLACE=@RUN_IN_PLACE@ USE_GETTEXT=@USE_GETTEXT@ USE_SOUND=@USE_SOUND@ USE_CURL=@USE_CURL@ USE_FREETYPE=@USE_FREETYPE@ USE_LUAJIT=@USE_LUAJIT@ STATIC_SHAREDIR=@SHAREDIR@" #endif diff --git a/src/cmake_config_githash.h.in b/src/cmake_config_githash.h.in new file mode 100644 index 000000000..4d5fcd60f --- /dev/null +++ b/src/cmake_config_githash.h.in @@ -0,0 +1,10 @@ +// Filled in by the build system +// Separated from cmake_config.h to avoid excessive rebuilds on every commit + +#ifndef CMAKE_CONFIG_GITHASH_H +#define CMAKE_CONFIG_GITHASH_H + +#define CMAKE_VERSION_GITHASH "@VERSION_GITHASH@" + +#endif + diff --git a/src/config.h b/src/config.h index 3cb59e619..652c9008a 100644 --- a/src/config.h +++ b/src/config.h @@ -7,22 +7,18 @@ #define CONFIG_H #define PROJECT_NAME "Minetest" -#define VERSION_STRING "unknown" #define RUN_IN_PLACE 0 #define USE_GETTEXT 0 #define USE_SOUND 0 #define USE_CURL 0 #define USE_FREETYPE 0 #define STATIC_SHAREDIR "" -#define BUILD_INFO "non-cmake" #define USE_LEVELDB 0 #ifdef USE_CMAKE_CONFIG_H #include "cmake_config.h" #undef PROJECT_NAME #define PROJECT_NAME CMAKE_PROJECT_NAME - #undef VERSION_STRING - #define VERSION_STRING CMAKE_VERSION_STRING #undef RUN_IN_PLACE #define RUN_IN_PLACE CMAKE_RUN_IN_PLACE #undef USE_GETTEXT @@ -35,8 +31,6 @@ #define USE_FREETYPE CMAKE_USE_FREETYPE #undef STATIC_SHAREDIR #define STATIC_SHAREDIR CMAKE_STATIC_SHAREDIR - #undef BUILD_INFO - #define BUILD_INFO CMAKE_BUILD_INFO #undef USE_LEVELDB #define USE_LEVELDB CMAKE_USE_LEVELDB #endif diff --git a/src/game.cpp b/src/game.cpp index 851f5dd9d..71a578a65 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "tool.h" #include "guiChatConsole.h" #include "config.h" +#include "version.h" #include "clouds.h" #include "particles.h" #include "camera.h" @@ -2963,9 +2964,6 @@ void the_game( //TimeTaker guiupdatetimer("Gui updating"); - const char program_name_and_version[] = - "Minetest " VERSION_STRING; - if(show_debug) { static float drawtime_avg = 0; @@ -2979,7 +2977,7 @@ void the_game( std::ostringstream os(std::ios_base::binary); os<<std::fixed - <<program_name_and_version + <<"Minetest "<<minetest_version_hash <<" (R: range_all="<<draw_control.range_all<<")" <<std::setprecision(0) <<" drawtime = "<<drawtime_avg @@ -2995,7 +2993,9 @@ void the_game( } else if(show_hud || show_chat) { - guitext->setText(narrow_to_wide(program_name_and_version).c_str()); + std::ostringstream os(std::ios_base::binary); + os<<"Minetest "<<minetest_version_hash; + guitext->setText(narrow_to_wide(os.str()).c_str()); guitext->setVisible(true); } else diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index 547f393a4..ac19274c3 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "scripting_mainmenu.h" #include "config.h" +#include "version.h" #include "porting.h" #include "filesys.h" #include "main.h" @@ -157,7 +158,7 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, //create topleft header core::rect<s32> rect(0, 0, 500, 40); rect += v2s32(4, 0); - std::string t = "Minetest " VERSION_STRING; + std::string t = std::string("Minetest ") + minetest_version_hash; m_irr_toplefttext = m_device->getGUIEnvironment()->addStaticText(narrow_to_wide(t).c_str(), @@ -553,7 +554,7 @@ bool GUIEngine::downloadFile(std::string url,std::string target) { /******************************************************************************/ void GUIEngine::setTopleftText(std::string append) { - std::string toset = "Minetest " VERSION_STRING; + std::string toset = std::string("Minetest ") + minetest_version_hash; if (append != "") { toset += " / "; diff --git a/src/guiPauseMenu.cpp b/src/guiPauseMenu.cpp index f5d323a9b..ba103b740 100644 --- a/src/guiPauseMenu.cpp +++ b/src/guiPauseMenu.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "serialization.h" #include "porting.h" #include "config.h" +#include "version.h" #include "main.h" #include <IGUICheckBox.h> #include <IGUIEditBox.h> @@ -195,7 +196,7 @@ void GUIPauseMenu::regenerateGui(v2u32 screensize) std::ostringstream os; os<<"Minetest\n"; - os<<BUILD_INFO<<"\n"; + os<<minetest_build_info<<"\n"; os<<"path_user = "<<wrap_rows(porting::path_user, 20)<<"\n"; Environment->addStaticText(narrow_to_wide(os.str()).c_str(), rect, false, true, this, 259); diff --git a/src/main.cpp b/src/main.cpp index f34e24abc..10547b711 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -58,6 +58,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiMessageMenu.h" #include "filesys.h" #include "config.h" +#include "version.h" #include "guiMainMenu.h" #include "game.h" #include "keycode.h" @@ -903,7 +904,7 @@ int main(int argc, char *argv[]) // Print startup message infostream<<PROJECT_NAME<< " "<<_("with")<<" SER_FMT_VER_HIGHEST_READ="<<(int)SER_FMT_VER_HIGHEST_READ - <<", "<<BUILD_INFO + <<", "<<minetest_build_info <<std::endl; /* diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 55376690e..ff0d52774 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiKeyChangeMenu.h" #include "guiFileSelectMenu.h" #include "subgame.h" +#include "version.h" #include "porting.h" #include "filesys.h" #include "convert_json.h" @@ -923,7 +924,7 @@ int ModApiMainMenu::l_show_file_open_dialog(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_version(lua_State *L) { - lua_pushstring(L,VERSION_STRING); + lua_pushstring(L, minetest_version_simple); return 1; } diff --git a/src/server.cpp b/src/server.cpp index 492ad907b..c144be1ba 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "voxel.h" #include "config.h" +#include "version.h" #include "filesys.h" #include "mapblock.h" #include "serverobject.h" @@ -1855,7 +1856,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) DenyAccess(peer_id, std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(VERSION_STRING) + L"." + + narrow_to_wide(minetest_version_simple) + L"." ); return; } @@ -1903,7 +1904,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) DenyAccess(peer_id, std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(VERSION_STRING) + L",\n" + + narrow_to_wide(minetest_version_simple) + L",\n" + L"server's PROTOCOL_VERSION is " + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + L"..." @@ -1925,7 +1926,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) DenyAccess(peer_id, std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(VERSION_STRING) + L",\n" + + narrow_to_wide(minetest_version_simple) + L",\n" + L"server's PROTOCOL_VERSION (strict) is " + narrow_to_wide(itos(LATEST_PROTOCOL_VERSION)) + L", client's PROTOCOL_VERSION is " @@ -4823,7 +4824,7 @@ std::wstring Server::getStatusString() std::wostringstream os(std::ios_base::binary); os<<L"# Server: "; // Version - os<<L"version="<<narrow_to_wide(VERSION_STRING); + os<<L"version="<<narrow_to_wide(minetest_version_simple); // Uptime os<<L", uptime="<<m_uptime.get(); // Max lag estimate diff --git a/src/serverlist.cpp b/src/serverlist.cpp index 4db5f3ecd..908f048cb 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include <sstream> #include <algorithm> +#include "version.h" #include "main.h" // for g_settings #include "settings.h" #include "serverlist.h" @@ -202,7 +203,7 @@ void sendAnnounce(std::string action, u16 clients, double uptime, std::string ga if (action != "delete") { server["name"] = g_settings->get("server_name"); server["description"] = g_settings->get("server_description"); - server["version"] = VERSION_STRING; + server["version"] = minetest_version_simple; server["url"] = g_settings->get("server_url"); server["creative"] = g_settings->get("creative_mode"); server["damage"] = g_settings->get("enable_damage"); diff --git a/src/version.cpp b/src/version.cpp new file mode 100644 index 000000000..e5de8a61e --- /dev/null +++ b/src/version.cpp @@ -0,0 +1,39 @@ +/* +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "version.h" +#include "config.h" + +#ifdef USE_CMAKE_CONFIG_H + +#include "cmake_config_githash.h" + +const char *minetest_version_simple = CMAKE_VERSION_STRING; +const char *minetest_version_hash = CMAKE_VERSION_GITHASH; +const char *minetest_build_info = + "VER=" CMAKE_VERSION_GITHASH " " CMAKE_BUILD_INFO; + +#else + +const char *minetest_version_simple = "unknown"; +const char *minetest_version_hash = "unknown"; +const char *minetest_build_info = "non-cmake"; + +#endif + diff --git a/src/version.h b/src/version.h new file mode 100644 index 000000000..0143d91a4 --- /dev/null +++ b/src/version.h @@ -0,0 +1,30 @@ +/* +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef VERSION_HEADER +#define VERSION_HEADER + +#include "config.h" + +extern const char *minetest_version_simple; +extern const char *minetest_version_hash; +extern const char *minetest_build_info; + +#endif + |