diff options
author | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
---|---|---|
committer | Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> | 2023-10-10 14:33:42 +0000 |
commit | af1a266670d040d2f4083ff309d732d648afba2a (patch) | |
tree | 2fc46203448ddcc6f81546d379abfaeb323575e9 /meson/test cases/fortran/9 cpp | |
parent | e02cda008591317b1625707ff8e115a4841aa889 (diff) |
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'meson/test cases/fortran/9 cpp')
-rw-r--r-- | meson/test cases/fortran/9 cpp/fortran.f | 11 | ||||
-rw-r--r-- | meson/test cases/fortran/9 cpp/main.c | 8 | ||||
-rw-r--r-- | meson/test cases/fortran/9 cpp/main.cpp | 8 | ||||
-rw-r--r-- | meson/test cases/fortran/9 cpp/meson.build | 33 |
4 files changed, 60 insertions, 0 deletions
diff --git a/meson/test cases/fortran/9 cpp/fortran.f b/meson/test cases/fortran/9 cpp/fortran.f new file mode 100644 index 000000000..255872c91 --- /dev/null +++ b/meson/test cases/fortran/9 cpp/fortran.f @@ -0,0 +1,11 @@ + function fortran() bind(C) + use, intrinsic :: iso_c_binding, only: dp=>c_double + implicit none + + real(dp) :: r, fortran + + call random_number(r) + + fortran = 2._dp**r + + end function fortran diff --git a/meson/test cases/fortran/9 cpp/main.c b/meson/test cases/fortran/9 cpp/main.c new file mode 100644 index 000000000..c1750ad69 --- /dev/null +++ b/meson/test cases/fortran/9 cpp/main.c @@ -0,0 +1,8 @@ +#include <stdio.h> + +double fortran(void); + +int main(void) { + printf("FORTRAN gave us this number: %lf.\n", fortran()); + return 0; +} diff --git a/meson/test cases/fortran/9 cpp/main.cpp b/meson/test cases/fortran/9 cpp/main.cpp new file mode 100644 index 000000000..534a23aa1 --- /dev/null +++ b/meson/test cases/fortran/9 cpp/main.cpp @@ -0,0 +1,8 @@ +#include <iostream> + +extern "C" double fortran(); + +int main(void) { + std::cout << "FORTRAN gave us this number: " << fortran() << '\n'; + return 0; +} diff --git a/meson/test cases/fortran/9 cpp/meson.build b/meson/test cases/fortran/9 cpp/meson.build new file mode 100644 index 000000000..f96944b79 --- /dev/null +++ b/meson/test cases/fortran/9 cpp/meson.build @@ -0,0 +1,33 @@ +project('C, C++ and Fortran', 'c', 'cpp', 'fortran') + +cpp = meson.get_compiler('cpp') +fc = meson.get_compiler('fortran') + +if cpp.get_id() == 'clang' + error('MESON_SKIP_TEST Clang C++ does not find -lgfortran for some reason.') +endif + +if build_machine.system() == 'windows' and cpp.get_id() != fc.get_id() + error('MESON_SKIP_TEST mixing gfortran with non-GNU C++ does not work.') +endif + +link_with = [] +if fc.get_id() == 'intel' + link_with += fc.find_library('ifport') +endif + +e = executable( + 'cfort', + ['main.c', 'fortran.f'], + dependencies : link_with, +) + +test('C and Fortran', e) + +e2 = executable( + 'cppfort', + ['main.cpp', 'fortran.f'], + dependencies : link_with, +) + +test('C++ and Fortran', e2) |