Skip to content

Commit

Permalink
Merge pull request #19 from IBM/feature/non_recursive_make
Browse files Browse the repository at this point in the history
Support compiling from file
  • Loading branch information
edmundreinhardt authored Sep 16, 2021
2 parents d8e4ca4 + 6c010ed commit 681c660
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 68 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
SHELL:=/QOpenSys/pkgs/bin/bash
BOB:=/QOpenSys/pkgs/lib/Bob
BOB:=/QOpenSys/pkgs/lib/bob
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
COLOR_TTY :=
Expand Down
158 changes: 91 additions & 67 deletions makei
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
# ----------------------------------
# COLORBOB=true
# COLORBOB=false
BOB=/QOpenSys/pkgs/lib/bob
MK=${BOB}/mk
. ${MK}/filetypeTargetMap.inc

if [ "$COLORBOB" = true ]; then
BOLD='\033[1m'
NOCOLOR='\033[0m'
Expand Down Expand Up @@ -63,20 +67,6 @@ else
WHITE=''
fi

exitCode=0

makeOpts=$*
srcDir="$(pwd)"

rm -rf "${srcDir}/logs/output.log"
rm -rf "${srcDir}/logs/joblog.json"

if [ ! -f "${srcDir}/Makefile" ]; then
MAKEFILE="/QOpenSys/pkgs/lib/Bob/Makefile"
else
MAKEFILE="${srcDir}/Makefile"
fi

