xref: /freebsd/contrib/libfido2/man/CMakeLists.txt (revision febb0da5bf4bc99828ebede7abcb039514ac367a)
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