|
|
@@ -0,0 +1,396 @@
|
|
|
+#.rst:
|
|
|
+# FindIce
|
|
|
+# -------
|
|
|
+#
|
|
|
+# Find the ZeroC Internet Communication Engine (ICE) programs,
|
|
|
+# libraries and datafiles.
|
|
|
+#
|
|
|
+# This module supports multiple components.
|
|
|
+# Components can include any of: ``Freeze``, ``Glacier2``, ``Ice``,
|
|
|
+# ``IceBox``, ``IceDB``, ``IceGrid``, ``IcePatch``, ``IceSSL``,
|
|
|
+# ``IceStorm``, ``IceUtil``, ``IceXML``, or ``Slice``.
|
|
|
+#
|
|
|
+# This module reports information about the Ice installation in
|
|
|
+# several variables. General variables::
|
|
|
+#
|
|
|
+# Ice_VERSION - Ice release version
|
|
|
+# Ice_FOUND - true if the main programs and libraries were found
|
|
|
+# Ice_LIBRARIES - component libraries to be linked
|
|
|
+# Ice_INCLUDE_DIRS - the directories containing the Ice headers
|
|
|
+# Ice_SLICE_DIRS - the directories containing the Ice slice interface
|
|
|
+# definitions
|
|
|
+#
|
|
|
+# Ice programs are reported in::
|
|
|
+#
|
|
|
+# Ice_SLICE2CPP_EXECUTABLE - path to slice2cpp executable
|
|
|
+# Ice_SLICE2CS_EXECUTABLE - path to slice2cs executable
|
|
|
+# Ice_SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable
|
|
|
+# Ice_SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable
|
|
|
+# Ice_SLICE2HTML_EXECUTABLE - path to slice2html executable
|
|
|
+# Ice_SLICE2JAVA_EXECUTABLE - path to slice2java executable
|
|
|
+# Ice_SLICE2PHP_EXECUTABLE - path to slice2php executable
|
|
|
+# Ice_SLICE2PY_EXECUTABLE - path to slice2py executable
|
|
|
+# Ice_SLICE2RB_EXECUTABLE - path to slice2rb executable
|
|
|
+#
|
|
|
+# Ice component libraries are reported in::
|
|
|
+#
|
|
|
+# Ice_<C>_FOUND - ON if component was found
|
|
|
+# Ice_<C>_LIBRARIES - libraries for component
|
|
|
+#
|
|
|
+# Note that ``<C>`` is the uppercased name of the component.
|
|
|
+#
|
|
|
+# This module reads hints about search results from::
|
|
|
+#
|
|
|
+# Ice_HOME - the root of the Ice installation
|
|
|
+#
|
|
|
+# The environment variable :envvar:`ICE_HOME` may also be used; the
|
|
|
+# Ice_HOME variable takes precedence.
|
|
|
+#
|
|
|
+# The following cache variables may also be set::
|
|
|
+#
|
|
|
+# Ice_<P>_EXECUTABLE - the path to executable <P>
|
|
|
+# Ice_INCLUDE_DIR - the directory containing the Ice headers
|
|
|
+# Ice_SLICE_DIR - the directory containing the Ice slice interface
|
|
|
+# definitions
|
|
|
+# Ice_<C>_LIBRARY - the library for component <C>
|
|
|
+#
|
|
|
+# .. note::
|
|
|
+#
|
|
|
+# In most cases none of the above variables will require setting,
|
|
|
+# unless multiple Ice versions are available and a specific version
|
|
|
+# is required. On Windows, the most recent version of Ice will be
|
|
|
+# found through the registry. On Unix, the programs, headers and
|
|
|
+# libraries will usually be in standard locations, but Ice_SLICE_DIRS
|
|
|
+# might not be automatically detected (commonly known locations are
|
|
|
+# searched). All the other variables are defaulted using Ice_HOME,
|
|
|
+# if set. It's possible to set Ice_HOME and selectively specify
|
|
|
+# alternative locations for the other components; this might be
|
|
|
+# required for e.g. newer versions of Visual Studio if the
|
|
|
+# heuristics are not sufficient to identify the correct programs and
|
|
|
+# libraries for the specific Visual Studio version.
|
|
|
+#
|
|
|
+# Other variables one may set to control this module are::
|
|
|
+#
|
|
|
+# Ice_DEBUG - Set to ON to enable debug output from FindIce.
|
|
|
+
|
|
|
+# Written by Roger Leigh <[email protected]>
|
|
|
+
|
|
|
+#=============================================================================
|
|
|
+# Copyright 2014 University of Dundee
|
|
|
+#
|
|
|
+# Distributed under the OSI-approved BSD License (the "License");
|
|
|
+# see accompanying file Copyright.txt for details.
|
|
|
+#
|
|
|
+# 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.
|
|
|
+#=============================================================================
|
|
|
+# (To distribute this file outside of CMake, substitute the full
|
|
|
+# License text for the above reference.)
|
|
|
+
|
|
|
+# The Ice checks are contained in a function due to the large number
|
|
|
+# of temporary variables needed.
|
|
|
+function(_Ice_FIND)
|
|
|
+ # Released versions of Ice, including generic short forms
|
|
|
+ set(ice_versions
|
|
|
+ 3
|
|
|
+ 3.5
|
|
|
+ 3.5.1
|
|
|
+ 3.5.0
|
|
|
+ 3.4
|
|
|
+ 3.4.2
|
|
|
+ 3.4.1
|
|
|
+ 3.4.0
|
|
|
+ 3.3
|
|
|
+ 3.3.1
|
|
|
+ 3.3.0)
|
|
|
+
|
|
|
+ # Set up search paths, taking compiler into account. Search Ice_HOME,
|
|
|
+ # with ICE_HOME in the environment as a fallback if unset.
|
|
|
+ if(Ice_HOME)
|
|
|
+ list(APPEND ice_roots "${Ice_HOME}")
|
|
|
+ else()
|
|
|
+ if(NOT "$ENV{ICE_HOME}" STREQUAL "")
|
|
|
+ file(TO_CMAKE_PATH "$ENV{ICE_HOME}" NATIVE_PATH)
|
|
|
+ list(APPEND ice_roots "${NATIVE_PATH}")
|
|
|
+ set(Ice_HOME "${NATIVE_PATH}"
|
|
|
+ CACHE PATH "Location of the Ice installation" FORCE)
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
|
+ # 64-bit path suffix
|
|
|
+ set(_x64 "/x64")
|
|
|
+ # 64-bit library directory
|
|
|
+ set(_lib64 "lib64")
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(MSVC_VERSION)
|
|
|
+ # VS 8.0
|
|
|
+ if(NOT MSVC_VERSION VERSION_LESS 1400 AND MSVC_VERSION VERSION_LESS 1500)
|
|
|
+ set(vcver "vc80")
|
|
|
+ set(vcyear "2005")
|
|
|
+ # VS 9.0
|
|
|
+ elseif(NOT MSVC_VERSION VERSION_LESS 1500 AND MSVC_VERSION VERSION_LESS 1600)
|
|
|
+ set(vcver "vc90")
|
|
|
+ set(vcyear "2008")
|
|
|
+ # VS 10.0
|
|
|
+ elseif(NOT MSVC_VERSION VERSION_LESS 1600 AND MSVC_VERSION VERSION_LESS 1700)
|
|
|
+ set(vcver "vc100")
|
|
|
+ # VS 11.0
|
|
|
+ elseif(NOT MSVC_VERSION VERSION_LESS 1700 AND MSVC_VERSION VERSION_LESS 1800)
|
|
|
+ set(vcver "vc110")
|
|
|
+ # VS 12.0
|
|
|
+ elseif(NOT MSVC_VERSION VERSION_LESS 1800 AND MSVC_VERSION VERSION_LESS 1900)
|
|
|
+ set(vcver "vc120")
|
|
|
+ # VS 14.0
|
|
|
+ elseif(NOT MSVC_VERSION VERSION_LESS 1900 AND MSVC_VERSION VERSION_LESS 2000)
|
|
|
+ set(vcver "vc140")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ # For compatibility with ZeroC Windows builds.
|
|
|
+ if(vcver)
|
|
|
+ # Earlier Ice (3.3) builds don't use vcnnn subdirectories, but are harmless to check.
|
|
|
+ list(APPEND ice_binary_suffixes "bin/${vcver}${_x64}" "bin/${vcver}")
|
|
|
+ list(APPEND ice_library_suffixes "lib/${vcver}${_x64}" "lib/${vcver}")
|
|
|
+ endif()
|
|
|
+ # Generic 64-bit and 32-bit directories
|
|
|
+ list(APPEND ice_binary_suffixes "bin${_x64}" "bin")
|
|
|
+ list(APPEND ice_library_suffixes "${_lib64}" "lib${_x64}" "lib")
|
|
|
+ list(APPEND ice_include_suffixes "include")
|
|
|
+ list(APPEND ice_slice_suffixes "slice")
|
|
|
+
|
|
|
+ # On Windows, look in the registry for install locations. Different
|
|
|
+ # versions of Ice install support different compiler versions.
|
|
|
+ if(vcver)
|
|
|
+ foreach(ice_version ${ice_versions})
|
|
|
+ # Ice 3.3 releases use a Visual Studio year suffix and value is
|
|
|
+ # enclosed in double quotes, though only the leading quote is
|
|
|
+ # returned by get_filename_component.
|
|
|
+ unset(ice_location)
|
|
|
+ if(vcyear)
|
|
|
+ get_filename_component(ice_location
|
|
|
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version} for Visual Studio ${vcyear};InstallDir]"
|
|
|
+ PATH)
|
|
|
+ if(ice_location AND NOT ("${ice_location}" STREQUAL "/registry" OR "${ice_location}" STREQUAL "/"))
|
|
|
+ string(REGEX REPLACE "^\"(.*)\"?$" "\\1" ice_location "${ice_location}")
|
|
|
+ get_filename_component(ice_location "${ice_location}" ABSOLUTE)
|
|
|
+ else()
|
|
|
+ unset(ice_location)
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+ # Ice 3.4+ releases don't use a suffix
|
|
|
+ if(NOT ice_location OR "${ice_location}" STREQUAL "/registry")
|
|
|
+ get_filename_component(ice_location
|
|
|
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ZeroC\\Ice ${ice_version};InstallDir]"
|
|
|
+ ABSOLUTE)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(ice_location AND NOT "${ice_location}" STREQUAL "/registry")
|
|
|
+ list(APPEND ice_roots "${ice_location}")
|
|
|
+ endif()
|
|
|
+ endforeach()
|
|
|
+ else()
|
|
|
+ foreach(ice_version ${ice_versions})
|
|
|
+ # Prefer 64-bit variants if present (and using a 64-bit compiler)
|
|
|
+ list(APPEND ice_roots "/opt/Ice-${ice_version}")
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ set(ice_programs
|
|
|
+ slice2cpp
|
|
|
+ slice2cs
|
|
|
+ slice2freezej
|
|
|
+ slice2freeze
|
|
|
+ slice2html
|
|
|
+ slice2java
|
|
|
+ slice2php
|
|
|
+ slice2py
|
|
|
+ slice2rb)
|
|
|
+
|
|
|
+ # Find all Ice programs
|
|
|
+ foreach(program ${ice_programs})
|
|
|
+ string(TOUPPER "${program}" program_upcase)
|
|
|
+ set(cache_var "Ice_${program_upcase}_EXECUTABLE")
|
|
|
+ set(program_var "Ice_${program_upcase}_EXECUTABLE")
|
|
|
+ find_program("${cache_var}" "${program}"
|
|
|
+ HINTS ${ice_roots}
|
|
|
+ PATH_SUFFIXES ${ice_binary_suffixes}
|
|
|
+ DOC "Ice ${program} executable")
|
|
|
+ mark_as_advanced(cache_var)
|
|
|
+ set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
|
|
|
+ endforeach()
|
|
|
+
|
|
|
+ # Get version.
|
|
|
+ if(Ice_SLICE2CPP_EXECUTABLE)
|
|
|
+ # Execute in C locale for safety
|
|
|
+ set(_Ice_SAVED_LC_ALL "$ENV{LC_ALL}")
|
|
|
+ set(ENV{LC_ALL} C)
|
|
|
+
|
|
|
+ execute_process(COMMAND ${Ice_SLICE2CPP_EXECUTABLE} --version
|
|
|
+ ERROR_VARIABLE Ice_VERSION_SLICE2CPP_FULL
|
|
|
+ ERROR_STRIP_TRAILING_WHITESPACE)
|
|
|
+
|
|
|
+ # restore the previous LC_ALL
|
|
|
+ set(ENV{LC_ALL} ${_Ice_SAVED_LC_ALL})
|
|
|
+
|
|
|
+ # Make short version
|
|
|
+ string(REGEX REPLACE "^(.*)\\.[^.]*$" "\\1" Ice_VERSION_SLICE2CPP_SHORT "${Ice_VERSION_SLICE2CPP_FULL}")
|
|
|
+ set(Ice_VERSION "${Ice_VERSION_SLICE2CPP_FULL}" PARENT_SCOPE)
|
|
|
+ endif()
|
|
|
+
|
|
|
+ message(STATUS "Ice version: ${Ice_VERSION_SLICE2CPP_FULL}")
|
|
|
+
|
|
|
+ # The following searches prefer the version found; note reverse
|
|
|
+ # order due to prepending.
|
|
|
+ if(NOT MSVC)
|
|
|
+ list(INSERT ice_roots 0 "/opt/Ice-${Ice_VERSION_SLICE2CPP_SHORT}")
|
|
|
+ list(INSERT ice_roots 0 "/opt/Ice-${Ice_VERSION_SLICE2CPP_FULL}")
|
|
|
+ endif()
|
|
|
+
|
|
|
+ # Find include directory
|
|
|
+ find_path(Ice_INCLUDE_DIR
|
|
|
+ NAMES "Ice/Ice.h"
|
|
|
+ HINTS ${ice_roots}
|
|
|
+ PATH_SUFFIXES ${ice_include_suffixes}
|
|
|
+ DOC "Ice include directory")
|
|
|
+ set(Ice_INCLUDE_DIR "${Ice_INCLUDE_DIR}" PARENT_SCOPE)
|
|
|
+
|
|
|
+ # In common use on Linux, MacOS X (homebrew) and FreeBSD; prefer
|
|
|
+ # version-specific dir
|
|
|
+ list(APPEND ice_slice_paths
|
|
|
+ /usr/local/share /usr/share)
|
|
|
+ list(APPEND ice_slice_suffixes
|
|
|
+ "Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice"
|
|
|
+ "Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice"
|
|
|
+ Ice)
|
|
|
+
|
|
|
+ # Find slice directory
|
|
|
+ find_path(Ice_SLICE_DIR
|
|
|
+ NAMES "Ice/Connection.ice"
|
|
|
+ HINTS ${ice_roots}
|
|
|
+ ${ice_slice_paths}
|
|
|
+ PATH_SUFFIXES ${ice_slice_suffixes}
|
|
|
+ NO_DEFAULT_PATH
|
|
|
+ DOC "Ice slice directory")
|
|
|
+ set(Ice_SLICE_DIR "${Ice_SLICE_DIR}" PARENT_SCOPE)
|
|
|
+
|
|
|
+ # Find all Ice libraries
|
|
|
+ set(Ice_REQUIRED_LIBS_FOUND ON)
|
|
|
+ foreach(component ${Ice_FIND_COMPONENTS})
|
|
|
+ string(TOUPPER "${component}" component_upcase)
|
|
|
+ set(component_cache "Ice_${component_upcase}_LIBRARY")
|
|
|
+ set(component_found "${component_upcase}_FOUND")
|
|
|
+ find_library("${component_cache}" "${component}"
|
|
|
+ HINTS ${ice_roots}
|
|
|
+ PATH_SUFFIXES ${ice_library_suffixes}
|
|
|
+ DOC "Ice ${component} library")
|
|
|
+ mark_as_advanced("${component_cache}")
|
|
|
+ if("${component_cache}")
|
|
|
+ set("${component_found}" ON)
|
|
|
+ list(APPEND Ice_LIBRARY "${${component_cache}}")
|
|
|
+ endif()
|
|
|
+ mark_as_advanced("${component_found}")
|
|
|
+ set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
|
|
|
+ set("${component_found}" "${${component_found}}" PARENT_SCOPE)
|
|
|
+ if("${component_found}")
|
|
|
+ if ("Ice_FIND_REQUIRED_${component}")
|
|
|
+ list(APPEND Ice_LIBS_FOUND "${component} (required)")
|
|
|
+ else()
|
|
|
+ list(APPEND Ice_LIBS_FOUND "${component} (optional)")
|
|
|
+ endif()
|
|
|
+ else()
|
|
|
+ if ("Ice_FIND_REQUIRED_${component}")
|
|
|
+ set(Ice_REQUIRED_LIBS_FOUND OFF)
|
|
|
+ list(APPEND Ice_LIBS_NOTFOUND "${component} (required)")
|
|
|
+ else()
|
|
|
+ list(APPEND Ice_LIBS_NOTFOUND "${component} (optional)")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
+ endforeach()
|
|
|
+ set(_Ice_REQUIRED_LIBS_FOUND "${Ice_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
|
|
|
+ set(Ice_LIBRARY "${Ice_LIBRARY}" PARENT_SCOPE)
|
|
|
+
|
|
|
+ if(Ice_LIBS_FOUND)
|
|
|
+ message(STATUS "Found the following Ice libraries:")
|
|
|
+ foreach(found ${Ice_LIBS_FOUND})
|
|
|
+ message(STATUS " ${found}")
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
+ if(Ice_LIBS_NOTFOUND)
|
|
|
+ message(STATUS "The following Ice libraries were not found:")
|
|
|
+ foreach(notfound ${Ice_LIBS_NOTFOUND})
|
|
|
+ message(STATUS " ${notfound}")
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
+
|
|
|
+ if(Ice_DEBUG)
|
|
|
+ message(STATUS "--------FindIce.cmake search debug--------")
|
|
|
+ message(STATUS "ICE binary path search order: ${ice_roots}")
|
|
|
+ message(STATUS "ICE include path search order: ${ice_roots}")
|
|
|
+ message(STATUS "ICE slice path search order: ${ice_roots} ${ice_slice_paths}")
|
|
|
+ message(STATUS "ICE library path search order: ${ice_roots}")
|
|
|
+ message(STATUS "----------------")
|
|
|
+ endif()
|
|
|
+endfunction()
|
|
|
+
|
|
|
+_Ice_FIND()
|
|
|
+
|
|
|
+include(FindPackageHandleStandardArgs)
|
|
|
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ice
|
|
|
+ FOUND_VAR Ice_FOUND
|
|
|
+ REQUIRED_VARS Ice_SLICE2CPP_EXECUTABLE
|
|
|
+ Ice_INCLUDE_DIR
|
|
|
+ Ice_SLICE_DIR
|
|
|
+ Ice_LIBRARY
|
|
|
+ _Ice_REQUIRED_LIBS_FOUND
|
|
|
+ VERSION_VAR Ice_VERSION
|
|
|
+ FAIL_MESSAGE "Failed to find all Ice components")
|
|
|
+
|
|
|
+unset(_Ice_REQUIRED_LIBS_FOUND)
|
|
|
+
|
|
|
+if(Ice_FOUND)
|
|
|
+ set(Ice_INCLUDE_DIRS "${Ice_INCLUDE_DIR}")
|
|
|
+ set(Ice_SLICE_DIRS "${Ice_SLICE_DIR}")
|
|
|
+ set(Ice_LIBRARIES "${Ice_LIBRARY}")
|
|
|
+ foreach(_Ice_component ${Ice_FIND_COMPONENTS})
|
|
|
+ string(TOUPPER "${_Ice_component}" _Ice_component_upcase)
|
|
|
+ set(_Ice_component_cache "Ice_${_Ice_component_upcase}_LIBRARY")
|
|
|
+ set(_Ice_component_lib "Ice_${_Ice_component_upcase}_LIBRARIES")
|
|
|
+ set(_Ice_component_found "${_Ice_component_upcase}_FOUND")
|
|
|
+ if("${_Ice_component_found}")
|
|
|
+ set("${_Ice_component_lib}" "${${_Ice_component_cache}}")
|
|
|
+ endif()
|
|
|
+ unset(_Ice_component_upcase)
|
|
|
+ unset(_Ice_component_cache)
|
|
|
+ unset(_Ice_component_lib)
|
|
|
+ unset(_Ice_component_found)
|
|
|
+ endforeach()
|
|
|
+endif()
|
|
|
+
|
|
|
+if(Ice_DEBUG)
|
|
|
+ message(STATUS "--------FindIce.cmake results debug--------")
|
|
|
+ message(STATUS "Ice_VERSION number: ${Ice_VERSION}")
|
|
|
+ message(STATUS "Ice_HOME directory: ${Ice_HOME}")
|
|
|
+ message(STATUS "Ice_INCLUDE_DIR directory: ${Ice_INCLUDE_DIR}")
|
|
|
+ message(STATUS "Ice_SLICE_DIR directory: ${Ice_SLICE_DIR}")
|
|
|
+ message(STATUS "Ice_LIBRARIES: ${Ice_LIBRARIES}")
|
|
|
+ message(STATUS "slice2cpp executable: ${Ice_SLICE2CPP_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2cs executable: ${Ice_SLICE2CS_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2freezej executable: ${Ice_SLICE2FREEZEJ_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2freeze executable: ${Ice_SLICE2FREEZE_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2html executable: ${Ice_SLICE2HTML_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2java executable: ${Ice_SLICE2JAVA_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2php executable: ${Ice_SLICE2PHP_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2py executable: ${Ice_SLICE2PY_EXECUTABLE}")
|
|
|
+ message(STATUS "slice2rb executable: ${Ice_SLICE2RB_EXECUTABLE}")
|
|
|
+ foreach(component ${Ice_FIND_COMPONENTS})
|
|
|
+ string(TOUPPER "${component}" component_upcase)
|
|
|
+ set(component_lib "Ice_${component_upcase}_LIBRARIES")
|
|
|
+ set(component_found "${component_upcase}_FOUND")
|
|
|
+ message(STATUS "${component} library found: ${${component_found}}")
|
|
|
+ message(STATUS "${component} library: ${${component_lib}}")
|
|
|
+ endforeach()
|
|
|
+ message(STATUS "----------------")
|
|
|
+endif()
|