Make

Command detection

It can be useful to check if a missing piece of software is available on the build system.

This wraps everything into a single function for easier use:

assert-command-present = $(if $(shell which $1),,$(error '$1' missing and needed for this build))

$(call assert-command-present,curl)
$(call assert-command-present,curly)

Checking for binaries

# Example with `ls`:
# $(call assert-command-present,ls)
assert-command-present = $(if $(shell which $1),,$(error '$1' missing and needed for this build))

Showing help

# Default target if not specified.
.DEFAULT_GOAL := help

# Define the non-file targets to avoid confusion with files
.PHONY: help

help: ## Show a list of available targets.
@echo Available targets:
@grep -E '^[\.a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
    | sed -n 's/^\(.*\): \(.*\)##\(.*\)/\1\{}\3/p' \
    | sort \
    | column -t -s '{}'