# Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file LICENSE.rst or https://cmake.org/licensing for details. #[=======================================================================[.rst: FindOpenSP ---------- .. versionadded:: 3.25 Finds the OpenSP library. OpenSP is an open-source implementation of the SGML (Standard Generalized Markup Language) parser. Imported Targets ^^^^^^^^^^^^^^^^ This module provides the following :ref:`Imported Targets`: ``OpenSP::OpenSP`` Target encapsulating the OpenSP library usage requirements, available only if the OpenSP is found. Result Variables ^^^^^^^^^^^^^^^^ This module defines the following variables: ``OpenSP_FOUND`` Boolean indicating whether the (requested version of) OpenSP is available. ``OpenSP_VERSION`` The version of found OpenSP. ``OpenSP_VERSION_MAJOR`` The major version of OpenSP. ``OpenSP_VERSION_MINOR`` The minor version of OpenSP. ``OpenSP_VERSION_PATCH`` The patch version of OpenSP. ``OpenSP_INCLUDE_DIRS`` The include directories containing headers needed to use the OpenSP library. ``OpenSP_LIBRARIES`` Libraries required to link against to use OpenSP. These can be passed to the :command:`target_link_libraries` command when not using the ``OpenSP::OpenSP`` imported target. Cache Variables ^^^^^^^^^^^^^^^ The following cache variables may also be set: ``OpenSP_INCLUDE_DIR`` The OpenSP include directory. ``OpenSP_LIBRARY`` The absolute path of the ``osp`` library. ``OpenSP_MULTI_BYTE`` True if ``SP_MULTI_BYTE`` was found to be defined in OpenSP's ``config.h`` header file, which indicates that the OpenSP library was compiled with support for multi-byte characters. The consuming target needs to define the ``SP_MULTI_BYTE`` preprocessor macro to match this value in order to avoid issues with character decoding. Examples ^^^^^^^^ Finding the OpenSP library and linking it to a project target: .. code-block:: cmake find_package(OpenSP) target_link_libraries(project_target PRIVATE OpenSP::OpenSP) #]=======================================================================] cmake_policy(PUSH) cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_ find_package(PkgConfig QUIET) if (PkgConfig_FOUND) pkg_check_modules(PC_OpenSP QUIET opensp) endif () if (NOT OpenSP_INCLUDE_DIR) find_path(OpenSP_INCLUDE_DIR NAMES ParserEventGeneratorKit.h HINTS ${PC_OpenSP_INCLUDEDIRS} ${PC_OpenSP_INCLUDE_DIRS} PATH_SUFFIXES OpenSP opensp DOC "The OpenSP include directory" ) endif () if (NOT OpenSP_LIBRARY) find_library(OpenSP_LIBRARY_RELEASE NAMES osp libosp opensp libopensp sp133 libsp HINTS ${PC_OpenSP_LIBDIR} ${PC_OpenSP_LIBRARY_DIRS} ) find_library(OpenSP_LIBRARY_DEBUG NAMES ospd libospd openspd libopenspd sp133d libspd HINTS ${PC_OpenSP_LIBDIR} ${PC_OpenSP_LIBRARY_DIRS} ) include(SelectLibraryConfigurations) select_library_configurations(OpenSP) endif () if (OpenSP_INCLUDE_DIR) if (EXISTS "${OpenSP_INCLUDE_DIR}/config.h") if (NOT OpenSP_VERSION) file(STRINGS "${OpenSP_INCLUDE_DIR}/config.h" opensp_version_str REGEX "^#define[\t ]+SP_VERSION[\t ]+\".*\"") string(REGEX REPLACE "^.*SP_VERSION[\t ]+\"([^\"]*)\".*$" "\\1" OpenSP_VERSION "${opensp_version_str}") unset(opensp_version_str) endif () if (OpenSP_VERSION MATCHES [=[([0-9]+)\.([0-9]+)\.([0-9]+)]=]) set(OpenSP_VERSION_MAJOR "${CMAKE_MATCH_1}") set(OpenSP_VERSION_MINOR "${CMAKE_MATCH_2}") set(OpenSP_VERSION_PATCH "${CMAKE_MATCH_3}") endif () include(CheckCXXSymbolExists) check_cxx_symbol_exists(SP_MULTI_BYTE "${OpenSP_INCLUDE_DIR}/config.h" OpenSP_MULTI_BYTE) endif () endif () include(FindPackageHandleStandardArgs) find_package_handle_standard_args(OpenSP REQUIRED_VARS OpenSP_LIBRARY OpenSP_INCLUDE_DIR VERSION_VAR OpenSP_VERSION ) mark_as_advanced(OpenSP_INCLUDE_DIR OpenSP_LIBRARY OpenSP_MULTI_BYTE) if (OpenSP_FOUND) set(OpenSP_INCLUDE_DIRS ${OpenSP_INCLUDE_DIR}) if (NOT TARGET OpenSP::OpenSP) add_library(OpenSP::OpenSP UNKNOWN IMPORTED) if (EXISTS "${OpenSP_LIBRARY}") set_target_properties(OpenSP::OpenSP PROPERTIES IMPORTED_LOCATION "${OpenSP_LIBRARY}") endif () set_target_properties(OpenSP::OpenSP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${OpenSP_INCLUDE_DIRS}") if (OpenSP_LIBRARY_RELEASE) set_target_properties(OpenSP::OpenSP PROPERTIES IMPORTED_LOCATION_RELEASE "${OpenSP_LIBRARY_RELEASE}") set_property(TARGET OpenSP::OpenSP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) endif () if (OpenSP_LIBRARY_DEBUG) set_target_properties(OpenSP::OpenSP PROPERTIES IMPORTED_LOCATION_DEBUG "${OpenSP_LIBRARY_DEBUG}") set_property(TARGET OpenSP::OpenSP APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) endif () endif () endif () include(FeatureSummary) set_package_properties(OpenSP PROPERTIES URL "https://openjade.sourceforge.net/doc/index.htm" DESCRIPTION "An SGML System Conforming to International Standard ISO 8879" ) cmake_policy(POP)