I'm using CMake 2.4.2 and using the Visual Studio .NET 2003 generator. When I do
FIND_PROGRAM(MAKEINFO_EXE NAMES makeinfo)
it picks up my MSYS makeinfo, because I have my MSYS tools in my Windows system path. The exact filename found, as reported by CMakeCache.txt, is

MAKEINFO_EXE:FILEPATH=E:/msys/1.0/bin/makeinfo

Most of the MSYS tools have .exe suffixes and will run under a plain Windows command prompt. Some, however, do not have .exe suffixes and are not meant to run outside of MSYS. Such is makeinfo. When I open makeinfo under a text editor, I see that it is some kind of binary, and it has a string near the top of it that says, "This program cannot be run in DOS mode."

EXECUTE_PROCESS proves to be exceptionally clever at getting makeinfo to run. Too clever. Somehow, it gets it to run, and returns a success code. Under a VS71 generator, it should be flunking it. Because it certainly doesn't work in the resultant VS71 .sln file, which presumably uses a 'DOS' mode to execute custom targets.

My mighty CMakeLists.txt:

FIND_PROGRAM(MAKEINFO_EXE NAMES makeinfo)
IF(MAKEINFO_EXE)

 MESSAGE("Testing whether makeinfo returns error codes.")
 EXECUTE_PROCESS(COMMAND ${MAKEINFO_EXE} --idiot
   RESULT_VARIABLE MAKEINFO_FAILED)
 IF(MAKEINFO_FAILED)
   MESSAGE("makeinfo returns an error code when given bogus arguments.")
 ELSE(MAKEINFO_FAILED)
   MESSAGE("makeinfo returns success even with bogus arguments.")
 ENDIF(MAKEINFO_FAILED)

 MESSAGE("Testing whether makeinfo actually works.")
 EXECUTE_PROCESS(COMMAND ${MAKEINFO_EXE} --version
   RESULT_VARIABLE MAKEINFO_FAILED)
 IF(MAKEINFO_FAILED)
   MESSAGE("makeinfo does not work")
   ADD_CUSTOM_TARGET(info
     COMMAND ${CMAKE_COMMAND} -E echo makeinfo does not work)
 ELSE(MAKEINFO_FAILED)
   MESSAGE("makeinfo works")
   ADD_CUSTOM_TARGET(info
     COMMAND ${MAKEINFO_EXE} --version)
 ENDIF(MAKEINFO_FAILED)

ELSE(MAKEINFO_EXE)
 MESSAGE("makeinfo not available")
 ADD_CUSTOM_TARGET(info
   COMMAND ${CMAKE_COMMAND} -E echo makeinfo not available)
ENDIF(MAKEINFO_EXE)


My results in CMakeSetup:

Testing whether makeinfo returns error codes.
makeinfo returns an error code when given bogus arguments.
Testing whether makeinfo actually works.
makeinfo works


It fails in VS71 thusly:

------ Build started: Project: info, Configuration: Debug Win32 ------

Performing Post-Build Event...
'E:\msys\1.0\bin\makeinfo' is not recognized as an internal or external command,
operable program or batch file.
Project : error PRJ0019: A tool returned an error code from "Performing Post-Build Event..."

Build log was saved at "file://e:\devel\vs71\info\info.dir\Debug\BuildLog.htm"
info - 1 error(s), 0 warning(s)



Cheers,
Brandon Van Every

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to