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