Skip to content

Instantly share code, notes, and snippets.

@the-moog
Created January 4, 2023 15:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save the-moog/62679586e9fba7448c8b07824565bb66 to your computer and use it in GitHub Desktop.
Save the-moog/62679586e9fba7448c8b07824565bb66 to your computer and use it in GitHub Desktop.
makefile to see if it's possible to detect source of shell invocation with the make run
# use a bash as sh is sh*#
.SHELL = /bin/bash -e
# Turn off make's legacy cruft
.SUFFIXES:
# Unless otherwise stated
.DEFAULT_GOAL := diff
# TOOLS
## diff returns 1 for there is a difference but we don't want make to fail to prefix -
DIFF := -diff
## -f = force
RM := rm -f
## -fs = force symbolic
LN := ln -fs
## -e = extended
ECHO := echo -e
## set
SET := set
# TESTS
FROM_SHELL := from_shell
FROM_RECIPE := from_recipe
NEXT_LEVEL := next_level
# OUTPUTS
OP_FROM_SHELL := $(FROM_SHELL)_$(MAKELEVEL).txt
OP_FROM_RECIPE := $(FROM_RECIPE)_$(MAKELEVEL).txt
OP_NEXT_LEVEL := $(NEXT_LEVEL).txt
# using the shell keyword
$(info make is using shell)
$(shell $(SET) > $(OP_FROM_SHELL))
all: $(OP_FROM_RECIPE) $(NEXT_LEVEL) | $(info make all)
# Using a recipe
$(OP_FROM_RECIPE):
$(info make is using recipe)
$(SET) > $(OP_FROM_RECIPE)
# Stepping up a level
.PHONY: $(NEXT_LEVEL)
next_level:
$(info make next_level from $(MAKELEVEL))
$(MAKE) $(NEXT_LEVEL)_$(MAKELEVEL).txt
# Hander for next level
$(NEXT_LEVEL)%.txt:
$(info make $@)
$(SET) > $@
# Shiney Shiney
.PHONY: clean
clean:
$(info -> make clean)
$(RM) $(NEXT_LEVEL)*.txt
$(RM) $(FROM_RECIPE)*.txt
$(RM) $(FROM_SHELL)*.txt
$(RM) diff*.txt
# Collect the results
.PHONY: diff
diff: all
$(info -> make diff)
$(ECHO) "$(FROM_SHELL)_0.txt <-> $(OP_FROM_RECIPE)"
$(DIFF) $(FROM_SHELL)_0.txt $(OP_FROM_RECIPE) > diff_shell0_recipe.txt
$(ECHO) "$(FROM_SHELL)_0.txt <-> $(NEXT_LEVEL)_0.txt"
$(DIFF) $(FROM_SHELL)_0.txt $(NEXT_LEVEL)_0.txt > diff_shell0_level0.txt
$(ECHO) "$(FROM_SHELL)_0.txt <-> $(NEXT_LEVEL)_1.txt"
$(DIFF) $(FROM_SHELL)_0.txt $(NEXT_LEVEL)_1.txt > diff_shell0_level1.txt
$(ECHO) "$(FROM_SHELL)_1.txt <-> $(OP_FROM_RECIPE)"
$(DIFF) $(FROM_SHELL)_1.txt $(OP_FROM_RECIPE) > diff_shell1_recipe.txt
$(ECHO) "$(FROM_SHELL)_1.txt <-> $(NEXT_LEVEL)_0.txt"
$(DIFF) $(FROM_SHELL)_1.txt $(NEXT_LEVEL)_0.txt > diff_shell1_level0.txt
$(ECHO) "$(FROM_SHELL)_1.txt <-> $(NEXT_LEVEL)_1.txt"
$(DIFF) $(FROM_SHELL)_1.txt $(NEXT_LEVEL)_1.txt > diff_shell1_level1.txt
$(ECHO) "$(FROM_SHELL)_0.txt <-> $(FROM_SHELL)_1.txt"
$(DIFF) $(FROM_SHELL)_0.txt $(FROM_SHELL)_1.txt > diff_shell0_shell1.txt
$(ECHO) "$(OP_FROM_RECIPE) <-> $(NEXT_LEVEL)_0.txt"
$(DIFF) $(OP_FROM_RECIPE) $(NEXT_LEVEL)_0.txt > diff_recipe_level0.txt
$(ECHO) "$(OP_FROM_RECIPE) <-> $(NEXT_LEVEL)_1.txt"
$(DIFF) $(OP_FROM_RECIPE) $(NEXT_LEVEL)_1.txt > diff_recipe_level1.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment