Back to home page

EIC code displayed by LXR

 
 

    


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()