diff -r b97a17bf89ec -r b12634f2e1b2 cmake_modules/FindFreepascal.cmake --- 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()