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