xref: /freebsd/contrib/libfido2/man/CMakeLists.txt (revision 7899f917b1c0ea178f1d2be0cfb452086d079d23)
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_flags
169	fido_cred_new fido_cred_fmt
170	fido_cred_new fido_cred_free
171	fido_cred_new fido_cred_id_len
172	fido_cred_new fido_cred_id_ptr
173	fido_cred_new fido_cred_largeblob_key_len
174	fido_cred_new fido_cred_largeblob_key_ptr
175	fido_cred_new fido_cred_pin_minlen
176	fido_cred_new fido_cred_prot
177	fido_cred_new fido_cred_pubkey_len
178	fido_cred_new fido_cred_pubkey_ptr
179	fido_cred_new fido_cred_rp_id
180	fido_cred_new fido_cred_rp_name
181	fido_cred_new fido_cred_sigcount
182	fido_cred_new fido_cred_sig_len
183	fido_cred_new fido_cred_sig_ptr
184	fido_cred_new fido_cred_type
185	fido_cred_new fido_cred_user_id_len
186	fido_cred_new fido_cred_user_id_ptr
187	fido_cred_new fido_cred_user_name
188	fido_cred_new fido_cred_x5c_len
189	fido_cred_new fido_cred_x5c_ptr
190	fido_cred_verify fido_cred_verify_self
191	fido_credman_metadata_new fido_credman_del_dev_rk
192	fido_credman_metadata_new fido_credman_get_dev_metadata
193	fido_credman_metadata_new fido_credman_get_dev_rk
194	fido_credman_metadata_new fido_credman_get_dev_rp
195	fido_credman_metadata_new fido_credman_metadata_free
196	fido_credman_metadata_new fido_credman_rk
197	fido_credman_metadata_new fido_credman_rk_count
198	fido_credman_metadata_new fido_credman_rk_existing
199	fido_credman_metadata_new fido_credman_rk_free
200	fido_credman_metadata_new fido_credman_rk_new
201	fido_credman_metadata_new fido_credman_rk_remaining
202	fido_credman_metadata_new fido_credman_rp_count
203	fido_credman_metadata_new fido_credman_rp_free
204	fido_credman_metadata_new fido_credman_rp_id
205	fido_credman_metadata_new fido_credman_rp_id_hash_len
206	fido_credman_metadata_new fido_credman_rp_id_hash_ptr
207	fido_credman_metadata_new fido_credman_rp_name
208	fido_credman_metadata_new fido_credman_rp_new
209	fido_credman_metadata_new fido_credman_set_dev_rk
210	fido_cred_set_authdata fido_cred_set_attstmt
211	fido_cred_set_authdata fido_cred_set_authdata_raw
212	fido_cred_set_authdata fido_cred_set_blob
213	fido_cred_set_authdata fido_cred_set_clientdata
214	fido_cred_set_authdata fido_cred_set_clientdata_hash
215	fido_cred_set_authdata fido_cred_set_extensions
216	fido_cred_set_authdata fido_cred_set_fmt
217	fido_cred_set_authdata fido_cred_set_id
218	fido_cred_set_authdata fido_cred_set_pin_minlen
219	fido_cred_set_authdata fido_cred_set_prot
220	fido_cred_set_authdata fido_cred_set_rk
221	fido_cred_set_authdata fido_cred_set_rp
222	fido_cred_set_authdata fido_cred_set_sig
223	fido_cred_set_authdata fido_cred_set_type
224	fido_cred_set_authdata fido_cred_set_user
225	fido_cred_set_authdata fido_cred_set_uv
226	fido_cred_set_authdata fido_cred_set_x509
227	fido_dev_enable_entattest fido_dev_toggle_always_uv
228	fido_dev_enable_entattest fido_dev_force_pin_change
229	fido_dev_enable_entattest fido_dev_set_pin_minlen
230	fido_dev_enable_entattest fido_dev_set_pin_minlen_rpid
231	fido_dev_get_touch_begin fido_dev_get_touch_status
232	fido_dev_info_manifest fido_dev_info_free
233	fido_dev_info_manifest fido_dev_info_manufacturer_string
234	fido_dev_info_manifest fido_dev_info_new
235	fido_dev_info_manifest fido_dev_info_path
236	fido_dev_info_manifest fido_dev_info_product
237	fido_dev_info_manifest fido_dev_info_product_string
238	fido_dev_info_manifest fido_dev_info_ptr
239	fido_dev_info_manifest fido_dev_info_set
240	fido_dev_info_manifest fido_dev_info_vendor
241	fido_dev_open fido_dev_build
242	fido_dev_open fido_dev_cancel
243	fido_dev_open fido_dev_close
244	fido_dev_open fido_dev_flags
245	fido_dev_open fido_dev_force_fido2
246	fido_dev_open fido_dev_force_u2f
247	fido_dev_open fido_dev_free
248	fido_dev_open fido_dev_has_pin
249	fido_dev_open fido_dev_has_uv
250	fido_dev_open fido_dev_is_fido2
251	fido_dev_open fido_dev_is_winhello
252	fido_dev_open fido_dev_major
253	fido_dev_open fido_dev_minor
254	fido_dev_open fido_dev_new
255	fido_dev_open fido_dev_new_with_info
256	fido_dev_open fido_dev_open_with_info
257	fido_dev_open fido_dev_protocol
258	fido_dev_open fido_dev_supports_cred_prot
259	fido_dev_open fido_dev_supports_credman
260	fido_dev_open fido_dev_supports_permissions
261	fido_dev_open fido_dev_supports_pin
262	fido_dev_open fido_dev_supports_uv
263	fido_dev_set_pin fido_dev_get_retry_count
264	fido_dev_set_pin fido_dev_get_uv_retry_count
265	fido_dev_set_pin fido_dev_reset
266	fido_dev_set_io_functions fido_dev_io_handle
267	fido_dev_set_io_functions fido_dev_set_sigmask
268	fido_dev_set_io_functions fido_dev_set_timeout
269	fido_dev_set_io_functions fido_dev_set_transport_functions
270	fido_dev_largeblob_get fido_dev_largeblob_set
271	fido_dev_largeblob_get fido_dev_largeblob_remove
272	fido_dev_largeblob_get fido_dev_largeblob_get_array
273	fido_dev_largeblob_get fido_dev_largeblob_set_array
274	fido_init fido_set_log_handler
275	rs256_pk_new rs256_pk_free
276	rs256_pk_new rs256_pk_from_ptr
277	rs256_pk_new rs256_pk_from_EVP_PKEY
278	rs256_pk_new rs256_pk_from_RSA
279	rs256_pk_new rs256_pk_to_EVP_PKEY
280)
281
282list(LENGTH MAN_ALIAS MAN_ALIAS_LEN)
283math(EXPR MAN_ALIAS_MAX "${MAN_ALIAS_LEN} - 2")
284
285# man_copy
286foreach(f ${MAN_SOURCES})
287	add_custom_command(OUTPUT ${f}
288		COMMAND cp -f ${PROJECT_SOURCE_DIR}/man/${f} .
289		DEPENDS ${f})
290	list(APPEND COPY_FILES ${f})
291endforeach()
292
293# man_lint
294foreach(f ${MAN_SOURCES})
295	add_custom_command(OUTPUT ${f}.lint
296		COMMAND mandoc -T lint -W warning ${f} > ${f}.lint
297		DEPENDS ${f})
298	list(APPEND LINT_FILES ${f}.lint)
299endforeach()
300
301# man_html
302foreach(f ${MAN_SOURCES})
303	string(REGEX REPLACE "\\.[13]$" "" g ${f})
304	add_custom_command(OUTPUT ${g}.html
305		COMMAND mandoc -T html -O man="%N.html",style=style.css -I os="Yubico AB" ${f} > ${g}.html
306		DEPENDS ${f})
307	list(APPEND HTML_FILES ${g}.html)
308endforeach()
309
310# man_html_partial
311foreach(f ${MAN_SOURCES})
312	string(REGEX REPLACE "\\.[13]$" "" g ${f})
313	add_custom_command(OUTPUT ${g}.partial
314		COMMAND cat ${PROJECT_SOURCE_DIR}/man/dyc.css > ${g}.partial
315		COMMAND mandoc -T html -O man="%N.html",fragment ${f} >> ${g}.partial
316		DEPENDS ${f})
317	list(APPEND HTML_PARTIAL_FILES ${g}.partial)
318endforeach()
319
320# man_gzip
321foreach(f ${MAN_SOURCES})
322	add_custom_command(OUTPUT ${f}.gz
323		COMMAND gzip -cn ${f} > ${f}.gz
324		DEPENDS ${f})
325	list(APPEND GZ_FILES ${f}.gz)
326endforeach()
327
328macro(define_symlink_target NAME EXT)
329	foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2)
330		math(EXPR j "${i} + 1")
331		list(GET MAN_ALIAS ${i} SRC)
332		list(GET MAN_ALIAS ${j} DST)
333		add_custom_command(OUTPUT ${DST}.${EXT}
334			COMMAND ln -sf ${SRC}.${EXT} ${DST}.${EXT})
335		list(APPEND ${NAME}_LINK_FILES ${DST}.${EXT})
336	endforeach()
337	add_custom_target(${NAME} DEPENDS ${${NAME}_LINK_FILES})
338endmacro()
339
340add_custom_target(man_copy DEPENDS ${COPY_FILES})
341add_custom_target(man_lint DEPENDS ${LINT_FILES})
342add_custom_target(man_html DEPENDS ${HTML_FILES})
343add_custom_target(man_html_partial DEPENDS ${HTML_PARTIAL_FILES})
344add_custom_target(man_gzip DEPENDS ${GZ_FILES})
345
346define_symlink_target(man_symlink 3)
347define_symlink_target(man_symlink_html html)
348define_symlink_target(man_symlink_html_partial partial)
349define_symlink_target(man_symlink_gzip 3.gz)
350
351add_dependencies(man_symlink man_copy)
352add_dependencies(man_lint man_symlink)
353add_dependencies(man_html man_lint)
354add_dependencies(man_symlink_html man_html)
355add_dependencies(man_html_partial man_lint)
356add_dependencies(man_symlink_html_partial man_html_partial)
357add_custom_target(man ALL)
358
359if(MANDOC_PATH)
360	add_dependencies(man man_symlink_html)
361	add_dependencies(man_gzip man_lint)
362	install(FILES ${PROJECT_SOURCE_DIR}/man/style.css
363		DESTINATION "${CMAKE_INSTALL_DOCDIR}/html")
364	foreach(f ${MAN_SOURCES})
365		string(REGEX REPLACE "\\.[13]$" "" f ${f})
366		install(FILES ${PROJECT_BINARY_DIR}/man/${f}.html
367			DESTINATION "${CMAKE_INSTALL_DOCDIR}/html")
368	endforeach()
369	foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2)
370		math(EXPR j "${i} + 1")
371		list(GET MAN_ALIAS ${j} DST)
372		install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.html
373			DESTINATION "${CMAKE_INSTALL_DOCDIR}/html")
374	endforeach()
375endif()
376
377if(GZIP_PATH)
378	add_dependencies(man_gzip man_copy)
379	add_dependencies(man_symlink_gzip man_gzip)
380	add_dependencies(man man_symlink_gzip)
381	foreach(f ${MAN_SOURCES})
382		if (${f} MATCHES ".1$")
383			install(FILES ${PROJECT_BINARY_DIR}/man/${f}.gz
384				DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
385		elseif(${f} MATCHES ".3$")
386			install(FILES ${PROJECT_BINARY_DIR}/man/${f}.gz
387				DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
388		endif()
389	endforeach()
390	foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2)
391		math(EXPR j "${i} + 1")
392		list(GET MAN_ALIAS ${j} DST)
393		install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.3.gz
394			DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
395	endforeach()
396elseif(NOT MSVC)
397	add_dependencies(man man_symlink)
398	foreach(f ${MAN_SOURCES})
399		if (${f} MATCHES ".1$")
400			install(FILES ${PROJECT_BINARY_DIR}/man/${f}
401				DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
402		elseif(${f} MATCHES ".3$")
403			install(FILES ${PROJECT_BINARY_DIR}/man/${f}
404				DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
405		endif()
406	endforeach()
407	foreach(i RANGE 0 ${MAN_ALIAS_MAX} 2)
408		math(EXPR j "${i} + 1")
409		list(GET MAN_ALIAS ${j} DST)
410		install(FILES ${PROJECT_BINARY_DIR}/man/${DST}.3
411			DESTINATION "${CMAKE_INSTALL_MANDIR}/man3")
412	endforeach()
413endif()
414