cmake_modules/FindFreepascal.cmake
changeset 8164 b12634f2e1b2
parent 8162 b97a17bf89ec
child 8166 5bc0fc0bab4d
--- a/cmake_modules/FindFreepascal.cmake	Fri Nov 30 23:08:10 2012 -0600
+++ b/cmake_modules/FindFreepascal.cmake	Sat Dec 01 15:40:10 2012 -0600
@@ -1,18 +1,34 @@
 # Load Freepascal
-IF (FPC)
-    SET(FPC_EXECUTABLE ${FPC})
-ELSE()
-    FIND_PROGRAM(FPC_EXECUTABLE
+if (FPC)
+    set(FPC_EXECUTABLE ${FPC})
+else()
+    find_program(FPC_EXECUTABLE
         NAMES fpc
         PATHS /opt/local/bin /usr/local/bin /usr/bin)
-ENDIF()
+endif()
 
 # Check Freepascal version
-IF (FPC_EXECUTABLE)
-    EXEC_PROGRAM(${FPC_EXECUTABLE} ARGS "-v" OUTPUT_VARIABLE FPC_VERSION_FULL)
+if (FPC_EXECUTABLE)
+    exec_program(${FPC_EXECUTABLE} ARGS "-v" OUTPUT_VARIABLE FPC_VERSION_FULL)
+
+    string(REGEX MATCH "[0-9]+\\.[0-9]+" FPC_VERSION_LONG "${FPC_VERSION_FULL}")
+    string(REGEX REPLACE "([0-9]+\\.[0-9]+)" "\\1" FPC_VERSION "${FPC_VERSION_LONG}")
+else()
+    message(FATAL_ERROR "Freepascal not found (required for hedgewars)")
+endif()
 
-    STRING(REGEX MATCH "[0-9]+\\.[0-9]+" FPC_VERSION_LONG "${FPC_VERSION_FULL}")
-    STRING(REGEX REPLACE "([0-9]+\\.[0-9]+)" "\\1" FPC_VERSION "${FPC_VERSION_LONG}")
-ELSE()
-    MESSAGE(FATAL_ERROR "Freepascal not found (required for hedgewars)")
-ENDIF()
+# Check for noexecstack flag support
+set(NOEXECSTACK_FLAGS "-k-z" "-knoexecstack")
+file(WRITE ${EXECUTABLE_OUTPUT_PATH}/checkstack.pas "begin end.")
+
+execute_process(COMMAND ${FPC_EXECUTABLE} ${NOEXECSTACK_FLAGS} checkstack.pas
+    WORKING_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
+    RESULT_VARIABLE TEST_NOEXECSTACK
+    OUTPUT_QUIET ERROR_QUIET)
+
+if (TEST_NOEXECSTACK)
+    set(NOEXECSTACK_FLAGS "")
+    message(STATUS "Checking whether linker supports noexecstack flag -- no")
+else()
+    message(STATUS "Checking whether linker supports noexecstack flag -- yes")
+endif()