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