blob: af0e6b6d7094c116c7f5db10c17aa52f0c3be26d [file] [log] [blame]
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindCABLE
---------
.. versionchanged:: 4.1
This module is available only if policy :policy:`CMP0191` is not set to ``NEW``.
Finds the CABLE installation and determines its include paths and libraries.
Package called CABLE (CABLE Automates Bindings for Language Extension) was
initially developed by Kitware to generate bindings to C++ classes for use in
interpreted languages, such as Tcl. It worked in conjunction with packages like
GCC-XML. The CABLE package has since been superseded by the ITK CableSwig
package.
.. note::
When building wrappers for interpreted languages, these packages are no longer
necessary. The CastXML package now serves as the recommended tool for this
purpose and can be found directly using the :command:`find_program` command.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may be set when using this module:
``CABLE``
Path to the ``cable`` executable.
``CABLE_INCLUDE_DIR``
Path to the include directory.
``CABLE_TCL_LIBRARY``
Path to the Tcl wrapper library.
Examples
^^^^^^^^
Finding CABLE to build Tcl wrapper, by linking library and adding the include
directories:
.. code-block:: cmake
find_package(CABLE)
target_link_libraries(tcl_wrapper_target PRIVATE ${CABLE_TCL_LIBRARY})
target_include_directories(tcl_wrapper_target PRIVATE ${CABLE_INCLUDE_DIR})
#]=======================================================================]
cmake_policy(GET CMP0191 _FindCABLE_CMP0191)
if(_FindCABLE_CMP0191 STREQUAL "NEW")
message(FATAL_ERROR "The FindCABLE module has been removed by policy CMP0191.")
endif()
if(_FindCABLE_testing)
set(_FindCABLE_included TRUE)
return()
endif()
if(NOT CABLE)
find_path(CABLE_BUILD_DIR cableVersion.h)
endif()
if(CABLE_BUILD_DIR)
load_cache(${CABLE_BUILD_DIR}
EXCLUDE
BUILD_SHARED_LIBS
LIBRARY_OUTPUT_PATH
EXECUTABLE_OUTPUT_PATH
MAKECOMMAND
CMAKE_INSTALL_PREFIX
INCLUDE_INTERNALS
CABLE_LIBRARY_PATH
CABLE_EXECUTABLE_PATH)
if(CABLE_LIBRARY_PATH)
find_library(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS
${CABLE_LIBRARY_PATH}
${CABLE_LIBRARY_PATH}/*)
else()
find_library(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS
${CABLE_BINARY_DIR}/CableTclFacility
${CABLE_BINARY_DIR}/CableTclFacility/*)
endif()
if(CABLE_EXECUTABLE_PATH)
find_program(CABLE NAMES cable PATHS
${CABLE_EXECUTABLE_PATH}
${CABLE_EXECUTABLE_PATH}/*)
else()
find_program(CABLE NAMES cable PATHS
${CABLE_BINARY_DIR}/Executables
${CABLE_BINARY_DIR}/Executables/*)
endif()
find_path(CABLE_INCLUDE_DIR CableTclFacility/ctCalls.h
${CABLE_SOURCE_DIR})
else()
# Find the cable executable in the path.
find_program(CABLE NAMES cable)
# Get the path where the executable sits, but without the executable
# name on it.
get_filename_component(CABLE_ROOT_BIN ${CABLE} PATH)
# Find the cable include directory in a path relative to the cable
# executable.
find_path(CABLE_INCLUDE_DIR CableTclFacility/ctCalls.h
${CABLE_ROOT_BIN}/../include/Cable)
# Find the WrapTclFacility library in a path relative to the cable
# executable.
find_library(CABLE_TCL_LIBRARY NAMES CableTclFacility PATHS
${CABLE_ROOT_BIN}/../lib/Cable)
endif()