aboutsummaryrefslogtreecommitdiffstats
path: root/meson/test cases/fortran/9 cpp
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /meson/test cases/fortran/9 cpp
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'meson/test cases/fortran/9 cpp')
-rw-r--r--meson/test cases/fortran/9 cpp/fortran.f11
-rw-r--r--meson/test cases/fortran/9 cpp/main.c8
-rw-r--r--meson/test cases/fortran/9 cpp/main.cpp8
-rw-r--r--meson/test cases/fortran/9 cpp/meson.build33
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)