diff --git a/Cargo.lock b/Cargo.lock index c44ae9ec..2865ec20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -545,7 +545,7 @@ dependencies = [ [[package]] name = "libloot" -version = "0.26.3" +version = "0.27.0" dependencies = [ "crc32fast", "esplugin", @@ -565,7 +565,7 @@ dependencies = [ [[package]] name = "libloot-cpp" -version = "0.26.3" +version = "0.27.0" dependencies = [ "cxx", "cxx-build", @@ -576,14 +576,14 @@ dependencies = [ [[package]] name = "libloot-ffi-errors" -version = "0.26.3" +version = "0.27.0" dependencies = [ "libloot", ] [[package]] name = "libloot-nodejs" -version = "0.26.3" +version = "0.27.0" dependencies = [ "libloot", "libloot-ffi-errors", @@ -594,7 +594,7 @@ dependencies = [ [[package]] name = "libloot-python" -version = "0.26.3" +version = "0.27.0" dependencies = [ "libloot", "libloot-ffi-errors", @@ -776,7 +776,7 @@ dependencies = [ [[package]] name = "parameterized-test" -version = "0.26.3" +version = "0.27.0" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index a4c7110a..2d14270f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libloot" -version = "0.26.3" +version = "0.27.0" edition = "2024" license = "GPL-3.0-or-later" diff --git a/README.md b/README.md index fc49583a..38fae966 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # libloot-rs -This is an **experimental** reimplementation of [libloot](https://github.com/loot/libloot) using Rust instead of C++, that should match libloot v0.26.2. +This is an **experimental** reimplementation of [libloot](https://github.com/loot/libloot) using Rust instead of C++, that should match libloot v0.27.0. There is one intentional difference in behaviour: if a plugin has metadata but it is all filtered out when conditions are evaluated, getting its metadata returns `None` instead of a name-only PluginMetadata object. diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index ddee2140..3bf3f58f 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -234,7 +234,7 @@ endif() # Install ######################################## -set(LIBLOOT_VERSION "0.26.3") +set(LIBLOOT_VERSION "0.27.0") set_property(TARGET loot PROPERTY VERSION ${LIBLOOT_VERSION}) set_property(TARGET loot PROPERTY SOVERSION 0) diff --git a/cpp/Cargo.toml b/cpp/Cargo.toml index 772d14b5..b7c037a2 100644 --- a/cpp/Cargo.toml +++ b/cpp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libloot-cpp" -version = "0.26.3" +version = "0.27.0" edition = "2024" license = "GPL-3.0-or-later" diff --git a/cpp/README.md b/cpp/README.md index 869c08cd..dd93b00c 100644 --- a/cpp/README.md +++ b/cpp/README.md @@ -1,6 +1,6 @@ # libloot-rs C++ wrapper -This is a wrapper around libloot that provides a C++ interface that's ABI-compatible with libloot v0.26.2. +This is a wrapper around libloot that provides a C++ interface that's ABI-compatible with libloot v0.27.0. The wrapper has two layers: diff --git a/cpp/docs/api/changelog.rst b/cpp/docs/api/changelog.rst index 35622741..1b878f8b 100644 --- a/cpp/docs/api/changelog.rst +++ b/cpp/docs/api/changelog.rst @@ -2,6 +2,48 @@ Version History *************** +0.27.0 - 2025-06-08 +=================== + +Added +----- + +- :cpp:any:`loot::PluginNotLoadedError`, which is thrown when trying to sort a + load order that contains a plugin that hasn't been loaded, or when trying to + load a Morrowind, OpenMW or Starfield plugin that has a master that has not + been loaded. + +Changed +------- + +- Windows builds that are built using MSVC (including official release builds) + are now built with the ``/GL`` flag to enable whole-program optimisation + (including link-time optimisation). +- Official Windows builds are now built using MSVC 2022, so they now require the + MSVC 2022 redistributable to be installed. + +Removed +------- + +- ``LogLevel::Fatal`` as it was never used. +- ``ConditionalMetadata``, which was the parent class of :cpp:any:`loot::File`, + :cpp:any:`loot::Message` and :cpp:any:`loot::Tag`. Its ``GetCondition()`` + member function has been moved to those child classes. There is no direct + replacement for its ``IsConditional()`` member function. +- ``FileAccessError`` and ``ConditionSyntaxError``: ``std::runtime_error`` + exceptions are thrown instead. +- ``loot_condition_interpreter_category()`` as the error category it returned is + no longer used. +- ``libloadorder_category()``, as errors reported by libloadorder are now thrown + as ``std::runtime_error`` exceptions instead of ``std::system_error`` + exceptions. +- ``esplugin_category()``, as errors reported by esplugin are now thrown as + either :cpp:any:`loot::PluginNotLoadedError` or ``std::runtime_error`` + exceptions instead of ``std::system_error`` exceptions. +- Support for the old Boost-style (e.g. ``%1%``) message placeholder syntax that + was replaced in the v0.21 metadata syntax by the curly brace syntax (e.g. + ``{0}``). + 0.26.3 - 2025-05-28 =================== diff --git a/cpp/docs/pyproject.toml b/cpp/docs/pyproject.toml index 09a705e9..3c803e6c 100644 --- a/cpp/docs/pyproject.toml +++ b/cpp/docs/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "libloot-cpp-docs" -version = "0.26.3" +version = "0.27.0" requires-python = ">=3.11" dependencies = [ "breathe==4.36.0", diff --git a/cpp/docs/uv.lock b/cpp/docs/uv.lock index 2b00520c..ac83edc5 100644 --- a/cpp/docs/uv.lock +++ b/cpp/docs/uv.lock @@ -139,7 +139,7 @@ wheels = [ [[package]] name = "libloot-cpp-docs" -version = "0.26.2" +version = "0.27.0" source = { virtual = "." } dependencies = [ { name = "breathe" }, diff --git a/cpp/include/loot/loot_version.h b/cpp/include/loot/loot_version.h index e2794ab4..e6080a77 100644 --- a/cpp/include/loot/loot_version.h +++ b/cpp/include/loot/loot_version.h @@ -34,10 +34,10 @@ namespace loot { inline constexpr unsigned int LIBLOOT_VERSION_MAJOR = 0; /** @brief libloot's minor version number. */ -inline constexpr unsigned int LIBLOOT_VERSION_MINOR = 26; +inline constexpr unsigned int LIBLOOT_VERSION_MINOR = 27; /** @brief libloot's patch version number. */ -inline constexpr unsigned int LIBLOOT_VERSION_PATCH = 3; +inline constexpr unsigned int LIBLOOT_VERSION_PATCH = 0; /** * @brief Get the library version. diff --git a/cpp/src/api/resource.rc b/cpp/src/api/resource.rc index 95db62fb..dede32d9 100644 --- a/cpp/src/api/resource.rc +++ b/cpp/src/api/resource.rc @@ -2,8 +2,8 @@ #include 1 VERSIONINFO -FILEVERSION 0, 26, 3, 0 -PRODUCTVERSION 0, 26, 3, 0 +FILEVERSION 0, 27, 0, 0 +PRODUCTVERSION 0, 27, 0, 0 FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL BEGIN @@ -13,12 +13,12 @@ BLOCK "040904b0" BEGIN VALUE "CompanyName", "LOOT" VALUE "FileDescription", "Library providing LOOT's core functionality" -VALUE "FileVersion", "0.26.3" +VALUE "FileVersion", "0.27.0" VALUE "InternalName", "loot" VALUE "LegalCopyright", "Copyright (C) 2013-2022 Oliver Hamlet" VALUE "OriginalFilename", "loot.dll" VALUE "ProductName", "LOOT" -VALUE "ProductVersion", "0.26.3" +VALUE "ProductVersion", "0.27.0" END END BLOCK "VarFileInfo" diff --git a/ffi-errors/Cargo.toml b/ffi-errors/Cargo.toml index 8d1d5ed8..171e3bd2 100644 --- a/ffi-errors/Cargo.toml +++ b/ffi-errors/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libloot-ffi-errors" -version = "0.26.3" +version = "0.27.0" edition = "2024" license = "GPL-3.0-or-later" diff --git a/nodejs/Cargo.toml b/nodejs/Cargo.toml index 53df7751..2ea2ef48 100644 --- a/nodejs/Cargo.toml +++ b/nodejs/Cargo.toml @@ -1,7 +1,7 @@ [package] edition = "2021" name = "libloot-nodejs" -version = "0.26.3" +version = "0.27.0" license = "GPL-3.0-or-later" [lib] diff --git a/nodejs/__test__/index.spec.mjs b/nodejs/__test__/index.spec.mjs index 7395e466..b5cb6752 100644 --- a/nodejs/__test__/index.spec.mjs +++ b/nodejs/__test__/index.spec.mjs @@ -7,7 +7,7 @@ test('liblootVersion', t => { }); test('isCompatible', t => { - t.is(isCompatible(0, 26, 0), true) + t.is(isCompatible(0, 27, 0), true) }); test('Group equality', t => { diff --git a/nodejs/npm/linux-x64-gnu/package.json b/nodejs/npm/linux-x64-gnu/package.json index 5932ae11..ade45a77 100644 --- a/nodejs/npm/linux-x64-gnu/package.json +++ b/nodejs/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "libloot-nodejs-linux-x64-gnu", - "version": "0.26.3", + "version": "0.27.0", "os": [ "linux" ], diff --git a/nodejs/npm/win32-x64-msvc/package.json b/nodejs/npm/win32-x64-msvc/package.json index 01560557..bd122b09 100644 --- a/nodejs/npm/win32-x64-msvc/package.json +++ b/nodejs/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "libloot-nodejs-win32-x64-msvc", - "version": "0.26.3", + "version": "0.27.0", "os": [ "win32" ], diff --git a/nodejs/package.json b/nodejs/package.json index 8b14605c..94fcc7ea 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -1,6 +1,6 @@ { "name": "libloot-nodejs", - "version": "0.26.3", + "version": "0.27.0", "main": "index.js", "types": "index.d.ts", "napi": { diff --git a/parameterized-test/Cargo.toml b/parameterized-test/Cargo.toml index 615b966a..7f379260 100644 --- a/parameterized-test/Cargo.toml +++ b/parameterized-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "parameterized-test" -version = "0.26.3" +version = "0.27.0" edition = "2024" license = "MIT" diff --git a/python/Cargo.toml b/python/Cargo.toml index f93f7ed5..699a8739 100644 --- a/python/Cargo.toml +++ b/python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "libloot-python" -version = "0.26.3" +version = "0.27.0" edition = "2024" license = "GPL-3.0-or-later"