From 744cbac511dbb1bdecf842711688432150c7e860 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 21 Jan 2019 18:01:02 +0100 Subject: [PATCH] iso_c_bindings --- src/Makefile | 12 +++++++++--- src/libezfio_file.irp.f | 23 +++++++++++++---------- src/libezfio_util.irp.f | 3 ++- src/system_c.c | 13 +++++++++++++ src/system_f.f90 | 12 ++++++++++++ 5 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 src/system_c.c create mode 100644 src/system_f.f90 diff --git a/src/Makefile b/src/Makefile index 40507f6..085dadb 100644 --- a/src/Makefile +++ b/src/Makefile @@ -29,7 +29,7 @@ export include irpf90.make -irpf90.make: $(wildcard *.irp.f) ../config/* +irpf90.make: $(wildcard *.irp.f) ../config/* system.c $(IRPF90) include ../version @@ -40,15 +40,21 @@ all: static ../Python/ezfio.py ../Ocaml/ezfio.ml static: ../lib/libezfio.a ../lib/libezfio_irp.a +system_c.o: system_c.c + $(CC) -c system_c -o system_c.o + +system_f.o: system_f.f90 + $(FC) -c system_f.f90 -o system_f.o + ../lib/libezfio.a: IRPF90_temp/irpf90.a rm -f ../lib/libezfio.a - $(AR) cru ../lib/libezfio.a $(OBJ1) + $(AR) cru ../lib/libezfio.a system_c.o system_f.o $(OBJ1) $(RANLIB) ../lib/libezfio.a ../lib/libezfio_irp.a: ../lib/libezfio.a rm -f ../lib/libezfio_irp.a cp ../lib/libezfio.a ../lib/libezfio_irp.a - $(AR) dv ../lib/libezfio_irp.a irp_stack.irp.o + $(AR) dv ../lib/libezfio_irp.a irp_stack.irp.o system_c.o system_f.o $(RANLIB) ../lib/libezfio_irp.a diff --git a/src/libezfio_file.irp.f b/src/libezfio_file.irp.f index 41f0bed..65420f0 100644 --- a/src/libezfio_file.irp.f +++ b/src/libezfio_file.irp.f @@ -147,6 +147,9 @@ subroutine ezfio_set_file(filename_in) END_DOC character*(*) :: filename_in + character(8) :: date + character(10) :: time + character(32) :: user if (filename_in == '') then call ezfio_error(irp_here,'EZFIO file name is empty.') @@ -157,16 +160,16 @@ subroutine ezfio_set_file(filename_in) if (.not.exists(libezfio_filename)) then call ezfio_mkdir(libezfio_filename) call ezfio_mkdir(trim(libezfio_filename)//'/ezfio') - call system('LANG= date > '//trim(libezfio_filename)//'/ezfio/creation') - call system('echo $USER > '//trim(libezfio_filename)//'/ezfio/user') - BEGIN_SHELL [ /usr/bin/env python2 ] -import os -command = "'echo %s > '//trim(libezfio_filename)//'/ezfio/library'" -cwd = os.getcwd() -cwd = cwd.split('src')[:-1] -cwd = '/'.join(cwd) -print "call system("+command%cwd+")" - END_SHELL + + ! using keyword arguments + call date_and_time(DATE=date,TIME=time) + open (unit=10, file=trim(libezfio_filename)//'/ezfio/creation', ACTION='WRITE', STATUS='UNKNOWN') + write(10,*), time, ' ', date + close(10) + open (unit=10, file=trim(libezfio_filename)//'/ezfio/user', ACTION='WRITE', STATUS='UNKNOWN') + call getenv('USER',user) + write(10,*) user + close(10) endif TOUCH libezfio_filename diff --git a/src/libezfio_util.irp.f b/src/libezfio_util.irp.f index b5a9491..dc174a8 100644 --- a/src/libezfio_util.irp.f +++ b/src/libezfio_util.irp.f @@ -53,6 +53,7 @@ logical function ezfio_exists(path) end function subroutine ezfio_mkdir(path) + use system implicit none BEGIN_DOC ! Creates a directory @@ -63,7 +64,7 @@ subroutine ezfio_mkdir(path) call ezfio_error(irp_here,'Read-only file.') endif if (.not.ezfio_exists(path)) then - call system('mkdir '//trim(path)) + call mkdir(trim(path)) open(unit=libezfio_iunit,file=trim(path)//'/.version') write(libezfio_iunit,'(A)') libezfio_version close(libezfio_iunit) diff --git a/src/system_c.c b/src/system_c.c new file mode 100644 index 0000000..2bd3ae5 --- /dev/null +++ b/src/system_c.c @@ -0,0 +1,13 @@ +#include +#include +#include +#include + + +void ezfio_mkdir(char* filename) { + errno = 0; + if (mkdir (filename, S_IRWXU)) { + perror (strerror (errno)); + } +} + diff --git a/src/system_f.f90 b/src/system_f.f90 new file mode 100644 index 0000000..8a9de58 --- /dev/null +++ b/src/system_f.f90 @@ -0,0 +1,12 @@ +MODULE system + + USE iso_c_binding + + INTERFACE + SUBROUTINE mkdir(filename) BIND(C,name="fortran_mkdir") + USE iso_c_binding + CHARACTER(kind=C_CHAR),INTENT(in) :: filename(*) + END SUBROUTINE + END INTERFACE + +END MODULE