aboutsummaryrefslogtreecommitdiff
path: root/example_packages/with_c
diff options
context:
space:
mode:
authorBrad Richardson <everythingfunctional@protonmail.com>2020-10-14 09:24:55 -0500
committerBrad Richardson <everythingfunctional@protonmail.com>2020-10-14 09:24:55 -0500
commitb5b16cf826d468e79b4087500192a4a9e07c140f (patch)
tree1f615ee9ed6500bb1f6964ef2af0478b2fe51e4e /example_packages/with_c
parentd3a65e36b28808c2c51ae41fc107f1179e27a08c (diff)
downloadfpm-b5b16cf826d468e79b4087500192a4a9e07c140f.tar.gz
fpm-b5b16cf826d468e79b4087500192a4a9e07c140f.zip
Better organize example packages and bootstrap tests
Diffstat (limited to 'example_packages/with_c')
-rw-r--r--example_packages/with_c/app/main.f9010
-rw-r--r--example_packages/with_c/fpm.toml1
-rw-r--r--example_packages/with_c/src/c_code.c10
-rw-r--r--example_packages/with_c/src/with_c.f9026
4 files changed, 47 insertions, 0 deletions
diff --git a/example_packages/with_c/app/main.f90 b/example_packages/with_c/app/main.f90
new file mode 100644
index 0000000..4d3174b
--- /dev/null
+++ b/example_packages/with_c/app/main.f90
@@ -0,0 +1,10 @@
+program with_c_app
+use with_c
+implicit none
+
+write(*,*) "isdir('app') = ", system_isdir('app')
+write(*,*) "isdir('src') = ", system_isdir('src')
+write(*,*) "isdir('test') = ", system_isdir('test')
+write(*,*) "isdir('bench') = ", system_isdir('bench')
+
+end program with_c_app \ No newline at end of file
diff --git a/example_packages/with_c/fpm.toml b/example_packages/with_c/fpm.toml
new file mode 100644
index 0000000..97e3110
--- /dev/null
+++ b/example_packages/with_c/fpm.toml
@@ -0,0 +1 @@
+name = "with_c"
diff --git a/example_packages/with_c/src/c_code.c b/example_packages/with_c/src/c_code.c
new file mode 100644
index 0000000..44604f0
--- /dev/null
+++ b/example_packages/with_c/src/c_code.c
@@ -0,0 +1,10 @@
+#include <sys/stat.h>
+/*
+ * Decides whether a given file name is a directory.
+ * return 1 if file exists and is a directory
+ * Source (Public domain): https://github.com/urbanjost/M_system
+ */
+int my_isdir (const char *path) {
+ struct stat sb;
+ return stat(path, &sb) == 0 && S_ISDIR (sb.st_mode);
+} \ No newline at end of file
diff --git a/example_packages/with_c/src/with_c.f90 b/example_packages/with_c/src/with_c.f90
new file mode 100644
index 0000000..edd839e
--- /dev/null
+++ b/example_packages/with_c/src/with_c.f90
@@ -0,0 +1,26 @@
+module with_c
+ use iso_c_binding, only: c_char, c_int, c_null_char
+ implicit none
+
+contains
+
+ function system_isdir(dirname)
+ ! Source (Public domain): https://github.com/urbanjost/M_system
+ !
+ implicit none
+ character(len=*),intent(in) :: dirname
+ logical :: system_isdir
+
+ interface
+ function c_isdir(dirname) bind (C,name="my_isdir") result (c_ierr)
+ import c_char,c_int
+ character(kind=c_char,len=1),intent(in) :: dirname(*)
+ integer(kind=c_int) :: c_ierr
+ end function c_isdir
+ end interface
+
+ system_isdir= c_isdir(trim(dirname)//c_null_char) == 1
+
+ end function system_isdir
+
+end module with_c \ No newline at end of file