Merge topic 'intel_fortran_vs2010'
3c53fbb
Fix custom commands in VS2010 Fortran projects using CFG_INTDIR and test.
This commit is contained in:
commit
a772f21a7d
|
@ -1622,6 +1622,10 @@ WriteCustomRule(std::ostream& fout,
|
|||
}
|
||||
|
||||
std::string script = this->ConstructScript(command, i->c_str());
|
||||
if(this->FortranProject)
|
||||
{
|
||||
cmSystemTools::ReplaceString(script, "$(Configuration)", i->c_str());
|
||||
}
|
||||
fout << "\t\t\t\t\t<Tool\n"
|
||||
<< "\t\t\t\t\tName=\"" << customTool << "\"\n"
|
||||
<< "\t\t\t\t\tDescription=\""
|
||||
|
|
|
@ -1578,6 +1578,13 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
|
|||
i != depends.end(); ++i)
|
||||
{
|
||||
cmTarget* dt = *i;
|
||||
// skip fortran targets as they can not be processed by MSBuild
|
||||
// the only reference will be in the .sln file
|
||||
if(static_cast<cmGlobalVisualStudioGenerator*>(this->GlobalGenerator)
|
||||
->TargetIsFortranOnly(*dt))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
this->WriteString("<ProjectReference Include=\"", 2);
|
||||
cmMakefile* mf = dt->GetMakefile();
|
||||
std::string name = dt->GetName();
|
||||
|
|
|
@ -16,6 +16,8 @@ MACRO(ADD_TEST_MACRO NAME COMMAND)
|
|||
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
|
||||
ENDMACRO(ADD_TEST_MACRO)
|
||||
|
||||
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)
|
||||
|
||||
# Fake a user home directory to avoid polluting the real one.
|
||||
IF(DEFINED ENV{HOME} AND NOT CTEST_NO_TEST_HOME)
|
||||
SET(TEST_HOME "${CMake_BINARY_DIR}/Tests/CMakeFiles/TestHome")
|
||||
|
@ -155,6 +157,9 @@ IF(BUILD_TESTING)
|
|||
ADD_TEST_MACRO(MissingSourceFile MissingSourceFile)
|
||||
SET_TESTS_PROPERTIES(MissingSourceFile PROPERTIES
|
||||
PASS_REGULAR_EXPRESSION "CMake Error at CMakeLists.txt:3 \\(add_executable\\):[ \r\n]*Cannot find source file:[ \r\n]*DoesNotExist/MissingSourceFile.c")
|
||||
IF(CMAKE_Fortran_COMPILER)
|
||||
ADD_TEST_MACRO(FortranOnly FortranOnly)
|
||||
ENDIF()
|
||||
ADD_TEST_MACRO(COnly COnly)
|
||||
ADD_TEST_MACRO(CxxOnly CxxOnly)
|
||||
ADD_TEST_MACRO(IPO COnly/COnly)
|
||||
|
@ -1879,7 +1884,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
|||
# fortran does not work for IDE builds because
|
||||
# CMAKE_STANDARD_LIBRARIES needs to be per language
|
||||
IF(CMAKE_TEST_GENERATOR MATCHES "Make|KDevelop")
|
||||
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)
|
||||
IF(CMAKE_Fortran_COMPILER)
|
||||
ADD_TEST(Fortran ${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
cmake_minimum_required (VERSION 2.8)
|
||||
project(FortranOnly Fortran)
|
||||
message("CTEST_FULL_OUTPUT ")
|
||||
|
||||
# create a library with hello and world functions
|
||||
add_library(FortranOnlylib hello.f world.f)
|
||||
# create an executable that calls hello and world
|
||||
add_executable(FortranOnly testf.f)
|
||||
target_link_libraries(FortranOnly FortranOnlylib)
|
||||
|
||||
# create a custom command that runs FortranOnly and puts
|
||||
# the output into the file testfhello.txt
|
||||
add_custom_command(OUTPUT ${FortranOnly_BINARY_DIR}/testfhello.txt
|
||||
COMMAND ${FortranOnly_BINARY_DIR}/${CMAKE_CFG_INTDIR}/FortranOnly
|
||||
> testfhello.txt)
|
||||
# create a second executable FortranOnly2 that has
|
||||
# testfhello.txt has an source file so that it will
|
||||
# run the above custom command.
|
||||
add_executable(FortranOnly2 testfhello.txt testf.f)
|
||||
target_link_libraries(FortranOnly2 FortranOnlylib)
|
||||
# create a custom target to check the content of testfhello.txt
|
||||
# by running the cmake script checktestf2.cmake
|
||||
add_custom_target(checktestf2 ALL
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-P ${FortranOnly_SOURCE_DIR}/checktestf2.cmake)
|
||||
|
||||
# create a custom target that runs FortranOnly exectuable and creates
|
||||
# a file out.txt that should have hello world in it.
|
||||
add_custom_target(sayhello ALL
|
||||
COMMAND ${FortranOnly_BINARY_DIR}/${CMAKE_CFG_INTDIR}/FortranOnly > out.txt
|
||||
)
|
||||
# make sure stuff is built in the right order
|
||||
add_dependencies(checktestf2 FortranOnly2)
|
||||
add_dependencies(sayhello FortranOnly)
|
||||
add_dependencies(FortranOnly2 FortranOnly)
|
||||
|
||||
# add a custom target that checkes that out.txt has the correct
|
||||
# content
|
||||
add_custom_target(checksayhello ALL
|
||||
COMMAND ${CMAKE_COMMAND} -P ${FortranOnly_SOURCE_DIR}/checksayhello.cmake
|
||||
)
|
||||
add_dependencies(checksayhello sayhello)
|
|
@ -0,0 +1,7 @@
|
|||
file(READ out.txt IN)
|
||||
message("${IN}")
|
||||
if(IN MATCHES Hello AND IN MATCHES World)
|
||||
message("Passed")
|
||||
else()
|
||||
message(FATAL_ERROR "Hello world not found")
|
||||
endif()
|
|
@ -0,0 +1,8 @@
|
|||
file(READ testfhello.txt IN)
|
||||
message("${IN}")
|
||||
if(IN MATCHES Hello AND IN MATCHES World)
|
||||
message("Passed")
|
||||
else()
|
||||
message(FATAL_ERROR "Hello world not found")
|
||||
endif()
|
||||
file(WRITE testfhello2.txt ${IN})
|
|
@ -0,0 +1,5 @@
|
|||
SUBROUTINE HELLO
|
||||
|
||||
PRINT *, 'Hello'
|
||||
|
||||
END
|
|
@ -0,0 +1,6 @@
|
|||
PROGRAM TESTF
|
||||
|
||||
CALL HELLO()
|
||||
CALL WORLD()
|
||||
|
||||
END
|
|
@ -0,0 +1,5 @@
|
|||
SUBROUTINE WORLD
|
||||
|
||||
PRINT *, 'World!'
|
||||
|
||||
END
|
Loading…
Reference in New Issue