Mail Archives: djgpp/1996/10/20/15:58:00
This is a bit longish message, so the main points first:
1) It is not recommended to mix Make from old v2.0 distribution with
gcc and Binutils from v2.01, or vice versa. If you upgrade to v2.01,
replace all the binaries you have installed from the above packages.
2) If you want to try v2.01 but be able to downgrade back to v2.0 in
case you have unexpected trouble, back up your v2.0 executables before
installing v2.01.
PLEASE RESTRICT FURTHER DISCUSSIONS ABOUT THIS to djgpp mailing list and
comp.os.msdos.djgpp news group. Do NOT post to djgpp-announce anything
about this, please!
Now for the juicy details:
In v2.01, passing command lines to child programs has changed. The most
important aspects of the change are:
1) Arguments passed by `spawnXX' and `execXX' library functions
aren't globbed by the child; thus spawn(P_NOWAIT, "ls", "ls", "*.c", 0)
will most probably complain that *.c doesn't exist. This is so these
functions work as they do on Unix. If you need for the child to glob the
arguments, you should call `system' instead (see below).
2) Arguments passed by `system' *are* globbed. In v2.0, `system'
didn't support command lines longer than 126 characters. The new
`system' allows long command lines (when the child is a DJGPP program),
but this will only work when both the parent and the child were compiled
with v2.01. If the child was compiled with v2.0, it will only see the
first 126 characters of the command line.
The most important case where these considerations apply is when Make
calls gcc. DJGPP ports of Make 3.73 and before use `spawn' unless the
command involves redirection. If you have a Makefile which says
something like
prog: $(OBJS)
gcc -o prog *.o
this will not work when Make is from v2.0 and gcc from v2.01. The next
port of Make 3.75 (to be uploaded soon) uses `system' in such cases, but
if gcc is from v2.0, and the command line includes wildcards or quotes and
is longer than 126 characters, that command will mysteriously fail. To be
sure things work together as you'd expect, use both Make 3.75 (or later)
and gcc/Binutils compiled with v2.01.
The above might sound scary at first, but it really isn't. Experience
shows that the absolute majority of Makefiles continue to work. (I have
successfully built most of the DJGPP packages with a v2.0 gcc and a v2.01
Make, and never saw any problem.) But if you want consistently correct
behavior, you shouldn't mix Make and gcc from different versions.
Note that after v2.01 was uploaded to SimTel, the old Make 3.73
distribution was overwritten by the new, compiled with v2.01. Therefore,
you should save your previous v2.0 make.exe if you think there's a chance
you'd want to go back to v2.0.
- Raw text -