ctkFunctionExecuteProcess.cmake 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. ###########################################################################
  2. #
  3. # Library: CTK
  4. #
  5. # Copyright (c) 2010 Kitware Inc.
  6. #
  7. # Licensed under the Apache License, Version 2.0 (the "License");
  8. # you may not use this file except in compliance with the License.
  9. # You may obtain a copy of the License at
  10. #
  11. # http://www.commontk.org/LICENSE
  12. #
  13. # Unless required by applicable law or agreed to in writing, software
  14. # distributed under the License is distributed on an "AS IS" BASIS,
  15. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. # See the License for the specific language governing permissions and
  17. # limitations under the License.
  18. #
  19. ###########################################################################
  20. #
  21. # Same as EXECUTE_PROCESS command except it can accept the extra parameter: PATH_LIST
  22. #
  23. # According to the platform, either PATH, LD_LIBRARY_PATH or DYLD_LIBRARY_PATH
  24. # will be updated using the paths specified using PATH_LIST
  25. #
  26. #
  27. FUNCTION(ctkFunctionExecuteProcess)
  28. CtkMacroParseArguments(MY
  29. "COMMAND;PATH_LIST;WORKING_DIRECTORY;TIMEOUT;RESULT_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE;INPUT_FILE;OUTPUT_FILE;ERROR_FILE"
  30. "OUTPUT_QUIET;ERROR_QUIET;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE"
  31. ${ARGN}
  32. )
  33. # Sanity checks
  34. IF(NOT DEFINED MY_COMMAND)
  35. MESSAGE(SEND_ERROR "COMMAND is mandatory")
  36. ENDIF()
  37. # Extract executable
  38. LIST(LENGTH MY_COMMAND command_length)
  39. LIST(GET MY_COMMAND 0 MY_EXECUTABLE)
  40. GET_FILENAME_COMPONENT(EXECUTABLE_NAME ${MY_EXECUTABLE} NAME_WE)
  41. #MESSAGE("EXECUTABLE_NAME:${EXECUTABLE_NAME}")
  42. IF(NOT EXISTS ${MY_EXECUTABLE})
  43. MESSAGE(FATAL_ERROR "Exectuable ${MY_EXECUTABLE} doesn't exist !")
  44. ENDIF()
  45. # Command
  46. SET(CONFIG_COMMAND COMMAND)
  47. FOREACH(command_part ${MY_COMMAND})
  48. SET(CONFIG_COMMAND "${CONFIG_COMMAND} \"${command_part}\"")
  49. ENDFOREACH()
  50. #MESSAGE(STATUS CONFIG_COMMAND:"${CONFIG_COMMAND}")
  51. # Arguments list
  52. SET(arg_names WORKING_DIRECTORY TIMEOUT RESULT_VARIABLE OUTPUT_VARIABLE ERROR_VARIABLE INPUT_FILE OUTPUT_FILE ERROR_FILE)
  53. FOREACH(arg_name ${arg_names})
  54. IF(DEFINED MY_${arg_name})
  55. SET(CONFIG_${arg_name} "${arg_name} \"${MY_${arg_name}}\"")
  56. ENDIF()
  57. ENDFOREACH()
  58. # Options list
  59. SET(option_names OUTPUT_QUIET ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
  60. FOREACH(option_name ${option_names})
  61. IF(${MY_${option_name}})
  62. SET(CONFIG_${option_name} ${option_name})
  63. ENDIF()
  64. ENDFOREACH()
  65. SET(CONFIG_PATH_LIST ${MY_PATH_LIST})
  66. SET(VARNAME_RESULT_VARIABLE ${MY_RESULT_VARIABLE})
  67. SET(VARNAME_OUTPUT_VARIABLE ${MY_OUTPUT_VARIABLE})
  68. SET(VARNAME_ERROR_VARIABLE ${MY_ERROR_VARIABLE})
  69. SET(cmd ${CMAKE_CURRENT_BINARY_DIR}/CMake/ctkExecuteProcess-${EXECUTABLE_NAME}.cmake)
  70. CONFIGURE_FILE(
  71. ${CMAKE_CURRENT_SOURCE_DIR}/CMake/ctkExecuteProcess.cmake.in
  72. ${cmd}
  73. @ONLY)
  74. # Execute process
  75. EXECUTE_PROCESS(
  76. COMMAND ${CMAKE_COMMAND} -P "${cmd}"
  77. RESULT_VARIABLE error_code
  78. )
  79. IF(error_code)
  80. MESSAGE(FATAL_ERROR "Failed to execute ${cmd}")
  81. ENDIF()
  82. SET(output_file "${CMAKE_CURRENT_BINARY_DIR}/CMake/ctkExecuteProcess-${EXECUTABLE_NAME}-output.cmake")
  83. IF(NOT EXISTS ${output_file})
  84. MESSAGE(FATAL_ERROR "Output file doesn't exist - Problem executing: ${cmd}")
  85. ENDIF()
  86. INCLUDE(${output_file})
  87. ENDFUNCTION()