set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
endif()
-CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H)
+CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
### Generate the required headers and scripts
#############################################
-configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h" @ONLY IMMEDIATE)
-configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h" @ONLY IMMEDIATE)
+# Avoid triggering a (full) rebuild by touching the files if they did not really change
+configure_file("${CMAKE_HOME_DIRECTORY}/tools/cmake/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
+configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid_config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated" @ONLY IMMEDIATE)
+exec_program("${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h")
+exec_program("${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid_config.h")
+file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
+file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid_config.h.generated)
# We need two versions of the SMPI scripts because they contain the path to the library
# so, it depends of whether SimGrid is installed, or run from the sources (during the build)
-file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all scripts, inlined in each of them
+
+file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
### SMPI script used when simgrid is installed
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
#define _aligned_free __mingw_aligned_free
#endif //MINGW
-#ifdef HAVE_VALGRIND_VALGRIND_H
+#ifdef HAVE_VALGRIND_H
# include <valgrind/valgrind.h>
#endif
stack = xbt_malloc0(smx_context_stack_size);
}
-#ifdef HAVE_VALGRIND_VALGRIND_H
+#ifdef HAVE_VALGRIND_H
unsigned int valgrind_stack_id = VALGRIND_STACK_REGISTER(stack, (char *)stack + smx_context_stack_size);
memcpy((char *)stack + smx_context_usable_stack_size, &valgrind_stack_id, sizeof valgrind_stack_id);
#endif
if (!stack)
return;
-#ifdef HAVE_VALGRIND_VALGRIND_H
+#ifdef HAVE_VALGRIND_H
unsigned int valgrind_stack_id;
memcpy(&valgrind_stack_id, (char *)stack + smx_context_usable_stack_size, sizeof valgrind_stack_id);
VALGRIND_STACK_DEREGISTER(valgrind_stack_id);
/* We are using the bottom of the stack to save some information, like the
* valgrind_stack_id. Define smx_context_usable_stack_size to give the remaining
* size for the stack. */
-#ifdef HAVE_VALGRIND_VALGRIND_H
+#ifdef HAVE_VALGRIND_H
# define smx_context_usable_stack_size \
(smx_context_stack_size - sizeof(unsigned int)) /* for valgrind_stack_id */
#else
* under the terms of the license (GNU LGPL) which comes with this package. */
/* Non-standard header files */
-#cmakedefine HAVE_EXECINFO_H @HAVE_EXECINFO_H@ /* <execinfo.h> */
-#cmakedefine HAVE_FUTEX_H @HAVE_FUTEX_H@ /* <linux/futex.h> */
-#cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@ /* <signal.h> */
-#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@ /* <unistd.h> */
-#cmakedefine HAVE_UCONTEXT_H @HAVE_UCONTEXT_H@ /* <ucontext.h> */
-#cmakedefine HAVE_VALGRIND_VALGRIND_H @HAVE_VALGRIND_VALGRIND_H@ /* <valgrind/valgrind.h> */
+#cmakedefine HAVE_EXECINFO_H @HAVE_EXECINFO_H@ /* <execinfo.h> */
+#cmakedefine HAVE_FUTEX_H @HAVE_FUTEX_H@ /* <linux/futex.h> */
+#cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@ /* <signal.h> */
+#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@ /* <unistd.h> */
+#cmakedefine HAVE_UCONTEXT_H @HAVE_UCONTEXT_H@ /* <ucontext.h> */
+#cmakedefine HAVE_VALGRIND_H @HAVE_VALGRIND_H@ /* <valgrind/valgrind.h> */
/* Time portability */
#cmakedefine HAVE_GETTIMEOFDAY @HAVE_GETTIMEOFDAY@ /* Function gettimeofday */