On Thu, Aug 07, 2014 at 06:49:28PM +0100, Roger Leigh wrote:
> Hi,
> 
> I've written a module for finding the details of a ZeroC ICE installation,
> attached, which I thought might be of interest to a wider audience and be
> suitable for direct inclusion into cmake.  I've attached the patch for this.
> The docs should be correct, but I'm not yet totally familiar with the cmake
> docs build, so it might possibly need some minor tweaking.

I have added a few portability and documentation fixes.  Updated copy
attached.


-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux    http://people.debian.org/~rleigh/
 `. `'   schroot and sbuild  http://alioth.debian.org/projects/buildd-tools
   `-    GPG Public Key      F33D 281D 470A B443 6756 147C 07B3 C8BC 4083 E800
>From b0fefe8ad8206a6f6524aad0a9f2434faf6c80fb Mon Sep 17 00:00:00 2001
From: Roger Leigh <[email protected]>
Date: Thu, 7 Aug 2014 18:37:36 +0100
Subject: [PATCH] FindIce: New module to find ZeroC Ice

- autodetects Ice on all major platforms
- allows building with all supported Visual Studio versions on Windows
- autodetects the slice path on most platforms
- separately detects the Ice programs, headers, slice files and
  libraries so that any Ice configuration or installation errors can
  be accurately reported, making diagnosis of Ice problems simpler
---
 Help/manual/cmake-modules.7.rst |   1 +
 Help/module/FindIce.rst         |   1 +
 Modules/FindIce.cmake           | 534 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 536 insertions(+)
 create mode 100644 Help/module/FindIce.rst
 create mode 100644 Modules/FindIce.cmake

diff --git a/Help/manual/cmake-modules.7.rst b/Help/manual/cmake-modules.7.rst
index 91fffe9..737057c 100644
--- a/Help/manual/cmake-modules.7.rst
+++ b/Help/manual/cmake-modules.7.rst
@@ -114,6 +114,7 @@ All Modules
    /module/FindHg
    /module/FindHSPELL
    /module/FindHTMLHelp
+   /module/FindIce
    /module/FindIcotool
    /module/FindImageMagick
    /module/FindITK
diff --git a/Help/module/FindIce.rst b/Help/module/FindIce.rst
new file mode 100644
index 0000000..3af9405
--- /dev/null
+++ b/Help/module/FindIce.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindIce.cmake
diff --git a/Modules/FindIce.cmake b/Modules/FindIce.cmake
new file mode 100644
index 0000000..b41ab71
--- /dev/null
+++ b/Modules/FindIce.cmake
@@ -0,0 +1,534 @@
+#.rst:
+# FindIce
+# -------
+#
+# Find the ZeroC Internet Communication Engine (ICE) programs,
+# libraries and datafiles.
+#
+# Use this module by invoking find_package with the form::
+#
+#   find_package(Ice
+#     [version] [EXACT]      # Minimum or EXACT version e.g. 3.5.1
+#     [REQUIRED])            # Fail with error if Ice is not found
+#
+# 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 programs are reported in::
+#
+#   SLICE2CPP_EXECUTABLE - path to slice2cpp executable
+#   SLICE2CS_EXECUTABLE - path to slice2cs executable
+#   SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable
+#   SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable
+#   SLICE2HTML_EXECUTABLE - path to slice2html executable
+#   SLICE2JAVA_EXECUTABLE - path to slice2java executable
+#   SLICE2PHP_EXECUTABLE - path to slice2php executable
+#   SLICE2PY_EXECUTABLE - path to slice2py executable
+#   SLICE2RB_EXECUTABLE - path to slice2rb executable
+#
+# Ice libraries are reported in::
+#
+#   FREEZE_LIBRARY - Freeze library
+#   GLACIER2_LIBRARY - Glacier2 library
+#   ICE_LIBRARY - Ice library
+#   ICEBOX_LIBRARY - IceBox library
+#   ICEDB_LIBRARY - IceDB library
+#   ICEGRID_LIBRARY - IceGrid library
+#   ICEPATCH2_LIBRARY - IcePatch library
+#   ICESSL_LIBRARY - IceSSL library
+#   ICESTORM_LIBRARY - IceStorm library
+#   ICEUTIL_LIBRARY - IceUtil library
+#   ICEXML_LIBRARY - IceXML library
+#   SLICE_LIBRARY - Slice library
+#
+# Ice directories for C++ programs, includes and slice includes and libraries
+# are reported in::
+#
+#   ICE_BINARY_DIR - the directory containing the Ice programs
+#   ICE_INCLUDE_DIR - the directory containing the Ice headers
+#   ICE_SLICE_DIR - the directory containing the Ice slice interface definitions
+#   ICE_LIBRARY_DIR - the directory containing the Ice libraries
+#
+# This module reads hints about search results from variables::
+#
+#   ICE_HOME - the root of the Ice installation
+#   ICE_BINARY_DIR - the directory containing the Ice programs
+#   ICE_INCLUDE_DIR - the directory containing the Ice headers
+#   ICE_SLICE_DIR - the directory containing the Ice slice interface definitions
+#   ICE_LIBRARY_DIR - the directory containing the Ice libraries
+#
+# The environment variable :envvar:`ICE_HOME` may also be used, unless
+# overridden by setting the ICE_HOME variable.
+#
+# .. note::
+#
+#   These variables are not all required to be set, and in most cases
+#   will not require setting at all unless multiple Ice versions are
+#   available and a specific version is required.  On Windows,
+#   ICE_HOME is usually sufficient since the package is contained in a
+#   single directory.  On Unix, the programs, headers and libraries
+#   will usually be in standard locations, but ICE_SLICE_DIR might not
+#   be automatically detected.  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.
+#
+# 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.)
+
+set(ICE_HOME NOTFOUND
+    CACHE PATH "Location of the Ice installation")
+mark_as_advanced(FORCE ICE_HOME)
+
+set(ICE_BINARY_DIR NOTFOUND
+    CACHE PATH "Location of the Ice programs")
+mark_as_advanced(FORCE ICE_BINARY_DIR)
+
+set(ICE_INCLUDE_DIR NOTFOUND
+    CACHE PATH "Location of the Ice headers")
+mark_as_advanced(FORCE ICE_INCLUDE_DIR)
+
+set(ICE_SLICE_DIR NOTFOUND
+    CACHE PATH "Location of the Ice slice interface definitions")
+mark_as_advanced(FORCE ICE_SLICE_DIR)
+
+set(ICE_LIBRARY_DIR NOTFOUND
+    CACHE PATH "Location of the Ice libraries")
+mark_as_advanced(FORCE ICE_LIBRARY_DIR)
+
+function(_Ice_FIND)
+  # Set up search paths, taking compiler into account.  Search ICE_HOME,
+  # with ICE_HOME in the environment as a fallback
+  if(ICE_HOME)
+    list(APPEND ice_roots "${ICE_HOME}")
+  endif(ICE_HOME)
+  if(EXISTS "$ENV{ICE_HOME}")
+    file(TO_CMAKE_PATH "$ENV{ICE_HOME}" NATIVE_PATH)
+    list(APPEND ice_roots "${NATIVE_PATH}")
+  endif(EXISTS "$ENV{ICE_HOME}")
+
+  foreach(root ${ice_roots})
+    # For compatibility with ZeroC Windows builds.
+    if(MSVC)
+      # Versions prior to VS 10.0 don't use vcnnn subdirectories.
+      # VS 10.0
+      if((MSVC_VERSION EQUAL 1600) OR (MSVC_VERSION GREATER 1600 AND MSVC_VERSION LESS 1700))
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc100/x64")
+          list(APPEND ice_library_paths "${root}/lib/vc100/x64")
+        else(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc100")
+          list(APPEND ice_library_paths "${root}/lib/vc100")
+        endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      endif((MSVC_VERSION EQUAL 1600) OR (MSVC_VERSION GREATER 1600 AND MSVC_VERSION LESS 1700))
+      # VS 11.0
+      if((MSVC_VERSION EQUAL 1700) OR (MSVC_VERSION GREATER 1700 AND MSVC_VERSION LESS 1800))
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc110/x64")
+          list(APPEND ice_library_paths "${root}/lib/vc110/x64")
+        else(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc110")
+          list(APPEND ice_library_paths "${root}/lib/vc110")
+        endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      endif((MSVC_VERSION EQUAL 1700) OR (MSVC_VERSION GREATER 1700 AND MSVC_VERSION LESS 1800))
+      # VS 12.0
+      if((MSVC_VERSION EQUAL 1800) OR (MSVC_VERSION GREATER 1800 AND MSVC_VERSION LESS 1900))
+        if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc120/x64")
+          list(APPEND ice_library_paths "${root}/lib/vc120/x64")
+        else(CMAKE_SIZEOF_VOID_P EQUAL 8)
+          list(APPEND ice_binary_paths "${root}/bin/vc120")
+          list(APPEND ice_library_paths "${root}/lib/vc120")
+        endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      endif((MSVC_VERSION EQUAL 1800) OR (MSVC_VERSION GREATER 1800 AND MSVC_VERSION LESS 1900))
+    endif(MSVC)
+    # Generic 64-bit directories
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      list(APPEND ice_binary_paths "${root}/bin/x64")
+      list(APPEND ice_library_paths "${root}/lib64")
+      list(APPEND ice_library_paths "${root}/lib/x64")
+    endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
+    # Generic 64-bit or 32-bit directories
+    list(APPEND ice_binary_paths "${root}/bin")
+    list(APPEND ice_include_paths "${root}/include")
+    # Common directories
+    list(APPEND ice_library_paths "${root}/lib")
+    list(APPEND ice_slice_paths "${root}/slice")
+  endforeach(root ${ice_roots})
+
+  # On Windows, look in standard install locations.  Different versions
+  # of Ice install in different places and support different compiler
+  # versions.  Look only in the locations compatible with the compiler
+  # in use.  For newer versions which this hardcoded logic can't
+  # support, ICE_HOME and/or the other configuration options must be
+  # used, in which case the above logic will be used instead.
+  if(MSVC_VERSION)
+    set(_x86 "(x86)")
+    if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      set (program_files_path "$ENV{ProgramFiles${_x86}}/ZeroC")
+    else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      set (program_files_path "$ENV{ProgramFiles}/ZeroC")
+    endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+    file(TO_CMAKE_PATH "${program_files_path}" program_files_path)
+
+    # VS 8.0
+    if((MSVC_VERSION EQUAL 1400) OR (MSVC_VERSION GREATER 1400 AND MSVC_VERSION LESS 1500))
+      # 3.3.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.1/bin/x64")
+        list(APPEND ice_library_paths "C:/Ice-3.3.1/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.1/bin")
+        list(APPEND ice_library_paths "C:/Ice-3.3.1/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.3.1/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.3.1/slice")
+      # 3.3.0
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.0/bin/x64")
+        list(APPEND ice_library_paths "C:/Ice-3.3.0/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.0/bin")
+        list(APPEND ice_library_paths "C:/Ice-3.3.0/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.3.0/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.3.0/slice")
+    endif((MSVC_VERSION EQUAL 1400) OR (MSVC_VERSION GREATER 1400 AND MSVC_VERSION LESS 1500))
+
+    # VS 9.0
+    if((MSVC_VERSION EQUAL 1500) OR (MSVC_VERSION GREATER 1500 AND MSVC_VERSION LESS 1600))
+      # 3.4.2
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.2/bin/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.2/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.2/bin")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.2/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.4.2/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.4.2/slice")
+      # 3.4.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.1/bin/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.1/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.1/bin")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.1/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.4.1/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.4.1/slice")
+      # 3.4.0
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.0/bin/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.0/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.0/bin")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.0/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.4.0/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.4.0/slice")
+      # 3.3.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.1-VC90/bin/x64")
+        list(APPEND ice_library_paths "C:/Ice-3.3.1-VC90/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.1-VC90/bin")
+        list(APPEND ice_library_paths "C:/Ice-3.3.1-VC90/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.3.1-VC90/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.3.1-VC90/slice")
+      # 3.3.0
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.0-VC90/bin/x64")
+        list(APPEND ice_library_paths "C:/Ice-3.3.0-VC90/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "C:/Ice-3.3.0-VC90/bin")
+        list(APPEND ice_library_paths "C:/Ice-3.3.0-VC90/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "C:/Ice-3.3.0-VC90/include")
+      list(APPEND ice_slice_paths "C:/Ice-3.3.0-VC90/slice")
+    endif((MSVC_VERSION EQUAL 1500) OR (MSVC_VERSION GREATER 1500 AND MSVC_VERSION LESS 1600))
+
+    # VS 10.0
+    if((MSVC_VERSION EQUAL 1600) OR (MSVC_VERSION GREATER 1600 AND MSVC_VERSION LESS 1700))
+      # 3.5.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.5.1/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.5.1/slice")
+      # 3.5.0
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.0/bin/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.0/lib/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.0/bin")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.0/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.5.0/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.5.0/slice")
+      # 3.4.2
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.2/bin/vc100/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.2/lib/vc100/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.2/bin/vc100")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.2/lib/vc100")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.4.2/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.4.2/slice")
+      # 3.4.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.1/bin/vc100/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.1/lib/vc100/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.4.1/bin/vc100")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.4.1/lib/vc100")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.4.1/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.4.1/slice")
+    endif((MSVC_VERSION EQUAL 1600) OR (MSVC_VERSION GREATER 1600 AND MSVC_VERSION LESS 1700))
+
+    # VS 11.0
+    if((MSVC_VERSION EQUAL 1700) OR (MSVC_VERSION GREATER 1700 AND MSVC_VERSION LESS 1800))
+      # 3.5.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin/vc110/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib/vc110/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin/vc110")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib/vc110")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.5.1/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.5.1/slice")
+      # 3.5.0
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.0/bin/vc110/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.0/lib/vc110/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.0/bin/vc110")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.0/lib/vc110")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.5.0/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.5.0/slice")
+    endif((MSVC_VERSION EQUAL 1700) OR (MSVC_VERSION GREATER 1700 AND MSVC_VERSION LESS 1800))
+
+    # VS 12.0
+    if((MSVC_VERSION EQUAL 1800) OR (MSVC_VERSION GREATER 1800 AND MSVC_VERSION LESS 1900))
+      # 3.5.1
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin/vc120/x64")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib/vc120/x64")
+      else (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${program_files_path}/Ice-3.5.1/bin/vc120")
+        list(APPEND ice_library_paths "${program_files_path}/Ice-3.5.1/lib/vc120")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_include_paths "${program_files_path}/Ice-3.5.1/include")
+      list(APPEND ice_slice_paths "${program_files_path}/Ice-3.5.1/slice")
+    endif((MSVC_VERSION EQUAL 1800) OR (MSVC_VERSION GREATER 1800 AND MSVC_VERSION LESS 1900))
+  else(MSVC_VERSION)
+    set(ice_locations
+        /opt/Ice
+        /opt/Ice-3
+        /opt/Ice-3.5
+        /opt/Ice-3.5.1
+        /opt/Ice-3.5.0
+        /opt/Ice-3.4
+        /opt/Ice-3.4.2
+        /opt/Ice-3.4.1
+        /opt/Ice-3.4.0
+        /opt/Ice-3.3
+        /opt/Ice-3.3.1
+        /opt/Ice-3.3.0)
+
+    foreach(path ${ice_locations})
+      # Prefer 64-bit variants if present and using a 64-bit compiler
+      if (CMAKE_SIZEOF_VOID_P MATCHES 8)
+        list(APPEND ice_binary_paths "${path}/bin/x64")
+        list(APPEND ice_binary_paths "${path}/lib/x64")
+        list(APPEND ice_binary_paths "${path}/lib64")
+      list(APPEND ice_binary_paths "${path}/bin")
+      list(APPEND ice_binary_paths "${path}/lib")
+      endif (CMAKE_SIZEOF_VOID_P MATCHES 8)
+      list(APPEND ice_binary_paths "${path}/include")
+      list(APPEND ice_binary_paths "${path}/slice")
+    endforeach(path)
+  endif(MSVC_VERSION)
+
+  if(ICE_DEBUG)
+    message(STATUS "--------FindIce.cmake search debug--------")
+    message(STATUS "ICE binary path search order: ${ice_binary_paths}")
+    message(STATUS "ICE include path search order: ${ice_include_paths}")
+    message(STATUS "ICE slice path search order: ${ice_slice_paths}")
+    message(STATUS "ICE library path search order: ${ice_library_paths}")
+    message(STATUS "----------------")
+  endif(ICE_DEBUG)
+
+  set(ice_programs
+      slice2cpp
+      slice2cs
+      slice2freezej
+      slice2freeze
+      slice2html
+      slice2java
+      slice2php
+      slice2py
+      slice2rb)
+
+  set(ice_libraries
+      Freeze
+      Glacier2
+      Ice
+      IceBox
+      IceDB
+      IceGrid
+      IcePatch2
+      IceSSL
+      IceStorm
+      IceUtil
+      IceXML
+      Slice)
+
+  # Find all Ice programs
+  foreach(program ${ice_programs})
+    string(TOUPPER "${program}" program_upcase)
+    set(program_var "${program_upcase}_EXECUTABLE")
+    find_program("${program_var}" "${program}"
+      PATHS "${ICE_BINARY_DIR}"
+            ${ice_binary_paths}
+      DOC "Ice slice translator")
+    mark_as_advanced(program_var)
+    set("${program_var}" "${${program_var}}" PARENT_SCOPE)
+    if(NOT FOUND_ICE_BINARY_DIR)
+      get_filename_component(FOUND_ICE_BINARY_DIR "${${program_var}}" DIRECTORY)
+    endif(NOT FOUND_ICE_BINARY_DIR)
+  endforeach(program ${ice_programs})
+  set(ICE_BINARY_DIR "${FOUND_ICE_BINARY_DIR}" PARENT_SCOPE)
+
+  # Get version.
+  if(SLICE2CPP_EXECUTABLE)
+    # Execute in C locale for safety
+    set(_Ice_SAVED_LC_ALL "$ENV{LC_ALL}")
+    set(ENV{LC_ALL} C)
+
+    execute_process(COMMAND ${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(SLICE2CPP_EXECUTABLE)
+
+  # Find include directory
+  find_path(ICE_INCLUDE_DIR
+            NAMES "Ice/Ice.h"
+            PATHS  "${ICE_INCLUDE_DIR}"
+                   ${ice_include_paths})
+  set(ICE_INCLUDE_DIR "${ICE_INCLUDE_DIR}" PARENT_SCOPE)
+
+  # Find slice directory
+  find_path(ICE_SLICE_DIR
+            NAMES "Ice/Connection.ice"
+            PATHS "${ICE_SLICE_DIR}"
+                  ${ice_slice_paths}
+                  "/usr/local/share/Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice"
+                  "/usr/local/share/Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice"
+                  "/usr/local/share/Ice/slice"
+                  "/usr/share/Ice-${Ice_VERSION_SLICE2CPP_FULL}/slice"
+                  "/usr/share/Ice-${Ice_VERSION_SLICE2CPP_SHORT}/slice"
+                  "/usr/share/Ice/slice"
+            NO_DEFAULT_PATH)
+  set(ICE_SLICE_DIR "${ICE_SLICE_DIR}" PARENT_SCOPE)
+
+  # Find all Ice libraries
+  foreach(library ${ice_libraries})
+    string(TOUPPER "${library}" library_upcase)
+    set(library_var "${library_upcase}_LIBRARY")
+    find_library("${library_var}" "${library}"
+      PATHS
+        "${ICE_LIBRARY_DIR}"
+        ${ice_library_paths}
+      HINT
+        "${ICE_HOME}/lib"
+      DOC "Ice slice translator")
+    mark_as_advanced(library_var)
+    set("${library_var}" "${${library_var}}" PARENT_SCOPE)
+    if(NOT FOUND_ICE_LIBRARY_DIR)
+      get_filename_component(FOUND_ICE_LIBRARY_DIR "${${library_var}}" DIRECTORY)
+    endif(NOT FOUND_ICE_LIBRARY_DIR)
+  endforeach(library ${ice_libraries})
+  set(ICE_LIBRARY_DIR "${FOUND_ICE_LIBRARY_DIR}" PARENT_SCOPE)
+endfunction(_Ice_FIND)
+
+_Ice_FIND()
+
+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_BINARY_DIR directory: ${ICE_BINARY_DIR}")
+  message(STATUS "ICE_INCLUDE_DIR directory: ${ICE_INCLUDE_DIR}")
+  message(STATUS "ICE_SLICE_DIR directory: ${ICE_SLICE_DIR}")
+  message(STATUS "ICE_LIBRARY_DIR directory: ${ICE_LIBRARY_DIR}")
+  message(STATUS "slice2cpp executable: ${SLICE2CPP_EXECUTABLE}")
+  message(STATUS "slice2cs executable: ${SLICE2CS_EXECUTABLE}")
+  message(STATUS "slice2freezej executable: ${SLICE2FREEZEJ_EXECUTABLE}")
+  message(STATUS "slice2freeze executable: ${SLICE2FREEZE_EXECUTABLE}")
+  message(STATUS "slice2html executable: ${SLICE2HTML_EXECUTABLE}")
+  message(STATUS "slice2java executable: ${SLICE2JAVA_EXECUTABLE}")
+  message(STATUS "slice2php executable: ${SLICE2PHP_EXECUTABLE}")
+  message(STATUS "slice2py executable: ${SLICE2PY_EXECUTABLE}")
+  message(STATUS "slice2rb executable: ${SLICE2RB_EXECUTABLE}")
+  message(STATUS "Freeze library: ${FREEZE_LIBRARY}")
+  message(STATUS "Glacier2 library: ${GLACIER2_LIBRARY}")
+  message(STATUS "Ice library: ${ICE_LIBRARY}")
+  message(STATUS "IceBox library: ${ICEBOX_LIBRARY}")
+  message(STATUS "IceDB library: ${ICEDB_LIBRARY}")
+  message(STATUS "IceGrid library: ${ICEGRID_LIBRARY}")
+  message(STATUS "IcePatch2 library: ${ICEPATCH2_LIBRARY}")
+  message(STATUS "IceSSL library: ${ICESSL_LIBRARY}")
+  message(STATUS "IceStorm library: ${ICESTORM_LIBRARY}")
+  message(STATUS "IceUtil library: ${ICEUTIL_LIBRARY}")
+  message(STATUS "IceXML library: ${ICEXML_LIBRARY}")
+  message(STATUS "Slice library: ${SLICE_LIBRARY}")
+  message(STATUS "----------------")
+endif(ICE_DEBUG)
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ice
+                                  REQUIRED_VARS SLICE2CPP_EXECUTABLE
+                                                ICE_INCLUDE_DIR
+                                                ICE_SLICE_DIR
+                                                ICE_LIBRARY
+                                  VERSION_VAR ICE_VERSION)
+
+unset(ICE_VERSION)
-- 
1.9.1

-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

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

Reply via email to