86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | set (ASCIIDOC_MANS | ||
|  |   man1/wsjtx.1.txt | ||
|  |   man1/wsprd.1.txt | ||
|  |   man1/jt65code.1.txt | ||
|  |   man1/rigctl-wsjtx.1.txt | ||
|  |   man1/rigctld-wsjtx.1.txt | ||
|  |   man1/message_aggregator.1.txt | ||
|  |   man1/udp_daemon.1.txt | ||
|  |   ) | ||
|  | 
 | ||
|  | find_program (A2X_EXECUTABLE NAMES a2x a2x.py) | ||
|  | if (NOT A2X_EXECUTABLE) | ||
|  |   if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") | ||
|  |     message (SEND_ERROR "Failed to find a2x which is an optional requirement for non-debug | ||
|  | builds on *nix platforms. | ||
|  | 
 | ||
|  | You can choose to skip manpage generation and this error by setting | ||
|  | the CMake option WSJT_SKIP_MANPAGES to ON. This option is designed for | ||
|  | those that are building for their own use, package builders should not | ||
|  | opt to skip manpage generation since package building requires the | ||
|  | manpages.") | ||
|  | 
 | ||
|  |   else (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") | ||
|  |     message (WARNING "Failed to find a2x skipping manpage generation.") | ||
|  |   endif (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") | ||
|  | endif () | ||
|  | find_program (GZIP_EXECUTABLE NAMES gzip) | ||
|  | find_program (SED_EXECUTABLE NAMES sed) | ||
|  | 
 | ||
|  | set (XSLTPROC_OPTS  | ||
|  |   "-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0" | ||
|  |   ) | ||
|  | set (A2X_OPTS | ||
|  |   --format=manpage | ||
|  |   --xsltproc-opts=${XSLTPROC_OPTS} | ||
|  |   --doctype=manpage | ||
|  |   --no-xmllint | ||
|  |   -a VERSION=${wsjtx_VERSION} | ||
|  |   ) | ||
|  | 
 | ||
|  | set (MANPAGES) | ||
|  | if (A2X_EXECUTABLE AND GZIP_EXECUTABLE AND SED_EXECUTABLE) | ||
|  |   foreach (f IN LISTS ASCIIDOC_MANS) | ||
|  |     get_filename_component (d "${f}" PATH) | ||
|  |     string (SUBSTRING "${d}" 3 -1 section) | ||
|  |     if (NOT section MATCHES "[1-9]") | ||
|  |       message (SEND_ERROR "Invalid man section ${section} in ${f}") | ||
|  |     endif (NOT section MATCHES "[1-9]") | ||
|  |     get_filename_component (filename "${f}" NAME) | ||
|  |     get_filename_component (filename_we "${f}" NAME_WE) | ||
|  |     set (f "${CMAKE_CURRENT_SOURCE_DIR}/${f}") | ||
|  |     set (d "man/${d}") | ||
|  |     set (o "${d}/${filename_we}.${section}.gz") | ||
|  |     add_custom_command (OUTPUT "${o}" | ||
|  |       COMMAND ${CMAKE_COMMAND} ARGS -E make_directory "${d}" | ||
|  |       COMMAND ${CMAKE_COMMAND} ARGS -E copy "${f}" "${d}" | ||
|  |       COMMAND ${A2X_EXECUTABLE} ARGS ${A2X_OPTS} "${d}/${filename}" | ||
|  |       COMMAND ${CMAKE_COMMAND} ARGS -E remove "${d}/${filename}" | ||
|  | # | ||
|  | # the following edit command is used to make the alias manpages | ||
|  | # compatible with Debian packaging rules when a2x generates alias | ||
|  | # pages baseed in the section directory instead of the man parent | ||
|  | # directory | ||
|  | # | ||
|  |       COMMAND ${SED_EXECUTABLE} ARGS -e '/^.so [^\\/]*$$/s@.so @&man${section}\\/@' -i.orig "${d}/*.${section}" | ||
|  |       COMMAND ${GZIP_EXECUTABLE} ARGS -f9 "${d}/*.${section}" | ||
|  |       DEPENDS "${f}" "${previous_output}" | ||
|  |       COMMENT "Generating ${o}" | ||
|  |       ) | ||
|  |     list (APPEND MANPAGES "${o}") | ||
|  | 
 | ||
|  |     # use this as a dependency in the next iteration to serialize so | ||
|  |     # that gzips don't overlap in parallel builds | ||
|  |     set (previous_output "${o}") | ||
|  |   endforeach () | ||
|  | 
 | ||
|  |   install ( | ||
|  |     DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man/ | ||
|  |     DESTINATION ${CMAKE_INSTALL_MANDIR} | ||
|  |     PATTERN "*.orig" EXCLUDE | ||
|  |     #COMPONENT Runtime | ||
|  |     ) | ||
|  | endif (A2X_EXECUTABLE AND GZIP_EXECUTABLE AND SED_EXECUTABLE) | ||
|  | 
 | ||
|  | add_custom_target (manpages DEPENDS ${MANPAGES}) |