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