Description | We often have our own .c file stored in our tree for TRY_RUN testing,
and it is convenient to be able to use CHECK_C_RUNS_SOURCE for testing
those .c files. At the moment, CHECK_C_RUNS_SOURCE assumes the
incoming SOURCE variable actually holds the source code - our
enhancement checks to see if SOURCE holds a valid file path first. If
it DOES hold a valid file path, TRY_RUN then trys that .c file,
otherwise the existing CHECK_C_RUNS_SOURCE is preserved. I don't know
of any sane pathname that would be valid C code or vice versa, so
there should be no danger of passing in a C source snippit and having
it mistaken for a file path. |
Attached Files | 0001-Teach-CheckC.-modules-to-use-a-source-file-as-well-a.patch [^] (7,005 bytes) 2012-02-07 20:36 [Show Content] [Hide Content]From e33c6b3fa0c0bb4bc085a5ebc3299e4b2b184f39 Mon Sep 17 00:00:00 2001
From: Cliff Yapp <cliffyapp@gmail.com>
Date: Tue, 7 Feb 2012 20:31:30 -0500
Subject: [PATCH] Teach CheckC... modules to use a source file as well as
directly supplied source code.
---
Modules/CheckCSourceCompiles.cmake | 13 ++++++++++---
Modules/CheckCSourceRuns.cmake | 13 ++++++++++---
Modules/CheckCXXSourceCompiles.cmake | 13 ++++++++++---
Modules/CheckCXXSourceRuns.cmake | 13 ++++++++++---
4 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake
index d59fe55..2971726 100644
--- a/Modules/CheckCSourceCompiles.cmake
+++ b/Modules/CheckCSourceCompiles.cmake
@@ -10,6 +10,9 @@
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#
+# <code> may be either the actual source code to be compiled
+# or the full path to a file containing the source code
#=============================================================================
# Copyright 2005-2009 Kitware, Inc.
@@ -51,13 +54,17 @@ MACRO(CHECK_C_SOURCE_COMPILES SOURCE VAR)
ELSE(CMAKE_REQUIRED_INCLUDES)
SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
ENDIF(CMAKE_REQUIRED_INCLUDES)
- FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
- "${SOURCE}\n")
+ IF(EXISTS "${SOURCE}")
+ SET(CHECK_SRC "${SOURCE}")
+ ELSE(EXISTS "${SOURCE}")
+ FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c" "${SOURCE}\n")
+ SET(CHECK_SRC "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c")
+ ENDIF(EXISTS "${SOURCE}")
MESSAGE(STATUS "Performing Test ${VAR}")
TRY_COMPILE(${VAR}
${CMAKE_BINARY_DIR}
- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
+ ${CHECK_SRC}
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CHECK_C_SOURCE_COMPILES_ADD_LIBRARIES}"
diff --git a/Modules/CheckCSourceRuns.cmake b/Modules/CheckCSourceRuns.cmake
index 764c756..8ab48a2 100644
--- a/Modules/CheckCSourceRuns.cmake
+++ b/Modules/CheckCSourceRuns.cmake
@@ -10,6 +10,9 @@
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#
+# <code> may be either the actual source code to be built and
+# run or the full path to a file containing the source code
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
@@ -40,13 +43,17 @@ MACRO(CHECK_C_SOURCE_RUNS SOURCE VAR)
ELSE(CMAKE_REQUIRED_INCLUDES)
SET(CHECK_C_SOURCE_COMPILES_ADD_INCLUDES)
ENDIF(CMAKE_REQUIRED_INCLUDES)
- FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c"
- "${SOURCE}\n")
+ IF(EXISTS "${SOURCE}")
+ SET(CHECK_SRC "${SOURCE}")
+ ELSE(EXISTS "${SOURCE}")
+ FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c" "${SOURCE}\n")
+ SET(CHECK_SRC "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c")
+ ENDIF(EXISTS "${SOURCE}")
MESSAGE(STATUS "Performing Test ${VAR}")
TRY_RUN(${VAR}_EXITCODE ${VAR}_COMPILED
${CMAKE_BINARY_DIR}
- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.c
+ ${CHECK_SRC}
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake
index 0491b37..0a7545e 100644
--- a/Modules/CheckCXXSourceCompiles.cmake
+++ b/Modules/CheckCXXSourceCompiles.cmake
@@ -10,6 +10,9 @@
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#
+# <code> may be either the actual source code to be compiled
+# or the full path to a file containing the source code
#=============================================================================
# Copyright 2005-2009 Kitware, Inc.
@@ -52,13 +55,17 @@ MACRO(CHECK_CXX_SOURCE_COMPILES SOURCE VAR)
ELSE(CMAKE_REQUIRED_INCLUDES)
SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
ENDIF(CMAKE_REQUIRED_INCLUDES)
- FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx"
- "${SOURCE}\n")
+ IF(EXISTS "${SOURCE}")
+ SET(CHECK_SRC "${SOURCE}")
+ ELSE(EXISTS "${SOURCE}")
+ FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx" "${SOURCE}\n")
+ SET(CHECK_SRC "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx")
+ ENDIF(EXISTS "${SOURCE}")
MESSAGE(STATUS "Performing Test ${VAR}")
TRY_COMPILE(${VAR}
${CMAKE_BINARY_DIR}
- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
+ ${CHECK_SRC}
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CHECK_CXX_SOURCE_COMPILES_ADD_LIBRARIES}"
diff --git a/Modules/CheckCXXSourceRuns.cmake b/Modules/CheckCXXSourceRuns.cmake
index ace60d1..80b8a6a 100644
--- a/Modules/CheckCXXSourceRuns.cmake
+++ b/Modules/CheckCXXSourceRuns.cmake
@@ -10,6 +10,9 @@
# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
# CMAKE_REQUIRED_INCLUDES = list of include directories
# CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+#
+# <code> may be either the actual source code to be built and
+# run or the full path to a file containing the source code
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
@@ -40,13 +43,17 @@ MACRO(CHECK_CXX_SOURCE_RUNS SOURCE VAR)
ELSE(CMAKE_REQUIRED_INCLUDES)
SET(CHECK_CXX_SOURCE_COMPILES_ADD_INCLUDES)
ENDIF(CMAKE_REQUIRED_INCLUDES)
- FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx"
- "${SOURCE}\n")
+ IF(EXISTS "${SOURCE}")
+ SET(CHECK_SRC "${SOURCE}")
+ ELSE(EXISTS "${SOURCE}")
+ FILE(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx" "${SOURCE}\n")
+ SET(CHECK_SRC "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx")
+ ENDIF(EXISTS "${SOURCE}")
MESSAGE(STATUS "Performing Test ${VAR}")
TRY_RUN(${VAR}_EXITCODE ${VAR}_COMPILED
${CMAKE_BINARY_DIR}
- ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/src.cxx
+ ${CHECK_SRC}
COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS}
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
-DCMAKE_SKIP_RPATH:BOOL=${CMAKE_SKIP_RPATH}
--
1.7.6
|