cmake_modules/CheckHaskellPackageExists.cmake
changeset 13291 31615a2e0db1
parent 12113 72f5d670bbee
child 15700 a3d2f69f3ac1
--- /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()