Created
January 4, 2023 15:13
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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