RFC: Detecting the wine prefix

André Hentschel nerv at dawncrow.de
Fri Jul 16 09:58:27 CDT 2010


Am 16.07.2010 11:32, schrieb Michael Stefaniuc:
> Hello Paul,
> 
> Paul Chitescu wrote:
>> I would want to implement a change in where the wine prefix is assumed by 
>> default.
>>
>> The current behavior of only considering WINEPREFIX is cumbersome and risky. 
>> Slip a finger, forget a letter and you end running a potential disastrous 
>> command in the wrong prefix. I ruined my main prefix by accidenatlly running 
>> "winetricks ie6" in it...
>>
>> To fix that I use a wrapper script (unimaginatively named "win") that detects 
>> the proper prefix from the current directory and calls wine or other programs 
>> (winecfg, wineserver, winetricks, etc.) after setting WINEPREFIX. I am 
>> satisfied by this wrapper but has several disadvantages:
>> - You need to remember to run it instead of wine.
>> - You may paste a command from somewhere and forget to add "win" in front.
>> - Needs to be distributed.
>>
>> The proposed solution is to incorporate the prefix detection logic in wine 
>> itself so no wrapper is needed.
>>
>> The modified behavior would be like this:
>> - If WINEPREFIX is set obey that, user knows better. This is also required to 
>> create a new prefix.
>> - Starting from current working directory descend towards root looking for a 
>> directory that:
>> 	1. Has a dosdevices/ subdirectory and a system.reg file
>>    or
>> 	2. Has a .wine symlink pointing to a directory matching condition 1.
>>    or
>> 	3. Holds a .wine regular file whose content is the name of a directory 
>> matching condition 1.
>> - If a valid prefix (matches condition 1. above) is found use it for wine
>> - Else use the default ~/.wine
>>
>> The extra checks 2. and 3. are to be able to handle the case when the current 
>> directory is on a path that is symlinked from inside the prefix. In particular 
>> test 3. is used when the files are on a FAT (or other symlink incapable) 
>> partition. I have several wine prefixes whose "Program Files" is located on a 
>> much larger FAT32 partition shared with you know what.
>>
>> What do you think about this? Should I go on coding it?
> I like the idea as it follows the DWIM (Do What I Mean) principle.
> But the working directory shouldn't be the primary means to detect what
> WINEPREFIX to use. That should be inherited first from the location of
> the Win32 binary that is run. E.g. working on multiple regression bugs I
> have used a separate git tree as well as a separate WINEPREFIX per bug.
> My CWD was always the SRCDIR/BUILDIR thus useless to find the WINEPREFIX
> but the path to the binary always had the WINEPREFIX informations in it:
>   ./wine ~/wine/prefixes/21409/drive_c/Program\ Files/foo/foo.exe
> 
> The "descend towards root" is used extensively by git so that one can
> provide a good inspiration on how to do it, especially the corner cases.
> 
> bye
> 	michael
> 
> 

Both cases should be taken into account:

user:~/.wineprefix/drive_c$ wine myapp.exe
user:~/$  wine .wineprefix/drive_c/myapp.exe

Both should work and use .wineprefix

Also dont forget about worst case situations like:

user:~/.wineA/drive_c$ WINEPREFIX=~/.wineB wine ../../.wineC/drive_c/myapp.exe

This makes clear IMHO that the env var WINEPREFIX should have the highest priority, as i think this should be started using .wineB

So i think if no WINEPREFIX is specified then the cwd should be used and if that is not in some wineprefix the apppatch should be used.

-- 

Best Regards, André Hentschel



More information about the wine-devel mailing list