blob: 3ff6a99a4842c5fa57f42cae61a501172b1627f1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
# 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)
|