Hi,

I would like to propose two new modules for inclusion in CMake:
FindOpenCL to find OpenCL and FindHg for Mercurial (see attached.)
FindOpenCL is written in similar spirit to FindOpenGL, while FindHg is
basically the equivalent of FindSubversion for Mercurial.

The modules have been tested on Windows, Linux, and Mac, using a variety
of OpenCL runtimes.

I would be happy to be the maintainer of these modules, if they get
accepted into the CMake distribution.

Cheers,
  Matthäus
#.rst:
# FindOpenCL
# ----------
#
# Try to find OpenCL
#
# Once done this will define
#
# ::
#
#   OPENCL_FOUND        - system has OpenCL
#   OPENCL_INCLUDE_DIR  - the OpenCL include directory
#   OPENCL_LIBRARY      - Link against this library to use OpenCL
#	OPENCL_VERSION 		- OpenCL version (eg. 1.0)
#
#

FUNCTION(_FIND_OPENCL_VERSION)
	INCLUDE(CheckSymbolExists)
	INCLUDE(CMakePushCheckState)

	CMAKE_PUSH_CHECK_STATE()
	FOREACH(VERSION "2_0" "1_2" "1_1" "1_0")
		SET(CMAKE_REQUIRED_INCLUDES "${OPENCL_INCLUDE_DIR}")

		IF(APPLE)
			CHECK_SYMBOL_EXISTS(
				CL_VERSION_${VERSION}
				"${OPENCL_INCLUDE_DIR}/OpenCL/cl.h"
				OPENCL_VERSION_${VERSION})
		ELSE()
			CHECK_SYMBOL_EXISTS(
				CL_VERSION_${VERSION}
				"${OPENCL_INCLUDE_DIR}/CL/cl.h"
				OPENCL_VERSION_${VERSION})
		ENDIF()

		IF(OPENCL_VERSION_${VERSION})
			STRING(REPLACE "_" "." VERSION "${VERSION}")
			SET(OPENCL_VERSION_FOUND ${VERSION} CACHE
				STRING "Highest supported OpenCL version")
			BREAK()
		ENDIF()
	ENDFOREACH()
	CMAKE_POP_CHECK_STATE()
ENDFUNCTION()

FIND_PATH(OPENCL_INCLUDE_DIR
	NAMES
		CL/cl.h OpenCL/cl.h
	PATHS
		"$ENV{PROGRAMFILES(X86)}/AMD APP/include"
		$ENV{AMDAPPSDKROOT}/include
		$ENV{INTELOCLSDKROOT}/include
		$ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/inc
		$ENV{CUDA_PATH}/include
		# Legacy Stream SDK
		$ENV{ATISTREAMSDKROOT}/include)

IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
	SET(OPENCL_LIB_SEARCH_PATH
		${OPENCL_LIB_SEARCH_PATH}
		"$ENV{PROGRAMFILES(X86)}/AMD APP/lib/x86"
		$ENV{AMDAPPSDKROOT}/lib/x86
		$ENV{INTELOCLSDKROOT}/lib/x86
		$ENV{CUDA_PATH}/lib/Win32
		$ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/Win32
		# Legacy Stream SDK
		$ENV{ATISTREAMSDKROOT}/lib/x86)
ELSEIF(CMAKE_SIZEOF_VOID_P EQUAL 8)
  SET(OPENCL_LIB_SEARCH_PATH
		${OPENCL_LIB_SEARCH_PATH}
		"$ENV{PROGRAMFILES(X86)}/AMD APP/lib/x86_64"
		$ENV{AMDAPPSDKROOT}/lib/x86_64
		$ENV{INTELOCLSDKROOT}/lib/x64
		$ENV{CUDA_PATH}/lib/x64
		$ENV{NVSDKCOMPUTE_ROOT}/OpenCL/common/lib/x64
		# Legacy stream SDK
		$ENV{ATISTREAMSDKROOT}/lib/x86_64)
ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 4)

