bug-make
[Top][All Lists]
Advanced

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

Generating missing depfiles by an automake based makefile


From: Dmitry Goncharov
Subject: Generating missing depfiles by an automake based makefile
Date: Tue, 7 Feb 2023 21:39:46 -0500

Good morning.

Here is a rule from an automake generated makefile.

$(am__depfiles_remade):
    @$(MKDIR_P) $(@D)
    @echo '# dummy' >$@-t && $(am__mv) $@-t $@

This rule restores a missing depfile file by creating a file with one
line '# dummy'. (Next version of automake will create an empty one).
There must have been a reason for generating such a depfile.
However, this depfile fails dependency tracking. Once a depfile was
removed and recreated in this shape, it will no longer perform its
function.

Below is a sample bash session with gnu make which demonstrates how a
dummy shuffle.Po makefile fails to have shuffle.o rebuilt when
shuffle.h changes.


$ make -j3  CFLAGS='-Wall -Wextra -ggdb -m64 -O0 -DMAKE_MAINTAINER_MODE=1'
./config.status --header=src/mkconfig.h
Making all in lib
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make  all-recursive
config.status: creating src/mkconfig.h
config.status: src/mkconfig.h is unchanged
make[2]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[3]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[2]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
Making all in po
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/po'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/po'
Making all in doc
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64'
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64'
$ ls -l src/shuffle.o
-rw-r--r-- 1 dgoncharov wireshark 13K Feb  7 21:16 src/shuffle.o
$ head src/.deps/shuffle.Po
src/shuffle.o: ../src/shuffle.c /usr/include/stdc-predef.h \
 ../src/makeint.h src/config.h ../src/../src/mkcustom.h lib/alloca.h \
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/stddef.h \
 ../src/gnumake.h /usr/include/sys/types.h /usr/include/features.h \
 /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
 /usr/include/bits/long-double.h /usr/include/gnu/stubs.h \
 /usr/include/gnu/stubs-64.h /usr/include/bits/types.h \
 /usr/include/bits/timesize.h /usr/include/bits/typesizes.h \
 /usr/include/bits/time64.h /usr/include/bits/types/clock_t.h \
 /usr/include/bits/types/clockid_t.h /usr/include/bits/types/time_t.h \
