Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

loadup-lfg.sh script to create lfg.sysout - to be installed and run from LFG directory #1960

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
135 changes: 135 additions & 0 deletions scripts/loadup-app-setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
#!to_be_sourced_only
# shellcheck shell=sh


MEDLEY_SCRIPTDIR="$(cd "${MEDLEYDIR}/scripts" && pwd)"

if [ -z "${APP_DIR}" ]
then
export APP_DIR="$(cd "${LOADUP_SCRIPTDIR}/../" && pwd)"
fi

if [ ! -d "${APP_DIR}" ]
then
echo "Error: Cannot find the ${APP_NAME} directory: ${APP_DIR}"
exit 1
fi

if [ -z "${APP_LOADUPSDIR}" ]
then
export APP_LOADUPSDIR="${APP_DIR}/loadups"
fi

if [ ! -d "${APP_LOADUPSDIR}" ]
then
if [ -e "${APP_LOADUPSDIR}" ]
then
echo "Error: the ${APP_NAME} loadups dir (${APP_LOADUPSDIR}) exists, but it is not a directory."
echo "Exiting."
exit 1
else
mkdir -p "${APP_LOADUPSDIR}"
fi
fi

if [ -z "${APP_WORKDIR}" ]
then
export APP_WORKDIR="${APP_LOADUPSDIR}/build"
fi

if [ ! -d "${APP_WORKDIR}" ]
then
if [ -e "${APP_WORKDIR}" ]
then
echo "Error: the ${APP_NAME} loadups work dir (${APP_WORKDIR}) exists, but it is not a directory."
echo "Exiting."
exit 1
else
mkdir -p "${APP_WORKDIR}"
fi
fi

HAS_GIT= [ -f $(which git) ] && [ -x $(which git) ]
export HAS_GIT

git_commit_ID () {
if ${HAS_GIT};
then
# This does NOT indicate if there are any modified files!
COMMIT_ID=$(git -C "$1" rev-parse --short HEAD 2>/dev/null)
fi
}

git_commit_ID "${MEDLEYDIR}"
MEDLEY_COMMIT_ID="${COMMIT_ID}"
export MEDLEY_COMMIT_ID

git_commit_ID "${APP_DIR}"
APP_COMMIT_ID="${COMMIT_ID}"
export APP_COMMIT_ID


scr="-sc 1024x768 -g 1042x790"
geometry=1024x768

touch "${APP_WORKDIR}"/loadup.timestamp

script_name=$(basename "$0" ".sh")
cmfile="${APP_WORKDIR}/${script_name}.cm"


######################################################################

loadup_start () {
echo ">>>>> START ${script_name}"
}

loadup_finish () {
rm -f "${cmfile}"
# 2024-05-05 FGH
# Can't use exit code for now since on MacOS exit codes appear to be inverted
# Will restore once MacOS exit code are figured out
# if [ "${exit_code}" -ne 0 ] || [ ! -f "${LOADUP_WORKDIR}/$1" ]
if [ "${APP_WORKDIR}/$1" -nt "${APP_WORKDIR}"/loadup.timestamp ]
then
echo
echo "..... files copied into loadups ....."
for f in "$@"
do
# shellcheck disable=SC2045,SC2086
for ff in $(ls -1 "${APP_WORKDIR}"/$f);
do
/bin/sh "${MEDLEY_SCRIPTDIR}/cpv" "${ff}" "${APP_LOADUPSDIR}" \
| sed -e "s#${APP_DIR}/##g"
done
done
echo "....................................."
echo
echo "+++++ SUCCESS +++++"
exit_code=0
else
echo "----- FAILURE -----"
exit_code=1
fi
echo "<<<<< END ${script_name}"
echo ""
exit ${exit_code}
}

run_medley () {
/bin/sh "${MEDLEYDIR}/scripts/medley/medley.command" \
--config - \
--id loadup_+ \
--geometry "${geometry}" \
--noscroll \
--logindir "${APP_WORKDIR}" \
--greet "${cmfile}" \
--sysout "$1" \
"$2" "$3" "$4" "$5" "$6" "$7" ;
exit_code=$?

}

######################################################################


190 changes: 190 additions & 0 deletions scripts/loadup-lfg.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
#!/bin/sh

main() {

export APP_DIR="${LFG_DIR}"
export APP_LOADUPSDIR="${LFG_LOADUPSDIR}"
export APP_WORKDIR="${LFG_WORKDIR}"

get_medleydir "$@"

loadup_start

cat >"${cmfile}" <<-"EOF"
"

(PROGN
(IL:MEDLEY-INIT-VARS 'IL:GREET)
(IL:DRIBBLE (IL:PACKFILENAME 'HOST '{DSK} 'DIRECTORY (IL:UNIX-GETENV 'APP_WORKDIR) 'NAME 'lfg.dribble))
(IL:DOFILESLOAD
'((SYSLOAD)
(FROM VALUEOF (IL:PACKFILENAME 'HOST '{DSK} 'DIRECTORY (IL:UNIX-GETENV 'APP_DIR)))
LFG-LOADUP
)
)
(IL:LOADUP-LFG)
(IL:PUTASSOC 'IL:LFG
(LIST (IL:UNIX-GETENV 'MEDLEY_COMMIT_ID))
(CADR (ASSOC 'IL:MEDLEY IL:SYSOUTCOMMITS)))
(IL:PUTASSOC 'IL:LFG (LIST (IL:UNIX-GETENV 'APP_COMMIT_ID)) IL:SYSOUTCOMMITS)
(IL:ENDLOADUP)
(IL:DRIBBLE)
(IL:MAKESYS
(IL:PACKFILENAME 'HOST '{DSK} 'DIRECTORY (IL:UNIX-GETENV 'APP_WORKDIR) 'NAME 'lfg.sysout)
:LFG
)
)
(IL:LOGOUT T)

"
EOF

run_medley "${full_sysout}"

loadup_finish "lfg.sysout" "lfg.dribble"

}

