| # COPYRIGHT (c) 2017-2018 Mellanox Technologies Ltd | |
| # Licensed under BSD (MIT variant) or GPLv2. See COPYING. | |
| rdma_make_dir("${PROJECT_BINARY_DIR}/pandoc-prebuilt") | |
| add_custom_target("docs" ALL DEPENDS "${OBJ}") | |
| function(rdma_man_get_prebuilt SRC OUT) | |
| # If rst2man is not installed then we install the man page from the | |
| # pre-built cache directory under buildlib. When the release tar file is | |
| # made the man pages are pre-built and included. This is done via install | |
| # so that ./build.sh never depends on pandoc, only 'ninja install'. | |
| execute_process( | |
| COMMAND "${PYTHON_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/buildlib/pandoc-prebuilt.py" --retrieve "${PROJECT_SOURCE_DIR}" "${SRC}" | |
| WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | |
| OUTPUT_VARIABLE OBJ | |
| RESULT_VARIABLE retcode) | |
| if(NOT "${retcode}" STREQUAL "0") | |
| message(FATAL_ERROR "Failed to load prebuilt pandoc output") | |
| endif() | |
| set(${OUT} "${OBJ}" PARENT_SCOPE) | |
| endfunction() | |
| function(rdma_md_man_page SRC MAN_SECT MANFN) | |
| set(OBJ "${CMAKE_CURRENT_BINARY_DIR}/${MANFN}") | |
| if (PANDOC_EXECUTABLE) | |
| add_custom_command( | |
| OUTPUT "${OBJ}" | |
| COMMAND "${PYTHON_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/buildlib/pandoc-prebuilt.py" --build "${PROJECT_BINARY_DIR}" --pandoc "${PANDOC_EXECUTABLE}" "${SRC}" "${OBJ}" | |
| MAIN_DEPENDENCY "${SRC}" | |
| WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | |
| COMMENT "Creating man page ${MANFN}" | |
| VERBATIM) | |
| add_custom_target("man-${MANFN}" ALL DEPENDS "${OBJ}") | |
| add_dependencies("docs" "man-${MANFN}") | |
| else() | |
| rdma_man_get_prebuilt(${SRC} OBJ) | |
| endif() | |
| install(FILES "${OBJ}" | |
| RENAME "${MANFN}" | |
| DESTINATION "${CMAKE_INSTALL_MANDIR}/man${MAN_SECT}/") | |
| endfunction() | |
| function(rdma_rst_man_page SRC MAN_SECT MANFN) | |
| set(OBJ "${CMAKE_CURRENT_BINARY_DIR}/${MANFN}") | |
| if (RST2MAN_EXECUTABLE) | |
| add_custom_command( | |
| OUTPUT "${OBJ}" | |
| COMMAND "${PYTHON_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/buildlib/pandoc-prebuilt.py" --build "${PROJECT_BINARY_DIR}" --rst "${RST2MAN_EXECUTABLE}" "${SRC}" "${OBJ}" | |
| MAIN_DEPENDENCY "${SRC}" | |
| WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" | |
| COMMENT "Creating man page ${MANFN}" | |
| VERBATIM) | |
| add_custom_target("man-${MANFN}" ALL DEPENDS "${OBJ}") | |
| add_dependencies("docs" "man-${MANFN}") | |
| else() | |
| rdma_man_get_prebuilt(${SRC} OBJ) | |
| endif() | |
| install(FILES "${OBJ}" | |
| RENAME "${MANFN}" | |
| DESTINATION "${CMAKE_INSTALL_MANDIR}/man${MAN_SECT}/") | |
| endfunction() | |
| # Install man pages. This deduces the section from the trailing integer in the | |
| # filename | |
| function(rdma_man_pages) | |
| foreach(I ${ARGN}) | |
| if ("${I}" MATCHES "\\.md$") | |
| string(REGEX REPLACE "^.+[.](.+)\\.md$" "\\1" MAN_SECT "${I}") | |
| string(REGEX REPLACE "^(.+)\\.md$" "\\1" BASE_NAME "${I}") | |
| get_filename_component(BASE_NAME "${BASE_NAME}" NAME) | |
| rdma_md_man_page( | |
| "${I}" | |
| "${MAN_SECT}" | |
| "${BASE_NAME}") | |
| elseif ("${I}" MATCHES "\\.in\\.rst$") | |
| string(REGEX REPLACE "^.+[.](.+)\\.in\\.rst$" "\\1" MAN_SECT "${I}") | |
| string(REGEX REPLACE "^(.+)\\.in\\.rst$" "\\1" BASE_NAME "${I}") | |
| get_filename_component(BASE_NAME "${BASE_NAME}" NAME) | |
| configure_file("${I}" "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.rst" @ONLY) | |
| rdma_rst_man_page( | |
| "${CMAKE_CURRENT_BINARY_DIR}/${BASE_NAME}.rst" | |
| "${MAN_SECT}" | |
| "${BASE_NAME}") | |
| elseif ("${I}" MATCHES "\\.in$") | |
| string(REGEX REPLACE "^.+[.](.+)\\.in$" "\\1" MAN_SECT "${I}") | |
| string(REGEX REPLACE "^(.+)\\.in$" "\\1" BASE_NAME "${I}") | |
| get_filename_component(BASE_NAME "${BASE_NAME}" NAME) | |
| rdma_subst_install(FILES "${I}" | |
| DESTINATION "${CMAKE_INSTALL_MANDIR}/man${MAN_SECT}/" | |
| RENAME "${BASE_NAME}") | |
| else() | |
| string(REGEX REPLACE "^.+[.](.+)$" "\\1" MAN_SECT "${I}") | |
| install(FILES "${I}" DESTINATION "${CMAKE_INSTALL_MANDIR}/man${MAN_SECT}/") | |
| endif() | |
| endforeach() | |
| endfunction() | |
| # Create an alias for a man page, using a symlink. | |
| # Input is a list of pairs of names (MAN_PAGE ALIAS) | |
| # NOTE: The section must currently be the same for both. | |
| function(rdma_alias_man_pages) | |
| list(LENGTH ARGN LEN) | |
| math(EXPR LEN ${LEN}-1) | |
| foreach(I RANGE 0 ${LEN} 2) | |
| list(GET ARGN ${I} FROM) | |
| math(EXPR I ${I}+1) | |
| list(GET ARGN ${I} TO) | |
| string(REGEX REPLACE "^.+[.](.+)$" "\\1" MAN_SECT ${FROM}) | |
| rdma_install_symlink("${FROM}" "${CMAKE_INSTALL_MANDIR}/man${MAN_SECT}/${TO}") | |
| endforeach() | |
| endfunction() |