commit 27d5897b02ddad58c52850ad4ba0daae41d2d0c3
parent 4f3781a6a6dd19e67f5a057e40075706f93b5773
Author: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
Date: Tue, 1 Oct 2024 09:59:22 +0200
Makefile: Install hare(1) built by hare
The hare(1) command is bootstrapped from direct calls to harec(1) and
the rest of the toolchain so as a result it does not honor HAREFLAGS
among other things done by a regular hare build. This prevents software
distributions from shipping proper release builds using the -R option.
To avoid this pitfall, a new hare-install program is built using hare at
install time, and is installed as $(BINDIR)/hare. The benefits include a
consistent build of installed hare(1) and haredoc(1) commands and an
implicit check that hare(1) successfully builds itself.
Signed-off-by: Dridi Boukelmoune <dridi.boukelmoune@gmail.com>
Diffstat:
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
@@ -48,6 +48,12 @@ HARE_BUILD_ENV = HAREPATH=. HAREC="$(HAREC)" QBE="$(QBE)" AS="$(AS)" \
LD="$(LD)" HARECFLAGS="$(HARECFLAGS)" QBEFLAGS="$(QBEFLAGS)" \
ASFLAGS="$(ASFLAGS)" LDLINKFLAGS="$(LDLINKFLAGS)"
+$(BINOUT)/hare-install: $(BINOUT)/hare
+ @mkdir -p $(BINOUT)
+ @printf 'HARE\t%s\n' "$@"
+ @env $(HARE_BUILD_ENV) \
+ $(BINOUT)/hare build $(HARE_DEFINES) $(HAREFLAGS) -o $@ ./cmd/hare
+
$(BINOUT)/haredoc: $(BINOUT)/hare
@mkdir -p $(BINOUT)
@printf 'HARE\t%s\n' "$@"
@@ -94,11 +100,11 @@ check: $(BINOUT)/hare
install: install-cmd install-mods
-install-cmd:
+install-cmd: all $(BINOUT)/hare-install
mkdir -p -- \
'$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man1' \
'$(DESTDIR)$(BINDIR)' '$(DESTDIR)$(MANDIR)/man5'
- install -m755 '$(BINOUT)/hare' '$(DESTDIR)$(BINDIR)/hare'
+ install -m755 '$(BINOUT)/hare-install' '$(DESTDIR)$(BINDIR)/hare'
install -m755 '$(BINOUT)/haredoc' '$(DESTDIR)$(BINDIR)/haredoc'
for i in $(MAN1); do install -m644 docs/$$i.1 '$(DESTDIR)$(MANDIR)'/man1/$$i.1; done
for i in $(MAN5); do install -m644 docs/$$i.5 '$(DESTDIR)$(MANDIR)'/man5/$$i.5; done
@@ -115,5 +121,5 @@ uninstall:
for i in $(MAN5); do rm -- '$(DESTDIR)$(MANDIR)'/man5/$$i.5; done
rm -r -- '$(DESTDIR)$(STDLIB)'
-.PHONY: all $(BINOUT)/haredoc bootstrap clean check docs \
- docs/html install start uninstall
+.PHONY: all $(BINOUT)/hare-install $(BINOUT)/haredoc bootstrap clean check \
+ docs docs/html install start uninstall