get_medleydir() {

while [ $# -gt 0 ]
do
case "$1" in
-m | -medley | --medley)
export MEDLEYDIR="$2"
if [ -z "$2" ]
then
echo "Error: The -m (-medley, --medley) flag requires a path to a full.sysout file as an argument"
echo "Exiting"
exit 1
fi
shift
;;
*)
echo "Warning unknown argument: $1. Ignored"
;;
esac
shift
done

if [ -z "${MEDLEYDIR}" ]
then
echo "Error: MEDLEYDIR not specified either thru environment variable or thru command line argument"
echo "Exiting"
exit 1
fi

full_sysout="${MEDLEYDIR}/loadups/full.sysout"
if [ ! -f "${full_sysout}" ]
then
echo "Error: cannot find the Medley full.sysout file (${full_sysout})"
echo "It either doesn't exist or is a directory"
echo "Exiting"
exit 1
fi

. "${MEDLEYDIR}/scripts/loadup-app-setup.sh"

}


# shellcheck disable=SC2164,SC2034
if [ -z "${LOADUP_SCRIPTDIR}" ]
then
#
#
# Some functions to determine what directory this script is being executed from
#
#
get_abs_filename() {
# $1 : relative filename
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
}

# This function taken from
# https://stackoverflow.com/questions/29832037/how-to-get-script-directory-in-posix-sh
rreadlink() (

# Execute this function in a *subshell* to localize variables and the effect of `cd`.

target=$1
fname=
targetDir=
CDPATH=

# Try to make the execution environment as predictable as possible:
# All commands below are invoked via `command`, so we must make sure that `command`
# itself is not redefined as an alias or shell function.
# (Note that command is too inconsistent across shells, so we don't use it.)
# `command` is a *builtin* in bash, dash, ksh, zsh, and some platforms do not even have
# an external utility version of it (e.g, Ubuntu).
# `command` bypasses aliases and shell functions and also finds builtins
# in bash, dash, and ksh. In zsh, option POSIX_BUILTINS must be turned on for that
# to happen.
{ \unalias command; \unset -f command; } >/dev/null 2>&1
[ -n "$ZSH_VERSION" ] && options[POSIX_BUILTINS]=on # make zsh find *builtins* with `command` too.

while :; do # Resolve potential symlinks until the ultimate target is found.
[ -L "$target" ] || [ -e "$target" ] || { command printf '%s\n' "ERROR: '$target' does not exist." >&2; return 1; }
command cd "$(command dirname -- "$target")" # Change to target dir; necessary for correct resolution of target path.
fname=$(command basename -- "$target") # Extract filename.
[ "$fname" = '/' ] && fname='' # !! curiously, `basename /` returns '/'
if [ -L "$fname" ]; then
# Extract [next] target path, which may be defined
# *relative* to the symlink's own directory.
# Note: We parse `ls -l` output to find the symlink target
# which is the only POSIX-compliant, albeit somewhat fragile, way.
target=$(command ls -l "$fname")
target=${target#* -> }
continue # Resolve [next] symlink target.
fi
break # Ultimate target reached.
done
targetDir=$(command pwd -P) # Get canonical dir. path
# Output the ultimate target's canonical path.
# Note that we manually resolve paths ending in /. and /.. to make sure we have a normalized path.
if [ "$fname" = '.' ]; then
command printf '%s\n' "${targetDir%/}"
elif [ "$fname" = '..' ]; then
# Caveat: something like /var/.. will resolve to /private (assuming /var@ -> /private/var), i.e. the '..' is applied
# AFTER canonicalization.
command printf '%s\n' "$(command dirname -- "${targetDir}")"
else
command printf '%s\n' "${targetDir%/}/$fname"
fi
)

get_script_dir() {

# call this with $0 (from main script) as its (only) parameter
# if you need to preserve cwd, run this is a subshell since
# it can change cwd

# set -x

local_SCRIPT_PATH="$( get_abs_filename "$1" )";

while [ -h "$local_SCRIPT_PATH" ];
do
cd "$( dirname -- "$local_SCRIPT_PATH"; )";
local_SCRIPT_PATH="$( rreadlink "$local_SCRIPT_PATH" )";
done

cd "$( dirname -- "$local_SCRIPT_PATH"; )" > '/dev/null';
local_SCRIPT_PATH="$( pwd; )";

# set +x

echo "${local_SCRIPT_PATH}"
}

# end of script directory functions
###############################################################################

# figure out the script dir
LOADUP_SCRIPTDIR="$(get_script_dir "$0")"
export LOADUP_SCRIPTDIR

fi

main "$@"