diff --git a/src/makei/rules_mk.py b/src/makei/rules_mk.py index a5bfadac..cc233f93 100644 --- a/src/makei/rules_mk.py +++ b/src/makei/rules_mk.py @@ -341,7 +341,7 @@ def from_str(cls, rules_mk_str: str, containing_dir: Path, src_dir: Path, includ # Updates variables with wildcard values for wildcard, var in wildcard_variables.items(): stripped_wildcard = wildcard.strip("%.").upper() - matched_targets = list(filter(lambda target: target.split(".")[1] == stripped_wildcard, targets)) + matched_targets = [target for target in targets if target.endswith(f".{stripped_wildcard}")] targets = list(filter(lambda target: target.split(".")[1] != stripped_wildcard, targets)) for target in matched_targets: diff --git a/tests/data/rules_mks/wildcard/AB2001.B.rpgle b/tests/data/rules_mks/wildcard/AB2001.B.rpgle new file mode 100644 index 00000000..40960f3a --- /dev/null +++ b/tests/data/rules_mks/wildcard/AB2001.B.rpgle @@ -0,0 +1,2 @@ +**free +return; \ No newline at end of file diff --git a/tests/data/rules_mks/wildcard/AB2001_B.rpgle b/tests/data/rules_mks/wildcard/AB2001_B.rpgle new file mode 100644 index 00000000..40960f3a --- /dev/null +++ b/tests/data/rules_mks/wildcard/AB2001_B.rpgle @@ -0,0 +1,2 @@ +**free +return; \ No newline at end of file diff --git a/tests/data/rules_mks/wildcard/wildcard.rules.mk b/tests/data/rules_mks/wildcard/wildcard.rules.mk index e31deaa4..fa2eb5aa 100644 --- a/tests/data/rules_mks/wildcard/wildcard.rules.mk +++ b/tests/data/rules_mks/wildcard/wildcard.rules.mk @@ -4,6 +4,7 @@ CURRENT:=V7R5 HEADER := some COMMIT = *NONE VERSION=V7R3 +TGTRLS := *PRV # test base wildcard with variables %.MODULE: %.rpgle $(HEADER).rpgleinc @@ -21,4 +22,10 @@ bar.MODULE: bar.rpgle \ bar.TABLE # test if this very \ cool multiline comment \ -is ignored \ No newline at end of file +is ignored + +AB2001_B.MODULE: AB2001_B.rpgle +AB2001_B.MODULE: TGTRLS := $(TGTRLS) + +AB2001.B.MODULE: AB2001.B.rpgle +AB2001.B.MODULE: TGTRLS := $(TGTRLS) diff --git a/tests/unit/test_rules_mk.py b/tests/unit/test_rules_mk.py index 2bcfcbe6..f292a1e4 100644 --- a/tests/unit/test_rules_mk.py +++ b/tests/unit/test_rules_mk.py @@ -27,7 +27,7 @@ def test_wildcard_recipes_variables(): rules_mk = RulesMk.from_file(test_dir / "wildcard.rules.mk", test_dir) expected_targets = {'TRGs': [], 'DTAARAs': [], 'DTAQs': [], 'SQLs': [], 'BNDDs': [], 'PFs': [], 'LFs': [], 'DSPFs': [], 'PRTFs': [], 'CMDs': [], - 'MODULEs': ['BAR.MODULE', 'FOO.MODULE'], 'SRVPGMs': [], 'PGMs': [], + 'MODULEs': ['BAR.MODULE', 'AB2001_B.MODULE', 'AB2001.B.MODULE', 'FOO.MODULE'], 'SRVPGMs': [], 'PGMs': [], 'MENUs': [], 'PNLGRPs': [], 'QMQRYs': [], 'WSCSTs': [], 'MSGs': []} assert rules_mk.containing_dir == test_dir assert rules_mk.subdirs == [] @@ -47,14 +47,40 @@ def test_wildcard_recipes_variables(): BAR.MODULE: TGTVER:=V7R3 ''' - assert rules_mk.rules[1].variables == ['TEXT := hardcoded for all mod', 'TGTVER=V7R5', - 'private TEXT := foo is better', 'TGTVER := V7R2'] + assert rules_mk.rules[1].variables == ['TEXT := hardcoded for all mod' , 'TGTRLS :=*PRV'] assert rules_mk.rules[1].commands == [] - assert rules_mk.rules[1].dependencies == ['$(HEADER).rpgleinc'] + assert rules_mk.rules[1].dependencies == [] assert rules_mk.rules[1].include_dirs == [] - assert rules_mk.rules[1].target == 'FOO.MODULE' - assert rules_mk.rules[1].source_file == '$(d)/foo.rpgle' - assert str(rules_mk.rules[1]) == '''FOO.MODULE_SRC=$(d)/foo.rpgle + assert rules_mk.rules[1].target == 'AB2001_B.MODULE' + assert rules_mk.rules[1].source_file == '$(d)/AB2001_B.rpgle' + assert str(rules_mk.rules[1]) == '''AB2001_B.MODULE_SRC=$(d)/AB2001_B.rpgle +AB2001_B.MODULE_DEP= +AB2001_B.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE +AB2001_B.MODULE: TEXT := hardcoded for all mod +AB2001_B.MODULE: TGTRLS :=*PRV +''' + + assert rules_mk.rules[2].variables == ['TEXT := hardcoded for all mod' , 'TGTRLS :=*PRV'] + assert rules_mk.rules[2].commands == [] + assert rules_mk.rules[2].dependencies == [] + assert rules_mk.rules[2].include_dirs == [] + assert rules_mk.rules[2].target == 'AB2001.B.MODULE' + assert rules_mk.rules[2].source_file == '$(d)/AB2001.B.rpgle' + assert str(rules_mk.rules[2]) == '''AB2001.B.MODULE_SRC=$(d)/AB2001.B.rpgle +AB2001.B.MODULE_DEP= +AB2001.B.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE +AB2001.B.MODULE: TEXT := hardcoded for all mod +AB2001.B.MODULE: TGTRLS :=*PRV +''' + + assert rules_mk.rules[3].variables == ['TEXT := hardcoded for all mod', 'TGTVER=V7R5', + 'private TEXT := foo is better', 'TGTVER := V7R2'] + assert rules_mk.rules[3].commands == [] + assert rules_mk.rules[3].dependencies == ['$(HEADER).rpgleinc'] + assert rules_mk.rules[3].include_dirs == [] + assert rules_mk.rules[3].target == 'FOO.MODULE' + assert rules_mk.rules[3].source_file == '$(d)/foo.rpgle' + assert str(rules_mk.rules[3]) == '''FOO.MODULE_SRC=$(d)/foo.rpgle FOO.MODULE_DEP=$(HEADER).rpgleinc FOO.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE FOO.MODULE: TEXT := hardcoded for all mod @@ -62,13 +88,23 @@ def test_wildcard_recipes_variables(): FOO.MODULE: private TEXT := foo is better FOO.MODULE: TGTVER := V7R2\n''' - assert str(rules_mk) == '''MODULEs := BAR.MODULE FOO.MODULE\n\n + assert str(rules_mk) == '''MODULEs := BAR.MODULE AB2001_B.MODULE AB2001.B.MODULE FOO.MODULE\n\n BAR.MODULE_SRC=$(d)/bar.rpgle BAR.MODULE_DEP=bar.TABLE BAR.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE BAR.MODULE: TEXT := hardcoded for all mod BAR.MODULE: COMMIT=*NONE BAR.MODULE: TGTVER:=V7R3 +AB2001_B.MODULE_SRC=$(d)/AB2001_B.rpgle +AB2001_B.MODULE_DEP= +AB2001_B.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE +AB2001_B.MODULE: TEXT := hardcoded for all mod +AB2001_B.MODULE: TGTRLS :=*PRV +AB2001.B.MODULE_SRC=$(d)/AB2001.B.rpgle +AB2001.B.MODULE_DEP= +AB2001.B.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE +AB2001.B.MODULE: TEXT := hardcoded for all mod +AB2001.B.MODULE: TGTRLS :=*PRV FOO.MODULE_SRC=$(d)/foo.rpgle FOO.MODULE_DEP=$(HEADER).rpgleinc FOO.MODULE_RECIPE=RPGLE_TO_MODULE_RECIPE