For some reason, it did not work on Windows.
try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
${CMAKE_BINARY_DIR}
${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_stackgrowth.c
try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
${CMAKE_BINARY_DIR}
${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_stackgrowth.c
+ RUN_OUTPUT_VARIABLE stack
- if (RUN_makecontext_VAR)
- file(READ "${CMAKE_BINARY_DIR}/conftestval" stack)
- if(stack MATCHES "down")
- set(PTH_STACKGROWTH "-1")
- endif()
- if(stack MATCHES "up")
- set(PTH_STACKGROWTH "1")
- endif()
- endif()
+if("${stack}" STREQUAL "down")
+ set(PTH_STACKGROWTH "-1")
+elseif("${stack}" STREQUAL "up")
+ set(PTH_STACKGROWTH "1")
+else()
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
set(PTH_STACKGROWTH "-1")
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
set(PTH_STACKGROWTH "-1")
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
+ set(PTH_STACKGROWTH "-1")
else()
message(ERROR "Could not figure the stack direction.")
endif()
else()
message(ERROR "Could not figure the stack direction.")
endif()
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
static int iterate = 10;
static int growsdown(int *x)
{
static int iterate = 10;
static int growsdown(int *x)
{
int main(int argc, char *argv[])
{
int main(int argc, char *argv[])
{
- if ((f = fopen("conftestval", "w")) == NULL)
- exit(1);
- fprintf(f, "%s\n", growsdown(&x) ? "down" : "up");;
- fclose(f);
+ printf("%s", growsdown(&x) ? "down" : "up");