assimp/assimp
cmake-modules/HunterGate.cmake
:212
file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Determining if the Fortran ${FUNCTION} exists passed with the following output:\n"
"${OUTPUT}\n\n"
)
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Determining if the Fortran ${FUNCTION} exists failed with the following output:\n"
"${OUTPUT}\n\n")
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Determining if the HDF5 ${FUNCTION} exists passed with the following output:\n"
"${OUTPUT}\n\n"
)
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Determining if the HDF5 ${FUNCTION} exists failed with the following output:\n"
"${OUTPUT}\n\n")
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testFortranProcedurePointer.f90
"
FUNCTION addrof(fn) RESULT(faddr)
USE ISO_C_BINDING
IMPLICIT NONE
INTERFACE
SUBROUTINE dummysubr(x,y) bind(C)
IMPORT
IMPLICIT NONE
REAL(KIND=C_FLOAT) :: x, y
END SUBROUTINE dummysubr
END INTERFACE
PROCEDURE(dummysubr) :: fn
INTEGER(KIND=8) :: faddr
TYPE(C_FUNPTR) :: cptr
cptr = C_FUNLOC(fn)
faddr = TRANSFER(cptr, faddr)
END FUNCTION addrof
SUBROUTINE mysin(x,y) BIND(C)
USE ISO_C_BINDING
IMPLICIT NONE
REAL(KIND=C_FLOAT) :: x, y
INTRINSIC SIN
y=SIN(x)
END SUBROUTINE mysin
PROGRAM TESTFortranProcPtr
USE ISO_C_BINDING
IMPLICIT NONE
ABSTRACT INTERFACE
SUBROUTINE trig(x,y) BIND(C)
IMPORT
IMPLICIT NONE
REAL(KIND=C_FLOAT) :: x, y
END SUBROUTINE trig
END INTERFACE
INTERFACE
SUBROUTINE mysin(x,y) BIND(C)
IMPORT
IMPLICIT NONE
REAL(KIND=C_FLOAT) :: x, y
END SUBROUTINE mysin
END INTERFACE
TYPE(C_FUNPTR) :: cfptr
PROCEDURE(trig), POINTER :: trigf
REAL(KIND=C_FLOAT) :: x, y, yc
INTEGER(KIND=8) :: addrof, addr
EXTERNAL :: addrof
! Mimic Elmer behaviour by transferring a function pointer to a
! C pointer with TRANSFER, transfer back to Fortran pointer and
! then call the function
addr = addrof(mysin)
cfptr = TRANSFER(addr,cfptr)
CALL C_F_PROCPOINTER(cfptr, trigf)
x = real(3.14/2,C_FLOAT)
CALL trigf(x,y)
CALL mysin(x,yc)
write (*,*) y, yc
END PROGRAM TESTFortranProcPtr
")
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Determining if the Fortran ${FUNCTION} exists passed with the following output:\n"
"${OUTPUT}\n\n"
)
file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Determining if the Fortran ${FUNCTION} exists failed with the following output:\n"
"${OUTPUT}\n\n")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Fortran ${FUNCTION} exists. ${OUTPUT} \n\n")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Fortran ${FUNCTION} does not exist. \n ${OUTPUT} \n")