diff --git a/wmake/rules/General/lemon b/wmake/rules/General/lemon index 57cb0ad5a1..78eef230ab 100644 --- a/wmake/rules/General/lemon +++ b/wmake/rules/General/lemon @@ -1,4 +1,4 @@ -SUFFIXES += .ly .lyy +SUFFIXES += .ly .lyy .lyy-m4 lytoo = $E $(call QUIET_MESSAGE,lemon,$(/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 -# Header only, which means we create a temp directory for the output -tmpDir="lemonWrapper-$$" -rm -rf "$tmpDir" 2>/dev/null -mkdir "$tmpDir" 2>/dev/null - -# DO WE WANT THIS? -# trap 'rm -f $tmpDir 2>/dev/null; exit $rc' EXIT TERM INT - -"$lemon" "$skel" "-d$tmpDir" $* -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 exit "$rc" # Exit with lemon return code #------------------------------------------------------------------------------