Files
CMake/Modules/Compiler/XL-Fortran/cpp
Brad King 19f267c75e XL: Add support for Ninja and XL Fortran
The Ninja generator's support for Fortran requires that source files
be preprocessed explicitly first.  However, the `xlf` compiler does
not have a simple `-E` option or equivalent to do preprocessing.
The only documented way to get preprocessed output is to use `-d`
to leave it behind, but only at an inflexible location.

Instead, create our own `cpp` wrapper script and substitute it for the
real preprocessor using `-tF -B ...`.  Teach the wrapper to map the
`cpp` output to the location we need and then invoke the real `cpp`
underneath.

Fixes: #19450
2019-11-21 15:59:12 -05:00

30 lines
633 B
Bash
Executable File

#!/usr/bin/env bash
# Source file.
src="$(printf %q "$1")"
shift
# Output file the compiler expects.
out="$(printf %q "$1")"
shift
# Create the file the compiler expects. It will check syntax.
>"$out"
cpp='cpp'
opts=''
while test "$#" != 0; do
case "$1" in
# Extract the option for the path to cpp.
--cpp) shift; cpp="$(printf %q "$1")" ;;
# Extract the option for our own output file.
--out) shift; out="$(printf %q "$1")" ;;
# Collect the rest of the command line.
*) opts="$opts $(printf %q "$1")" ;;
esac
shift
done
# Execute the real preprocessor tool.
eval "exec $cpp $src $out $opts"