summaryrefslogtreecommitdiffstats
path: root/Modules/Compiler/XL-Fortran
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-11-21 19:38:35 (GMT)
committerBrad King <brad.king@kitware.com>2019-11-21 20:59:12 (GMT)
commit19f267c75e84b72c4de42570be0c4222bb93aaff (patch)
tree5ffe9d3806b4e39815665da4aa8728267869cbea /Modules/Compiler/XL-Fortran
parent52accc779efe350cb9778005a1fb4aeb9b090456 (diff)
downloadCMake-19f267c75e84b72c4de42570be0c4222bb93aaff.zip
CMake-19f267c75e84b72c4de42570be0c4222bb93aaff.tar.gz
CMake-19f267c75e84b72c4de42570be0c4222bb93aaff.tar.bz2
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
Diffstat (limited to 'Modules/Compiler/XL-Fortran')
-rwxr-xr-xModules/Compiler/XL-Fortran/cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/Modules/Compiler/XL-Fortran/cpp b/Modules/Compiler/XL-Fortran/cpp
new file mode 100755
index 0000000..1fd62c2
--- /dev/null
+++ b/Modules/Compiler/XL-Fortran/cpp
@@ -0,0 +1,29 @@
+#!/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"