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