Re: FreeBSD make fails on BUILT_SOURCES file
Jan Engelhardt <[email protected]> Wed, 24 Sep 2025 20:47:46 +0200 (CEST)
| Newsgroups | gmane.comp.sysutils.automake.general |
|---|---|
| Message-ID | <[email protected]> |
On Wednesday 2025-09-24 19:05, Nate Bargmann wrote:
>make[1]: don't know how to make ./hamlibdatetime.h. Stop
Something wanted to make "./hamlibdatetime.h", but you only provide
a rule for "hamlibdatetime.h":
>hamlibdatetime.h: FORCE
> @if test -x $(top_srcdir)/.git ; then \
> echo "/* This date time is from the last non-merge commit to Hamlib. */" > $(builddir)/$(@F).tmp ;\
> echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%Y-%m-%dT%H:%M:%SZ SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges -n 1 | head -n 1 | cut -c8-13)\" >> $(builddir)/$(@F).tmp ;\
The distinction is important.
>BUILT_SOURCES = $(builddir)/hamlibdatetime.h
All targets are already relative to ${builddir},
so explicitly mentioning ${builddir} is wrong for
targets, and redundant in the recipe.
I'm unsure if $(@F) is even supported outside of GNU make.
>hamlibdatetime.h: FORCE
> @if test -x $(top_srcdir)/.git ; then \
> echo "/* This date time is from the last non-merge commit to Hamlib. */" > $(builddir)/$(@F).tmp ;\
> echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%Y-%m-%dT%H:%M:%SZ SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges -n 1 | head -n 1 | cut -c8-13)\" >> $(builddir)/$(@F).tmp ;\
> diff -qN $(builddir)/$(@F).tmp $(builddir)/$(@F) ; test $$? -eq 0 || { echo "Generating SCS header \"$(builddir)/$(@F)\"" ; mv -f $(builddir)/$(@F).tmp $(builddir)/$(@F) ; } ;\
> rm -f $(builddir)/$(@F).tmp ;\
> touch -c $(top_srcdir)/src/version_dll.rc ;\
> else \
> test -f $(srcdir)/$(@F) || cp $(srcdir)/$(@F).in $(srcdir)/$(@F) ;\
> fi
Just write
BUILT_SOURCES = hamlibdatetime.h
@if test -x $(top_srcdir)/.git ; then \
echo "/* This date time is from the last non-merge commit to Hamlib. */" >[email protected] ;\
echo "#define HAMLIBDATETIME "\"$$(TZ=UTC git --git-dir=$(top_srcdir)/.git log --no-merges --date='format-local:%Y-%m-%dT%H:%M:%SZ SHA=' --format='%cd' -n 1)$$(git --git-dir=$(top_srcdir)/.git log --no-merges -n 1 | head -n 1 | cut -c8-13)\" >>[email protected] ;\
diff -qN [email protected] $@; test $$? -eq 0 || { echo "Generating SCS header \"$@\"" ; mv -f [email protected] $@; } ;\
rm -f [email protected] ;\
#don't!# touch -c $(top_srcdir)/src/version_dll.rc ;\
else \
#?!# test -f $(srcdir)/$(@F) || cp $(srcdir)/$(@F).in $(srcdir)/$(@F) ;\
fi
You should never modify content in ${srcdir} (it could be readonly after all),
so revise those two lines as well.