mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
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
30 lines
633 B
Bash
Executable File
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"
|