Can use C++ and FORTRAN in a single target. Closes #2685.

pull/3474/head
Jussi Pakkanen 7 years ago
parent 1918c0d231
commit a2fdaa9ea0
  1. 4
      mesonbuild/compilers/fortran.py
  2. 5
      test cases/fortran/9 cpp/fortran.f
  3. 8
      test cases/fortran/9 cpp/main.cpp
  4. 10
      test cases/fortran/9 cpp/meson.build

@ -183,13 +183,15 @@ class GnuFortranCompiler(FortranCompiler):
def openmp_flags(self):
return ['-fopenmp']
def language_stdlib_only_link_flags(self):
return ['-lgfortran', '-lm', '-lquadmath']
class ElbrusFortranCompiler(GnuFortranCompiler, ElbrusCompiler):
def __init__(self, exelist, version, gcc_type, is_cross, exe_wrapper=None, defines=None, **kwargs):
GnuFortranCompiler.__init__(self, exelist, version, gcc_type, is_cross, exe_wrapper, defines, **kwargs)
ElbrusCompiler.__init__(self, gcc_type, defines)
class G95FortranCompiler(FortranCompiler):
def __init__(self, exelist, version, is_cross, exe_wrapper=None, **kwags):
super().__init__(exelist, version, is_cross, exe_wrapper=None, **kwags)

@ -0,0 +1,5 @@
function fortran() bind(C)
use, intrinsic :: iso_c_binding
real(kind=c_double) :: fortran
fortran = 2.0**rand(1)
end function fortran

@ -0,0 +1,8 @@
#include <iostream>
extern "C" double fortran();
int main(int, char**) {
std::cout << "FORTRAN gave us this number: " << fortran() << '\n';
return 0;
}

@ -0,0 +1,10 @@
project('C++ and FORTRAN', 'cpp', 'fortran')
cpp = meson.get_compiler('cpp')
if cpp.get_id() == 'clang'
error('MESON_SKIP_TEST Clang C++ does not find -lgfortran for some reason.')
endif
e = executable('cppfort', 'main.cpp', 'fortran.f')
test('C++ FORTRAN', e)
Loading…
Cancel
Save