Warning, /EICrecon/cmake/link_what_you_use_check.cmake is written in an unsupported language. File is not indexed.
0001 # Custom LINK_WHAT_YOU_USE check script for EICrecon which wraps the default
0002 # `ldd -u -r` check to log output to a file
0003
0004 # Arguments passed by CMake: cmake -D OUTPUT_DIR=... -P script.cmake
0005 # <binary_file>
0006 #
0007 # The binary file is the last argument after all -D flags
0008
0009 # Find the last argument (the binary file) using CMAKE_ARGC
0010 if(CMAKE_ARGC GREATER 0)
0011 math(EXPR LAST_IDX "${CMAKE_ARGC} - 1")
0012 set(BINARY_FILE "${CMAKE_ARGV${LAST_IDX}}")
0013 else()
0014 set(BINARY_FILE "")
0015 endif()
0016
0017 if(NOT BINARY_FILE
0018 OR BINARY_FILE STREQUAL ""
0019 OR BINARY_FILE MATCHES "^-")
0020 message(FATAL_ERROR "No binary file specified or malformed arguments")
0021 endif()
0022
0023 # Get absolute path of binary
0024 get_filename_component(BINARY_FILE "${BINARY_FILE}" ABSOLUTE)
0025
0026 # Check that the binary file exists before proceeding
0027 if(NOT EXISTS "${BINARY_FILE}")
0028 message(FATAL_ERROR "Binary file does not exist: ${BINARY_FILE}")
0029 endif()
0030 # Use the passed output directory
0031 if(NOT DEFINED OUTPUT_DIR OR OUTPUT_DIR STREQUAL "")
0032 get_filename_component(OUTPUT_DIR "${BINARY_FILE}" DIRECTORY)
0033 set(OUTPUT_DIR "${OUTPUT_DIR}/link_what_you_use")
0034 endif()
0035
0036 # Create output directory
0037 file(MAKE_DIRECTORY "${OUTPUT_DIR}")
0038
0039 # Get binary name for log file
0040 get_filename_component(BINARY_NAME "${BINARY_FILE}" NAME)
0041 set(LOG_FILE "${OUTPUT_DIR}/${BINARY_NAME}.lwyu.log")
0042
0043 # Run ldd -u -r on the binary
0044 execute_process(
0045 COMMAND ldd -u -r "${BINARY_FILE}"
0046 RESULT_VARIABLE LDD_RESULT
0047 OUTPUT_VARIABLE LDD_OUTPUT
0048 ERROR_VARIABLE LDD_ERROR
0049 OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
0050
0051 # Write output to log file
0052 file(WRITE "${LOG_FILE}" "LINK_WHAT_YOU_USE check for: ${BINARY_FILE}\n")
0053 string(TIMESTAMP CURRENT_TIME "%Y-%m-%d %H:%M:%S")
0054 file(APPEND "${LOG_FILE}" "Date: ${CURRENT_TIME}\n")
0055 file(APPEND "${LOG_FILE}" "==========================================\n\n")
0056
0057 if(LDD_OUTPUT)
0058 file(APPEND "${LOG_FILE}" "${LDD_OUTPUT}\n")
0059 endif()
0060 if(LDD_ERROR)
0061 file(APPEND "${LOG_FILE}" "${LDD_ERROR}\n")
0062 endif()
0063
0064 # Check ldd exit status and report error if failed
0065 if(NOT LDD_RESULT EQUAL 0)
0066 message(
0067 FATAL_ERROR
0068 "ldd -u -r failed for '${BINARY_FILE}' with exit code ${LDD_RESULT}. See log file: ${LOG_FILE}\nError output:\n${LDD_ERROR}"
0069 )
0070 endif()