From 9082f9ba570dc11ea3706f1d54cc97e4ceea4e87 Mon Sep 17 00:00:00 2001 From: Brandon Maier Date: Mon, 17 Feb 2025 12:45:40 -0600 Subject: [PATCH] GNUmakefile: support skipping manpages and completions When packaging uutils for Conda-Forge and a cross-compiled architecture, the install of completion scripts and manpages fails with the following error. > .../coreutils manpage arch > .../man/arch.1 > /bin/sh: .../coreutils: Bad CPU type in executable > make: *** [GNUmakefile:349: manpages] Error 126 When cross-compiling, the `coreutils` tool will be for a different architecture then the build platform. So we won't be able to extract the manpages and completions. Provide build arguments that let us skip the build and install of manpages and completions. --- GNUmakefile | 41 +++++++++++++++++++++++++++-------------- README.md | 6 ++++++ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 9552792f8..a8db31b91 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -3,6 +3,8 @@ # Config options PROFILE ?= debug MULTICALL ?= n +COMPLETIONS ?= y +MANPAGES ?= y INSTALL ?= install ifneq (,$(filter install, $(MAKECMDGOALS))) override PROFILE:=release @@ -343,12 +345,23 @@ clean: distclean: clean $(CARGO) clean $(CARGOFLAGS) && $(CARGO) update $(CARGOFLAGS) +ifeq ($(MANPAGES),y) manpages: build-coreutils mkdir -p $(BUILDDIR)/man/ $(foreach prog, $(INSTALLEES), \ $(BUILDDIR)/coreutils manpage $(prog) > $(BUILDDIR)/man/$(PROG_PREFIX)$(prog).1 $(newline) \ ) +install-manpages: manpages + mkdir -p $(DESTDIR)$(DATAROOTDIR)/man/man1 + $(foreach prog, $(INSTALLEES), \ + $(INSTALL) $(BUILDDIR)/man/$(PROG_PREFIX)$(prog).1 $(DESTDIR)$(DATAROOTDIR)/man/man1/ $(newline) \ + ) +else +install-manpages: +endif + +ifeq ($(COMPLETIONS),y) completions: build-coreutils mkdir -p $(BUILDDIR)/completions/zsh $(BUILDDIR)/completions/bash $(BUILDDIR)/completions/fish $(foreach prog, $(INSTALLEES), \ @@ -357,7 +370,20 @@ completions: build-coreutils $(BUILDDIR)/coreutils completion $(prog) fish > $(BUILDDIR)/completions/fish/$(PROG_PREFIX)$(prog).fish $(newline) \ ) -install: build manpages completions +install-completions: completions + mkdir -p $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions + mkdir -p $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions + mkdir -p $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d + $(foreach prog, $(INSTALLEES), \ + $(INSTALL) $(BUILDDIR)/completions/zsh/_$(PROG_PREFIX)$(prog) $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions/ $(newline) \ + $(INSTALL) $(BUILDDIR)/completions/bash/$(PROG_PREFIX)$(prog) $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions/ $(newline) \ + $(INSTALL) $(BUILDDIR)/completions/fish/$(PROG_PREFIX)$(prog).fish $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d/ $(newline) \ + ) +else +install-completions: +endif + +install: build install-manpages install-completions mkdir -p $(INSTALLDIR_BIN) ifeq (${MULTICALL}, y) $(INSTALL) $(BUILDDIR)/coreutils $(INSTALLDIR_BIN)/$(PROG_PREFIX)coreutils @@ -371,19 +397,6 @@ else ) $(if $(findstring test,$(INSTALLEES)), $(INSTALL) $(BUILDDIR)/test $(INSTALLDIR_BIN)/$(PROG_PREFIX)[) endif - mkdir -p $(DESTDIR)$(DATAROOTDIR)/man/man1 - $(foreach prog, $(INSTALLEES), \ - $(INSTALL) $(BUILDDIR)/man/$(PROG_PREFIX)$(prog).1 $(DESTDIR)$(DATAROOTDIR)/man/man1/ $(newline) \ - ) - - mkdir -p $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions - mkdir -p $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions - mkdir -p $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d - $(foreach prog, $(INSTALLEES), \ - $(INSTALL) $(BUILDDIR)/completions/zsh/_$(PROG_PREFIX)$(prog) $(DESTDIR)$(DATAROOTDIR)/zsh/site-functions/ $(newline) \ - $(INSTALL) $(BUILDDIR)/completions/bash/$(PROG_PREFIX)$(prog) $(DESTDIR)$(DATAROOTDIR)/bash-completion/completions/ $(newline) \ - $(INSTALL) $(BUILDDIR)/completions/fish/$(PROG_PREFIX)$(prog).fish $(DESTDIR)$(DATAROOTDIR)/fish/vendor_completions.d/ $(newline) \ - ) uninstall: ifeq (${MULTICALL}, y) diff --git a/README.md b/README.md index 37c5a596b..47626fc4e 100644 --- a/README.md +++ b/README.md @@ -223,6 +223,12 @@ Installing with `make` installs shell completions for all installed utilities for `bash`, `fish` and `zsh`. Completions for `elvish` and `powershell` can also be generated; See `Manually install shell completions`. +To skip installation of completions and manpages: + +```shell +make COMPLETIONS=n MANPAGES=n install +``` + ### Manually install shell completions The `coreutils` binary can generate completions for the `bash`, `elvish`,