[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Limitation compared to Cygwin make

From: Offner, Georg
Subject: Re: Limitation compared to Cygwin make
Date: Mon, 6 Nov 2006 16:43:35 +0100

----- Original Message ----- From: "Eli Zaretskii" <address@hidden>
To: "Offner, Georg" <address@hidden>
Cc: <address@hidden>
Sent: Friday, November 03, 2006 8:44 PM
Subject: Re: Limitation compared to Cygwin make

From: "Offner, Georg" <address@hidden>
Cc: <address@hidden>
Date: Fri, 3 Nov 2006 16:58:47 +0100


local_lib = $(OBJ_DIR)local.lib

all: $(local_lib)

If these are your file names, I think I know why they don't work.  For
obscure histerical reasons, the native Windows port of Make uses an
obsolete API to look for executable files.  That obsolete API only
supports file names up to 128 characters long.  Can you try shortening
your OBJ_DIR path to less than 128 characters and see if it starts
working then?  Note that you append local.lib to the path, so you
should shorten OBJ_DIR so that the resulting file name does not exceed
128 characters.

It is on my todo to fix this by switching to a more modern API for the
next release of Make.

If my guess is correct, it would also explain why the Cygwin port is
not hit by the problem: it doesn't use the code which calls the
obsolete API.

If the above does not explain the failure (i.e. the example makefile
does not work even with file names shorter than 128 characters),
perhaps you could step with a debugger into the function
process_begin, which reports the failure you posted, and see why it

Sorry for the inconvenience, and thanks in advance for your help in
investigating this problem.

P.S.  I see that you also reported a similar problem back in May.

I did some debugging, but I could not work out, why CreateProcess fails. The function parameters for me seem to be the same either in good and in bad case. Here is the parameter list of the call of CreateProcess in bad case, please let me know, if you need more information.

-  command_line 0x009d44d8 "sh.exe -c "printf \"\n\""" char *
  0x73 's' char
-  exec_path 0x0012db00 "D:\Tmp\TESTSYSTEM.W32MAKE\sh.exe" char *
  0x44 'D' char
- pproc 0x009d4408 {sv_stdin=0x009d4408 sv_stdout=0x009d4410 sv_stderr=0x009d4418 ...} sub_process_t *
+  sv_stdin 0x009d4408 int [2]
+  sv_stdout 0x009d4410 int [2]
+  sv_stderr 0x009d4418 int [2]
 using_pipes 0x00000000 int
+  inp 0x00000000 <bad Ptr> char *
 incnt 0x00000000 unsigned long
+  outp 0x00000000 <bad Ptr> char * volatile
 outcnt 0x00000000 volatile unsigned long
+  errp 0x00000000 <bad Ptr> char * volatile
 errcnt 0x00000000 volatile unsigned long
 pid 0x00000000 int
 exit_code 0x00000000 int
 signal 0x00000000 int
 last_err 0x000000ea long
 lerrno 0x00000068 long
 pproc->lerrno 0x00000068 long

reply via email to

[Prev in Thread] Current Thread [Next in Thread]