From b01d6fae2beac0aec78bfaf37cb79a055d91f337 Mon Sep 17 00:00:00 2001 From: BabyBhargaviAnde Date: Mon, 17 Nov 2025 12:59:38 +0530 Subject: [PATCH 1/3] supported both QMQRY and SRVPGM Signed-off-by: BabyBhargaviAnde --- src/makei/cli/makei_entry.py | 45 ++++++++++++----- src/makei/const.py | 96 ++++++++++++++++++------------------ src/mk/def_rules.mk | 14 +++++- 3 files changed, 94 insertions(+), 61 deletions(-) diff --git a/src/makei/cli/makei_entry.py b/src/makei/cli/makei_entry.py index 6e26ad95..2cb91737 100755 --- a/src/makei/cli/makei_entry.py +++ b/src/makei/cli/makei_entry.py @@ -10,7 +10,9 @@ from makei import init_project from makei.build import BuildEnv from makei.cvtsrcpf import CvtSrcPf -from makei.utils import Colors, colored, get_compile_targets_from_filenames +from makei.utils import Colors, colored, get_compile_targets_from_filenames,decompose_filename +from pathlib import Path +from makei.const import FILE_TARGET_MAPPING def cli(): @@ -219,6 +221,27 @@ def handle_info(args): print("Not implemented!") +def read_and_filter_rules_mk(source_names): + """ + Read the Rules.mk file and return targets that match allowed extensions. + """ + build_targets = [] + name, _, ext, _ = decompose_filename(source_names[0]) + rules_mk_paths = list(Path(".").rglob("Rules.mk")) + for rules_mk_path in rules_mk_paths: + with rules_mk_path.open("r") as f: + rules_mk_str = f.read() + for line in rules_mk_str.splitlines(): + line = line.strip() + if not line or line.startswith("#") or ":" not in line: + continue # skip blank lines, comments, or malformed lines + target = line.split(":", 1)[0].strip() + if target and "." in target and target.rsplit(".", 1)[1] in FILE_TARGET_MAPPING[ext]: + build_targets.append(target) + else: + print(colored(f"No target mapping extension for '{target}'", Colors.WARNING)) + return build_targets + def handle_compile(args): """ Processing the compile command @@ -239,17 +262,17 @@ def handle_compile(args): source_names.append(name) # print("source:"+' '.join(source_names)) # print("compile targets:"+' '.join(get_compile_targets_from_filenames(source_names))) - targets.extend(get_compile_targets_from_filenames(source_names)) - print(colored("targets: " + ' '.join(targets), Colors.OKBLUE)) - build_env = BuildEnv(targets, args.make_options, get_override_vars(args), trace=args.trace) - - if args.trace: - build_env.dump_resolved_makefile() - else: - if build_env.make(): - sys.exit(0) + build_targets = read_and_filter_rules_mk(source_names) + if build_targets: + print(colored("targets: " + ', '.join(build_targets), Colors.OKBLUE)) + build_env = BuildEnv(build_targets, args.make_options, get_override_vars(args),trace=args.trace) + if args.trace: + build_env.dump_resolved_makefile() else: - sys.exit(1) + if build_env.make(): + sys.exit(0) + else: + sys.exit(1) def handle_build(args): diff --git a/src/makei/const.py b/src/makei/const.py index 39b5f1d9..38ec384d 100644 --- a/src/makei/const.py +++ b/src/makei/const.py @@ -101,54 +101,54 @@ } FILE_TARGET_MAPPING = { - "PGM.SQLRPGLE": "PGM", - "PGM.RPGLE": "PGM", - "PGM.CLLE": "PGM", - "PGM.C": "PGM", - "PGM.CBLLE": "PGM", - "PGM.SQLCBLLE": "PGM", - "CMDSRC": "CMD", - "CMD": "CMD", - "DSPF": "FILE", - "LF": "FILE", - "PF": "FILE", - "PRTF": "FILE", - "MENUSRC": "MENU", - "MENU": "MENU", - "C": "MODULE", - "CPP": "MODULE", - "RPGLE": "MODULE", - "CLLE": "MODULE", - "CBLLE": "MODULE", - "SQLC": "MODULE", - "SQLCPP": "MODULE", - "SQLRPGLE": "MODULE", - "SQLCBLLE": "MODULE", - "MODULE": "PGM", - "CLP": "PGM", - "CBL": "PGM", - "RPG": "PGM", - "ILEPGM": "PGM", - "PNLGRPSRC": "PNLGRP", - "PNLGRP": "PNLGRP", - "SQL": "QMQRY", - "BND": "SRVPGM", - "ILESRVPGM": "SRVPGM", - "BNDDIR": "BNDDIR", - "DTAARA": "DTAARA", - "DTAQ": "DTAQ", - "SYSTRG": "PGM", - "SQLPRC": "PGM", - "TABLE": "FILE", - "PFSQL": "FILE", - "VIEW": "FILE", - "INDEX": "FILE", - "SQLALIAS": "FILE", - "SQLSEQ": "DTAARA", - "SQLUDF": "SRVPGM", - "SQLTRG": "PGM", - "MSGF": "MSGF", - "WSCSTSRC": "WSCST", + "PGM.SQLRPGLE": {"PGM"}, + "PGM.RPGLE": {"PGM"}, + "PGM.CLLE": {"PGM"}, + "PGM.C": {"PGM"}, + "PGM.CBLLE": {"PGM"}, + "PGM.SQLCBLLE": {"PGM"}, + "CMDSRC": {"CMD"}, + "CMD": {"CMD"}, + "DSPF": {"FILE"}, + "LF": {"FILE"}, + "PF": {"FILE"}, + "PRTF": {"FILE"}, + "MENUSRC": {"MENU"}, + "MENU": {"MENU"}, + "C": {"MODULE"}, + "CPP": {"MODULE"}, + "RPGLE": {"MODULE"}, + "CLLE": {"MODULE"}, + "CBLLE": {"MODULE"}, + "SQLC": {"MODULE"}, + "SQLCPP": {"MODULE"}, + "SQLRPGLE": {"MODULE"}, + "SQLCBLLE": {"MODULE"}, + "MODULE": {"PGM"}, + "CLP": {"PGM"}, + "CBL": {"PGM"}, + "RPG": {"PGM"}, + "ILEPGM": {"PGM"}, + "PNLGRPSRC": {"PNLGRP"}, + "PNLGRP": {"PNLGRP"}, + "SQL": {"QMQRY","SRVPGM"}, + "BND": {"SRVPGM"}, + "ILESRVPGM": {"SRVPGM"}, + "BNDDIR": {"BNDDIR"}, + "DTAARA": {"DTAARA"}, + "DTAQ": {"DTAQ"}, + "SYSTRG": {"PGM"}, + "SQLPRC": {"PGM"}, + "TABLE": {"FILE"}, + "PFSQL": {"FILE"}, + "VIEW": {"FILE"}, + "INDEX": {"FILE"}, + "SQLALIAS": {"FILE"}, + "SQLSEQ": {"DTAARA"}, + "SQLUDF": {"SRVPGM"}, + "SQLTRG": {"PGM"}, + "MSGF": {"MSGF"}, + "WSCSTSRC": {"WSCST"}, } # This is the maximum number of dot seperated parts in the file extensions defined above. FILE_MAX_EXT_LENGTH = max( diff --git a/src/mk/def_rules.mk b/src/mk/def_rules.mk index 2afd9bf9..94f9e4bc 100644 --- a/src/mk/def_rules.mk +++ b/src/mk/def_rules.mk @@ -949,7 +949,8 @@ srvpgmTGTRLS = $(strip \ $(if $(filter %.ilesrvpgm,$<),$(SRVPGM_TGTRLS), \ $(if $(filter %.SQLUDF,$<),$(SQL_TGTRLS), \ $(if $(filter %.sqludf,$<),$(SQL_TGTRLS), \ - UNKNOWN_FILE_TYPE))))))) + $(if $(filter %.SQL,$<),$(SQL_TGTRLS), \ + UNKNOWN_FILE_TYPE)))))))) # ____ __ __ ____ ____ _ # / ___| \/ | _ \ | _ \ ___ ___(_)_ __ ___ ___ @@ -1492,6 +1493,15 @@ define ILESRVPGM_TO_SRVPGM_RECIPE = $(SCRIPTSPATH)/extractAndLaunch "$(JOBLOGFILE)" "$<" $(OBJLIB) $(basename $(@F)) "$(PRECMD)" "$(POSTCMD)" "$(notdir $@)" "$<" "$(logFile)" > $(logFile) 2>&1 && $(call logSuccess,$@) || $(call logFail,$@) endef +define SQL_TO_SRVPGM_RECIPE = + $(SRVPGM_VARIABLES) + $(eval d = $($@_d)) + @$(call echo_cmd,"=== Creating Service program $(OBJLIB)/$(basename $(notdir $@)) from SQL statement [$(notdir $<)]") + $(eval crtcmd := RUNSQLSTM srcstmf('$<') $(RUNSQLFLAGS)) + @$(PRESETUP) \ + $(SCRIPTSPATH)/launch "$(JOBLOGFILE)" "$(crtcmd)" "$(PRECMD)" "$(POSTCMD)" "$(notdir $@)" "$<" "$(logFile)" "" "$(mbrtextcmd)"> $(logFile) 2>&1 && $(call logSuccess,$@) || $(call logFail,$@) +endef + # ___ _____ _ _ _____ ____ ____ _ # / _ \_ _| | | | ____| _ \ | _ \ ___ ___(_)_ __ ___ ___ # | | | || | | |_| | _| | |_) | | |_) / _ \/ __| | '_ \ / _ \/ __| @@ -1571,7 +1581,7 @@ define SQL_TO_QMQRY_RECIPE = $(eval d = $($@_d)) @$(call echo_cmd,"=== Creating QM query [$(basename $@)]") $(eval crtcmd := $(SCRIPTSPATH)/crtfrmstmf --ccsid $(TGTCCSID) -f $< -o $(basename $(@F)) -l $(OBJLIB) -c "CRTQMQRY" -p $(CRTQMQRYFLAGS)) - $(PRESETUP) \ + @$(PRESETUP) \ $(SCRIPTSPATH)/crtfrmstmf --ccsid $(TGTCCSID) -f $< -o $(basename $(@F)) -l $(OBJLIB) -c "CRTQMQRY" -p "$(CRTQMQRYFLAGS)" --save-joblog "$(JOBLOGFILE)" --precmd="$(PRECMD)" --postcmd="$(POSTCMD)" --output="$(logFile)" > $(logFile) 2>&1 && $(call logSuccess,$@) || $(call logFail,$@) endef From 7d966cc56125c5808edb3b8f86e534e21757e4e4 Mon Sep 17 00:00:00 2001 From: BabyBhargaviAnde Date: Mon, 17 Nov 2025 17:58:54 +0530 Subject: [PATCH 2/3] reading Rules.mk line by line Signed-off-by: BabyBhargaviAnde --- src/makei/cli/makei_entry.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/makei/cli/makei_entry.py b/src/makei/cli/makei_entry.py index 2cb91737..4f4ab948 100755 --- a/src/makei/cli/makei_entry.py +++ b/src/makei/cli/makei_entry.py @@ -230,16 +230,15 @@ def read_and_filter_rules_mk(source_names): rules_mk_paths = list(Path(".").rglob("Rules.mk")) for rules_mk_path in rules_mk_paths: with rules_mk_path.open("r") as f: - rules_mk_str = f.read() - for line in rules_mk_str.splitlines(): - line = line.strip() - if not line or line.startswith("#") or ":" not in line: - continue # skip blank lines, comments, or malformed lines - target = line.split(":", 1)[0].strip() - if target and "." in target and target.rsplit(".", 1)[1] in FILE_TARGET_MAPPING[ext]: - build_targets.append(target) - else: - print(colored(f"No target mapping extension for '{target}'", Colors.WARNING)) + for raw_line in f: + line = raw_line.strip() + if not line or line.startswith("#") or ":" not in line: + continue # skip blank lines, comments, or malformed lines + target = line.split(":", 1)[0].strip() + if target and "." in target and target.rsplit(".", 1)[1] in FILE_TARGET_MAPPING[ext]: + build_targets.append(target) + else: + print(colored(f"No target mapping extension for '{target}'", Colors.FAIL)) return build_targets def handle_compile(args): From 4b6c26714a9f644d3ef2c73c599f8ca709d4b19a Mon Sep 17 00:00:00 2001 From: BabyBhargaviAnde Date: Tue, 18 Nov 2025 10:05:45 +0530 Subject: [PATCH 3/3] update on raise value error Signed-off-by: BabyBhargaviAnde --- src/makei/cli/makei_entry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/makei/cli/makei_entry.py b/src/makei/cli/makei_entry.py index 4f4ab948..65d91b1a 100755 --- a/src/makei/cli/makei_entry.py +++ b/src/makei/cli/makei_entry.py @@ -238,7 +238,7 @@ def read_and_filter_rules_mk(source_names): if target and "." in target and target.rsplit(".", 1)[1] in FILE_TARGET_MAPPING[ext]: build_targets.append(target) else: - print(colored(f"No target mapping extension for '{target}'", Colors.FAIL)) + raise ValueError(f"No target mapping extension for '{target}'") return build_targets def handle_compile(args):