| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file LICENSE.rst or https://cmake.org/licensing for details. | |
| #[=======================================================================[.rst: | |
| FindASPELL | |
| ---------- | |
| Finds the GNU Aspell spell checker library: | |
| .. code-block:: cmake | |
| find_package(ASPELL [<version>] [COMPONENTS <components>] [...]) | |
| Components | |
| ^^^^^^^^^^ | |
| This module supports optional components which can be specified using the | |
| :command:`find_package` command: | |
| .. code-block:: cmake | |
| find_package(ASPELL [COMPONENTS <components>...]) | |
| Supported components include: | |
| ``ASPELL`` | |
| .. versionadded:: 4.1 | |
| Finds the Aspell library and its include paths. | |
| ``Executable`` | |
| .. versionadded:: 4.1 | |
| Finds the Aspell command-line interactive spell checker executable. | |
| If no components are specified, the module searches for both the ``ASPELL`` | |
| and ``Executable`` components by default. | |
| Imported Targets | |
| ^^^^^^^^^^^^^^^^ | |
| This module provides the following :ref:`Imported Targets` when | |
| :prop_gbl:`CMAKE_ROLE` is ``PROJECT``: | |
| ``ASPELL::ASPELL`` | |
| .. versionadded:: 4.1 | |
| Target encapsulating the Aspell library usage requirements. It is available | |
| only when the ``ASPELL`` component is found. | |
| ``ASPELL::Executable`` | |
| .. versionadded:: 4.1 | |
| Target encapsulating the Aspell command-line spell checker executable. It is | |
| available only when the ``Executable`` component is found. | |
| Result Variables | |
| ^^^^^^^^^^^^^^^^ | |
| This module defines the following variables: | |
| ``ASPELL_FOUND`` | |
| Boolean indicating whether (the requested version of) Aspell and all | |
| requested components were found. | |
| ``ASPELL_VERSION`` | |
| .. versionadded:: 4.1 | |
| Version string of the found Aspell if any. It may be only determined if the | |
| ``Executable`` component is found. If version isn't determined, version value | |
| is not set. | |
| ``ASPELL_INCLUDE_DIRS`` | |
| .. versionadded:: 4.1 | |
| Include directories needed to use Aspell. They are available when the | |
| ``ASPELL`` component is found. | |
| The Aspell library may also provide a backward-compatible interface for Pspell | |
| via the ``pspell.h`` header file. If such an interface is found, it is also | |
| added to the list of include directories. | |
| ``ASPELL_LIBRARIES`` | |
| Libraries needed to link to Aspell. They are available when the ``ASPELL`` | |
| component is found. | |
| .. versionchanged:: 4.1 | |
| This variable is now set as a regular result variable instead of being a | |
| cache variable. | |
| Cache Variables | |
| ^^^^^^^^^^^^^^^ | |
| The following cache variables may also be set: | |
| ``ASPELL_INCLUDE_DIR`` | |
| The directory containing the ``aspell.h`` header file when using the | |
| ``Executable`` component. | |
| ``ASPELL_LIBRARY`` | |
| .. versionadded:: 4.1 | |
| The path to the Aspell library when using the ``ASPELL`` component. | |
| ``ASPELL_EXECUTABLE`` | |
| The path to the ``aspell`` command-line spell checker program when using the | |
| ``Executable`` component. | |
| Examples | |
| ^^^^^^^^ | |
| Finding the Aspell library with CMake 4.1 or later and linking it to a project | |
| target: | |
| .. code-block:: cmake | |
| find_package(ASPELL COMPONENTS ASPELL) | |
| target_link_libraries(project_target PRIVATE ASPELL::ASPELL) | |
| When writing backward-compatible code that supports CMake 4.0 and earlier, a | |
| local imported target can be defined directly in the project: | |
| .. code-block:: cmake | |
| find_package(ASPELL COMPONENTS ASPELL) | |
| if(ASPELL_FOUND AND NOT TARGET ASPELL::ASPELL) | |
| add_library(ASPELL::ASPELL INTERFACE IMPORTED) | |
| set_target_properties( | |
| ASPELL::ASPELL | |
| PROPERTIES | |
| INTERFACE_LINK_LIBRARIES "${ASPELL_LIBRARIES}" | |
| INTERFACE_INCLUDE_DIRECTORIES "${ASPELL_INCLUDE_DIR}" | |
| ) | |
| endif() | |
| target_link_libraries(project_target PRIVATE ASPELL::ASPELL) | |
| Example, how to execute the ``aspell`` command-line spell checker in a project: | |
| .. code-block:: cmake | |
| find_package(ASPELL COMPONENTS Executable) | |
| execute_process(COMMAND ${ASPELL_EXECUTABLE} --help) | |
| #]=======================================================================] | |
| set(_ASPELL_REASON_FAILURE_MESSAGE "") | |
| set(_ASPELL_REQUIRED_VARS "") | |
| # Set default components, when 'COMPONENTS <components>...' are not specified in | |
| # the 'find_package(ASPELL ...)' call. | |
| if(NOT ASPELL_FIND_COMPONENTS) | |
| set(ASPELL_FIND_COMPONENTS "ASPELL" "Executable") | |
| set(ASPELL_FIND_REQUIRED_ASPELL TRUE) | |
| set(ASPELL_FIND_REQUIRED_Executable TRUE) | |
| endif() | |
| if("ASPELL" IN_LIST ASPELL_FIND_COMPONENTS) | |
| find_path( | |
| ASPELL_INCLUDE_DIR | |
| NAMES aspell.h | |
| DOC "The directory containing <aspell.h>." | |
| ) | |
| mark_as_advanced(ASPELL_INCLUDE_DIR) | |
| if(NOT ASPELL_INCLUDE_DIR) | |
| string(APPEND _ASPELL_REASON_FAILURE_MESSAGE "aspell.h could not be found. ") | |
| endif() | |
| # Find backward-compatibility interface for Pspell. | |
| find_path( | |
| ASPELL_PSPELL_INCLUDE_DIR | |
| NAMES pspell.h | |
| PATH_SUFFIXES pspell | |
| DOC "Directory containing <pspell.h> BC interface header" | |
| ) | |
| mark_as_advanced(ASPELL_PSPELL_INCLUDE_DIR) | |
| # For backward compatibility in projects supporting CMake 4.0 or earlier. | |
| # Previously the ASPELL_LIBRARIES was a cache variable storing the | |
| # find_library result. | |
| if(DEFINED ASPELL_LIBRARIES AND NOT DEFINED ASPELL_LIBRARY) | |
| set(ASPELL_LIBRARY ${ASPELL_LIBRARIES}) | |
| endif() | |
| find_library( | |
| ASPELL_LIBRARY | |
| NAMES aspell aspell-15 libaspell-15 libaspell | |
| DOC "The path to the Aspell library." | |
| ) | |
| mark_as_advanced(ASPELL_LIBRARY) | |
| if(NOT ASPELL_LIBRARY) | |
| string(APPEND _ASPELL_REASON_FAILURE_MESSAGE "Aspell library not found. ") | |
| endif() | |
| if(ASPELL_INCLUDE_DIR AND ASPELL_LIBRARY) | |
| set(ASPELL_ASPELL_FOUND TRUE) | |
| else() | |
| set(ASPELL_ASPELL_FOUND FALSE) | |
| endif() | |
| if(ASPELL_FIND_REQUIRED_ASPELL) | |
| list(APPEND _ASPELL_REQUIRED_VARS ASPELL_LIBRARY ASPELL_INCLUDE_DIR) | |
| endif() | |
| endif() | |
| if("Executable" IN_LIST ASPELL_FIND_COMPONENTS) | |
| find_program( | |
| ASPELL_EXECUTABLE | |
| NAMES aspell | |
| DOC "The path to the aspell command-line utility program." | |
| ) | |
| mark_as_advanced(ASPELL_EXECUTABLE) | |
| if(NOT ASPELL_EXECUTABLE) | |
| string( | |
| APPEND | |
| _ASPELL_REASON_FAILURE_MESSAGE | |
| "Aspell command-line executable not found. " | |
| ) | |
| set(ASPELL_Executable_FOUND FALSE) | |
| else() | |
| set(ASPELL_Executable_FOUND TRUE) | |
| block(PROPAGATE ASPELL_VERSION) | |
| execute_process( | |
| COMMAND ${ASPELL_EXECUTABLE} --version | |
| OUTPUT_VARIABLE output | |
| RESULT_VARIABLE result | |
| ERROR_QUIET | |
| OUTPUT_STRIP_TRAILING_WHITESPACE | |
| ) | |
| if(result EQUAL 0 AND output MATCHES "([0-9.]+)[)]?$") | |
| set(ASPELL_VERSION ${CMAKE_MATCH_1}) | |
| endif() | |
| endblock() | |
| endif() | |
| if(ASPELL_FIND_REQUIRED_Executable) | |
| list(APPEND _ASPELL_REQUIRED_VARS ASPELL_EXECUTABLE) | |
| endif() | |
| endif() | |
| include(FindPackageHandleStandardArgs) | |
| find_package_handle_standard_args( | |
| ASPELL | |
| REQUIRED_VARS ${_ASPELL_REQUIRED_VARS} | |
| HANDLE_COMPONENTS | |
| VERSION_VAR ASPELL_VERSION | |
| REASON_FAILURE_MESSAGE "${_ASPELL_REASON_FAILURE_MESSAGE}" | |
| ) | |
| unset(_ASPELL_REASON_FAILURE_MESSAGE) | |
| unset(_ASPELL_REQUIRED_VARS) | |
| if(NOT ASPELL_FOUND) | |
| return() | |
| endif() | |
| get_property(_ASPELL_ROLE GLOBAL PROPERTY CMAKE_ROLE) | |
| if("ASPELL" IN_LIST ASPELL_FIND_COMPONENTS AND ASPELL_ASPELL_FOUND) | |
| set(ASPELL_INCLUDE_DIRS ${ASPELL_INCLUDE_DIR}) | |
| if(ASPELL_PSPELL_INCLUDE_DIR) | |
| list(APPEND ASPELL_INCLUDE_DIRS ${ASPELL_PSPELL_INCLUDE_DIR}) | |
| list(REMOVE_DUPLICATES ASPELL_INCLUDE_DIRS) | |
| endif() | |
| set(ASPELL_LIBRARIES ${ASPELL_LIBRARY}) | |
| if(_ASPELL_ROLE STREQUAL "PROJECT" AND NOT TARGET ASPELL::ASPELL) | |
| if(IS_ABSOLUTE "${ASPELL_LIBRARY}") | |
| add_library(ASPELL::ASPELL UNKNOWN IMPORTED) | |
| set_target_properties( | |
| ASPELL::ASPELL | |
| PROPERTIES | |
| IMPORTED_LOCATION "${ASPELL_LIBRARY}" | |
| ) | |
| else() | |
| add_library(ASPELL::ASPELL INTERFACE IMPORTED) | |
| set_target_properties( | |
| ASPELL::ASPELL | |
| PROPERTIES | |
| IMPORTED_LIBNAME "${ASPELL_LIBRARY}" | |
| ) | |
| endif() | |
| set_target_properties( | |
| ASPELL::ASPELL | |
| PROPERTIES | |
| INTERFACE_INCLUDE_DIRECTORIES "${ASPELL_INCLUDE_DIRS}" | |
| ) | |
| endif() | |
| endif() | |
| if( | |
| _ASPELL_ROLE STREQUAL "PROJECT" | |
| AND "Executable" IN_LIST ASPELL_FIND_COMPONENTS | |
| AND ASPELL_Executable_FOUND | |
| AND NOT TARGET ASPELL::Executable | |
| ) | |
| add_executable(ASPELL::Executable IMPORTED) | |
| set_target_properties( | |
| ASPELL::Executable | |
| PROPERTIES | |
| IMPORTED_LOCATION "${ASPELL_EXECUTABLE}" | |
| ) | |
| endif() | |
| unset(_ASPELL_ROLE) |