include_guard(GLOBAL) function (CHECK_EXECUTABLE executable result) set (${result} "UNKNOWN" PARENT_SCOPE) if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") set (tool otool -hv) else() set (tool "${CMAKE_COMMAND}" -E env LANG=C LC_ALL=C readelf -lW) endif() execute_process(COMMAND ${tool} "${executable}" OUTPUT_VARIABLE output ERROR_VARIABLE output) if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") if (output MATCHES "( |\t)PIE( |\n|$)") set (${result} "PIE" PARENT_SCOPE) else() set (${result} "NO_PIE" PARENT_SCOPE) endif() else() if (output MATCHES "Elf file type is DYN") set (${result} "PIE" PARENT_SCOPE) elseif (output MATCHES "Elf file type is EXEC") set (${result} "NO_PIE" PARENT_SCOPE) else() message(SEND_ERROR "Did not find a known file type") endif() endif() endfunction()