This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
B20: Bug in make with static pattern rules.
- To: gnu-win32 at cygnus dot com
- Subject: B20: Bug in make with static pattern rules.
- From: Malcolm Purvis <malcolmp at abc dot gov dot au>
- Date: Tue, 10 Nov 1998 16:57:13 +1100 (EST)
I have just downloaded and installed the full.exe version of B20 onto my win
95B machine, and immediately set about installing some software that had been
ported to B18, but I don't think has been supported since. Unfortunately, it
fails with make generating an error. The following makefile highlights the
problem:
---------------------------------------------------------------------------
# Test for a bug in cygwin gnumake
AA := /a
BB := /a/b
all :: $(AA) $(BB)
$(AA) $(BB) : % :
mkdir $@
---------------------------------------------------------------------------
When run under B20, it produces the message:
---------------------------------------------------------------------------
make: *** No rule to make target '/a', needed by 'all'. Stop.
---------------------------------------------------------------------------
While gnumake 3.77 under Solaris produces the expected output:
---------------------------------------------------------------------------
mkdir /a
mkdir /a/b
---------------------------------------------------------------------------
However, it works if the leading '/' is removed from the path in $(BB). Is
there a problem with absolute path names?
The error seems to be generated because the two paths are being combined into
one path with a space in the name and so the desired targets vanish and make
generates the error. This can be seen if make's database is dumped (with the
-p argument). The following is the relevant part of the dump (the rest is
deleted for brevity):
---------------------------------------------------------------------------
/a /a/b:
# Implicit rule search has not been done.
# Implicit/static pattern stem: `/a /a/b'
# Modification time never checked.
# File has not been updated.
# commands to execute (from `Makefile.txt', line 9):
mkdir $@
---------------------------------------------------------------------------
The equivalent parts of the run on Solaris is:
---------------------------------------------------------------------------
/a:
# Implicit rule search has not been done.
# Implicit/static pattern stem: `/a'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# ^ :=
# automatic
# @ := /a
# automatic
# + :=
# automatic
# ? :=
# automatic
# * := /a
# automatic
# % :=
# automatic
# < :=
# 7 variables in 23 hash buckets.
# average of 0.3 variables per bucket, max 2 in one bucket.
# commands to execute (from `Makefile', line 9):
mkdir $@
/a/b:
# Implicit rule search has not been done.
# Implicit/static pattern stem: `/a/b'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# ^ :=
# automatic
# @ := /a/b
# automatic
# + :=
# automatic
# ? :=
# automatic
# * := /a/b
# automatic
# % :=
# automatic
# < :=
# 7 variables in 23 hash buckets.
# average of 0.3 variables per bucket, max 2 in one bucket.
# commands to execute (from `Makefile', line 9):
mkdir $@
---------------------------------------------------------------------------
--
Malcolm Purvis (malcolmp@abc.gov.au) - ABC Technology Research and Development
"I don't want it to be practical, I want it to be *expensive*."
-- my wife.
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".