forked from Mirrors/wine-wine
Added "*" wildcard entry to DllOverrides to replace DllDefaults
section; this way it can also be specified on a per-app basis. Removed compiled-in defaults for dlls mentioned in the sample config. Update man page.oldstable
parent
3ea0c073f8
commit
fde1b0cb0c
|
@ -67,9 +67,6 @@ WINE REGISTRY Version 2
|
||||||
|
|
||||||
# <wineconf>
|
# <wineconf>
|
||||||
|
|
||||||
[DllDefaults]
|
|
||||||
"DefaultLoadOrder" = "native, builtin, so"
|
|
||||||
|
|
||||||
[DllOverrides]
|
[DllOverrides]
|
||||||
"commdlg" = "builtin, native"
|
"commdlg" = "builtin, native"
|
||||||
"comdlg32" = "builtin, native"
|
"comdlg32" = "builtin, native"
|
||||||
|
@ -77,6 +74,8 @@ WINE REGISTRY Version 2
|
||||||
"version" = "builtin, native"
|
"version" = "builtin, native"
|
||||||
"shell" = "builtin, native"
|
"shell" = "builtin, native"
|
||||||
"shell32" = "builtin, native"
|
"shell32" = "builtin, native"
|
||||||
|
"shfolder" = "builtin, native"
|
||||||
|
"shlwapi" = "builtin, native"
|
||||||
"lzexpand" = "builtin, native"
|
"lzexpand" = "builtin, native"
|
||||||
"lz32" = "builtin, native"
|
"lz32" = "builtin, native"
|
||||||
"comctl32" = "builtin, native"
|
"comctl32" = "builtin, native"
|
||||||
|
@ -88,7 +87,9 @@ WINE REGISTRY Version 2
|
||||||
"ddraw" = "builtin, native"
|
"ddraw" = "builtin, native"
|
||||||
"dinput" = "builtin, native"
|
"dinput" = "builtin, native"
|
||||||
"dsound" = "builtin, native"
|
"dsound" = "builtin, native"
|
||||||
|
"opengl32" = "builtin, native"
|
||||||
"msvcrt" = "native, builtin"
|
"msvcrt" = "native, builtin"
|
||||||
|
"rpcrt4" = "native, builtin"
|
||||||
"msvideo" = "builtin, native"
|
"msvideo" = "builtin, native"
|
||||||
"msvfw32" = "builtin, native"
|
"msvfw32" = "builtin, native"
|
||||||
"mcicda.drv" = "builtin, native"
|
"mcicda.drv" = "builtin, native"
|
||||||
|
@ -100,6 +101,8 @@ WINE REGISTRY Version 2
|
||||||
"msacm" = "builtin, native"
|
"msacm" = "builtin, native"
|
||||||
"msacm32" = "builtin, native"
|
"msacm32" = "builtin, native"
|
||||||
"midimap.drv" = "builtin, native"
|
"midimap.drv" = "builtin, native"
|
||||||
|
; default for all other dlls
|
||||||
|
"*" = "native, builtin, so"
|
||||||
|
|
||||||
[x11drv]
|
[x11drv]
|
||||||
; Number of colors to allocate from the system palette
|
; Number of colors to allocate from the system palette
|
||||||
|
|
|
@ -144,32 +144,24 @@ default: "C:\\\\WINDOWS;C:\\\\WINDOWS\\\\SYSTEM"
|
||||||
Used to specify the path which will be used to find executables and
|
Used to specify the path which will be used to find executables and
|
||||||
dlls. Make sure to double all the backslashes.
|
dlls. Make sure to double all the backslashes.
|
||||||
.PP
|
.PP
|
||||||
.B [DllDefaults]
|
|
||||||
.br
|
|
||||||
.I format: """EXTRA_LD_LIBRARY_PATH""=""@prefix@/lib/wine[:/more/path/to/search[:...]]"""
|
|
||||||
.br
|
|
||||||
The path will be appended to any existing LD_LIBRARY_PATH from the
|
|
||||||
environment for the search of .so libraries.
|
|
||||||
.PP
|
|
||||||
.I format: """DefaultLoadOrder""=""native,so,builtin"""
|
|
||||||
.br
|
|
||||||
A comma separated list of module-types to try to load in that specific
|
|
||||||
order. The DefaultLoadOrder key is used as a fallback when a module is
|
|
||||||
not specified explicitely. If the DefaultLoadOrder key is not found,
|
|
||||||
then the order "native,builtin,so" is used.
|
|
||||||
.br
|
|
||||||
Case is not important and only the first letter of each type is enough
|
|
||||||
to identify the type n[ative], s[o], b[uiltin]. Also whitespace is
|
|
||||||
ignored. See also commandline option
|
|
||||||
.I --dll
|
|
||||||
for details about the allowable types.
|
|
||||||
.PP
|
|
||||||
.B [DllOverrides]
|
.B [DllOverrides]
|
||||||
.br
|
.br
|
||||||
There are no explicit keys defined other than module/library names. A
|
.I format: """modulename""=""native,so,builtin"""
|
||||||
module namd is followed by an assignment of the load order for this
|
.br
|
||||||
specific module. See above for possible types. You should not specify
|
.I modulename
|
||||||
an extension.
|
can be any valid module name, without extension. The specified value
|
||||||
|
is a comma separated list of module-types to try to load in that
|
||||||
|
specific order. Case is not important and only the first letter of
|
||||||
|
each type is enough to identify the type n[ative], s[o],
|
||||||
|
b[uiltin]. Also whitespace is ignored. See also commandline option
|
||||||
|
.I --dll
|
||||||
|
for details about the allowable types.
|
||||||
|
.br
|
||||||
|
The wildcard entry
|
||||||
|
.I """*"""
|
||||||
|
specifies the load order to use for modules not explicitly
|
||||||
|
mentioned. If the wildcard entry is not found, then the order
|
||||||
|
"native,builtin,so" is used.
|
||||||
.br
|
.br
|
||||||
Examples:
|
Examples:
|
||||||
.br
|
.br
|
||||||
|
@ -177,18 +169,13 @@ Examples:
|
||||||
.br
|
.br
|
||||||
.I """kernel""=""builtin"""
|
.I """kernel""=""builtin"""
|
||||||
.br
|
.br
|
||||||
.I """comdlg32""=""native, builtin"""
|
.I """comdlg32""=""native,builtin"""
|
||||||
.br
|
.br
|
||||||
.I """commdlg""=""native, builtin"""
|
.I """*""=""builtin,native"""
|
||||||
.br
|
.br
|
||||||
Changing the load order of kernel/kernel32 and gdi/gdi32 to
|
Changing the load order of kernel/kernel32 and gdi/gdi32 to
|
||||||
anything other than builtin will cause wine to fail because wine cannot
|
anything other than builtin will cause wine to fail because wine cannot
|
||||||
use native versions for these libraries (gdi[32] might work native someday,
|
use native versions for these libraries.
|
||||||
but kernel[32] will never work native).
|
|
||||||
Note that using the native versions of user[32] isn't recommended right now,
|
|
||||||
as these modules face nearly the same problems as kernel/gdi and we only
|
|
||||||
just managed to make them work partially. But trying to use it might get
|
|
||||||
your program running.
|
|
||||||
.br
|
.br
|
||||||
Always make sure that you have some kind of strategy in mind when you start
|
Always make sure that you have some kind of strategy in mind when you start
|
||||||
fiddling with the current defaults and needless to say that you must know
|
fiddling with the current defaults and needless to say that you must know
|
||||||
|
@ -253,6 +240,33 @@ booleans: Y/y/T/t/1 are true, N/n/F/f/0 are false.
|
||||||
.br
|
.br
|
||||||
Defaults are read all, write to home files.
|
Defaults are read all, write to home files.
|
||||||
.PP
|
.PP
|
||||||
|
.B [AppDefaults\\\\\\\\<appname>\\\\\\\\...]
|
||||||
|
.PP
|
||||||
|
This section allows specifying application-specific values for
|
||||||
|
the other sections described above.
|
||||||
|
.I <appname>
|
||||||
|
is the name of the application exe file, without path. The "..."
|
||||||
|
should be replaced by the name of one of the above configuration
|
||||||
|
sections.
|
||||||
|
.br
|
||||||
|
Example:
|
||||||
|
.br
|
||||||
|
.I [AppDefaults\\\\\\\\sol.exe\\\\\\\\DllOverrides]
|
||||||
|
.br
|
||||||
|
.I """shell32""" = """native"""
|
||||||
|
.br
|
||||||
|
means that Solitaire will use "native" load order for the shell32
|
||||||
|
dll. All other applications will continue to use what was specified in
|
||||||
|
the general
|
||||||
|
.I DllOverrides
|
||||||
|
section.
|
||||||
|
.br
|
||||||
|
The only section that supports application-specific information at the
|
||||||
|
moment is
|
||||||
|
.I DllOverrides.
|
||||||
|
.br
|
||||||
|
Make sure to use double backslashes in the section name.
|
||||||
|
.PP
|
||||||
.SH SAMPLE CONFIGURATION FILE
|
.SH SAMPLE CONFIGURATION FILE
|
||||||
A sample configuration file is distributed as
|
A sample configuration file is distributed as
|
||||||
.B documentation/samples/config
|
.B documentation/samples/config
|
||||||
|
|
|
@ -40,16 +40,7 @@ struct loadorder_list
|
||||||
/* the list must remain sorted by dll name */
|
/* the list must remain sorted by dll name */
|
||||||
static module_loadorder_t default_order_list[] =
|
static module_loadorder_t default_order_list[] =
|
||||||
{
|
{
|
||||||
{ "advapi32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "comctl32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "comdlg32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "commctrl", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "commdlg", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "crtdll", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "ddraw", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "dinput", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "display", { LOADORDER_BI, 0, 0, 0 } },
|
{ "display", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "dsound", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "gdi", { LOADORDER_BI, 0, 0, 0 } },
|
{ "gdi", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "gdi32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "gdi32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "glide2x", { LOADORDER_SO, LOADORDER_DLL, 0, 0 } },
|
{ "glide2x", { LOADORDER_SO, LOADORDER_DLL, 0, 0 } },
|
||||||
|
@ -59,38 +50,15 @@ static module_loadorder_t default_order_list[] =
|
||||||
{ "kernel32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "kernel32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "keyboard", { LOADORDER_BI, 0, 0, 0 } },
|
{ "keyboard", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "krnl386", { LOADORDER_BI, 0, 0, 0 } },
|
{ "krnl386", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "lz32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "lzexpand", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "mcianim.drv", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
|
||||||
{ "mciavi.drv", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
|
||||||
{ "mcicda.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "mciseq.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "mciwave.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "midimap.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "mmsystem", { LOADORDER_BI, 0, 0, 0 } },
|
{ "mmsystem", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "mouse", { LOADORDER_BI, 0, 0, 0 } },
|
{ "mouse", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "mpr", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "msacm", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "msacm.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "msacm32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "msvcrt", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
|
||||||
{ "msvfw32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "msvideo", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "ntdll", { LOADORDER_BI, 0, 0, 0 } },
|
{ "ntdll", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "odbc32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "odbc32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "opengl32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "rpcrt4", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
|
||||||
{ "shell", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "shell32", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "shfolder", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "shlwapi", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
|
||||||
{ "system", { LOADORDER_BI, 0, 0, 0 } },
|
{ "system", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "toolhelp", { LOADORDER_BI, 0, 0, 0 } },
|
{ "toolhelp", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "ttydrv", { LOADORDER_BI, 0, 0, 0 } },
|
{ "ttydrv", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "user", { LOADORDER_BI, 0, 0, 0 } },
|
{ "user", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "user32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "user32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "ver", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "version", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "w32skrnl", { LOADORDER_BI, 0, 0, 0 } },
|
{ "w32skrnl", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "winaspi", { LOADORDER_BI, 0, 0, 0 } },
|
{ "winaspi", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "windebug", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
{ "windebug", { LOADORDER_DLL, LOADORDER_BI, 0, 0 } },
|
||||||
|
@ -99,7 +67,6 @@ static module_loadorder_t default_order_list[] =
|
||||||
{ "wing", { LOADORDER_BI, 0, 0, 0 } },
|
{ "wing", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "winmm", { LOADORDER_BI, 0, 0, 0 } },
|
{ "winmm", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "winsock", { LOADORDER_BI, 0, 0, 0 } },
|
{ "winsock", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "winspool.drv", { LOADORDER_BI, LOADORDER_DLL, 0, 0 } },
|
|
||||||
{ "wnaspi32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "wnaspi32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "wow32", { LOADORDER_BI, 0, 0, 0 } },
|
{ "wow32", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
{ "wprocs", { LOADORDER_BI, 0, 0, 0 } },
|
{ "wprocs", { LOADORDER_BI, 0, 0, 0 } },
|
||||||
|
@ -417,9 +384,10 @@ static BOOL get_list_load_order( const char *module, const struct loadorder_list
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* get_app_load_order
|
* get_app_load_order
|
||||||
*
|
*
|
||||||
* Get the load order for a given module from the app-specific DllOverrides list
|
* Get the load order for a given module from the app-specific DllOverrides list.
|
||||||
|
* Also look for default '*' key if no module key found.
|
||||||
*/
|
*/
|
||||||
static BOOL get_app_load_order( const char *module, enum loadorder_type lo[] )
|
static BOOL get_app_load_order( const char *module, enum loadorder_type lo[], BOOL *got_default )
|
||||||
{
|
{
|
||||||
HKEY hkey, appkey;
|
HKEY hkey, appkey;
|
||||||
DWORD count, type, res;
|
DWORD count, type, res;
|
||||||
|
@ -447,10 +415,14 @@ static BOOL get_app_load_order( const char *module, enum loadorder_type lo[] )
|
||||||
if (res) return FALSE;
|
if (res) return FALSE;
|
||||||
|
|
||||||
count = sizeof(buffer);
|
count = sizeof(buffer);
|
||||||
res = RegQueryValueExA( appkey, module, NULL, &type, buffer, &count );
|
if ((res = RegQueryValueExA( appkey, module, NULL, &type, buffer, &count )))
|
||||||
|
{
|
||||||
|
if (!(res = RegQueryValueExA( appkey, "*", NULL, &type, buffer, &count )))
|
||||||
|
*got_default = TRUE;
|
||||||
|
}
|
||||||
|
else TRACE( "got app loadorder '%s' for '%s'\n", buffer, module );
|
||||||
RegCloseKey( appkey );
|
RegCloseKey( appkey );
|
||||||
if (res) return FALSE;
|
if (res) return FALSE;
|
||||||
TRACE( "got app loadorder '%s' for '%s'\n", buffer, module );
|
|
||||||
return ParseLoadOrder( buffer, lo );
|
return ParseLoadOrder( buffer, lo );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,8 +431,10 @@ static BOOL get_app_load_order( const char *module, enum loadorder_type lo[] )
|
||||||
* get_standard_load_order
|
* get_standard_load_order
|
||||||
*
|
*
|
||||||
* Get the load order for a given module from the main DllOverrides list
|
* Get the load order for a given module from the main DllOverrides list
|
||||||
|
* Also look for default '*' key if no module key found.
|
||||||
*/
|
*/
|
||||||
static BOOL get_standard_load_order( const char *module, enum loadorder_type lo[] )
|
static BOOL get_standard_load_order( const char *module, enum loadorder_type lo[],
|
||||||
|
BOOL *got_default )
|
||||||
{
|
{
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
DWORD count, type, res;
|
DWORD count, type, res;
|
||||||
|
@ -470,10 +444,14 @@ static BOOL get_standard_load_order( const char *module, enum loadorder_type lo[
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
count = sizeof(buffer);
|
count = sizeof(buffer);
|
||||||
res = RegQueryValueExA( hkey, module, NULL, &type, buffer, &count );
|
if ((res = RegQueryValueExA( hkey, module, NULL, &type, buffer, &count )))
|
||||||
|
{
|
||||||
|
if (!(res = RegQueryValueExA( hkey, "*", NULL, &type, buffer, &count )))
|
||||||
|
*got_default = TRUE;
|
||||||
|
}
|
||||||
|
else TRACE( "got standard loadorder '%s' for '%s'\n", buffer, module );
|
||||||
RegCloseKey( hkey );
|
RegCloseKey( hkey );
|
||||||
if (res) return FALSE;
|
if (res) return FALSE;
|
||||||
TRACE( "got standard loadorder '%s' for '%s'\n", buffer, module );
|
|
||||||
return ParseLoadOrder( buffer, lo );
|
return ParseLoadOrder( buffer, lo );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -526,6 +504,8 @@ void MODULE_GetLoadOrder( enum loadorder_type loadorder[], const char *path, BOO
|
||||||
char *cptr;
|
char *cptr;
|
||||||
char *name;
|
char *name;
|
||||||
int len;
|
int len;
|
||||||
|
BOOL got_app_default = FALSE, got_std_default = FALSE;
|
||||||
|
enum loadorder_type lo_default[LOADORDER_NTYPES];
|
||||||
|
|
||||||
TRACE("looking for %s\n", path);
|
TRACE("looking for %s\n", path);
|
||||||
|
|
||||||
|
@ -568,15 +548,28 @@ void MODULE_GetLoadOrder( enum loadorder_type loadorder[], const char *path, BOO
|
||||||
if (get_list_load_order( fname, &cmdline_list, loadorder )) return;
|
if (get_list_load_order( fname, &cmdline_list, loadorder )) return;
|
||||||
|
|
||||||
/* then app-specific config */
|
/* then app-specific config */
|
||||||
if (get_app_load_order( fname, loadorder )) return;
|
if (get_app_load_order( fname, loadorder, &got_app_default ))
|
||||||
|
{
|
||||||
|
if (!got_app_default) return;
|
||||||
|
/* save the default value for later on */
|
||||||
|
memcpy( lo_default, loadorder, sizeof(lo_default) );
|
||||||
|
}
|
||||||
|
|
||||||
/* then standard config */
|
/* then standard config */
|
||||||
if (get_standard_load_order( fname, loadorder )) return;
|
if (get_standard_load_order( fname, loadorder, &got_std_default ))
|
||||||
|
{
|
||||||
|
if (!got_std_default) return;
|
||||||
|
/* save the default value for later on */
|
||||||
|
if (!got_app_default) memcpy( lo_default, loadorder, sizeof(lo_default) );
|
||||||
|
}
|
||||||
|
|
||||||
/* then compiled-in defaults */
|
/* then compiled-in defaults */
|
||||||
if (get_list_load_order( fname, &default_list, loadorder )) return;
|
if (get_list_load_order( fname, &default_list, loadorder )) return;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
/* last, return the default */
|
/* last, return the default */
|
||||||
get_default_load_order( loadorder );
|
if (got_app_default || got_std_default)
|
||||||
|
memcpy( loadorder, lo_default, sizeof(lo_default) );
|
||||||
|
else
|
||||||
|
get_default_load_order( loadorder );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue