diff --git a/.gitignore b/.gitignore index dfb56dc359..f25adf58e6 100644 --- a/.gitignore +++ b/.gitignore @@ -68,7 +68,6 @@ apps/wizard/ui_intropage.h apps/wizard/ui_languageselectionpage.h apps/wizard/ui_methodselectionpage.h components/ui_contentselector.h -components/version/version.cpp docs/mainpage.hpp docs/Doxyfile docs/DoxyfilePages diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 8586f490e8..20bd62d145 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -225,6 +225,10 @@ if(APPLE AND BUILD_OPENCS) MACOSX_PACKAGE_LOCATION Resources/resources) set_source_files_properties(${OPENCS_OPENMW_CFG} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) + + add_custom_command(TARGET openmw-cs + POST_BUILD + COMMAND cp "${OpenMW_BINARY_DIR}/resources/version" "${OPENCS_BUNDLE_RESOURCES_DIR}/resources") endif() target_link_libraries(openmw-cs-lib diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index ec9636fde1..3df00f1be0 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -210,6 +210,10 @@ if(APPLE) configure_file("${OpenMW_BINARY_DIR}/openmw.cfg" ${BUNDLE_RESOURCES_DIR} COPYONLY) configure_file("${OpenMW_BINARY_DIR}/gamecontrollerdb.txt" ${BUNDLE_RESOURCES_DIR} COPYONLY) + add_custom_command(TARGET openmw + POST_BUILD + COMMAND cp "${OpenMW_BINARY_DIR}/resources/version" "${BUNDLE_RESOURCES_DIR}/resources") + find_library(COCOA_FRAMEWORK Cocoa) find_library(IOKIT_FRAMEWORK IOKit) target_link_libraries(openmw ${COCOA_FRAMEWORK} ${IOKIT_FRAMEWORK}) diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 1d3232290d..3e7f151fad 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -423,6 +423,9 @@ void OMW::Engine::addArchive(const std::string& archive) void OMW::Engine::setResourceDir(const std::filesystem::path& parResDir) { mResDir = parResDir; + if (!Version::checkResourcesVersion(mResDir)) + Log(Debug::Error) << "Resources dir " << mResDir + << " doesn't match OpenMW binary, the game may work incorrectly."; } // Set start cell name diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake index a4816a53b6..a77b0d5b0a 100644 --- a/cmake/GitVersion.cmake +++ b/cmake/GitVersion.cmake @@ -1,6 +1,6 @@ execute_process ( COMMAND ${GIT_EXECUTABLE} rev-list --tags --max-count=1 - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${OpenMW_SOURCE_DIR} RESULT_VARIABLE EXITCODE1 OUTPUT_VARIABLE TAGHASH OUTPUT_STRIP_TRAILING_WHITESPACE @@ -8,7 +8,7 @@ execute_process ( execute_process ( COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + WORKING_DIRECTORY ${OpenMW_SOURCE_DIR} RESULT_VARIABLE EXITCODE2 OUTPUT_VARIABLE COMMITHASH OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -28,4 +28,5 @@ endif () include(${MACROSFILE}) -configure_file(${VERSION_IN_FILE} ${VERSION_FILE}) +configure_resource_file(${VERSION_RESOURCE_FILE_IN} ${OpenMW_BINARY_DIR} ${VERSION_RESOURCE_FILE_RELATIVE}) +configure_file("${OpenMW_SOURCE_DIR}/${VERSION_CPP_FILE}.in" "${OpenMW_BINARY_DIR}/${VERSION_CPP_FILE}") diff --git a/cmake/OpenMWMacros.cmake b/cmake/OpenMWMacros.cmake index 2762b8ff72..0561fcefd7 100644 --- a/cmake/OpenMWMacros.cmake +++ b/cmake/OpenMWMacros.cmake @@ -62,13 +62,6 @@ macro (add_component_dir dir) list (APPEND cppfiles "${f}") endforeach (f) - if (u MATCHES ".*[ch]pp") - list (APPEND files "${dir}/${u}") - list (APPEND COMPONENT_FILES "${dir}/${u}") - endif() - if (u MATCHES ".*cpp") - list (APPEND cppfiles "${dir}/${u}") - endif() endforeach (u) if (OPENMW_UNITY_BUILD) diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index d519c1cd92..71e508e882 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -6,18 +6,22 @@ if(APPLE) endif(APPLE) # Version file -set (VERSION_IN_FILE "${OpenMW_SOURCE_DIR}/components/version/version.cpp.in") -set (VERSION_FILE "${OpenMW_SOURCE_DIR}/components/version/version.cpp") +set (VERSION_RESOURCE_FILE_IN "${OpenMW_SOURCE_DIR}/files/version.in") +set (VERSION_RESOURCE_FILE_RELATIVE "resources/version") +set (VERSION_CPP_FILE "components/version/version.cpp") + if (GIT_CHECKOUT) get_generator_is_multi_config(multi_config) add_custom_command ( - OUTPUT ${VERSION_FILE} - DEPENDS ${VERSION_IN_FILE} + OUTPUT "${OpenMW_BINARY_DIR}/${VERSION_CPP_FILE}" + DEPENDS "${OpenMW_SOURCE_DIR}/${VERSION_CPP_FILE}.in" COMMAND ${CMAKE_COMMAND} -DGIT_EXECUTABLE=${GIT_EXECUTABLE} - -DPROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR} - -DVERSION_IN_FILE=${VERSION_IN_FILE} - -DVERSION_FILE=${VERSION_FILE} + -DOpenMW_SOURCE_DIR=${OpenMW_SOURCE_DIR} + -DOpenMW_BINARY_DIR=${OpenMW_BINARY_DIR} + -DVERSION_RESOURCE_FILE_IN=${VERSION_RESOURCE_FILE_IN} + -DVERSION_RESOURCE_FILE_RELATIVE=${VERSION_RESOURCE_FILE_RELATIVE} + -DVERSION_CPP_FILE=${VERSION_CPP_FILE} -DOPENMW_VERSION_MAJOR=${OPENMW_VERSION_MAJOR} -DOPENMW_VERSION_MINOR=${OPENMW_VERSION_MINOR} -DOPENMW_VERSION_RELEASE=${OPENMW_VERSION_RELEASE} @@ -29,9 +33,12 @@ if (GIT_CHECKOUT) -P ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/GitVersion.cmake VERBATIM) else (GIT_CHECKOUT) - configure_file(${VERSION_IN_FILE} ${VERSION_FILE}) + configure_resource_file(${VERSION_RESOURCE_FILE_IN} ${OpenMW_BINARY_DIR} ${VERSION_RESOURCE_FILE_RELATIVE}) + configure_file("${OpenMW_SOURCE_DIR}/${VERSION_CPP_FILE}.in" "${OpenMW_BINARY_DIR}/${VERSION_CPP_FILE}") endif (GIT_CHECKOUT) +list (APPEND COMPONENT_FILES "${OpenMW_BINARY_DIR}/${VERSION_CPP_FILE}") + # source files add_component_dir (lua @@ -312,7 +319,6 @@ add_component_dir (sdlutil add_component_dir (version version - version.cpp ) add_component_dir (fallback diff --git a/components/version/version.cpp.in b/components/version/version.cpp.in index f2748b9186..d95e47cbd6 100644 --- a/components/version/version.cpp.in +++ b/components/version/version.cpp.in @@ -1,4 +1,7 @@ -#include "version.hpp" +#include + +#include +#include namespace Version { @@ -33,4 +36,15 @@ namespace Version } return str; } + + bool checkResourcesVersion(const std::filesystem::path& resourcePath) + { + std::ifstream stream(resourcePath / "version"); + std::string version, commitHash, tagHash; + std::getline(stream, version); + std::getline(stream, commitHash); + std::getline(stream, tagHash); + return getVersion() == version && getCommitHash() == commitHash && getTagHash() == tagHash; + } + } diff --git a/components/version/version.hpp b/components/version/version.hpp index c4a62c9e1e..64b8cd05e0 100644 --- a/components/version/version.hpp +++ b/components/version/version.hpp @@ -1,6 +1,7 @@ #ifndef VERSION_HPP #define VERSION_HPP +#include #include #include @@ -13,6 +14,8 @@ namespace Version // Prepares string that contains version and commit hash. std::string getOpenmwVersionDescription(); + + bool checkResourcesVersion(const std::filesystem::path& resourcePath); } #endif // VERSION_HPP diff --git a/files/version.in b/files/version.in new file mode 100644 index 0000000000..f894d3b4a5 --- /dev/null +++ b/files/version.in @@ -0,0 +1,3 @@ +@OPENMW_VERSION@ +@OPENMW_VERSION_COMMITHASH@ +@OPENMW_VERSION_TAGHASH@