make is doing something funny in the area of stripping the leading ./
from filenames. I can demonstrate with the following Makefile, which is
also attached so you get a copy without whitespace damage.
files := $(shell find . -type f -print)
objects: $(addprefix ./, $(files))
install: $(addprefix /home/andrew/, $(files))
$(addprefix /home/andrew/, $(files)): /home/andrew/%: ./%
true $<
Put this in an empty directory, then create some files, eg
for i in $(seq 1 10); do touch foo$i; done
and run
make install
Output:
true foo1
true foo2
true foo3
true foo4
true ./foo5
true foo6
true foo7
true foo8
true ./foo9
true foo10
true Makefile
Funny, huh? I gave a little attempt to tracking it down. I thought
maybe parse_file_seq was at fault, but it seems to give correct results.
Then, I looked at the output of
make -r -p install
(attached). Looking at the "Not a target" entries, I see foo5,
./foo5, and foo4, but no ./foo4. So it seems that for some reason foo5
has an entry under both names and they are aliased in some way. I can't
imagine why this only afflicts some files.
Also, I noticed that if I comment out the second line of the Makefiles
(which defines the unused objects target), the output is:
true ./foo1
true ./foo2
true ./foo3
true ./foo4
true ./foo5
true ./foo6
true ./foo7
true ./foo8
true ./foo9
true ./foo10
true ./Makefile
This seems to be a mostly cosmetic bug, but the aliasing is somewhat
worrying.
My make is 3.80 in Debian GNU/Linux unstable.
Andrew
files := $(shell find . -type f -print)
objects: $(addprefix ./, $(files))
install: $(addprefix /home/andrew/, $(files))
$(addprefix /home/andrew/, $(files)): /home/andrew/%: ./%
true $<
# GNU Make 3.80
# Copyright (C) 2002 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.
true foo1
true foo2
true foo3
true foo4
true ./foo5
true foo6
true foo7
true foo8
true ./foo9
true foo10
true make_data_base
true Makefile
# Make data base, printed on Mon Feb 28 16:23:46 2005
# Variables
# automatic
<D = $(patsubst %/,%,$(dir $<))
# automatic
?F = $(notdir $?)
# environment
RLPR_PRINTHOST = 10.16.16.20
# default
CWEAVE = cweave
# automatic
?D = $(patsubst %/,%,$(dir $?))
# automatic
@D = $(patsubst %/,%,$(dir $@))
# environment
XAUTHORITY = /home/andrew/.Xauthority
# automatic
@F = $(notdir $@)
# default
CURDIR := /home/andrew/proj/web/apn/test
# makefile
SHELL = /bin/sh
# default
RM = rm -f
# default
CO = co
# environment
HZ = 100
# environment
_ = /usr/bin/make
# default
PREPROCESS.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -F
# default
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH)
# default
OUTPUT_OPTION = -o $@
# environment
HUSHLOGIN = FALSE
# default
COMPILE.cpp = $(COMPILE.cc)
# makefile (from `Makefile', line 1)
MAKEFILE_LIST := Makefile
# default
LINK.p = $(PC) $(PFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# default
CC = cc
# default
COMPILE.f = $(FC) $(FFLAGS) $(TARGET_ARCH) -c
# default
CHECKOUT,v = +$(if $(wildcard $@),,$(CO) $(COFLAGS) $< $@)
# default
CPP = $(CC) -E
# default
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
PATH =
/home/andrew/bin:/usr/sbin:/sbin:/home/andrew/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
# default
LD = ld
# default
TEXI2DVI = texi2dvi
# environment
FVWM_USERDIR = /home/andrew/.fvwm
# default
YACC = yacc
# makefile (from `Makefile', line 1)
files := ./foo1 ./foo2 ./foo3 ./foo4 ./foo5 ./foo6 ./foo7 ./foo8 ./foo9 ./foo10
./make_data_base ./Makefile
# default
COMPILE.mod = $(M2C) $(M2FLAGS) $(MODFLAGS) $(TARGET_ARCH)
# default
ARFLAGS = rv
# default
LINK.r = $(FC) $(FFLAGS) $(RFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
WINDOWID = 33554448
# environment
FVWM_MODULEDIR = /usr/lib/fvwm/2.5.12
# default
LINT.c = $(LINT) $(LINTFLAGS) $(CPPFLAGS) $(TARGET_ARCH)
# default
LINT = lint
# default
YACC.y = $(YACC) $(YFLAGS)
# default
AR = ar
# default
TANGLE = tangle
# environment
LS_COLORS =
no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:
# environment
EMAIL = [EMAIL PROTECTED]
# environment
SSH_AUTH_SOCK = /tmp/ssh-KCLiwS2832/agent.2832
# default
GET = get
# automatic
%F = $(notdir $%)
# environment
DISPLAY = :0.0
# default
COMPILE.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
CTANGLE = ctangle
# environment
VISUAL = vi
# default
.LIBPATTERNS = lib%.so lib%.a
# default
LINK.C = $(LINK.cc)
# environment
PWD = /home/andrew/proj/web/apn/test
# default
LINK.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_MACH)
# default
PREPROCESS.r = $(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -F
# environment
SSH_AGENT_PID = 2867
# default
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# environment
MANPATH =
/home/andrew/local/man:/home/andrew/local/man:/usr/share/man:/usr/local/man:/usr/local/share/man:/usr/X11R6/man
# default
LINK.s = $(CC) $(ASFLAGS) $(LDFLAGS) $(TARGET_MACH)
# environment
HOME = /home/andrew
# environment
PERL5LIB = /home/andrew/lib/perl:/home/andrew/local/lib/perl
# environment
LOGNAME = andrew
# environment
HUGSFLAGS = -P/home/andrew/lib/haskell:
# automatic
^D = $(patsubst %/,%,$(dir $^))
# default
MAKE = $(MAKE_COMMAND)
# default
MAKECMDGOALS := install
# environment
SHLVL = 3
# default
AS = as
# default
PREPROCESS.S = $(CC) -E $(CPPFLAGS)
# default
COMPILE.p = $(PC) $(PFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
MAKE_VERSION := 3.80
# environment
USER = andrew
# default
FC = f77
# environment
HOSTDISPLAY = apple:0.0
# environment
LESS = -i
# automatic
%D = $(patsubst %/,%,$(dir $%))
# default
WEAVE = weave
# default
MAKE_COMMAND := make
# default
LINK.cpp = $(LINK.cc)
# default
F77 = $(FC)
# environment
OLDPWD = /home/andrew/proj/web/apn
# default
.VARIABLES :=
# default
PC = pc
# automatic
*F = $(notdir $*)
# default
COMPILE.def = $(M2C) $(M2FLAGS) $(DEFFLAGS) $(TARGET_ARCH)
# default
LEX = lex
# makefile
MAKEFLAGS = rp
# environment
MFLAGS = -rp
# automatic
*D = $(patsubst %/,%,$(dir $*))
# environment
MAIL = /var/mail/andrew
# default
LEX.l = $(LEX) $(LFLAGS) -t
# automatic
+D = $(patsubst %/,%,$(dir $+))
# default
COMPILE.r = $(FC) $(FFLAGS) $(RFLAGS) $(TARGET_ARCH) -c
# automatic
+F = $(notdir $+)
# default
M2C = m2c
# default
MAKEFILES :=
# default
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# automatic
<F = $(notdir $<)
# default
CXX = g++
# default
COFLAGS =
# environment
EDITOR = vi
# default
COMPILE.C = $(COMPILE.cc)
# automatic
^F = $(notdir $^)
# default
COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c
# default
LINK.F = $(FC) $(FFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# default
SUFFIXES :=
# default
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
# default
COMPILE.s = $(AS) $(ASFLAGS) $(TARGET_MACH)
# environment
MAKELEVEL := 0
# default
MAKEINFO = makeinfo
# default
TEX = tex
# environment
LANG = en_US.UTF-8
# environment
TERM = xterm
# default
F77FLAGS = $(FFLAGS)
# default
LINK.f = $(FC) $(FFLAGS) $(LDFLAGS) $(TARGET_ARCH)
# variable set hash-table stats:
# Load=116/1024=11%, Rehash=0, Collisions=10/161=6%
# Directories
# . (device 771, inode 260165): 14 files, no impossibilities.
# 14 files, no impossibilities in 1 directories.
# Implicit Rules
# No implicit rules.
# Pattern-specific variable values
# No pattern-specific variable values.
# Files
/home/andrew/./foo5: ./foo5
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo5'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo5
# automatic
# % :=
# automatic
# * := ./foo5
# automatic
# + := ./foo5
# automatic
# | :=
# automatic
# < := ./foo5
# automatic
# ^ := ./foo5
# automatic
# ? := ./foo5
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
/home/andrew/./foo9: ./foo9
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo9'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo9
# automatic
# % :=
# automatic
# * := ./foo9
# automatic
# + := ./foo9
# automatic
# | :=
# automatic
# < := ./foo9
# automatic
# ^ := ./foo9
# automatic
# ? := ./foo9
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
objects: foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10 make_data_base
Makefile
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
# Not a target:
.SUFFIXES:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
# Not a target:
foo1:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.496874776
# File has been updated.
# Successfully updated.
/home/andrew/./foo4: foo4
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo4'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo4
# automatic
# % :=
# automatic
# * := ./foo4
# automatic
# + := foo4
# automatic
# | :=
# automatic
# < := foo4
# automatic
# ^ := foo4
# automatic
# ? := foo4
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
Makefile:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:09:56.824292921
# File has been updated.
# Successfully updated.
/home/andrew/./foo8: foo8
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo8'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo8
# automatic
# % :=
# automatic
# * := ./foo8
# automatic
# + := foo8
# automatic
# | :=
# automatic
# < := foo8
# automatic
# ^ := foo8
# automatic
# ? := foo8
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo10:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.505873338
# File has been updated.
# Successfully updated.
/home/andrew/./foo3: foo3
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo3'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo3
# automatic
# % :=
# automatic
# * := ./foo3
# automatic
# + := foo3
# automatic
# | :=
# automatic
# < := foo3
# automatic
# ^ := foo3
# automatic
# ? := foo3
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
/home/andrew/./foo7: foo7
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo7'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo7
# automatic
# % :=
# automatic
# * := ./foo7
# automatic
# + := foo7
# automatic
# | :=
# automatic
# < := foo7
# automatic
# ^ := foo7
# automatic
# ? := foo7
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
./foo5:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.500874137
# File has been updated.
# Successfully updated.
/home/andrew/./foo6: foo6
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo6'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo6
# automatic
# % :=
# automatic
# * := ./foo6
# automatic
# + := foo6
# automatic
# | :=
# automatic
# < := foo6
# automatic
# ^ := foo6
# automatic
# ? := foo6
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo2:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.497874616
# File has been updated.
# Successfully updated.
# Not a target:
./foo9:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.504873498
# File has been updated.
# Successfully updated.
# Not a target:
foo5:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
/home/andrew/./make_data_base: make_data_base
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./make_data_base'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./make_data_base
# automatic
# % :=
# automatic
# * := ./make_data_base
# automatic
# + := make_data_base
# automatic
# | :=
# automatic
# < := make_data_base
# automatic
# ^ := make_data_base
# automatic
# ? := make_data_base
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo9:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
# Not a target:
.DEFAULT:
# Implicit rule search has not been done.
# Modification time never checked.
# File has not been updated.
/home/andrew/./foo1: foo1
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo1'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo1
# automatic
# % :=
# automatic
# * := ./foo1
# automatic
# + := foo1
# automatic
# | :=
# automatic
# < := foo1
# automatic
# ^ := foo1
# automatic
# ? := foo1
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo4:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.499874297
# File has been updated.
# Successfully updated.
/home/andrew/./foo10: foo10
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo10'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo10
# automatic
# % :=
# automatic
# * := ./foo10
# automatic
# + := foo10
# automatic
# | :=
# automatic
# < := foo10
# automatic
# ^ := foo10
# automatic
# ? := foo10
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo8:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.503873657
# File has been updated.
# Successfully updated.
/home/andrew/./Makefile: Makefile
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./Makefile'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./Makefile
# automatic
# % :=
# automatic
# * := ./Makefile
# automatic
# + := Makefile
# automatic
# | :=
# automatic
# < := Makefile
# automatic
# ^ := Makefile
# automatic
# ? := Makefile
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
# Not a target:
foo3:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.498874456
# File has been updated.
# Successfully updated.
# Not a target:
foo7:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.502873817
# File has been updated.
# Successfully updated.
/home/andrew/./foo2: foo2
# Implicit rule search has not been done.
# Implicit/static pattern stem: `./foo2'
# File does not exist.
# File has been updated.
# Successfully updated.
# automatic
# @ := /home/andrew/./foo2
# automatic
# % :=
# automatic
# * := ./foo2
# automatic
# + := foo2
# automatic
# | :=
# automatic
# < := foo2
# automatic
# ^ := foo2
# automatic
# ? := foo2
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=1/11=9%
# commands to execute (from `Makefile', line 8):
true $<
install: /home/andrew/./foo1 /home/andrew/./foo2 /home/andrew/./foo3
/home/andrew/./foo4 /home/andrew/./foo5 /home/andrew/./foo6 /home/andrew/./foo7
/home/andrew/./foo8 /home/andrew/./foo9 /home/andrew/./foo10
/home/andrew/./make_data_base /home/andrew/./Makefile
# Command-line target.
# Implicit rule search has been done.
# File does not exist.
# File has been updated.
# Successfully updated.
# variable set hash-table stats:
# Load=0/32=0%, Rehash=0, Collisions=0/24=0%
# Not a target:
foo6:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:14:03.501873977
# File has been updated.
# Successfully updated.
# Not a target:
make_data_base:
# Implicit rule search has been done.
# Last modified 2005-02-28 16:23:46.037785054
# File has been updated.
# Successfully updated.
# files hash-table stats:
# Load=30/1024=3%, Rehash=0, Collisions=0/78=0%
# VPATH Search Paths
# No `vpath' search paths.
# No general (`VPATH' variable) search path.
# Finished Make data base on Mon Feb 28 16:23:46 2005
_______________________________________________
Bug-make mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-make