$ grep shuffle.h src/.deps/*.Po
src/.deps/file.Po: ../src/variable.h ../src/debug.h ../src/shuffle.h
src/.deps/file.Po:../src/shuffle.h:
src/.deps/implicit.Po: ../src/output.h ../src/commands.h
../src/shuffle.h /usr/include/assert.h
src/.deps/implicit.Po:../src/shuffle.h:
src/.deps/job.Po: ../src/variable.h ../src/os.h ../src/dep.h ../src/shuffle.h \
src/.deps/job.Po:../src/shuffle.h:
src/.deps/main.Po: ../src/shuffle.h /usr/include/assert.h /usr/include/fcntl.h \
src/.deps/main.Po:../src/shuffle.h:
src/.deps/shuffle.Po: /usr/include/glob.h ../src/shuffle.h
../src/filedef.h ../src/hash.h \
src/.deps/shuffle.Po:../src/shuffle.h:
$ rm src/.deps/shuffle.Po
$ make -j3  CFLAGS='-Wall -Wextra -ggdb -m64 -O0 -DMAKE_MAINTAINER_MODE=1'
./config.status --header=src/mkconfig.h
Making all in lib
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make  all-recursive
make[2]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
config.status: creating src/mkconfig.h
config.status: src/mkconfig.h is unchanged
make[3]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[2]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
Making all in po
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/po'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/po'
Making all in doc
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64'
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64'
$ head src/.deps/shuffle.Po
# dummy
$ touch ../src/shuffle.h
$ make -j3  CFLAGS='-Wall -Wextra -ggdb -m64 -O0 -DMAKE_MAINTAINER_MODE=1'
./config.status --header=src/mkconfig.h
Making all in lib
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make  all-recursive
config.status: creating src/mkconfig.h
config.status: src/mkconfig.h is unchanged
make[2]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[3]: Entering directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[3]: Nothing to be done for 'all-am'.
make[3]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[2]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/lib'
Making all in po
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/po'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/po'
Making all in doc
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64/doc'
make[1]: Entering directory '/home/dgoncharov/src/gmake/make/l64'
depbase=`echo src/file.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DHAVE_CONFIG_H   -Isrc -I../src -Ilib -I../lib
-DLIBDIR=\"/usr/local/lib\" -DLOCALEDIR=\"/usr/local/share/locale\"
-DMAKE_MAINTAINER_MODE   -C -Wall -Wextra -Werror -Wwrite-strings
-Wshadow -Wdeclaration-after-statement -Wbad-function-cast
-Wformat-security -Wtype-limits -Wunused-but-set-parameter
-Wlogical-op -Wpointer-arith -Wignored-qualifiers -Wformat-signedness
-Wduplicated-cond -Wall -Wextra -ggdb -m64 -O0
-DMAKE_MAINTAINER_MODE=1 -MT src/file.o -MD -MP -MF $depbase.Tpo -c -o
src/file.o ../src/file.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo src/implicit.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DHAVE_CONFIG_H   -Isrc -I../src -Ilib -I../lib
-DLIBDIR=\"/usr/local/lib\" -DLOCALEDIR=\"/usr/local/share/locale\"
-DMAKE_MAINTAINER_MODE   -C -Wall -Wextra -Werror -Wwrite-strings
-Wshadow -Wdeclaration-after-statement -Wbad-function-cast
-Wformat-security -Wtype-limits -Wunused-but-set-parameter
-Wlogical-op -Wpointer-arith -Wignored-qualifiers -Wformat-signedness
-Wduplicated-cond -Wall -Wextra -ggdb -m64 -O0
-DMAKE_MAINTAINER_MODE=1 -MT src/implicit.o -MD -MP -MF $depbase.Tpo
-c -o src/implicit.o ../src/implicit.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo src/job.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DHAVE_CONFIG_H   -Isrc -I../src -Ilib -I../lib
-DLIBDIR=\"/usr/local/lib\" -DLOCALEDIR=\"/usr/local/share/locale\"
-DMAKE_MAINTAINER_MODE   -C -Wall -Wextra -Werror -Wwrite-strings
-Wshadow -Wdeclaration-after-statement -Wbad-function-cast
-Wformat-security -Wtype-limits -Wunused-but-set-parameter
-Wlogical-op -Wpointer-arith -Wignored-qualifiers -Wformat-signedness
-Wduplicated-cond -Wall -Wextra -ggdb -m64 -O0
-DMAKE_MAINTAINER_MODE=1 -MT src/job.o -MD -MP -MF $depbase.Tpo -c -o
src/job.o ../src/job.c &&\
mv -f $depbase.Tpo $depbase.Po
depbase=`echo src/main.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -DHAVE_CONFIG_H   -Isrc -I../src -Ilib -I../lib
-DLIBDIR=\"/usr/local/lib\" -DLOCALEDIR=\"/usr/local/share/locale\"
-DMAKE_MAINTAINER_MODE   -C -Wall -Wextra -Werror -Wwrite-strings
-Wshadow -Wdeclaration-after-statement -Wbad-function-cast
-Wformat-security -Wtype-limits -Wunused-but-set-parameter
-Wlogical-op -Wpointer-arith -Wignored-qualifiers -Wformat-signedness
-Wduplicated-cond -Wall -Wextra -ggdb -m64 -O0
-DMAKE_MAINTAINER_MODE=1 -MT src/main.o -MD -MP -MF $depbase.Tpo -c -o
src/main.o ../src/main.c &&\
mv -f $depbase.Tpo $depbase.Po
gcc  -C -Wall -Wextra -Werror -Wwrite-strings -Wshadow
-Wdeclaration-after-statement -Wbad-function-cast -Wformat-security
-Wtype-limits -Wunused-but-set-parameter -Wlogical-op -Wpointer-arith
-Wignored-qualifiers -Wformat-signedness -Wduplicated-cond -Wall
-Wextra -ggdb -m64 -O0 -DMAKE_MAINTAINER_MODE=1 -Wl,--export-dynamic
-m64 -fsanitize=address -fsanitize=pointer-compare
-fsanitize=undefined -fsanitize=leak -ldl -o make src/ar.o
src/arscan.o src/commands.o src/default.o src/dir.o src/expand.o
src/file.o src/function.o src/getopt.o src/getopt1.o src/guile.o
src/hash.o src/implicit.o src/job.o src/load.o src/loadapi.o
src/main.o src/misc.o src/output.o src/read.o src/remake.o src/rule.o
src/shuffle.o src/signame.o src/strcache.o src/variable.o
src/version.o src/vpath.o  src/posixos.o  src/remote-stub.o
lib/libgnu.a
make[1]: Leaving directory '/home/dgoncharov/src/gmake/make/l64'
$ ls -l src/main.o src/shuffle.o
-rw-r--r-- 1 dgoncharov wireshark 107K Feb  7 21:18 src/main.o
-rw-r--r-- 1 dgoncharov wireshark  13K Feb  7 21:16 src/shuffle.o
$


regards, Dmitry



reply via email to

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