131 Commits
Author SHA1 Message Date
Oliver Hamlet db97a0786a Add Database::set_user_known_bash_tags() 2026-01-02 15:30:40 +00:00
Oliver Hamlet 2fe107d66b Add Database::user_known_bash_tags() 2026-01-02 15:30:24 +00:00
Oliver Hamlet c322e27e1e Rename CMake target from loot to libloot
On Windows using "loot" causes a name collisions with LOOT itself:

- for the MSVC project name, it clashes with LOOT's own project,
  despite the difference in case. This means that you can't build LOOT
  in Visual Studio when using FetchContent to handle the libloot
  dependency (running CMake on the CLI works though).
- for the PDB file, LOOT has LOOT.pdb and libloot has loot.pdb, which
  appear to be the same due to file paths being case-insensitive. This
  makes it more difficult to debug LOOT with the relevant debug info
  loaded.

Renaming the CMake target adds a "lib" prefix to the Visual Studio
project name and the artifact filenames:

- loot.vcxproj* -> libloot.vcxproj*
- loot.dll -> libloot.dll
- loot.lib -> libloot.lib
- loot.pdb -> libloot.pdb

The Linux build artifact filenames are unchanged, as they already had
the "lib" prefix.
2026-01-02 13:16:46 +00:00
Oliver Hamlet ee4188f917 Get read lock when retrieving general messages
Now that the Database::general_messages() function takes &self instead of &mut self, the wrappers don't need to take a write lock to call it.
2026-01-02 13:07:58 +00:00
Oliver Hamlet 46c3ddc884 Decouple clearing condition cache from evaluating general messages 2026-01-02 10:15:39 +00:00
Oliver Hamlet 364e2d25c0 Prevent copy & move of abstract classes
To prevent slicing, following C++ Core Guidelines C.21 and C.67.
2026-01-01 22:26:09 +00:00
Oliver Hamlet cdf3050503 Stop storing plugin pointers in C++ wrapper
With the documented lifetime semantics updated to just use those of std::shared_ptr<>, there's no need to cache them in the wrapper.
2026-01-01 18:13:45 +00:00
Oliver Hamlet 6ca6a01fa9 Update GameInterface docs to reflect use of smart pointers 2026-01-01 17:58:59 +00:00
Oliver Hamlet 5728e83ce0 Fix minimum required CXX version 2026-01-01 14:57:03 +00:00
Oliver Hamlet b9bde27938 Update CXX to v1.0.192 2026-01-01 14:20:11 +00:00
Oliver Hamlet 10929878d9 Update version and changelog for v0.28.4 2025-12-31 19:21:17 +00:00
Oliver Hamlet 3890c3a095 Improve some doc comments 2025-12-30 15:19:42 +00:00
Oliver Hamlet e93f1f9632 Add padding in single-item YAML flow lists
To match the style that we use in LOOT's masterlists.
2025-12-28 15:21:51 +00:00
Oliver Hamlet 94f4dc476e Avoid MSVC warning due to -fno-lto 2025-11-07 17:35:41 +00:00
Oliver Hamlet 86ff2a665b Improve CMake system and compiler checks 2025-11-02 19:54:16 +00:00
Oliver Hamlet 54604a0ec8 Update version and changelog for v0.28.3 2025-10-22 18:19:02 +01:00
Oliver Hamlet a06078592f Append -fno-lto to CXXFLAGS
When building the first layer of the C++ wrapper, to fix undefined symbol errors when linking libloot as built by Manjaro Linux's default makepkg config.
2025-10-22 17:49:41 +01:00
Oliver Hamlet f4a0917294 Update version and changelog for v0.28.2 2025-10-03 19:23:48 +01:00
Oliver Hamlet 961642ad6e Avoid setting CMAKE_* variables globally
Instead set their target-specific equivalents.

The POSITION_INDEPENDENT_CODE property isn't set because it already defaults to ON for shared libraries.
2025-10-03 17:41:33 +01:00
Oliver Hamlet 24e3f99d9e Don't treat compiler warnings as errors by default
So that new warnings don't cause issues for library consumers.

Instead use CMake's CMAKE_COMPILE_WARNING_AS_ERROR option to treat them as errors in CI.
2025-10-03 17:39:11 +01:00
Oliver Hamlet b9a91374f9 Suppress MSVC's C4711 warning
It's raised from CXX's generated code and is just informational.
2025-09-30 21:24:42 +01:00
Oliver Hamlet face608fae Update libloadorder to v18.5.1 2025-09-29 21:25:11 +01:00
Oliver Hamlet 08a0487880 Be more permissive with dependency versions
The tests all pass when using the bottom of the new version ranges on Windows.

The unicase dependency's lower bound is limited by rust-ini even after using the latest master branch versions of esplugin, libloadorder and loot-condition-interpreter.

The proc-macro2 and quote dependencies' lower bounds are limited by pyo3's dependency tree.

The nodejs wrapper's dependencies haven't been touched.
2025-09-29 21:25:10 +01:00
Oliver Hamlet 6bc6113bb7 Test with long paths on Windows
Long paths can be greater than 260 characters long, but each path component is still limited to 255 characters. The latter is also commonly the component length limit on Linux.

Support for long paths requires Windows 10 1607 or later and a Registry value to be set[1], so to make the cause of test failures clearer when that isn't the case, there's one test that checks that Registry value is set, and long paths are not used in the other tests if it isn't set, so only that one test should failed if the system isn't configured as expected.

GitHub Action's Windows runners do have the Registry value set[2].

This doesn't set the manifest for the Rust tests because it seems to be very difficult to set a manifest for only the tests, and it's not worth the effort when the only tests that fail are those that try to create a symlink, especially since those cases are also covered by the C++ tests.

[1]: https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-version-1607-and-later
[2]: https://github.com/actions/runner-images/blob/releases/win22/20250921/images/windows/scripts/build/Configure-BaseImage.ps1#L73
2025-09-28 13:41:04 +01:00
Oliver Hamlet e8c150f7f4 Throw a logic_error if the CXX layer's EdgeType variant is unrecognised 2025-08-12 19:10:01 +01:00