diff options
author | Brad King <brad.king@kitware.com> | 2016-09-22 18:46:54 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-09-23 12:51:06 (GMT) |
commit | b66bc6606e87c79e3adef55aa963570a5b8f78f2 (patch) | |
tree | 37d624724e696d8c40a2e0ec127954f65a396be0 /Tests/FortranModules | |
parent | 6757e6608992354300d635a96fed29800a4856c3 (diff) | |
download | CMake-b66bc6606e87c79e3adef55aa963570a5b8f78f2.zip CMake-b66bc6606e87c79e3adef55aa963570a5b8f78f2.tar.gz CMake-b66bc6606e87c79e3adef55aa963570a5b8f78f2.tar.bz2 |
Tests: Add Fortran submodule tests
Co-Author: Damian Rouson <damian@sourceryinstitute.org>
Issue: #16234
Diffstat (limited to 'Tests/FortranModules')
-rw-r--r-- | Tests/FortranModules/CMakeLists.txt | 31 | ||||
-rw-r--r-- | Tests/FortranModules/Submodules/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/FortranModules/Submodules/main.f90 | 5 | ||||
-rw-r--r-- | Tests/FortranModules/Submodules/provide.f90 | 57 |
4 files changed, 94 insertions, 0 deletions
diff --git a/Tests/FortranModules/CMakeLists.txt b/Tests/FortranModules/CMakeLists.txt index b406df3..ff12771 100644 --- a/Tests/FortranModules/CMakeLists.txt +++ b/Tests/FortranModules/CMakeLists.txt @@ -5,6 +5,33 @@ if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "V set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}") endif() +if("x${CMake_TEST_Fortran_SUBMODULES}" STREQUAL "x" + AND NOT CMAKE_VERSION VERSION_LESS 3.6.20160923 # for CheckFortranSourceCompiles SRC_EXT + ) + include(CheckFortranSourceCompiles) + CHECK_Fortran_SOURCE_COMPILES([[ +module parent + interface + module function id(x) + real, intent(in) :: x + real :: id + end function id + end interface +end module parent +submodule ( parent ) child +contains + module procedure id + f = x + end procedure id +end submodule child +program main +end program +]] HAVE_SUBMODULES SRC_EXT F90) + set(CMake_TEST_Fortran_SUBMODULES ${HAVE_SUBMODULES}) +elseif(CMake_TEST_Fortran_SUBMODULES) + message(STATUS "Enabling Fortran submodule tests by explicit request.") +endif() + add_executable(test_module test_module_main.f90 test_module_implementation.f90 @@ -76,3 +103,7 @@ endif() add_subdirectory(Library) add_subdirectory(Subdir) add_subdirectory(Executable) + +if(CMake_TEST_Fortran_SUBMODULES) + add_subdirectory(Submodules) +endif() diff --git a/Tests/FortranModules/Submodules/CMakeLists.txt b/Tests/FortranModules/Submodules/CMakeLists.txt new file mode 100644 index 0000000..bf0152f --- /dev/null +++ b/Tests/FortranModules/Submodules/CMakeLists.txt @@ -0,0 +1 @@ +add_executable(submod main.f90 provide.f90) diff --git a/Tests/FortranModules/Submodules/main.f90 b/Tests/FortranModules/Submodules/main.f90 new file mode 100644 index 0000000..3c750ce --- /dev/null +++ b/Tests/FortranModules/Submodules/main.f90 @@ -0,0 +1,5 @@ +program main + use parent, only : child_function,grandchild_subroutine + implicit none + if (child_function()) call grandchild_subroutine +end program diff --git a/Tests/FortranModules/Submodules/provide.f90 b/Tests/FortranModules/Submodules/provide.f90 new file mode 100644 index 0000000..0ad216a --- /dev/null +++ b/Tests/FortranModules/Submodules/provide.f90 @@ -0,0 +1,57 @@ +! The program units in this file consist of a +! module/submodule tree represented by the following +! graph: +! +! parent +! | +! / \ +! / \ +! child sibling +! | +! grandchild +! +! where the parent node is a module and all other +! nodes are submodules. + +module parent + implicit none + + interface + + ! Test Fortran 2008 "module function" syntax + module function child_function() result(child_stuff) + logical :: child_stuff + end function + + ! Test Fortran 2008 "module subroutine" syntax + module subroutine grandchild_subroutine() + end subroutine + + end interface + +end module parent + +! Test the notation for a 1st-generation direct +! descendant of a parent module +submodule ( parent ) child + implicit none +contains + module function child_function() result(child_stuff) + logical :: child_stuff + child_stuff=.true. + end function +end submodule child + +! Empty submodule for checking disambiguation of +! nodes at the same vertical level in the tree +submodule ( parent ) sibling +end submodule sibling + +! Test the notation for an Nth-generation descendant +! for N>1, which necessitates the colon. +submodule ( parent : child ) grandchild +contains + module subroutine grandchild_subroutine() + print *,"Test passed." + end subroutine +end submodule grandchild |