aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2021-10-19 14:09:13 -0700
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-10-19 22:06:45 +0000
commitb8a45f3638994299ea9a2e0c8e5df08a35743af3 (patch)
tree93364af2c43048228f862c192c308a089d1c10d4
parentcfe33625a07472189a5b17190ca348108c8911cf (diff)
CMake+Docs: Generate man pages all at once.
Asciidoctor lets us generate multiple documents at once, so do so for our man pages. If we're using AsciidoctorJ this minimizes the number of JVM instances we have to spin up. This reduces the build time on my Windows VM here quite a bit, and will hopefully do so on the CI builders. Add a .editorconfig file in cmake/modules.
-rw-r--r--cmake/modules/.editorconfig3
-rw-r--r--cmake/modules/FindAsciidoctor.cmake61
-rw-r--r--doc/CMakeLists.txt86
3 files changed, 96 insertions, 54 deletions
diff --git a/cmake/modules/.editorconfig b/cmake/modules/.editorconfig
new file mode 100644
index 0000000000..5359b5051d
--- /dev/null
+++ b/cmake/modules/.editorconfig
@@ -0,0 +1,3 @@
+[FindAsciidoctor.cmake]
+indent_style = space
+indent_size = 4
diff --git a/cmake/modules/FindAsciidoctor.cmake b/cmake/modules/FindAsciidoctor.cmake
index b21eac2361..69150a1f32 100644
--- a/cmake/modules/FindAsciidoctor.cmake
+++ b/cmake/modules/FindAsciidoctor.cmake
@@ -33,9 +33,15 @@ if(ASCIIDOCTOR_EXECUTABLE)
set_target_properties(${_target} PROPERTIES
FOLDER "Docbook"
EXCLUDE_FROM_DEFAULT_BUILD True
- )
+ )
endfunction(set_asciidoctor_target_properties)
+ function(set_manpage_target_properties _target)
+ set_target_properties(${_target} PROPERTIES
+ FOLDER "Docs"
+ )
+ endfunction(set_manpage_target_properties)
+
set (_asciidoctor_common_args
# Doesn't work with AsciidoctorJ?
# --failure-level=WARN
@@ -132,24 +138,57 @@ if(ASCIIDOCTOR_EXECUTABLE)
unset(_output_txt)
ENDMACRO()
- # Single page only, for the release notes and man pages.
- MACRO( ASCIIDOCTOR2MAN _asciidocsource _man_section)
- GET_FILENAME_COMPONENT( _source_base_name ${_asciidocsource} NAME_WE )
- set( _output_man ${_source_base_name}.${_man_section} )
+ # Generate one or more ROFF man pages
+ MACRO(ASCIIDOCTOR2ROFFMAN _man_section)
+ set(_input_adoc)
+ set(_output_man)
+ foreach(_src_file ${ARGN})
+ list(APPEND _input_adoc ${_src_file})
+ GET_FILENAME_COMPONENT(_source_base_name ${_src_file} NAME_WE )
+ list(APPEND _output_man ${_source_base_name}.${_man_section} )
+ endforeach()
ADD_CUSTOM_COMMAND(
OUTPUT
${_output_man}
COMMAND ${_asciidoctor_common_command}
--backend manpage
- --out-file ${_output_man}
- ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
+ --destination-dir ${CMAKE_CURRENT_BINARY_DIR}
+ ${_input_adoc}
DEPENDS
- ${CMAKE_CURRENT_SOURCE_DIR}/${_asciidocsource}
- ${ARGN}
+ ${_input_adoc}
+ )
+ add_custom_target(generate_roff_man${_man_section}_pages DEPENDS ${_output_man})
+ set_manpage_target_properties(generate_roff_man${_man_section}_pages)
+ unset(_src_file)
+ unset(_input_adoc)
+ unset(_output_man)
+ ENDMACRO()
+
+ # Generate one or more HTML man pages
+ MACRO(ASCIIDOCTOR2HTMLMAN)
+ set(_input_adoc)
+ set(_output_man)
+ foreach(_src_file ${ARGN})
+ list(APPEND _input_adoc ${_src_file})
+ GET_FILENAME_COMPONENT(_source_base_name ${_src_file} NAME_WE )
+ list(APPEND _output_man ${_source_base_name}.html )
+ endforeach()
+
+ ADD_CUSTOM_COMMAND(
+ OUTPUT
+ ${_output_man}
+ COMMAND ${_asciidoctor_common_command}
+ --backend html
+ --destination-dir ${CMAKE_CURRENT_BINARY_DIR}
+ ${_input_adoc}
+ DEPENDS
+ ${_input_adoc}
)
- add_custom_target(generate_${_output_man} DEPENDS ${_output_man})
- set_asciidoctor_target_properties(generate_${_output_man})
+ add_custom_target(generate_html_man_pages DEPENDS ${_output_man})
+ set_manpage_target_properties(generate_html_man_pages)
+ unset(_src_file)
+ unset(_input_adoc)
unset(_output_man)
ENDMACRO()
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
index 50f0c212cd..cd09ca6092 100644
--- a/doc/CMakeLists.txt
+++ b/doc/CMakeLists.txt
@@ -20,31 +20,21 @@ add_custom_command(
${CMAKE_SOURCE_DIR}/AUTHORS
)
+set(MAN1_SOURCE_FILES)
+set(MAN4_SOURCE_FILES)
set(MAN1_INSTALL_FILES)
set(MAN4_INSTALL_FILES)
set(HTML_INSTALL_FILES)
-set(GENERATOR_TARGETS)
-macro (ASCIIDOCTOR2MANHTML _page_name _man_section)
+macro (ADD_MAN_PAGE _page_name _man_section)
if(ASCIIDOCTOR_FOUND)
- ASCIIDOCTOR2HTML(${_page_name}.adoc)
- list(APPEND GENERATOR_TARGETS generate_${_page_name}.html)
- # Override set_asciidoctor_target_properties
- set_target_properties(generate_${_page_name}.html PROPERTIES
- FOLDER "Docs"
- EXCLUDE_FROM_DEFAULT_BUILD False
- )
list(APPEND HTML_INSTALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_page_name}.html)
- ASCIIDOCTOR2MAN(${_page_name}.adoc ${_man_section})
- list(APPEND GENERATOR_TARGETS generate_${_page_name}.${_man_section})
- set_target_properties(generate_${_page_name}.${_man_section} PROPERTIES
- FOLDER "Docs"
- EXCLUDE_FROM_DEFAULT_BUILD False
- )
if (${_man_section} EQUAL 1)
+ list(APPEND MAN1_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${_page_name}.adoc)
list(APPEND MAN1_INSTALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_page_name}.${_man_section})
elseif (${_man_section} EQUAL 4)
+ list(APPEND MAN4_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/${_page_name}.adoc)
list(APPEND MAN4_INSTALL_FILES ${CMAKE_CURRENT_BINARY_DIR}/${_page_name}.${_man_section})
else()
message(FATAL_ERROR "Unsupported manual page section ${_man_section} for ${_page_name}")
@@ -52,53 +42,61 @@ macro (ASCIIDOCTOR2MANHTML _page_name _man_section)
endif()
endmacro()
-ASCIIDOCTOR2MANHTML(wireshark 1)
-ASCIIDOCTOR2MANHTML(androiddump 1)
-ASCIIDOCTOR2MANHTML(capinfos 1)
-ASCIIDOCTOR2MANHTML(captype 1)
-ASCIIDOCTOR2MANHTML(ciscodump 1)
-ASCIIDOCTOR2MANHTML(dftest 1)
-ASCIIDOCTOR2MANHTML(dumpcap 1)
-ASCIIDOCTOR2MANHTML(editcap 1)
-ASCIIDOCTOR2MANHTML(mergecap 1)
-ASCIIDOCTOR2MANHTML(randpkt 1)
-ASCIIDOCTOR2MANHTML(randpktdump 1)
-ASCIIDOCTOR2MANHTML(etwdump 1)
-ASCIIDOCTOR2MANHTML(rawshark 1)
-ASCIIDOCTOR2MANHTML(reordercap 1)
-ASCIIDOCTOR2MANHTML(sshdump 1)
-ASCIIDOCTOR2MANHTML(text2pcap 1)
-ASCIIDOCTOR2MANHTML(tshark 1)
-ASCIIDOCTOR2MANHTML(udpdump 1)
-
-ASCIIDOCTOR2MANHTML(extcap 4)
-ASCIIDOCTOR2MANHTML(wireshark-filter 4)
+ADD_MAN_PAGE(wireshark 1)
+ADD_MAN_PAGE(androiddump 1)
+ADD_MAN_PAGE(capinfos 1)
+ADD_MAN_PAGE(captype 1)
+ADD_MAN_PAGE(ciscodump 1)
+ADD_MAN_PAGE(dftest 1)
+ADD_MAN_PAGE(dumpcap 1)
+ADD_MAN_PAGE(editcap 1)
+ADD_MAN_PAGE(mergecap 1)
+ADD_MAN_PAGE(randpkt 1)
+ADD_MAN_PAGE(randpktdump 1)
+ADD_MAN_PAGE(etwdump 1)
+ADD_MAN_PAGE(rawshark 1)
+ADD_MAN_PAGE(reordercap 1)
+ADD_MAN_PAGE(sshdump 1)
+ADD_MAN_PAGE(text2pcap 1)
+ADD_MAN_PAGE(tshark 1)
+ADD_MAN_PAGE(udpdump 1)
+
+ADD_MAN_PAGE(extcap 4)
+ADD_MAN_PAGE(wireshark-filter 4)
if(BUILD_dpauxmon AND HAVE_LIBNL3)
- ASCIIDOCTOR2MANHTML(dpauxmon 1)
+ ADD_MAN_PAGE(dpauxmon 1)
endif()
if(BUILD_sdjournal AND SYSTEMD_FOUND)
- ASCIIDOCTOR2MANHTML(sdjournal 1)
+ ADD_MAN_PAGE(sdjournal 1)
endif()
if(MAXMINDDB_FOUND)
- ASCIIDOCTOR2MANHTML(mmdbresolve 1)
+ ADD_MAN_PAGE(mmdbresolve 1)
endif()
if (BUILD_corbaidl2wrs)
- ASCIIDOCTOR2MANHTML(idl2wrs 1)
+ ADD_MAN_PAGE(idl2wrs 1)
endif()
if (BUILD_xxx2deb)
- ASCIIDOCTOR2MANHTML(asn2deb 1)
- ASCIIDOCTOR2MANHTML(idl2deb 1)
+ ADD_MAN_PAGE(asn2deb 1)
+ ADD_MAN_PAGE(idl2deb 1)
endif()
set(BUNDLE_RESOURCE_SHARE_MAN1_FILES ${MAN1_INSTALL_FILES} PARENT_SCOPE)
set(BUNDLE_RESOURCE_SHARE_MAN4_FILES ${MAN4_INSTALL_FILES} PARENT_SCOPE)
+if(ASCIIDOCTOR_FOUND)
+ ASCIIDOCTOR2ROFFMAN(1 ${MAN1_SOURCE_FILES})
+ ASCIIDOCTOR2ROFFMAN(4 ${MAN4_SOURCE_FILES})
+ ASCIIDOCTOR2HTMLMAN(${MAN1_SOURCE_FILES} ${MAN4_SOURCE_FILES})
+endif()
+
add_custom_target(manpages DEPENDS
+ generate_roff_man1_pages
+ generate_roff_man4_pages
${MAN1_INSTALL_FILES}
${MAN4_INSTALL_FILES}
)
@@ -107,7 +105,9 @@ add_custom_target(
docs ALL
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/AUTHORS-SHORT
- ${GENERATOR_TARGETS}
+ generate_roff_man1_pages
+ generate_roff_man4_pages
+ generate_html_man_pages
${MAN1_INSTALL_FILES}
${MAN4_INSTALL_FILES}
${HTML_INSTALL_FILES}