| # 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() |