diff --git a/code/qcommon/CMakeLists.txt b/code/qcommon/CMakeLists.txt index 2552913e..ce4ac05c 100644 --- a/code/qcommon/CMakeLists.txt +++ b/code/qcommon/CMakeLists.txt @@ -5,6 +5,8 @@ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.13.0") cmake_policy(SET CMP0076 NEW) endif() +include("./q_version.cmake") + # Shared source files for modules set(SOURCES_SHARED "${CMAKE_SOURCE_DIR}/code/qcommon/class.cpp" @@ -28,8 +30,7 @@ target_compile_definitions(qcommon INTERFACE TARGET_GAME_TYPE=${TARGET_GAME_TYPE target_include_directories(qcommon INTERFACE "../qcommon" "../script") target_compile_features(qcommon INTERFACE cxx_nullptr) target_compile_features(qcommon INTERFACE c_variadic_macros) - -include("./q_version.cmake") +target_link_libraries(qcommon INTERFACE qcommon_version) # Source files for standalone executable set(SOURCES_COMMON diff --git a/code/qcommon/q_version.cmake b/code/qcommon/q_version.cmake index e69de29b..60342dac 100644 --- a/code/qcommon/q_version.cmake +++ b/code/qcommon/q_version.cmake @@ -0,0 +1,30 @@ +add_library(qcommon_version INTERFACE) + +# Current branch +execute_process( + COMMAND git branch --show-current + OUTPUT_VARIABLE GIT_BRANCH_NAME + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Revision +execute_process( + COMMAND git show -s --format=%H HEAD + OUTPUT_VARIABLE GIT_REVISION_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +# Commit date +execute_process( + COMMAND git show -s --format=%ct + OUTPUT_VARIABLE GIT_REVISION_DATE + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +string(TIMESTAMP GIT_REVISION_DATE UTC) + +set(GIT_REVISION_DATE_HUMAN ${GIT_REVISION_DATE}) +string(TIMESTAMP GIT_REVISION_DATE_HUMAN "%b %d %Y" UTC) + +configure_file("q_version.generated.h.in" "generated/q_version.generated.h") +target_include_directories(qcommon_version INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/generated") diff --git a/code/qcommon/q_version.generated.h.in b/code/qcommon/q_version.generated.h.in new file mode 100644 index 00000000..25c11466 --- /dev/null +++ b/code/qcommon/q_version.generated.h.in @@ -0,0 +1,28 @@ +/* +=========================================================================== +Copyright (C) 2023 the OpenMoHAA team + +This file is part of OpenMoHAA source code. + +OpenMoHAA source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +OpenMoHAA source code 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with OpenMoHAA source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +// q_version.generated.h -- file versioning + +#define GIT_BRANCH_NAME "${GIT_BRANCH_NAME}" +#define GIT_REVISION_HASH "${GIT_REVISION_HASH}" +#define GIT_REVISION_DATE "${GIT_REVISION_DATE}" +#define GIT_REVISION_DATE_HUMAN "${GIT_REVISION_DATE_HUMAN}" diff --git a/code/qcommon/q_version.h b/code/qcommon/q_version.h index 1d2e6226..5b10112f 100644 --- a/code/qcommon/q_version.h +++ b/code/qcommon/q_version.h @@ -24,6 +24,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #pragma once +#include + // // Version // @@ -32,3 +34,47 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define PRODUCT_VERSION_MINOR 55 #define PRODUCT_VERSION_PATCH 1 #define PRODUCT_VERSION_STAGE "alpha" + +#ifdef GIT_BRANCH_NAME +# define PRODUCT_VERSION_BRANCH GIT_BRANCH_NAME +#else +# define PRODUCT_VERSION_BRANCH "none" +#endif + +#ifdef GIT_REVISION_HASH +# define PRODUCT_VERSION_REVISION GIT_REVISION_HASH +#else +# define PRODUCT_VERSION_REVISION "" +#endif + +#ifdef GIT_REVISION_DATE_HUMAN +# define PRODUCT_VERSION_DATE GIT_REVISION_DATE_HUMAN +#else +# define PRODUCT_VERSION_DATE __DATE__ +#endif + +#define PRODUCT_VERSION_FULL PRODUCT_NAME_FULL +#define Q3_VERSION PRODUCT_VERSION_FULL + +// +// Version display +// +#define PRODUCT_VERSION_NUMBER_STRING XSTRING(PRODUCT_VERSION_MAJOR) "." XSTRING(PRODUCT_VERSION_MINOR) "." XSTRING(PRODUCT_VERSION_PATCH) +#define PRODUCT_VERSION PRODUCT_VERSION_NUMBER_STRING "-" PRODUCT_VERSION_STAGE + +#define PRODUCT_NAME_FULL PRODUCT_NAME " - v" PRODUCT_VERSION " - ext-" PRODUCT_EXTENSION + +/* +// +// Version +// +// These values are the only one that must be set for the version +extern const unsigned int PRODUCT_VERISON_MAJOR; +extern const unsigned int PRODUCT_VERISON_MINOR; +extern const unsigned int PRODUCT_VERISON_PATCH; +extern const char* PRODUCT_VERSION_STAGE; + +extern const char* PRODUCT_VERSION_BRANCH; +extern const char* PRODUCT_VERSION_REVISION_HASH; +extern const char* PRODUCT_VERSION_REVISION_DATE; +*/