| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying |
| # file LICENSE.rst or https://cmake.org/licensing for details. |
| |
| #[=======================================================================[.rst: |
| FindIce |
| ------- |
| |
| .. versionadded:: 3.1 |
| |
| Finds the Internet Communication Engine (Ice) programs, libraries and datafiles. |
| Ice is an open-source remote procedure call (RPC) framework developed by ZeroC |
| and provides SDKs for various languages to develop network applications. |
| |
| .. versionadded:: 3.4 |
| Imported targets for components and many new ``*_EXECUTABLE`` variables. |
| |
| .. versionadded:: 3.7 |
| Debug and Release library variants are found separately. |
| |
| .. versionadded:: 3.10 |
| Ice 3.7 support, including new components, programs and the Nuget package. |
| |
| Components |
| ^^^^^^^^^^ |
| |
| Ice consists of several libraries and programs (executables). This find module |
| supports components, which can be specified using the :command:`find_package` |
| command, to select specific Ice libraries for use in a CMake project. |
| Executables provided by Ice installation are always searched automatically, |
| regardless of the specified components. |
| |
| The list of available components depends on the Ice version in use. To |
| successfully find Ice, at least one component must be specified: |
| |
| .. code-block:: cmake |
| |
| find_package(Ice COMPONENTS <components>...) |
| |
| Supported components include: |
| |
| .. hlist:: |
| |
| - ``Freeze`` |
| - ``Glacier2`` |
| - ``Ice`` |
| - ``IceBox`` |
| - ``IceDB`` |
| - ``IceDiscovery`` |
| - ``IceGrid`` |
| - ``IceLocatorDiscovery`` |
| - ``IcePatch`` |
| - ``IceSSL`` |
| - ``IceStorm`` |
| - ``IceUtil`` |
| - ``IceXML`` |
| - ``Slice`` |
| |
| Ice 3.7 and later also include C++11-specific components: |
| |
| .. hlist:: |
| |
| - ``Glacier2++11`` |
| - ``Ice++11`` |
| - ``IceBox++11`` |
| - ``IceDiscovery++11`` |
| - ``IceGrid++11`` |
| - ``IceLocatorDiscovery++11`` |
| - ``IceSSL++11`` |
| - ``IceStorm++11`` |
| |
| Imported Targets |
| ^^^^^^^^^^^^^^^^ |
| |
| This module provides the following :ref:`Imported Targets`: |
| |
| ``Ice::<component>`` |
| .. versionadded:: 3.4 |
| |
| Target encapsulating the usage requirements for the specified Ice component |
| (library), available if that component is found. The ``<component>`` should |
| be written in the same case, as listed above. For example, use |
| ``Ice::Glacier2`` for the Ice Glacier2 library, or ``Ice::Ice++11`` for the |
| Ice++11 library, etc. |
| |
| Result Variables |
| ^^^^^^^^^^^^^^^^ |
| |
| This module defines the following variables: |
| |
| ``Ice_FOUND`` |
| Boolean indicating whether the main programs, libraries and all requested |
| components for using Ice were found. |
| |
| ``Ice_VERSION`` |
| The version of Ice release found. |
| |
| ``Ice_INCLUDE_DIRS`` |
| The include directories containing headers needed to use Ice. |
| |
| ``Ice_LIBRARIES`` |
| Component libraries needed to link against to use Ice. |
| |
| ``Ice_SLICE_DIRS`` |
| The data directories containing interface definitions (``*.ice`` files) for |
| Slice (Specification Language for Ice). |
| |
| Ice component libraries are stored in: |
| |
| ``Ice_<COMPONENT>_FOUND`` |
| Boolean indicating whether the specified Ice component is found. The |
| ``<COMPONENT>`` should be written in uppercase. |
| |
| ``Ice_<COMPONENT>_LIBRARIES`` |
| Libraries provided by the specified Ice component. The ``<COMPONENT>`` should |
| be written in uppercase. |
| |
| Slice programs are stored in: |
| |
| ``Ice_SLICE2CONFLUENCE_EXECUTABLE`` |
| .. versionadded:: 3.14 |
| |
| The path to the ``slice2confluence`` executable. |
| |
| ``Ice_SLICE2CPP_EXECUTABLE`` |
| The path to the ``slice2cpp`` executable. |
| |
| ``Ice_SLICE2CS_EXECUTABLE`` |
| The path to the ``slice2cs`` executable. |
| |
| ``Ice_SLICE2FREEZEJ_EXECUTABLE`` |
| The path to the ``slice2freezej`` executable. |
| |
| ``Ice_SLICE2FREEZE_EXECUTABLE`` |
| The path to the ``slice2freeze`` executable. |
| |
| ``Ice_SLICE2HTML_EXECUTABLE`` |
| The path to the ``slice2html`` executable. |
| |
| ``Ice_SLICE2JAVA_EXECUTABLE`` |
| The path to the ``slice2java`` executable. |
| |
| ``Ice_SLICE2JS_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``slice2js`` executable. |
| |
| ``Ice_SLICE2MATLAB_EXECUTABLE`` |
| .. versionadded:: 3.14 |
| |
| The path to the ``slice2matlab`` executable. |
| |
| ``Ice_SLICE2OBJC_EXECUTABLE`` |
| .. versionadded:: 3.10 |
| |
| The path to the ``slice2objc`` executable. |
| |
| ``Ice_SLICE2PHP_EXECUTABLE`` |
| The path to the ``slice2php`` executable. |
| |
| ``Ice_SLICE2PY_EXECUTABLE`` |
| The path to the ``slice2py`` executable. |
| |
| ``Ice_SLICE2RB_EXECUTABLE`` |
| The path to the ``slice2rb`` executable. |
| |
| Ice programs are stored in: |
| |
| ``Ice_GLACIER2ROUTER_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``glacier2router`` executable. |
| |
| ``Ice_ICEBOX_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icebox`` executable. |
| |
| ``Ice_ICEBOX++11_EXECUTABLE`` |
| .. versionadded:: 3.10 |
| |
| The path to the ``icebox++11`` executable. |
| |
| ``Ice_ICEBOXADMIN_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``iceboxadmin`` executable. |
| |
| ``Ice_ICEBOXD_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``iceboxd`` executable. |
| |
| ``Ice_ICEBOXNET_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``iceboxnet`` executable. |
| |
| ``Ice_ICEBRIDGE_EXECUTABLE`` |
| .. versionadded:: 3.10 |
| |
| The path to the ``icebridge`` executable. |
| |
| ``Ice_ICEGRIDADMIN_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icegridadmin`` executable. |
| |
| ``Ice_ICEGRIDDB_EXECUTABLE`` |
| .. versionadded:: 3.10 |
| |
| The path to the ``icegriddb`` executable. |
| |
| ``Ice_ICEGRIDNODE_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icegridnode`` executable. |
| |
| ``Ice_ICEGRIDNODED_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icegridnoded`` executable. |
| |
| ``Ice_ICEGRIDREGISTRY_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icegridregistry`` executable. |
| |
| ``Ice_ICEGRIDREGISTRYD_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icegridregistryd`` executable. |
| |
| ``Ice_ICEPATCH2CALC_EXECUTABLE`` |
| The path to the ``icepatch2calc`` executable. |
| |
| ``Ice_ICEPATCH2CLIENT_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icepatch2client`` executable. |
| |
| ``Ice_ICEPATCH2SERVER_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icepatch2server`` executable. |
| |
| ``Ice_ICESERVICEINSTALL_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``iceserviceinstall`` executable. |
| |
| ``Ice_ICESTORMADMIN_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icestormadmin`` executable. |
| |
| ``Ice_ICESTORMDB_EXECUTABLE`` |
| .. versionadded:: 3.10 |
| |
| The path to the ``icestormdb`` executable. |
| |
| ``Ice_ICESTORMMIGRATE_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``icestormmigrate`` executable. |
| |
| Ice database programs are stored in the following variables (on Windows, they |
| are included with the Ice installation; on other platforms, they are usually |
| available through standard Berkeley DB packages): |
| |
| ``Ice_DB_ARCHIVE_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_archive`` executable. |
| |
| ``Ice_DB_CHECKPOINT_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_checkpoint`` executable. |
| |
| ``Ice_DB_DEADLOCK_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_deadlock`` executable. |
| |
| ``Ice_DB_DUMP_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_dump`` executable. |
| |
| ``Ice_DB_HOTBACKUP_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_hotbackup`` executable. |
| |
| ``Ice_DB_LOAD_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_load`` executable. |
| |
| ``Ice_DB_LOG_VERIFY_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_log_verify`` executable. |
| |
| ``Ice_DB_PRINTLOG_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_printlog`` executable. |
| |
| ``Ice_DB_RECOVER_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_recover`` executable. |
| |
| ``Ice_DB_STAT_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_stat`` executable. |
| |
| ``Ice_DB_TUNER_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_tuner`` executable. |
| |
| ``Ice_DB_UPGRADE_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_upgrade`` executable. |
| |
| ``Ice_DB_VERIFY_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``db_verify`` executable. |
| |
| ``Ice_DUMPDB_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``dumpdb`` executable. |
| |
| ``Ice_TRANSFORMDB_EXECUTABLE`` |
| .. versionadded:: 3.4 |
| |
| The path to the ``transformdb`` executable. |
| |
| Cache Variables |
| ^^^^^^^^^^^^^^^ |
| |
| The following cache variables may also be set: |
| |
| ``Ice_<PROGRAM>_EXECUTABLE`` |
| The path to the specified ``<PROGRAM>`` executable; The ``<PROGRAM>`` is the |
| uppercase name of the Ice program as listed in above result variables of |
| executables. |
| |
| ``Ice_INCLUDE_DIR`` |
| The directory containing Ice headers. |
| |
| ``Ice_SLICE_DIR`` |
| The data directory containing interface definitions for Slice. |
| |
| ``Ice_<COMPONENT>_LIBRARY`` |
| The path to the library for the specified component. The ``<COMPONENT>`` |
| should be written in uppercase. |
| |
| Hints |
| ^^^^^ |
| |
| This module accepts the following variables: |
| |
| ``Ice_HOME`` |
| Set this CMake variable to the root of the Ice installation in order to |
| search for Ice in a custom location. |
| |
| .. note:: |
| |
| On Windows, Ice 3.7.0 and later provide libraries via the NuGet |
| package manager. Appropriate NuGet packages will be searched for |
| using :variable:`CMAKE_PREFIX_PATH`, or alternatively ``Ice_HOME`` may be |
| set to the location of a specific NuGet package to restrict the search. |
| |
| ``ICE_HOME`` |
| Environment variable (uppercased) may also be set to the root of the Ice |
| installation; The ``Ice_HOME`` CMake variable takes precedence. |
| |
| ``Ice_DEBUG`` |
| Set this variable to boolean true to enable debug output from this module. |
| |
| .. note:: |
| |
| In most cases, none of the above variables need to be set unless multiple Ice |
| versions are installed and a specific one is required. On Windows, the most |
| recent version is typically found using the registry. On Unix-like systems, |
| programs, headers, and libraries are usually found in standard locations, |
| although ``Ice_SLICE_DIRS`` might not be detected automatically (commonly |
| known locations are searched). All other variables default based on the value |
| of ``Ice_HOME``, if set. |
| |
| It's also possible to set ``Ice_HOME`` while selectively overriding specific |
| locations for individual components; This might be required, for example, in |
| newer versions of Visual Studio if the heuristics are not sufficient to |
| identify the correct programs and libraries for the specific Visual Studio |
| version. |
| |
| Examples |
| ^^^^^^^^ |
| |
| Finding the Ice core library and linking it to a project target: |
| |
| .. code-block:: cmake |
| |
| find_package(Ice COMPONENTS Ice) |
| target_link_libraries(project_target PRIVATE Ice::Ice) |
| |
| Finding Ice core library and IceSSL library, and linking them to a project |
| target: |
| |
| .. code-block:: cmake |
| |
| find_package(Ice COMPONENTS Ice IceSSL) |
| target_link_libraries(project_target PRIVATE Ice::Ice Ice::IceSSL) |
| |
| Finding Ice core library as required component and Ice Freeze library as |
| optional: |
| |
| .. code-block:: cmake |
| |
| find_package(Ice COMPONENTS Ice OPTIONAL_COMPONENTS Freeze) |
| #]=======================================================================] |
| |
| # Written by Roger Leigh <rleigh@codelibre.net> |
| |
| set(_Ice_db_programs |
| db_archive |
| db_checkpoint |
| db_deadlock |
| db_dump |
| db_hotbackup |
| db_load |
| db_log_verify |
| db_printlog |
| db_recover |
| db_stat |
| db_tuner |
| db_upgrade |
| db_verify |
| dumpdb |
| transformdb) |
| |
| set(_Ice_programs |
| glacier2router |
| icebox |
| icebox++11 |
| iceboxadmin |
| iceboxd |
| iceboxnet |
| icebridge |
| icegridadmin |
| icegriddb |
| icegridnode |
| icegridnoded |
| icegridregistry |
| icegridregistryd |
| icepatch2calc |
| icepatch2client |
| icepatch2server |
| iceserviceinstall |
| icestormadmin |
| icestormdb |
| icestormmigrate) |
| |
| set(_Ice_slice_programs |
| slice2confluence |
| slice2cpp |
| slice2cs |
| slice2freezej |
| slice2freeze |
| slice2html |
| slice2java |
| slice2js |
| slice2matlab |
| slice2objc |
| slice2php |
| slice2py |
| slice2rb) |
| |
| |
| # 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.7 |
| 3.7.0 |
| 3.6 |
| 3.6.3 |
| 3.6.2 |
| 3.6.1 |
| 3.6.0 |
| 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) |
| |
| foreach(ver ${ice_versions}) |
| string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\$" two_digit_version_match "${ver}") |
| if(two_digit_version_match) |
| string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\$" "\\1\\2" two_digit_version "${ver}") |
| list(APPEND ice_suffix_versions "${two_digit_version}") |
| endif() |
| endforeach() |
| |
| # 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() |
| |
| set(_bin "bin/Win32") |
| set(_lib "lib/Win32") |
| if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
| set(_bin "bin/x64") |
| set(_lib "lib/x64") |
| # 64-bit path suffix |
| set(_x64 "/x64") |
| # 64-bit library directory |
| set(_lib64 "lib64") |
| endif() |
| |
| unset(vcvers) |
| if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") |
| if(MSVC_TOOLSET_VERSION GREATER_EQUAL 141) |
| set(vcvers "141;140") |
| elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 100) |
| set(vcvers "${MSVC_TOOLSET_VERSION}") |
| elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 90) |
| set(vcvers "${MSVC_TOOLSET_VERSION}") |
| set(vcyear "2008") |
| elseif(MSVC_TOOLSET_VERSION GREATER_EQUAL 80) |
| set(vcvers "${MSVC_TOOLSET_VERSION}") |
| set(vcyear "2005") |
| else() # Unknown version |
| set(vcvers Unknown) |
| endif() |
| endif() |
| |
| # For compatibility with ZeroC Windows builds. |
| if(vcvers) |
| list(APPEND ice_binary_suffixes "build/native/${_bin}/Release" "tools") |
| list(APPEND ice_debug_library_suffixes "build/native/${_lib}/Debug") |
| list(APPEND ice_release_library_suffixes "build/native/${_lib}/Release") |
| foreach(vcver IN LISTS vcvers) |
| # Earlier Ice (3.3) builds don't use vcnnn subdirectories, but are harmless to check. |
| list(APPEND ice_binary_suffixes "bin/vc${vcver}${_x64}" "bin/vc${vcver}") |
| list(APPEND ice_debug_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}") |
| list(APPEND ice_release_library_suffixes "lib/vc${vcver}${_x64}" "lib/vc${vcver}") |
| endforeach() |
| endif() |
| # Generic 64-bit and 32-bit directories |
| list(APPEND ice_binary_suffixes "bin${_x64}" "bin") |
| list(APPEND ice_debug_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib") |
| list(APPEND ice_release_library_suffixes "libx32" "${_lib64}" "lib${_x64}" "lib") |
| if(vcvers) |
| list(APPEND ice_include_suffixes "build/native/include") |
| endif() |
| 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(vcvers) |
| foreach(ice_version ${ice_versions}) |
| foreach(vcver IN LISTS vcvers) |
| list(APPEND ice_nuget_dirs "zeroc.ice.v${vcver}.${ice_version}") |
| list(APPEND freeze_nuget_dirs "zeroc.freeze.v${vcver}.${ice_version}") |
| endforeach() |
| endforeach() |
| find_path(Ice_NUGET_DIR |
| NAMES "tools/slice2cpp.exe" |
| PATH_SUFFIXES ${ice_nuget_dirs} |
| DOC "Ice NuGet directory") |
| if(Ice_NUGET_DIR) |
| list(APPEND ice_roots "${Ice_NUGET_DIR}") |
| endif() |
| find_path(Freeze_NUGET_DIR |
| NAMES "tools/slice2freeze.exe" |
| PATH_SUFFIXES ${freeze_nuget_dirs} |
| DOC "Freeze NuGet directory") |
| if(Freeze_NUGET_DIR) |
| list(APPEND ice_roots "${Freeze_NUGET_DIR}") |
| endif() |
| 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() |
| |
| # Find all Ice programs |
| foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_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() |
| |
| if(NOT Ice_FIND_QUIETLY) |
| message(STATUS "Ice version: ${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) |
| |
| find_path(Freeze_INCLUDE_DIR |
| NAMES "Freeze/Freeze.h" |
| HINTS ${ice_roots} |
| PATH_SUFFIXES ${ice_include_suffixes} |
| DOC "Freeze include directory") |
| set(Freeze_INCLUDE_DIR "${Freeze_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/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_cache_release "${component_cache}_RELEASE") |
| set(component_cache_debug "${component_cache}_DEBUG") |
| set(component_found "${component_upcase}_FOUND") |
| set(component_library "${component}") |
| unset(component_library_release_names) |
| unset(component_library_debug_names) |
| if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") |
| string(REGEX MATCH ".+\\+\\+11$" component_library_cpp11 "${component_library}") |
| if(component_library_cpp11) |
| string(REGEX REPLACE "^(.+)(\\+\\+11)$" "\\1" component_library "${component_library}") |
| endif() |
| foreach(suffix_ver ${ice_suffix_versions}) |
| set(_name "${component_library}${suffix_ver}") |
| if(component_library_cpp11) |
| string(APPEND _name "++11") |
| endif() |
| list(APPEND component_library_debug_names "${_name}d") |
| list(APPEND component_library_release_names "${_name}") |
| endforeach() |
| set(_name "${component_library}") |
| if(component_library_cpp11) |
| string(APPEND _name "++11") |
| endif() |
| list(APPEND component_library_debug_names "${_name}d") |
| list(APPEND component_library_release_names "${_name}") |
| else() |
| list(APPEND component_library_debug_names "${component_library}d") |
| list(APPEND component_library_release_names "${component_library}") |
| endif() |
| find_library("${component_cache_release}" ${component_library_release_names} |
| HINTS ${ice_roots} |
| PATH_SUFFIXES ${ice_release_library_suffixes} |
| DOC "Ice ${component} library (release)") |
| find_library("${component_cache_debug}" ${component_library_debug_names} |
| HINTS ${ice_roots} |
| PATH_SUFFIXES ${ice_debug_library_suffixes} |
| DOC "Ice ${component} library (debug)") |
| include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) |
| select_library_configurations(Ice_${component_upcase}) |
| mark_as_advanced("${component_cache_release}" "${component_cache_debug}") |
| 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(NOT Ice_FIND_QUIETLY) |
| 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() |
| endif() |
| |
| if(Ice_DEBUG) |
| message(STATUS "--------FindIce.cmake search debug--------") |
| message(STATUS "ICE binary path search order: ${ice_roots}") |
| message(STATUS "ICE binary suffixes: ${ice_binary_suffixes}") |
| message(STATUS "ICE include path search order: ${ice_roots}") |
| message(STATUS "ICE include suffixes: ${ice_include_suffixes}") |
| message(STATUS "ICE slice path search order: ${ice_roots} ${ice_slice_paths}") |
| message(STATUS "ICE slice suffixes: ${ice_slice_suffixes}") |
| message(STATUS "ICE library path search order: ${ice_roots}") |
| message(STATUS "ICE debug library suffixes: ${ice_debug_library_suffixes}") |
| message(STATUS "ICE release library suffixes: ${ice_release_library_suffixes}") |
| message(STATUS "----------------") |
| endif() |
| endfunction() |
| |
| _Ice_FIND() |
| |
| include(FindPackageHandleStandardArgs) |
| find_package_handle_standard_args(Ice |
| 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}") |
| if (Freeze_INCLUDE_DIR) |
| list(APPEND Ice_INCLUDE_DIRS "${Freeze_INCLUDE_DIR}") |
| endif() |
| 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_cache_release "Ice_${_Ice_component_upcase}_LIBRARY_RELEASE") |
| set(_Ice_component_cache_debug "Ice_${_Ice_component_upcase}_LIBRARY_DEBUG") |
| set(_Ice_component_lib "Ice_${_Ice_component_upcase}_LIBRARIES") |
| set(_Ice_component_found "${_Ice_component_upcase}_FOUND") |
| set(_Ice_imported_target "Ice::${_Ice_component}") |
| if(${_Ice_component_found}) |
| set("${_Ice_component_lib}" "${${_Ice_component_cache}}") |
| if(NOT TARGET ${_Ice_imported_target}) |
| add_library(${_Ice_imported_target} UNKNOWN IMPORTED) |
| set_target_properties(${_Ice_imported_target} PROPERTIES |
| INTERFACE_INCLUDE_DIRECTORIES "${Ice_INCLUDE_DIRS}") |
| if(EXISTS "${${_Ice_component_cache}}") |
| set_target_properties(${_Ice_imported_target} PROPERTIES |
| IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" |
| IMPORTED_LOCATION "${${_Ice_component_cache}}") |
| endif() |
| if(EXISTS "${${_Ice_component_cache_release}}") |
| set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS RELEASE) |
| set_target_properties(${_Ice_imported_target} PROPERTIES |
| IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" |
| IMPORTED_LOCATION_RELEASE "${${_Ice_component_cache_release}}") |
| endif() |
| if(EXISTS "${${_Ice_component_cache_debug}}") |
| set_property(TARGET ${_Ice_imported_target} APPEND PROPERTY |
| IMPORTED_CONFIGURATIONS DEBUG) |
| set_target_properties(${_Ice_imported_target} PROPERTIES |
| IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX" |
| IMPORTED_LOCATION_DEBUG "${${_Ice_component_cache_debug}}") |
| endif() |
| endif() |
| endif() |
| unset(_Ice_component_upcase) |
| unset(_Ice_component_cache) |
| unset(_Ice_component_lib) |
| unset(_Ice_component_found) |
| unset(_Ice_imported_target) |
| 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 "Freeze_INCLUDE_DIR directory: ${Freeze_INCLUDE_DIR}") |
| message(STATUS "Ice_INCLUDE_DIRS directory: ${Ice_INCLUDE_DIRS}") |
| |
| foreach(program ${_Ice_db_programs} ${_Ice_programs} ${_Ice_slice_programs}) |
| string(TOUPPER "${program}" program_upcase) |
| message(STATUS "${program} executable: ${Ice_${program_upcase}_EXECUTABLE}") |
| endforeach() |
| |
| 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() |
| |
| unset(_Ice_db_programs) |
| unset(_Ice_programs) |
| unset(_Ice_slice_programs) |