Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nine_set and create_symlink targetting dli_fname #170

Open
asurati opened this issue Jul 16, 2024 · 0 comments
Open

nine_set and create_symlink targetting dli_fname #170

asurati opened this issue Jul 16, 2024 · 0 comments

Comments

@asurati
Copy link

asurati commented Jul 16, 2024

Given that is_nine_symlink reads the symlink file d3d9.dll and compares the returned target with the hard-coded string d3d9-nine.dll, shouldn't the function nine_set call create_symlink to let d3d9.dll directly target d3d9-nine.dll instead of targetting the dli_fname of d3d9-nine.dll?


For the install carried out using nine-install.sh, d3d9.dll is a symlink targetting d3d9-nine.dll, which in turn is another symlink targetting d3d9-nine.dll.so. In such a setup, dli_fname of d3d9-nine.dll is the same - d3d9-nine.dll.


But when installed using wine-nine package of Arch Linux, d3d9-nine.dll isn't a symlink but a fake-dll d3d9-nine.dll.fake renamed to d3d9-nine.dll. For such a setup, the dli_fname of d3d9-nine.dll is d3d9-nine.dll.so. Arch's install seems to follow the same division for this wine dll as it does for other wine dlls/exes - the fake dll gets inserted into a dir i686-windows while the corresponding so gets installed into a dir i686-unix. The pairs aren't linked through a symlink, as assumed by nine.

But this setup breaks the assumption, made by is_nine_symlink, that d3d9.dll targets d3d9-nine.dll. Here, d3d9.dll targets d3d9-nine.dll.so.

If nine assumes that absolutely needs d3d9.dll symlink must to target d3d9-nine.dll (given the behaviours of is_nine_symlink and nine-install.sh), can it not call create_symlink directly for the d3d9-nine.dll instead of passing through dli_fname?


The issue that this breakage causes is that in the nine's UI, the "Enable Gallium Nine for better..." check-box remains unchecked, and cannot be checked even after clicking. Once nine is enabled through the cmdline ninewinecfg, it cannot be disabled, either through the command-line or through the GUI. These symptoms are the result of is_nine_symlink returning false.

After installing Arch's wine-nine and enabling it with ninewinecfg, one can manually retarget the d3d9.dll symlink to point to /....../i686-windows/d3d9-nine.dll, and the GUI checkbox shows nine as Enabled. The disabling of nine also works. That is, is_nine_symlink starts working as the target is now the same as the expected, hard-coded string d3d9-nine.dll.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant