From 96a6ba196c72e955c3db822d93da38fce8cd7045 Mon Sep 17 00:00:00 2001 From: SulfurNitride Date: Thu, 23 Apr 2026 16:09:59 -0500 Subject: Fix VFS rmdir, prefix/launch issues, add version + beta channel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - VFS: add mo2_rmdir + OverwriteManager::removeDirectory so Wrye Bash shutil.rmtree stops failing with WinError 267 (issue #47). - FileRenamer: case-insensitive fallback via new resolvePathCaseInsensitive walks each path component; bulk hide in Conflict tab no longer dies with a misleading "Input/output error" when DirectoryEntry normalised parent dir case (issue #54). formatSystemMessage stops aliasing Windows error code 5 to errno 5 (EIO). - Versioning: FLUORINE_VERSION_* + fluorine_build_info.h generated from CMake; Linux createVersionInfo returns Fluorine's version. About dialog shows Fluorine version + MO2 engine + commit. Beta builds stamp "B" (issue #51). - CI: ci.yml determines channel from ref (v* tags = stable, main = beta), publishes a rolling `beta` GitHub release whose body carries a machine-parseable fluorine-meta block (timestamp, commit) for the in-app updater. - Updater: new FluorineUpdater polls GitHub API on startup, compares against embedded metadata, notifies on new release without auto-install. Channel toggle piggybacks on the existing "beta versions" checkbox. - Bethesda plugins: determineMyGamesPath no longer creates Documents/My Games/ for every possible title at plugin load; only games with a detected install path get their dirs created (issue #55). - Starfield: dataDirectory() on Linux now points at /Data instead of My Games/Starfield/Data so the single FUSE mount lands where SFSE loads plugins; My Games Data becomes a secondary symlinked mapping (issue #56). - Prefix resolution: prefer Fluorine config, then explicit fluorine/prefix_path, then legacy Settings/* keys (with a warning) so auto-detected Heroic/Bottles prefixes can't silently override a user- configured Fluorine prefix (issue #52). compatDataPathFromPrefix no longer hands Proton the wrong parent dir for plain wine prefixes. - xrandr: ensureXrandrInstalled back-fills the helper for existing SLR installs, prefix init runs it before wineboot, SLR wrap exposes xrandr-bin via --filesystem= and prepends PATH inside the container (issue #49). - Process tracking: drop the wineserver-as-last-resort fallback that made MO2 hang on Proton's session manager after game exit. Rescan the prefix for matching game executables instead (covers reparented launcher children like f4se_loader → Fallout4.exe). Unlock button now kills wineserver for the prefix (SIGTERM then SIGKILL on timeout). Co-Authored-By: Claude Opus 4.7 (1M context) --- CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b23ffd..deccb47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,48 @@ cmake_minimum_required(VERSION 3.16) project(ModOrganizer2 VERSION 2.5.3 LANGUAGES C CXX) +# --------------------------------------------------------------------------- +# Fluorine Manager version (distinct from the MO2 engine version above). +# --------------------------------------------------------------------------- +set(FLUORINE_VERSION_MAJOR 0) +set(FLUORINE_VERSION_MINOR 1) +set(FLUORINE_VERSION_PATCH 4) +set(FLUORINE_BUILD_CHANNEL "stable" CACHE STRING + "Build channel: 'stable' for tagged releases, 'beta' for rolling CI builds") +set(FLUORINE_BUILD_TIMESTAMP "" CACHE STRING + "UTC timestamp (YYYYMMDDHHMM) appended to beta builds after a 'B' suffix") +set(FLUORINE_BUILD_COMMIT "" CACHE STRING + "Short git commit SHA for the build, embedded in the About dialog") + +if(FLUORINE_BUILD_CHANNEL STREQUAL "beta") + set(FLUORINE_IS_BETA_BUILD 1) + if(FLUORINE_BUILD_TIMESTAMP STREQUAL "") + string(TIMESTAMP FLUORINE_BUILD_TIMESTAMP "%Y%m%d%H%M" UTC) + endif() +else() + set(FLUORINE_IS_BETA_BUILD 0) +endif() + +if(FLUORINE_BUILD_COMMIT STREQUAL "" AND EXISTS "${CMAKE_SOURCE_DIR}/.git") + find_program(GIT_EXECUTABLE git) + if(GIT_EXECUTABLE) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE FLUORINE_BUILD_COMMIT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET) + endif() +endif() + +configure_file( + "${CMAKE_SOURCE_DIR}/src/src/fluorine_build_info.h.in" + "${CMAKE_BINARY_DIR}/generated/fluorine_build_info.h" + @ONLY) +include_directories("${CMAKE_BINARY_DIR}/generated") + +message(STATUS "[Fluorine] Version: ${FLUORINE_VERSION_MAJOR}.${FLUORINE_VERSION_MINOR}.${FLUORINE_VERSION_PATCH} channel=${FLUORINE_BUILD_CHANNEL} timestamp=${FLUORINE_BUILD_TIMESTAMP} commit=${FLUORINE_BUILD_COMMIT}") + if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() -- cgit v1.3.1