--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmake_modules/CheckHaskellPackageExists.cmake Wed Mar 28 15:14:20 2018 +0200
@@ -0,0 +1,47 @@
+# Checks if a given Haskell package exists (using ghc-pkg)
+# and fails if it's missing.
+# Loosely 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_PACKAGE_EXISTS PACKAGE MODULE FUNCTION PARAMCOUNT)
+# NOTE: MODULE, FUNCTION and PARAMCOUNT are curretly ignored.
+# TODO: Either implement these or drop?
+
+ set(VARIABLE "HS_PACKAGE_${PACKAGE}")
+ if(NOT (${VARIABLE} EQUAL "1"))
+ message(STATUS "Looking for Haskell package ${PACKAGE} ...")
+
+ execute_process(COMMAND ${GHC_PKG_EXECUTABLE}
+ "latest"
+ ${PACKAGE}
+ "--simple-output"
+ RESULT_VARIABLE COMMAND_RESULT
+ ERROR_VARIABLE BUILD_ERROR
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_QUIET
+ )
+
+ if(${COMMAND_RESULT} EQUAL 0)
+ message(STATUS "Looking for Haskell package ${PACKAGE} - found")
+ set(${VARIABLE} "1" CACHE INTERNAL "Have package ${PACKAGE}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Determining if the Haskell package ${PACKAGE} exists has passed\n\n")
+ else()
+ message(STATUS "Looking for Haskell package ${PACKAGE} - not found")
+ set(${VARIABLE} "0" CACHE INTERNAL "Have package ${PACKAGE}")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Determining if the Haskell package ${PACKAGE} "
+ "exists failed with the following output:\n"
+ "${BUILD_ERROR}\n\n")
+ message(FATAL_ERROR "Haskell package '${PACKAGE}' required")
+ endif()
+ endif()
+endmacro()