My nightly autobuilder failed to build today, after I've had no problems for several days. This seems to be due to yesterday's changes in dlls/kernel:
process.o: In function `build_initial_environment': wine/dlls/kernel/process.c:341: undefined reference to `environ' wine/dlls/kernel/process.c:357: undefined reference to `environ' process.o: In function `build_envp': wine/dlls/kernel/process.c:1018: undefined reference to `environ' gmake[2]: *** [kernel32.dll.so] Error 1
Part of the fix is the patch below, but this is not sufficient, as environ simply is non-standard. On my SuSE 8.2 box, for example, /usr/include/unistd.h says:
#ifdef __USE_GNU extern char **environ; #endif
In other words, on GNU/Linux you are just lucky because even if the symbol is not declared (which is why you need the extern declaration) it is in the library.
Gerald
ChangeLog: Declare environ at the top, not inside functions.
Index: process.c =================================================================== RCS file: /home/wine/wine/dlls/kernel/process.c,v retrieving revision 1.24 diff -u -3 -p -r1.24 process.c --- process.c 10 Oct 2003 00:12:17 -0000 1.24 +++ process.c 10 Oct 2003 08:11:52 -0000 @@ -73,6 +73,8 @@ extern void SHELL_LoadRegistry(void); extern void VERSION_Init( const WCHAR *appname ); extern void MODULE_InitLoadPath(void);
+extern char **environ; + /*********************************************************************** * contains_path */ @@ -331,7 +333,6 @@ static HMODULE load_pe_exe( const WCHAR */ static BOOL build_initial_environment(void) { - extern char **environ; ULONG size = 1; char **e; WCHAR *p, *endptr; @@ -1007,7 +1008,6 @@ static char **build_envp( const WCHAR *e
if ((envp = malloc( count * sizeof(*envp) ))) { - extern char **environ; char **envptr = envp; char **unixptr = environ; char *p;