mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
- Added examples section. - Synced descriptions a bit with other find modules. - Moved imported targets to top. - Updated project URL to https.
178 lines
5.1 KiB
CMake
178 lines
5.1 KiB
CMake
# 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_<n>
|
|
|
|
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)
|