From 4cb73c43ac13a4b796c61da137a1576c8c6a4d23 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 9 Dec 2011 09:37:46 -0500 Subject: FortranCInterface: Work around mingw32-make trouble with parens The mingw32-make tool does not handle parenthesis in the path to a source file consistently. When CMake is installed in a typical location like "c:\Program Files (x86)\CMake 2.8\" the mingw32-make tool fails on the FortranCInterface detection project sometimes with errors like >mingw32-make -f CMakeFiles\myfort.dir\build.make CMakeFiles/myfort.dir/my_module.f90.obj mingw32-make: *** No rule to make target `x86)/CMake 2.8/share/cmake-2.8/Modules/FortranCInterface/my_module.f90)', needed by `CMakeFiles/myfort.dir/my_module.f90.obj'. Stop. due to parens in the path to the FortranCInterface source directory. However, the behavior varies with the file name of build.make: >copy CMakeFiles\myfort.dir\build.make CMakeFiles\myfort.dir\build2.make >mingw32-make -f CMakeFiles\myfort.dir\build2.make CMakeFiles/myfort.dir/my_module.f90.obj [ 3%] Building Fortran object CMakeFiles/myfort.dir/my_module.f90.obj Tested with >mingw32-make -v GNU Make 3.82 Built for i386-pc-mingw32 Work around the problem by copying the whole FortranCInterface source directory in to the project build tree. --- Modules/FortranCInterface.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake index 90ef59b..2455c5f 100644 --- a/Modules/FortranCInterface.cmake +++ b/Modules/FortranCInterface.cmake @@ -116,6 +116,14 @@ endforeach() #----------------------------------------------------------------------------- set(FortranCInterface_SOURCE_DIR ${CMAKE_ROOT}/Modules/FortranCInterface) +# MinGW's make tool does not always like () in the path +if("${CMAKE_GENERATOR}" MATCHES "MinGW" AND + "${FortranCInterface_SOURCE_DIR}" MATCHES "[()]") + file(COPY ${FortranCInterface_SOURCE_DIR}/ + DESTINATION ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW) + set(FortranCInterface_SOURCE_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterfaceMinGW) +endif() + # Create the interface detection project if it does not exist. if(NOT FortranCInterface_BINARY_DIR) set(FortranCInterface_BINARY_DIR ${CMAKE_BINARY_DIR}/CMakeFiles/FortranCInterface) -- cgit v0.12