--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/CheckHaskellModuleExists.cmake Tue Feb 04 23:53:43 2014 +0400
@@ -0,0 +1,52 @@
+# Based on CheckLibraryExists.cmake from CMake
+#=============================================================================
+# Copyright 2002-2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+
+macro(CHECK_HASKELL_MODULE_EXISTS MODULE FUNCTION PARAMCOUNT LIBRARY)
+ set(VARIABLE "HS_MODULE_${LIBRARY}_${FUNCTION}")
+ if("${VARIABLE}" MATCHES "^${VARIABLE}$")
+ message(STATUS "Looking for ${FUNCTION} in ${MODULE}")
+
+ set(PARAMETERS "")
+
+ if(PARAMCOUNT GREATER 0)
+ foreach(__TRASH__ RANGE 1 ${PARAMCOUNT})
+ set(PARAMETERS "${PARAMETERS} undefined")
+ endforeach()
+ endif()
+
+ set(PARAMETERS "")
+
+ execute_process(COMMAND ${GHC_EXECUTABLE}
+ "-DMODULE=${MODULE}"
+ "-DFUNCTION=${FUNCTION}"
+ "-DPARAMETERS=${PARAMETERS}"
+ -cpp
+ -c "${CMAKE_MODULE_PATH}/checkModule.hs"
+ ERROR_VARIABLE BUILD_ERROR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+
+ if("${BUILD_ERROR}" STREQUAL "")
+ message(STATUS "Looking for ${FUNCTION} in ${MODULE} - found")
+ set(${VARIABLE} 1 CACHE INTERNAL "Have module ${MODULE}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Determining if the function ${FUNCTION} exists in the ${MODULE} passed\n\n")
+ else()
+ message(STATUS "Looking for ${FUNCTION} in ${MODULE} - not found")
+ set(${VARIABLE} "" CACHE INTERNAL "Have module ${MODULE}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Determining if the function ${FUNCTION} exists in the ${MODULE} "
+ "failed with the following output:\n"
+ "${BUILD_ERROR}\n\n")
+ message(FATAL_ERROR "Haskell library '${LIBRARY}' required")
+ endif()
+ endif()
+endmacro()