1# Copyright (c) 2018-2022 Yubico AB. All rights reserved. 2# Use of this source code is governed by a BSD-style 3# license that can be found in the LICENSE file. 4# SPDX-License-Identifier: BSD-2-Clause 5 6find_program(MANDOC_PATH mandoc) 7find_program(GZIP_PATH gzip) 8 9message(STATUS "MANDOC_PATH: ${MANDOC_PATH}") 10message(STATUS "GZIP_PATH: ${GZIP_PATH}") 11 12list(APPEND MAN_SOURCES 13 eddsa_pk_new.3 14 es256_pk_new.3 15 es384_pk_new.3 16 fido2-assert.1 17 fido2-cred.1 18 fido2-token.1 19 fido_init.3 20 fido_assert_new.3 21 fido_assert_allow_cred.3 22 fido_assert_set_authdata.3 23 fido_assert_verify.3 24 fido_bio_dev_get_info.3 25 fido_bio_enroll_new.3 26 fido_bio_info_new.3 27 fido_bio_template.3 28 fido_cbor_info_new.3 29 fido_cred_new.3 30 fido_cred_exclude.3 31 fido_credman_metadata_new.3 32 fido_cred_set_authdata.3 33 fido_cred_verify.3 34 fido_dev_enable_entattest.3 35 fido_dev_get_assert.3 36 fido_dev_get_touch_begin.3 37 fido_dev_info_manifest.3 38 fido_dev_largeblob_get.3 39 fido_dev_make_cred.3 40 fido_dev_open.3 41 fido_dev_set_io_functions.3 42 fido_dev_set_pin.3 43 fido_strerr.3 44 rs256_pk_new.3 45) 46 47list(APPEND MAN_ALIAS 48 eddsa_pk_new eddsa_pk_free 49 eddsa_pk_new eddsa_pk_from_EVP_PKEY 50 eddsa_pk_new eddsa_pk_from_ptr 51 eddsa_pk_new eddsa_pk_to_EVP_PKEY 52 es256_pk_new es256_pk_free 53 es256_pk_new es256_pk_from_EC_KEY 54 es256_pk_new es256_pk_from_EVP_PKEY 55 es256_pk_new es256_pk_from_ptr 56 es256_pk_new es256_pk_to_EVP_PKEY 57 es384_pk_new es384_pk_free 58 es384_pk_new es384_pk_from_EC_KEY 59 es384_pk_new es384_pk_from_EVP_PKEY 60 es384_pk_new es384_pk_from_ptr 61 es384_pk_new es384_pk_to_EVP_PKEY 62 fido_assert_allow_cred fido_assert_empty_allow_list 63 fido_assert_new fido_assert_authdata_len 64 fido_assert_new fido_assert_authdata_ptr 65 fido_assert_new fido_assert_authdata_raw_len 66 fido_assert_new fido_assert_authdata_raw_ptr 67 fido_assert_new fido_assert_blob_len 68 fido_assert_new fido_assert_blob_ptr 69 fido_assert_new fido_assert_clientdata_hash_len 70 fido_assert_new fido_assert_clientdata_hash_ptr 71 fido_assert_new fido_assert_count 72 fido_assert_new fido_assert_flags 73 fido_assert_new fido_assert_free 74 fido_assert_new fido_assert_hmac_secret_len 75 fido_assert_new fido_assert_hmac_secret_ptr 76 fido_assert_new fido_assert_id_len 77 fido_assert_new fido_assert_id_ptr 78 fido_assert_new fido_assert_largeblob_key_len 79 fido_assert_new fido_assert_largeblob_key_ptr 80 fido_assert_new fido_assert_rp_id 81 fido_assert_new fido_assert_sigcount 82 fido_assert_new fido_assert_sig_len 83 fido_assert_new fido_assert_sig_ptr 84 fido_assert_new fido_assert_user_display_name 85 fido_assert_new fido_assert_user_icon 86 fido_assert_new fido_assert_user_id_len 87 fido_assert_new fido_assert_user_id_ptr 88 fido_assert_new fido_assert_user_name 89 fido_assert_set_authdata fido_assert_set_authdata_raw 90 fido_assert_set_authdata fido_assert_set_clientdata 91 fido_assert_set_authdata fido_assert_set_clientdata_hash 92 fido_assert_set_authdata fido_assert_set_count 93 fido_assert_set_authdata fido_assert_set_extensions 94 fido_assert_set_authdata fido_assert_set_hmac_salt 95 fido_assert_set_authdata fido_assert_set_hmac_secret 96 fido_assert_set_authdata fido_assert_set_rp 97 fido_assert_set_authdata fido_assert_set_sig 98 fido_assert_set_authdata fido_assert_set_up 99 fido_assert_set_authdata fido_assert_set_uv 100 fido_assert_set_authdata fido_assert_set_winhello_appid 101 fido_bio_dev_get_info fido_bio_dev_enroll_begin 102 fido_bio_dev_get_info fido_bio_dev_enroll_cancel 103 fido_bio_dev_get_info fido_bio_dev_enroll_continue 104 fido_bio_dev_get_info fido_bio_dev_enroll_remove 105 fido_bio_dev_get_info fido_bio_dev_get_template_array 106 fido_bio_dev_get_info fido_bio_dev_set_template_name 107 fido_bio_enroll_new fido_bio_enroll_free 108 fido_bio_enroll_new fido_bio_enroll_last_status 109 fido_bio_enroll_new fido_bio_enroll_remaining_samples 110 fido_bio_info_new fido_bio_info_free 111 fido_bio_info_new fido_bio_info_max_samples 112 fido_bio_info_new fido_bio_info_type 113 fido_bio_template fido_bio_template_array_count 114 fido_bio_template fido_bio_template_array_free 115 fido_bio_template fido_bio_template_array_new 116 fido_bio_template fido_bio_template_free 117 fido_bio_template fido_bio_template_id_len 118 fido_bio_template fido_bio_template_id_ptr 119 fido_bio_template fido_bio_template_name 120 fido_bio_template fido_bio_template_new 121 fido_bio_template fido_bio_template_set_id 122 fido_bio_template fido_bio_template_set_name 123 fido_cbor_info_new fido_cbor_info_aaguid_len 124 fido_cbor_info_new fido_cbor_info_aaguid_ptr 125 fido_cbor_info_new fido_cbor_info_algorithm_cose 126 fido_cbor_info_new fido_cbor_info_algorithm_count 127 fido_cbor_info_new fido_cbor_info_algorithm_type 128 fido_cbor_info_new fido_cbor_info_certs_len 129 fido_cbor_info_new fido_cbor_info_certs_name_ptr 130 fido_cbor_info_new fido_cbor_info_certs_value_ptr 131 fido_cbor_info_new fido_cbor_info_extensions_len 132 fido_cbor_info_new fido_cbor_info_extensions_ptr 133 fido_cbor_info_new fido_cbor_info_free 134 fido_cbor_info_new fido_cbor_info_fwversion 135 fido_cbor_info_new fido_cbor_info_maxcredbloblen 136 fido_cbor_info_new fido_cbor_info_maxcredcntlst 137 fido_cbor_info_new fido_cbor_info_maxcredidlen 138 fido_cbor_info_new fido_cbor_info_maxlargeblob 139 fido_cbor_info_new fido_cbor_info_maxmsgsiz 140 fido_cbor_info_new fido_cbor_info_maxrpid_minpinlen 141 fido_cbor_info_new fido_cbor_info_minpinlen 142 fido_cbor_info_new fido_cbor_info_new_pin_required 143 fido_cbor_info_new fido_cbor_info_options_len 144 fido_cbor_info_new fido_cbor_info_options_name_ptr 145 fido_cbor_info_new fido_cbor_info_options_value_ptr 146 fido_cbor_info_new fido_cbor_info_protocols_len 147 fido_cbor_info_new fido_cbor_info_protocols_ptr 148 fido_cbor_info_new fido_cbor_info_rk_remaining 149 fido_cbor_info_new fido_cbor_info_transports_len 150 fido_cbor_info_new fido_cbor_info_transports_ptr 151 fido_cbor_info_new fido_cbor_info_uv_attempts 152 fido_cbor_info_new fido_cbor_info_uv_modality 153 fido_cbor_info_new fido_cbor_info_versions_len 154 fido_cbor_info_new fido_cbor_info_versions_ptr 155 fido_cbor_info_new fido_dev_get_cbor_info 156 fido_cred_exclude fido_cred_empty_exclude_list 157 fido_cred_new fido_cred_aaguid_len 158 fido_cred_new fido_cred_aaguid_ptr 159 fido_cred_new fido_cred_attstmt_len 160 fido_cred_new fido_cred_attstmt_ptr 161 fido_cred_new fido_cred_authdata_len 162 fido_cred_new fido_cred_authdata_ptr 163 fido_cred_new fido_cred_authdata_raw_len 164 fido_cred_new fido_cred_authdata_raw_ptr 165 fido_cred_new fido_cred_clientdata_hash_len 166 fido_cred_new fido_cred_clientdata_hash_ptr 167 fido_cred_new fido_cred_display_name 168 fido_cred_new fido_cred_entattest 169 fido_cred_new fido_cred_flags 170 fido_cred_new fido_cred_fmt 171 fido_cred_new fido_cred_free 172 fido_cred_new fido_cred_id_len 173 fido_cred_new fido_cred_id_ptr 174 fido_cred_new fido_cred_largeblob_key_len 175 fido_cred_new fido_cred_largeblob_key_ptr 176 fido_cred_new fido_cred_pin_minlen 177 fido_cred_new fido_cred_prot 178 fido_cred_new fido_cred_pubkey_len 179 fido_cred_new fido_cred_pubkey_ptr 180 fido_cred_new fido_cred_rp_id 181 fido_cred_new fido_cred_rp_name 182 fido_cred_new fido_cred_sigcount 183 fido_cred_new fido_cred_sig_len 184 fido_cred_new fido_cred_sig_ptr 185 fido_cred_new fido_cred_type 186 fido_cred_new fido_cred_user_id_len 187 fido_cred_new fido_cred_user_id_ptr 188 fido_cred_new fido_cred_user_name 189 fido_cred_new fido_cred_x5c_len 190 fido_cred_new fido_cred_x5c_list_count 191 fido_cred_new fido_cred_x5c_list_len 192 fido_cred_new fido_cred_x5c_list_ptr 193 fido_cred_new fido_cred_x5c_ptr 194 fido_cred_verify fido_cred_verify_self 195 fido_credman_metadata_new fido_credman_del_dev_rk 196 fido_credman_metadata_new fido_credman_get_dev_metadata 197 fido_credman_metadata_new fido_credman_get_dev_rk 198 fido_credman_metadata_new fido_credman_get_dev_rp 199 fido_credman_metadata_new fido_credman_metadata_free 200 fido_credman_metadata_new fido_credman_rk 201 fido_credman_metadata_new fido_credman_rk_count 202 fido_credman_metadata_new fido_credman_rk_existing 203 fido_credman_metadata_new fido_credman_rk_free 204 fido_credman_metadata_new fido_credman_rk_new 205 fido_credman_metadata_new fido_credman_rk_remaining 206 fido_credman_metadata_new fido_credman_rp_count 207 fido_credman_metadata_new fido_credman_rp_free 208 fido_credman_metadata_new fido_credman_rp_id 209 fido_credman_metadata_new fido_credman_rp_id_hash_len 210 fido_credman_metadata_new fido_credman_rp_id_hash_ptr 211 fido_credman_metadata_new fido_credman_rp_name 212 fido_credman_metadata_new fido_credman_rp_new 213 fido_credman_metadata_new fido_credman_set_dev_rk 214 fido_cred_set_authdata fido_cred_set_attstmt 215 fido_cred_set_authdata fido_cred_set_attobj 216 fido_cred_set_authdata fido_cred_set_authdata_raw 217 fido_cred_set_authdata fido_cred_set_blob 218 fido_cred_set_authdata fido_cred_set_clientdata 219 fido_cred_set_authdata fido_cred_set_clientdata_hash 220 fido_cred_set_authdata fido_cred_set_entattest 221 fido_cred_set_authdata fido_cred_set_extensions 222 fido_cred_set_authdata fido_cred_set_fmt 223 fido_cred_set_authdata fido_cred_set_id 224 fido_cred_set_authdata fido_cred_set_pin_minlen 225 fido_cred_set_authdata fido_cred_set_prot 226 fido_cred_set_authdata fido_cred_set_rk 227 fido_cred_set_authdata fido_cred_set_rp 228 fido_cred_set_authdata fido_cred_set_sig 229 fido_cred_set_authdata fido_cred_set_type 230 fido_cred_set_authdata fido_cred_set_user 231 fido_cred_set_authdata fido_cred_set_uv 232 fido_cred_set_authdata fido_cred_set_x509 233 fido_dev_enable_entattest fido_dev_toggle_always_uv 234 fido_dev_enable_entattest fido_dev_force_pin_change 235 fido_dev_enable_entattest fido_dev_set_pin_minlen 236 fido_dev_enable_entattest fido_dev_set_pin_minlen_rpid 237 fido_dev_get_touch_begin fido_dev_get_touch_status 238 fido_dev_info_manifest fido_dev_info_free 239 fido_dev_info_manifest fido_dev_info_manufacturer_string 240 fido_dev_info_manifest fido_dev_info_new 241 fido_dev_info_manifest fido_dev_info_path 242 fido_dev_info_manifest fido_dev_info_product 243 fido_dev_info_manifest fido_dev_info_product_string 244 fido_dev_info_manifest fido_dev_info_ptr 245 fido_dev_info_manifest fido_dev_info_set 246 fido_dev_info_manifest fido_dev_info_vendor 247 fido_dev_open fido_dev_build 248 fido_dev_open fido_dev_cancel 249 fido_dev_open fido_dev_close 250 fido_dev_open fido_dev_flags 251 fido_dev_open fido_dev_force_fido2 252 fido_dev_open fido_dev_force_u2f 253 fido_dev_open fido_dev_free 254 fido_dev_open fido_dev_has_pin 255 fido_dev_open fido_dev_has_uv 256 fido_dev_open fido_dev_is_fido2 257 fido_dev_open fido_dev_is_winhello 258 fido_dev_open fido_dev_major 259 fido_dev_open fido_dev_minor 260 fido_dev_open fido_dev_new 261 fido_dev_open fido_dev_new_with_info 262 fido_dev_open fido_dev_open_with_info 263 fido_dev_open fido_dev_protocol 264 fido_dev_open fido_dev_supports_cred_prot 265 fido_dev_open fido_dev_supports_credman 266 fido_dev_open fido_dev_supports_permissions 267 fido_dev_open fido_dev_supports_pin 268 fido_dev_open fido_dev_supports_uv 269 fido_dev_set_pin fido_dev_get_retry_count 270 fido_dev_set_pin fido_dev_get_uv_retry_count 271 fido_dev_set_pin fido_dev_reset 272 fido_dev_set_io_functions fido_dev_io_handle 273 fido_dev_set_io_functions fido_dev_set_sigmask 274 fido_dev_set_io_functions fido_dev_set_timeout 275 fido_dev_set_io_functions fido_dev_set_transport_functions 276 fido_dev_largeblob_get fido_dev_largeblob_set 277 fido_dev_largeblob_get fido_dev_largeblob_remove 278 fido_dev_largeblob_get fido_dev_largeblob_get_array 279 fido_dev_largeblob_get fido_dev_largeblob_set_array 280 fido_init fido_set_log_handler 281 rs256_pk_new rs256_pk_free 282 rs256_pk_new rs256_pk_from_ptr 283 rs256_pk_new rs256_pk_from_EVP_PKEY 284 rs256_pk_new rs256_pk_from_RSA 285 rs256_pk_new rs256_pk_to_EVP_PKEY 286) 287 288list(LENGTH MAN_ALIAS MAN_ALIAS_LEN) 289math(EXPR MAN_ALIAS_MAX "${MAN_ALIAS_LEN} - 2") 290 291# man_copy 292foreach(f ${MAN_SOURCES}) 293 add_custom_command(OUTPUT ${f} 294 COMMAND cp -f ${PROJECT_SOURCE_DIR}/man/${f} . 295 DEPENDS ${f}) 296 list(APPEND COPY_FILES ${f}) 297endforeach() 298 299# man_lint 300foreach(f ${MAN_SOURCES}) 301 add_custom_command(OUTPUT ${f}.lint 302 COMMAND mandoc -T lint -W warning ${f} > ${f}.lint 303 DEPENDS ${f}) 304 list(APPEND LINT_FILES ${f}.lint) 305endforeach() 306 307# man_html 308foreach(f ${MAN_SOURCES}) 309 string(REGEX REPLACE "\\.[13]$" "" g ${f}) 310 add_custom_command(OUTPUT ${g}.html 311 COMMAND mandoc -T html -O man="%N.html",style=style.css -I os="Yubico AB" ${f} > ${g}.html 312 DEPENDS ${f}) 313 list(APPEND HTML_FILES ${g}.html) 314endforeach() 315 316# man_html_partial 317foreach(f ${MAN_SOURCES}) 318 string(REGEX REPLACE "\\.[13]$" "" g ${f}) 319 add_custom_command(OUTPUT ${g}.partial 320 COMMAND cat ${PROJECT_SOURCE_DIR}/man/dyc.css > ${g}.partial 321 COMMAND mandoc -T html -O man="%N.html",fragment ${f} >> ${g}.partial 322 DEPENDS ${f}) 323 list(APPEND HTML_PARTIAL_FILES ${g}.partial) 324endforeach() 325 326# man_gzip 327foreach(f ${MAN_SOURCES}) 328 add_custom_command(OUTPUT ${f}.gz 329 COMMAND gzip -cn ${f} > ${f}.gz 330 DEPENDS ${f}) 331 list(APPEND GZ_FILES ${f}.gz) 332endforeach() 333 334macro(define_symlink_target NAME EXT) 335 foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2) 336 math(EXPR j "${i} + 1") 337 list(GET MAN_ALIAS ${i} SRC) 338 list(GET MAN_ALIAS ${j} DST) 339 add_custom_command(OUTPUT ${DST}.${EXT} 340 COMMAND ln -sf ${SRC}.${EXT} ${DST}.${EXT}) 341 list(APPEND ${NAME}_LINK_FILES ${DST}.${EXT}) 342 endforeach() 343 add_custom_target(${NAME} DEPENDS ${${NAME}_LINK_FILES}) 344endmacro() 345 346add_custom_target(man_copy DEPENDS ${COPY_FILES}) 347add_custom_target(man_lint DEPENDS ${LINT_FILES}) 348add_custom_target(man_html DEPENDS ${HTML_FILES}) 349add_custom_target(man_html_partial DEPENDS ${HTML_PARTIAL_FILES}) 350add_custom_target(man_gzip DEPENDS ${GZ_FILES}) 351 352define_symlink_target(man_symlink 3) 353define_symlink_target(man_symlink_html html) 354define_symlink_target(man_symlink_html_partial partial) 355define_symlink_target(man_symlink_gzip 3.gz) 356 357add_dependencies(man_symlink man_copy) 358add_dependencies(man_lint man_symlink) 359add_dependencies(man_html man_lint) 360add_dependencies(man_symlink_html man_html) 361add_dependencies(man_html_partial man_lint) 362add_dependencies(man_symlink_html_partial man_html_partial) 363add_custom_target(man ALL) 364 365if(MANDOC_PATH) 366 add_dependencies(man man_symlink_html) 367 add_dependencies(man_gzip man_lint) 368 install(FILES ${PROJECT_SOURCE_DIR}/man/style.css 369 DESTINATION "${CMAKE_INSTALL_DOCDIR}/html") 370 foreach(f ${MAN_SOURCES}) 371 string(REGEX REPLACE "\\.[13]$" "" f ${f}) 372 install(FILES ${PROJECT_BINARY_DIR}/man/${f}.html 373 DESTINATION "${CMAKE_INSTALL_DOCDIR}/html") 374 endforeach() 375 foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2) 376 math(EXPR j "${i} + 1") 377 list(GET MAN_ALIAS ${j} DST) 378 install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.html 379 DESTINATION "${CMAKE_INSTALL_DOCDIR}/html") 380 endforeach() 381endif() 382 383if(GZIP_PATH) 384 add_dependencies(man_gzip man_copy) 385 add_dependencies(man_symlink_gzip man_gzip) 386 add_dependencies(man man_symlink_gzip) 387 foreach(f ${MAN_SOURCES}) 388 if (${f} MATCHES ".1$") 389 install(FILES ${PROJECT_BINARY_DIR}/man/${f}.gz 390 DESTINATION "${CMAKE_INSTALL_MANDIR}/man1") 391 elseif(${f} MATCHES ".3$") 392 install(FILES ${PROJECT_BINARY_DIR}/man/${f}.gz 393 DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") 394 endif() 395 endforeach() 396 foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2) 397 math(EXPR j "${i} + 1") 398 list(GET MAN_ALIAS ${j} DST) 399 install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.3.gz 400 DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") 401 endforeach() 402else() 403 add_dependencies(man man_symlink) 404 foreach(f ${MAN_SOURCES}) 405 if (${f} MATCHES ".1$") 406 install(FILES ${PROJECT_BINARY_DIR}/man/${f} 407 DESTINATION "${CMAKE_INSTALL_MANDIR}/man1") 408 elseif(${f} MATCHES ".3$") 409 install(FILES ${PROJECT_BINARY_DIR}/man/${f} 410 DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") 411 endif() 412 endforeach() 413 foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2) 414 math(EXPR j "${i} + 1") 415 list(GET MAN_ALIAS ${j} DST) 416 install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.3 417 DESTINATION "${CMAKE_INSTALL_MANDIR}/man3") 418 endforeach() 419endif() 420