loot / libloot

A C++ library for accessing LOOT's metadata and sorting functionality.
GNU General Public License v3.0
32 stars 12 forks source link

Cyclic interaction detected between ccbgssse002-exoticarrows.esl and ccbgssse002-exoticarrows.esl #74

Closed monyarm closed 3 years ago

monyarm commented 3 years ago

I'm running loot on linux, through wine. Same issue occurs with all CC esls. Loot debug log: https://drive.google.com/file/d/1QauUiNgyiOQ-g6uXDCEvXQUffTL8Lx4T/view?usp=drivesdk

Ortham commented 3 years ago

Repeating what I said on Discord for future reference, I thought this is probably due to me misunderstanding what std::filesystem::canonical() does on a case-insensitive filesystem, I think I expected it to return the true case of a given path (since the path must exist for the function to return).

However, it turns out I actually wrote a test for this, and that is the behaviour on Windows (possibly only on NTFS): but it doesn't seem to be the case when running through Wine on Linux on some unknown filesystem, and any of them might be responsible for the difference. I need to do more investigation.

@monyarm What kind of filesystem do you have Skyrim SE installed on, and are you running it with any unusual config (e.g. case insensitivity), so I can try replicating it?

monyarm commented 3 years ago

I'm running it on ext4 with casefold (aka case insensitivity). I can also get you my exact kernel and wine/proton versions if you need them.

Another thing I've done that is unusual, is that rather than logging in and downloading the CC content from withing the game, I instead just copied the bsas and plugins from my other pc. (I'm on rural internet).

On Sun, Mar 21, 2021, 12:22 AM Oliver Hamlet @.***> wrote:

Repeating what I said on Discord for future reference, I thought this is probably due to me misunderstanding what std::filesystem::canonical() does on a case-insensitive filesystem, I think I expected it to return the true case of a given path (since the path must exist for the function to return).

However, it turns out I actually wrote a test for this, and that is the behaviour on Windows (possibly only on NTFS): but it doesn't seem to be the case when running through Wine on Linux on some unknown filesystem, and any of them might be responsible for the difference. I need to do more investigation.

@monyarm https://github.com/monyarm What kind of filesystem do you have Skyrim SE installed on, and are you running it with any unusual config (e.g. case insensitivity), so I can try replicating it?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/loot/libloot/issues/74#issuecomment-803471969, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXHJKQ7K3UV65XQJOSZOPDTEUNZVANCNFSM4ZQ2R75Q .

monyarm commented 3 years ago
         -/oyddmdhs+:.                monyarm@monyarm-laptop 
     -odNMMMMMMMMNNmhy+-`             ---------------------- 
   -yNMMMMMMMMMMMNNNmmdhy+-           OS: Gentoo Base System release 2.7 x86_64 
 `omMMMMMMMMMMMMNmdmmmmddhhy/`        Host: 80WK Lenovo Y520-15IKBN 
 omMMMMMMMMMMMNhhyyyohmdddhhhdo`      Kernel: 5.11.0+ 
.ydMMMMMMMMMMdhs++so/smdddhhhhdm+`    Uptime: 3 days, 3 hours, 25 mins 
 oyhdmNMMMMMMMNdyooydmddddhhhhyhNd.   Packages: 1 (rpm), 1514 (emerge) 
  :oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh   Shell: zsh 5.8 
    .:+sydNMMMMMNNNmmmdddhhhhhhmMmy   Resolution: 1920x1080 
       /mMMMMMMNNNmmmdddhhhhhmMNhs:   DE: Plasma 5.20.5 
    `oNMMMMMMMNNNmmmddddhhdmMNhs+`    WM: KWin 
  `sNMMMMMMMMNNNmmmdddddmNMmhs/.      WM Theme: Breeze 
 /NMMMMMMMMNNNNmmmdddmNMNdso:`        Theme: Breeze Dark [Plasma], Breeze [GTK2/3] 
+MMMMMMMNNNNNmmmmdmNMNdso/-           Icons: Tela-dark [Plasma], Tela-dark [GTK2/3] 
yMMNNNNNNNmmmmmNNMmhs+/-`             Terminal: konsole 
/hMMNNNNNNNNMNdhs++/-`                CPU: Intel i7-7700HQ (8) @ 3.800GHz 
`/ohdmmddhys+++/:.`                   GPU: NVIDIA GeForce GTX 1050 Ti Mobile 
  `-//////:--.                        GPU: Intel HD Graphics 630 
                                      Memory: 3055MiB / 7848MiB 

Kernel is 5.11 tkg-linux, with all the default patches, plus the futex2 patch, compiled with 03 and mtune and march. Wine/Proton Version is proton_tkg_6.2.r0.g3b5ea332, with the following non-standard config settings:

_mtga_fix="true"
_community_patches="amdags-proton.mypatch origin_downloads_e4ca5dbe_revert.mypatch ID3DXEffectCompiler-partial-implementation.mypatch ntdll_Map_top-down_if_dll_characteristics_include_DYNAMIC_BASE.mypatch fsync_futex2.mypatch wine-fix-gcc10.mypatch Shell32-CreateDirectoryInDestinationInFileOp-Move-multiop.mypatch"
monyarm commented 3 years ago

Actually, wait, that's my global wine/proton version, but I just remembered that I'm using a different version for Vortex itself (and all software run through it, like loot), that being Wine 5.21-lutris. Which is a more standard wine version.

Ortham commented 3 years ago

I'm able to replicate this in an Ubuntu VM and Wine 6.0 after mounting an ext4 filesystem with casefold enabled and setting up a dummy Skyrim SE game in a directory that has case folding enabled. I think the problem is that std::filesystem::canonical() is modelled after POSIX's realpath, which doesn't output the path's "true" case when case folding is in use.

I've replaced the usage of canonical(), @monyarm can you try replacing the libloot DLL in your LOOT install with this libloot DLL?

monyarm commented 3 years ago

It worked, now i can finally mod my game again.

Ortham commented 3 years ago

OK, closing this as it's fixed by 505106d602caf0c2825d613f7bc7b1f9aad7527f.