cmake_modules/CheckHaskellModuleExists.cmake
author Wuzzy <Wuzzy2@mail.ru>
Fri, 16 Feb 2018 11:51:42 +0100
changeset 13015 abb2b4ae172e
parent 12113 72f5d670bbee
permissions -rw-r--r--
Crop non-team hats without “real” animation to static format (32×32) This … a) makes these hats more managable b) Fixes some clipping problems with hats which take the full height (e.g. knight, noface) b) reduces file size This has been done semi-automated with the following steps: 1. Carefully select hats manually and write them in a list file 2. Run a script to crop them to 32×32 using ImageMagick 3. Check ALL the converted hats in Hedgewars 4. Discard hat changes which turn out to be bad 5. Manually convert any non-RGBA images back to RGBA 6. Final check 7. Commit

# 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}"
                    -hide-all-packages
                    -package ${LIBRARY}
                    -package base
                    -cpp
                    -c "${CMAKE_MODULE_PATH}/checkModule.hs"
                    RESULT_VARIABLE COMMAND_RESULT
                    ERROR_VARIABLE BUILD_ERROR
                    OUTPUT_STRIP_TRAILING_WHITESPACE
                    )
    if(${COMMAND_RESULT} EQUAL 0)
      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()