|
1 | 1 | SHELL := bash |
2 | 2 | TEST_DIR := test |
3 | | -TEST_RECIPES := $(TEST_DIR)/recipes |
| 3 | +TEST_RECIPES_DIR := $(TEST_DIR)/recipes |
4 | 4 |
|
5 | | -TESTS := $(notdir $(wildcard $(TEST_RECIPES)/*)) |
| 5 | +TESTS := $(notdir $(wildcard $(TEST_RECIPES_DIR)/*)) |
6 | 6 |
|
7 | 7 | ## if set, debug info is generated in an org file |
8 | 8 | DEBUG := |
@@ -91,21 +91,26 @@ release: |
91 | 91 |
|
92 | 92 | ## Recipes: |
93 | 93 | ## --------- |
94 | | -$(TESTS): RECIPE_COMMAND_LINE = $(shell head -n 1 $(TEST_RECIPES)/$@) |
95 | | -$(TESTS): CMD_RECIPE_EXPECTED = tail -n +2 $(TEST_RECIPES)/$@ |
96 | | -$(TESTS): CMD_RESULT = $< -f makefile-doc.awk $(RECIPE_COMMAND_LINE:>=) |
| 94 | +$(TESTS): RECIPE_COMMAND_LINE = $(shell head -n 1 $(TEST_RECIPES_DIR)/$@) |
| 95 | +$(TESTS): CMD_RECIPE_EXPECTED = tail -n +2 $(TEST_RECIPES_DIR)/$@ |
| 96 | +$(TESTS): CMD_RESULT = $< -f makefile-doc.awk $(RECIPE_COMMAND_LINE) |
97 | 97 | # --ignore-space-at-eol is needed as empty descriptions add OFFSET |
98 | 98 | $(TESTS): CMD_DIFF = git diff --ignore-space-at-eol \ |
99 | 99 | <($(CMD_RECIPE_EXPECTED)) \ |
100 | 100 | <($(CMD_RESULT)) |
101 | 101 | $(TESTS): TMP_FILE = /tmp/$@_updated |
102 | 102 | $(TESTS): $(AWK_BIN)/$(AWK) |
103 | | -# I cannot use RECIPE_COMMAND_LINE here because it is a recursively expanded variable |
104 | | -# and its value might contain e.g., $(TARGET) which Make will try to expand further |
| 103 | +# The reason for using echo "$(subst $,\$,$(RECIPE_COMMAND_LINE))" is that, the value of |
| 104 | +# RECIPE_COMMAND_LINE may contain e.g., $(TARGET) and we need to make sure that the |
| 105 | +# shell doesn't try to expand it. Unfortunately, we cannot simply use echo |
| 106 | +# '$(RECIPE_COMMAND_LINE)' because the value of RECIPE_COMMAND_LINE already contains |
| 107 | +# single quotes. While it doesn't contain doble-quotes, doing echo |
| 108 | +# "$(RECIPE_COMMAND_LINE)" is not possible because the single quotes around $(TARGET) |
| 109 | +# loose their "powers" when surrounded by double-quotes. So we have to escape the $. |
105 | 110 | @$(if $(UPDATE_RECIPE),\ |
106 | | - head -n 1 $(TEST_RECIPES)/$@ > $(TMP_FILE);\ |
| 111 | + echo "$(subst $,\$,$(RECIPE_COMMAND_LINE))" > $(TMP_FILE);\ |
107 | 112 | $(CMD_RESULT)\ |
108 | | - | tee -a $(TMP_FILE) && mv $(TMP_FILE) $(TEST_RECIPES)/$@,\ |
| 113 | + | tee -a $(TMP_FILE) && mv $(TMP_FILE) $(TEST_RECIPES_DIR)/$@,\ |
109 | 114 | $(CMD_DIFF) || (echo "failed $@"; exit 1) && echo "[$(notdir $<)] passed $@") |
110 | 115 |
|
111 | 116 | # ---------------------------------------------------- |
|
0 commit comments