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());
|
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"
|
fout << "\t\t\t\t\t<Tool\n"
|
||||||
<< "\t\t\t\t\tName=\"" << customTool << "\"\n"
|
<< "\t\t\t\t\tName=\"" << customTool << "\"\n"
|
||||||
<< "\t\t\t\t\tDescription=\""
|
<< "\t\t\t\t\tDescription=\""
|
||||||
|
|
|
@ -1578,6 +1578,13 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
|
||||||
i != depends.end(); ++i)
|
i != depends.end(); ++i)
|
||||||
{
|
{
|
||||||
cmTarget* dt = *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);
|
this->WriteString("<ProjectReference Include=\"", 2);
|
||||||
cmMakefile* mf = dt->GetMakefile();
|
cmMakefile* mf = dt->GetMakefile();
|
||||||
std::string name = dt->GetName();
|
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}")
|
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
|
||||||
ENDMACRO(ADD_TEST_MACRO)
|
ENDMACRO(ADD_TEST_MACRO)
|
||||||
|
|
||||||
|
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)
|
||||||
|
|
||||||
# Fake a user home directory to avoid polluting the real one.
|
# Fake a user home directory to avoid polluting the real one.
|
||||||
IF(DEFINED ENV{HOME} AND NOT CTEST_NO_TEST_HOME)
|
IF(DEFINED ENV{HOME} AND NOT CTEST_NO_TEST_HOME)
|
||||||
SET(TEST_HOME "${CMake_BINARY_DIR}/Tests/CMakeFiles/TestHome")
|
SET(TEST_HOME "${CMake_BINARY_DIR}/Tests/CMakeFiles/TestHome")
|
||||||
|
@ -155,6 +157,9 @@ IF(BUILD_TESTING)
|
||||||
ADD_TEST_MACRO(MissingSourceFile MissingSourceFile)
|
ADD_TEST_MACRO(MissingSourceFile MissingSourceFile)
|
||||||
SET_TESTS_PROPERTIES(MissingSourceFile PROPERTIES
|
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")
|
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(COnly COnly)
|
||||||
ADD_TEST_MACRO(CxxOnly CxxOnly)
|
ADD_TEST_MACRO(CxxOnly CxxOnly)
|
||||||
ADD_TEST_MACRO(IPO COnly/COnly)
|
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
|
# fortran does not work for IDE builds because
|
||||||
# CMAKE_STANDARD_LIBRARIES needs to be per language
|
# CMAKE_STANDARD_LIBRARIES needs to be per language
|
||||||
IF(CMAKE_TEST_GENERATOR MATCHES "Make|KDevelop")
|
IF(CMAKE_TEST_GENERATOR MATCHES "Make|KDevelop")
|
||||||
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)
|
|
||||||
IF(CMAKE_Fortran_COMPILER)
|
IF(CMAKE_Fortran_COMPILER)
|
||||||
ADD_TEST(Fortran ${CMAKE_CTEST_COMMAND}
|
ADD_TEST(Fortran ${CMAKE_CTEST_COMMAND}
|
||||||
--build-and-test
|
--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