FIND_LIBRARY(
    OPENCL_LIBRARY
    NAMES OpenCL
    PATHS ${OPENCL_LIB_SEARCH_PATH})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
  OpenCL
  DEFAULT_MSG
  OPENCL_LIBRARY OPENCL_INCLUDE_DIR)

if(OPENCL_FOUND)
  set(OPENCL_LIBRARIES ${OPENCL_LIBRARY})
  _FIND_OPENCL_VERSION()
else(OPENCL_FOUND)
  set(OPENCL_LIBRARIES)
endif(OPENCL_FOUND)

mark_as_advanced(
  OPENCL_INCLUDE_DIR
  OPENCL_LIBRARY
  )
#.rst:
# FindHg
# ------
#
# Extract information from a mercurial working copy
#
# The module defines the following variables:
#
# ::
#
#   Hg_EXECUTABLE - path to mercurial command line client
#   Hg_FOUND - true if the command line client was found
#
#
# If the command line client executable is found the following macro is defined:
#
# ::
#
#   Hg_WC_INFO(<dir> <var-prefix>)
#
# Hg_WC_INFO extracts information of a mercurial working copy
# at a given location.  This macro defines the following variables:
#
# ::
#
#   <var-prefix>_WC_CHANGESET - current changeset
#   <var-prefix>_WC_REVISION - current revision
#
# Example usage:
#
# ::
#
#   find_package(Hg)
#   if(Hg_FOUND)
#     Hg_WC_INFO(${PROJECT_SOURCE_DIR} Project)
#     message("Current revision is ${Project_WC_REVISION}")
#     message("Current changeset is ${Project_WC_CHANGESET}")
#   endif()

SET(Hg_FOUND FALSE)

FIND_PROGRAM(Hg_EXECUTABLE
	NAMES hg hg.exe
	HINTS /usr/bin
	PATHS 	[HKEY_LOCAL_MACHINE\\Software\\TortoiseHg]
			[HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\TortoiseHg]
	DOC "hg command line client")
MARK_AS_ADVANCED(Hg_EXECUTABLE)

IF(Hg_EXECUTABLE)
  SET(Hg_FOUND TRUE)
  MACRO(Hg_WC_INFO dir prefix)
    EXECUTE_PROCESS(COMMAND ${Hg_EXECUTABLE} id -i -n
       WORKING_DIRECTORY ${dir}
        ERROR_VARIABLE Hg_error
       OUTPUT_VARIABLE ${prefix}_WC_DATA
        OUTPUT_STRIP_TRAILING_WHITESPACE)
    IF(NOT ${Hg_error} EQUAL 0)
      MESSAGE(SEND_ERROR "Command \"${Hg_EXECUTBALE} id -n\" in directory ${dir} failed with output:\n${Hg_error}")
    ENDIF(NOT ${Hg_error} EQUAL 0)
	STRING(REPLACE " " ";" ${prefix}_WC_DATA ${${prefix}_WC_DATA})
	LIST(GET ${prefix}_WC_DATA 0 ${prefix}_WC_CHANGESET)
	LIST(GET ${prefix}_WC_DATA 1 ${prefix}_WC_REVISION)
	STRING(REGEX REPLACE "\\+$" "" ${prefix}_WC_REVISION ${${prefix}_WC_REVISION})
	STRING(REGEX REPLACE "\\+$" "" ${prefix}_WC_CHANGESET ${${prefix}_WC_CHANGESET})
  ENDMACRO(Hg_WC_INFO)
ENDIF(Hg_EXECUTABLE)

IF(NOT Hg_FOUND)
  IF(NOT Hg_FIND_QUIETLY)
    MESSAGE(STATUS "Mercurial was not found")
  ELSE(NOT Hg_FIND_QUIETLY)
    IF(Hg_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Mercurial was not found")
    ENDIF(Hg_FIND_REQUIRED)
  ENDIF(NOT Hg_FIND_QUIETLY)
ENDIF(NOT Hg_FOUND)

-- 

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to