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