33 lines
		
	
	
		
			896 B
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			896 B
		
	
	
	
		
			CMake
		
	
	
	
	
	
| 
 | |
| 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()
 |