hare

[hare] The Hare programming language
git clone https://git.torresjrjr.com/hare.git
Log | Files | Refs | README | LICENSE

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:
MMakefile | 14++++++++++----
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