#!/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 #------------------------------------------------------------------------------