#!/bin/bash
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2019 OpenCFD Ltd.
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM, licensed under GNU General Public License
# .
#
# Script
# wrap-lemon
#
# Usage
# wrap-lemon [options] [lemon args/options]
#
# Description
# A wrapper to use lemon compiled with OpenFOAM with the appropriate
# parser template.
#
#------------------------------------------------------------------------------
binDir="${WMAKE_BIN:-$WM_PROJECT_DIR/wmake/platforms/$WM_ARCH$WM_COMPILER}"
etcDir="${WM_DIR:-$WM_PROJECT_DIR/wmake}/etc"
# Executable and skeleton locations
lemon="$binDir/lemon"
skel="-T${etcDir}/lempar.c"
usage() {
exec 1>&2
while [ "$#" -ge 1 ]; do echo "$1"; shift; done
cat</dev/null
mkdir "$tmpDir" 2>/dev/null
if [ -n "$usingMacros" ]
then
# Using m4 - redirect to a temporary file
tmpFile="$tmpDir/${parser##*/}"
tmpFile="${tmpFile%.*}$extLemon" # Eg, from .lyy-m4 -> .lyy
if m4 "$parser" > "$tmpFile" && [ -f "$tmpFile" ]
then
parser="$tmpFile"
else
echo "m4 stage failed on $parser" 2>/dev/null
fi
fi
# DO WE WANT THIS?
# trap 'rm -f $tmpDir 2>/dev/null; exit $rc' EXIT TERM INT
"$lemon" "$skel" "-d$tmpDir" "$@" $usingMacros "$parser"
rc=$?
for src in "$tmpDir"/*.h
do
dst="${src##*/}"
if [ -f "$src" ]
then
if ! cmp "$src" "$dst" 2>/dev/null
then
mv "$src" "$dst"
echo "Updating $dst" 1>&2
fi
fi
done
rm -rf "$tmpDir" 2>/dev/null
elif [ -n "$usingMacros" ]
then
# Drop last argument (the parser input file)
set -- "${@:1:${#}-1}"
# Filter via m4
if [ -n "$outputDir" ]
then
tmpFile="$outputDir/${parser##*/}"
else
tmpFile="${parser}"
fi
tmpFile="${tmpFile%.*}$extLemon" # Eg, from .lyy-m4 -> .lyy
# DO WE WANT THIS?
# trap 'rm -f $tmpFile 2>/dev/null; exit $rc' EXIT TERM INT
if m4 "$parser" > "$tmpFile" && [ -f "$tmpFile" ]
then
"$lemon" "$skel" "$@" $usingMacros "$tmpFile"
rc=$?
else
echo "m4 stage failed on $parser" 2>/dev/null
fi
if [ -n "$optDebug" ]
then
echo "Retaining intermediate: $tmpFile" 2>/dev/null
else
rm -f "$tmpFile" 2>/dev/null
fi
else
# No special handling
"$lemon" "$skel" "$@"
rc=$?
fi
exit "$rc" # Exit with lemon return code
#------------------------------------------------------------------------------