Commit Graph
83 Commits
Author SHA1 Message Date
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
Oliver Hamlet 27c57527d7 Reimplement C++ string replace()
I'm not sure why I didn't use string_view.find() to begin with.
2025-08-12 19:10:01 +01:00
Oliver Hamlet d5ff75ee31 Use stricter C++ compiler flags
Enable more warnings, and treat all warnings as errors. This would have caught the incomplete switch fixed in f5f89be659.
2025-08-12 19:10:01 +01:00
Oliver Hamlet f5f89be659 Fix blueprint master edges in cyclic interaction error messages 2025-08-12 18:35:42 +01:00
Oliver Hamlet 927c708df6 Update version and changelog for v0.28.1 2025-08-11 19:24:39 +01:00
Oliver Hamlet da0e35bb2b Revert "Support plugin and archive symlinks"
This reverts commit 9f45282bee. This is a
temporary revert so that I can release v0.28.1 without any new features.
2025-08-08 11:28:32 +01:00
Oliver Hamlet 00ee2b42a6 Add a few more C++ error message tests 2025-08-06 09:22:23 +01:00
Oliver Hamlet c524ec824f Increase verbosity of invalid argument errors 2025-08-06 09:22:23 +01:00
Oliver Hamlet 6e5d816000 Fix cyclic interaction error parsing 2025-08-06 09:22:23 +01:00
Oliver Hamlet 2c8961211b Revert lifetime of PluginInterface pointers
The intent with the change to using shared_ptr in v0.27.0 was to make the caller responsible for their lifetimes, but I forgot to update the docs to reflect that, so this makes their lifetimes behave as documented.
2025-08-05 17:21:05 +01:00
Oliver Hamlet 9f45282bee Support plugin and archive symlinks
On Linux, and on Windows when the game is OpenMW or Oblivion Remastered.
2025-08-03 14:26:17 +01:00
Oliver Hamlet 55bdf56227 Update version and changelog for v0.28.0 2025-08-02 16:36:20 +01:00
Oliver Hamlet d4d6893491 Use enums instead of bools in public API
Replace the boolean parameters for including user metadata and evaluating conditions with MergeMode and EvalMode enums.

The C++ and Python wrappers still use booleans because they're more constrained than enums in those languages, which can be given invalid values.
2025-08-02 16:05:36 +01:00
Oliver Hamlet 8cf7a0adf1 Add more Cargo package fields
Explicitly disable publishing the FFI wrappers, since there's no point them being on crates.io.
2025-08-02 11:16:25 +01:00
Oliver Hamlet 903bdf6ef7 Add a FetchContent example to cpp readme 2025-08-01 18:21:44 +01:00
Oliver Hamlet 2b59b6f76a Set /MP for specific CMake targets
So that libloot doesn't override the global setting if included as a dependency.
2025-08-01 18:19:48 +01:00
Oliver Hamlet 4acc64247e Deduplicate Cargo package fields across workspace
Also deduplicate version numbers in CMakeLists.txt.
2025-07-31 22:08:46 +01:00
Oliver Hamlet d6be961095 Be a bit more consistent with function naming
This makes it so that all non-public functions use camelCase and all public functions use PascalCase.

I regret choosing to use PascalCase for function names, but it's not worth breaking the whole public API to change that, and at least this approach has precedent in how Go decides if a function is public or private.
2025-07-26 21:49:49 +01:00
Oliver Hamlet b492e34ab9 Fix linking tests against static libloot 2025-07-23 19:11:07 +01:00
Oliver Hamlet 46bcd3a10e Only set up CMake install for shared library
The static library has a static dependency on libloot-cpp that causes more difficulty, and resolving that isn't a priority since I don't use libloot as a static library.
2025-07-23 19:10:47 +01:00
Oliver Hamlet 40f3ece061 Add LIBLOOT_BUILD_SHARED CMake option
To avoid libloot setting the global BUILD_SHARED_LIBS when used through FetchContent.
2025-07-23 19:07:41 +01:00
Oliver Hamlet fdd84b11b8 Fix using libloot through CMake's FetchContent
- Use PROJECT_SOURCE_DIR and PROJECT_BUILD_DIR instead of CMAKE_SOURCE_DIR and CMAKE_BUILD_DIR because libloot's CMakeLists.txt may not be the top-level one.
- Specify the working directory when calling cargo
- Define an alias and export the loot target so that it's usable without installing the built artifacts first
2025-07-23 18:20:57 +01:00
Oliver Hamlet b6d9cb0d9e Remove the libloot_internals_tests target
Move its tests to libloot_tests, as there's nothing in the internals that can't be just as easily tested through the public API.
2025-07-22 19:56:21 +01:00
Oliver Hamlet bdc1f827f6 Make Game::set_additional_data_paths() take Vec<PathBuf>, not &[&Path] 2025-07-22 19:56:21 +01:00