ctkFunctionExecuteProcess.cmake 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #
  2. #
  3. #
  4. FUNCTION(ctkFunctionExecuteProcess)
  5. CtkMacroParseArguments(MY
  6. "COMMAND;PATH_LIST;WORKING_DIRECTORY;TIMEOUT;RESULT_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE;INPUT_FILE;OUTPUT_FILE;ERROR_FILE"
  7. "OUTPUT_QUIET;ERROR_QUIET;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE"
  8. ${ARGN}
  9. )
  10. # Sanity checks
  11. IF(NOT DEFINED MY_COMMAND)
  12. MESSAGE(SEND_ERROR "COMMAND is mandatory")
  13. ENDIF()
  14. # Extract executable
  15. LIST(LENGTH MY_COMMAND command_length)
  16. LIST(GET MY_COMMAND 0 MY_EXECUTABLE)
  17. GET_FILENAME_COMPONENT(EXECUTABLE_NAME ${MY_EXECUTABLE} NAME_WE)
  18. #MESSAGE("EXECUTABLE_NAME:${EXECUTABLE_NAME}")
  19. IF(NOT EXISTS ${MY_EXECUTABLE})
  20. MESSAGE(FATAL_ERROR "Exectuable ${MY_EXECUTABLE} doesn't exist !")
  21. ENDIF()
  22. # Command
  23. SET(CONFIG_COMMAND COMMAND)
  24. FOREACH(command_part ${MY_COMMAND})
  25. SET(CONFIG_COMMAND "${CONFIG_COMMAND} \"${command_part}\"")
  26. ENDFOREACH()
  27. #MESSAGE(STATUS CONFIG_COMMAND:"${CONFIG_COMMAND}")
  28. # Arguments list
  29. SET(arg_names WORKING_DIRECTORY TIMEOUT RESULT_VARIABLE OUTPUT_VARIABLE ERROR_VARIABLE INPUT_FILE OUTPUT_FILE ERROR_FILE)
  30. FOREACH(arg_name ${arg_names})
  31. IF(DEFINED MY_${arg_name})
  32. SET(CONFIG_${arg_name} "${arg_name} \"${MY_${arg_name}}\"")
  33. ENDIF()
  34. ENDFOREACH()
  35. # Options list
  36. SET(option_names OUTPUT_QUIET ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
  37. FOREACH(option_name ${option_names})
  38. IF(${MY_${option_name}})
  39. SET(CONFIG_${option_name} ${option_name})
  40. ENDIF()
  41. ENDFOREACH()
  42. SET(CONFIG_PATH_LIST ${PATH_LIST})
  43. SET(VARNAME_RESULT_VARIABLE ${MY_RESULT_VARIABLE})
  44. SET(VARNAME_OUTPUT_VARIABLE ${MY_OUTPUT_VARIABLE})
  45. SET(VARNAME_ERROR_VARIABLE ${MY_ERROR_VARIABLE})
  46. SET(cmd ${CMAKE_CURRENT_BINARY_DIR}/CMake/ctkExecuteProcess-${EXECUTABLE_NAME}.cmake)
  47. CONFIGURE_FILE(
  48. ${CMAKE_CURRENT_SOURCE_DIR}/CMake/ctkExecuteProcess.cmake.in
  49. ${cmd}
  50. @ONLY)
  51. # Execute process
  52. EXECUTE_PROCESS(
  53. COMMAND ${CMAKE_COMMAND} -P "${cmd}"
  54. RESULT_VARIABLE error_code
  55. )
  56. IF(error_code)
  57. MESSAGE(FATAL_ERROR "Failed to execute ${cmd}")
  58. ENDIF()
  59. SET(output_file "${CMAKE_CURRENT_BINARY_DIR}/CMake/ctkExecuteProcess-${EXECUTABLE_NAME}-output.cmake")
  60. IF(NOT EXISTS ${output_file})
  61. MESSAGE(FATAL_ERROR "Output file doesn't exist - Problem executing: ${cmd}")
  62. ENDIF()
  63. INCLUDE(${output_file})
  64. ENDFUNCTION()