tjb@tadtec.uucp (Tim Bissell) (10/04/89)
I think I have found a bug in the @D pseudo-variable in GNU Make version 3.54
and below. It lops the last character off the directory name it produces. A
script which shows the problem, and a fix, are given below.
---------------------------------------
glider!wys> cat Makefile
.PHONY: foo/bar
foo/bar:
@echo 'This should be foo ->' $(@D) '<- should it not?'
glider!wys> ../make -v
GNU Make version 3.54, by Richard Stallman and Roland McGrath.
Copyright (C) 1988, 1989 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This should be foo -> fo <- should it not?
---------------------------------------
Here is my fix for what appears to be a simple of-by-one bug. It seems
to work when I use it but I haven't checked extensively. Sorry if this
has already been fixed, but 3.54 is the most recent version I have been
able to get hold of.
---------------------------------------
*** commands.c Fri Sep 29 16:25:11 1989
--- commands.c.~1~ Fri Sep 29 10:17:59 1989
***************
*** 63,69 ****
#define LASTSLASH(s) rindex ((s), '/')
#define FILEONLY(s) (p != 0 ? p + 1 : (s))
#define DIRONLY(s) (p == 0 ? "./" : p == (s) ? "/" \
! : savestring ((s), p - (s) )) /* Removed - 1 */
/* $* is the stem from an implicit or static pattern rule. */
if (file->stem == 0)
--- 63,69 ----
#define LASTSLASH(s) rindex ((s), '/')
#define FILEONLY(s) (p != 0 ? p + 1 : (s))
#define DIRONLY(s) (p == 0 ? "./" : p == (s) ? "/" \
! : savestring ((s), p - (s) - 1))
/* $* is the stem from an implicit or static pattern rule. */
if (file->stem == 0)
---------------------------------------
Thanks for some wonderful useful products etc. etc.
---------------------------------------
Tim Bissell
( tjb@tadtec.UUCP || {...mcvax!}ukc!tadtec!tjb )
Tadpole Technology plc.
Titan House, Castle Park, Cambridge, England .