retrieve_from_iproj() {
local key=$1
local default_vaule=$2
Expand Down Expand Up @@ -122,44 +112,6 @@ parse_placeholder() {
fi
}

echo -e "${BLUE}makei: Reading from iproj.json${NOCOLOR}"
objlib=$(retrieve_from_iproj objlib "*CURLIB")
tgtCcsid=$(retrieve_from_iproj tgtccsid "*JOB")
IBMiEnvCmdList=$(retrieve_from_iproj setIBMiEnvCmd[] "")
preUsrliblRaw=$(retrieve_from_iproj preUsrlibl "" | sed "s/ //g;s/,/ /g")
postUsrliblRaw=$(retrieve_from_iproj postUsrlibl "" | sed "s/ //g;s/,/ /g")
preUsrlibl=""
postUsrlibl=""

for lib in $preUsrliblRaw; do
preUsrlibl+="$(parse_placeholder "$lib")"
done

for lib in $postUsrliblRaw; do
postUsrlibl+="$(parse_placeholder "$lib")"
done

echo -e "${DARKGRAY}......${NOCOLOR}objlib: ${ORANGE}${objlib}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}tgtCcsid: ${ORANGE}${tgtCcsid}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}IBMiEnvCmdList: ${ORANGE}${IBMiEnvCmdList}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}preUsrlibl: ${ORANGE}${preUsrlibl}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}postUsrlibl: ${ORANGE}${postUsrlibl}${NOCOLOR}"
echo

BUILDVARSMK=$(mktemp)

{
echo "# This file is generated using makei, DO NOT EDIT."
echo "# Modify .ibmi.json to override values"
echo
echo "preUsrlibl := ${preUsrlibl}"
echo "postUsrlibl := ${postUsrlibl}"
while read -r cmd; do
IBMiEnvCmd+="cl '$cmd' && "
done <<<"$IBMiEnvCmdList"
echo "IBMiEnvCmd := $(echo "$IBMiEnvCmd" | sed 's/&& $//')"
} >>"$BUILDVARSMK"

recursive_generate() {
local dir=$1
local parentObjLoc=${2//&/}
Expand Down Expand Up @@ -210,25 +162,97 @@ recursive_generate() {
fi
}

echo -e "${BLUE}Generating makefile for build variables at ${BUILDVARSMK}${NOCOLOR}"
echo
recursive_generate "$srcDir" "$objlib" "$tgtCcsid"
ibmijsonError=$?
# cat $BUILDVARSMK
main() {
exitCode=0

while getopts ":z:" options
do
case $options in
z ) filename=$OPTARG;;
* ) ;;
esac
done

shift $(($OPTIND - 1))
makeOpts=$*
srcDir="$(pwd)"

rm -rf "${srcDir}/logs/output.log"
rm -rf "${srcDir}/logs/joblog.json"

if [ ! -f "${srcDir}/Makefile" ]; then
MAKEFILE="/QOpenSys/pkgs/lib/bob/Makefile"
else
MAKEFILE="${srcDir}/Makefile"
fi

echo -e "${BLUE}makei: Reading from iproj.json${NOCOLOR}"
objlib=$(retrieve_from_iproj objlib "*CURLIB")
tgtCcsid=$(retrieve_from_iproj tgtccsid "*JOB")
IBMiEnvCmdList=$(retrieve_from_iproj setIBMiEnvCmd[] "")
preUsrliblRaw=$(retrieve_from_iproj preUsrlibl[] "")
postUsrliblRaw=$(retrieve_from_iproj postUsrlibl[] "")
preUsrlibl=""
postUsrlibl=""

if test $ibmijsonError -eq 0; then
echo -e ">> ${GREEN}"make -k BUILDVARSMKPATH="${BUILDVARSMK}" COLOR_TTY="${COLORBOB}" -f "$MAKEFILE" "$makeOpts""${NOCOLOR}"
make -k BUILDVARSMKPATH="${BUILDVARSMK}" COLOR_TTY="${COLORBOB}" -f "$MAKEFILE" "$makeOpts"
for lib in $preUsrliblRaw; do
preUsrlibl+="$(parse_placeholder "$lib") "
done

for lib in $postUsrliblRaw; do
postUsrlibl+="$(parse_placeholder "$lib") "
done

echo -e "${DARKGRAY}......${NOCOLOR}objlib: ${ORANGE}${objlib}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}tgtCcsid: ${ORANGE}${tgtCcsid}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}IBMiEnvCmdList: ${ORANGE}${IBMiEnvCmdList}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}preUsrlibl: ${ORANGE}${preUsrlibl}${NOCOLOR}"
echo -e "${DARKGRAY}......${NOCOLOR}postUsrlibl: ${ORANGE}${postUsrlibl}${NOCOLOR}"
echo

exitCode=$?
else
BUILDVARSMK=$(mktemp)

{
echo "# This file is generated using makei, DO NOT EDIT."
echo "# Modify .ibmi.json to override values"
echo
echo "preUsrlibl := ${preUsrlibl}"
echo "postUsrlibl := ${postUsrlibl}"
while read -r cmd; do
IBMiEnvCmd+="cl '$cmd' && "
done <<<"$IBMiEnvCmdList"
echo "IBMiEnvCmd := $(echo "$IBMiEnvCmd" | sed 's/&& $//')"
} >>"$BUILDVARSMK"

echo -e "${BLUE}Generating makefile for build variables at ${BUILDVARSMK}${NOCOLOR}"
echo
recursive_generate "$srcDir" "$objlib" "$tgtCcsid"
ibmijsonError=$?

targetName=$(get_target_from_srcfile "$filename");

if test $ibmijsonError -eq 0; then
echo -e ">> ${GREEN}"make -k BUILDVARSMKPATH="${BUILDVARSMK}" COLOR_TTY="${COLORBOB}" -f "$MAKEFILE" "$makeOpts" $targetName"${NOCOLOR}"
make -k BUILDVARSMKPATH="${BUILDVARSMK}" COLOR_TTY="${COLORBOB}" -f "$MAKEFILE" "$makeOpts" $targetName
echo

exitCode=$?
else
echo
clean_up
exit $ibmijsonError
fi

clean_up
exit $ibmijsonError
fi
echo -e "${BLUE}Done.${NOCOLOR}"

clean_up
echo -e "${BLUE}Done.${NOCOLOR}"
exit $exitCode

exit $exitCode
}

# Execute main() if this is run in standalone mode (i.e. not in a unit test).
ARGV0="$(basename "$0")"
argv0="$(echo "${ARGV0}" |sed 's/_test$//;s/_test\.sh$//')"
if [ "${ARGV0}" = "${argv0}" ]; then
main "$@"
fi
47 changes: 47 additions & 0 deletions mk/filetypeTargetMap.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#! /QOpenSys/pkgs/bin/bash

declare -A FILETARGETMAPPING;
FILETARGETMAPPING[CMDSRC]=CMD
FILETARGETMAPPING[DSPF]=FILE
FILETARGETMAPPING[LF]=FILE
FILETARGETMAPPING[PF]=FILE
FILETARGETMAPPING[PRTF]=FILE
FILETARGETMAPPING[MENUSRC]=MENU
FILETARGETMAPPING[C]=MODULE
FILETARGETMAPPING[RPGLE]=MODULE
FILETARGETMAPPING[CLLE]=MODULE
FILETARGETMAPPING[SQLC]=MODULE
FILETARGETMAPPING[SQLRPGLE]=MODULE
FILETARGETMAPPING[MODULE]=PGM
FILETARGETMAPPING[PGM.RPGLE]=PGM
FILETARGETMAPPING[PGM.C]=PGM
FILETARGETMAPPING[CBL]=PGM
FILETARGETMAPPING[RPG]=PGM
FILETARGETMAPPING[ILEPGM]=PGM
FILETARGETMAPPING[PNLGRPSRC]=PNLGRP
FILETARGETMAPPING[SQL]=QMQRY
FILETARGETMAPPING[BND]=SRVPGM
FILETARGETMAPPING[ILESRVPGM]=SRVPGM
FILETARGETMAPPING[BNDDIR]=BNDD
FILETARGETMAPPING[DTA]=DTA
FILETARGETMAPPING[SYSTRG]=TRG
FILETARGETMAPPING[SQLPRC]=SQL
FILETARGETMAPPING[TABLE]=SQL
FILETARGETMAPPING[VIEW]=SQL
FILETARGETMAPPING[SQLSEQ]=SQL
FILETARGETMAPPING[SQLUDF]=SQL
FILETARGETMAPPING[SQLTRG]=SQL
FILETARGETMAPPING[MSGF]=MSG
FILETARGETMAPPING[WSCSTSRC]=WSCST

get_target_from_srcfile() {
local filename=$1
for i in "${!FILETARGETMAPPING[@]}"
do
if [[ "$filename" == *.${i} ]]
then
targetName="${filename%.${i}}.${FILETARGETMAPPING[$i]}";
echo ${targetName[$i]}
fi
done
}

0 comments on commit 681c660

Please sign in to comment.