From 2f14f66839a2541b439ab2c5a2876128e0a505a0 Mon Sep 17 00:00:00 2001 From: Teemu Murtola Date: Mon, 25 Nov 2013 20:11:33 +0200 Subject: [PATCH] Uniform behavior for 'make man' and 'make html' Both man and HTML pages are now generated and installed using similar installation rules. GMX_BUILD_HELP controls automatic generation of both. They are also put into the source distribution using the same mechanism for both. Part of #685 and #1242. Change-Id: Id61e75623861b46f765da49c4b34047a6b327083 --- CMakeLists.txt | 2 +- CPackInit.cmake | 8 +++--- share/CMakeLists.txt | 20 ++++++++------- share/html/CMakeLists.txt | 54 ++++++++++++++++++++++++--------------- share/man/CMakeLists.txt | 53 ++++++++++++++------------------------ 5 files changed, 69 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0136750d1..e59ab3aad1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,7 +114,7 @@ set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/admin/InstallInfo.txt") set(CPACK_SOURCE_IGNORE_FILES "\\\\.isreposource$;\\\\.git/;\\\\.gitignore$") set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_SOURCE_DIR}/CPackInit.cmake") -set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR};/;${CMAKE_BINARY_DIR}/share/man;share/man") +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "${CMAKE_SOURCE_DIR};/;${CMAKE_BINARY_DIR}/share/man1;share/man1;${CMAKE_BINARY_DIR}/share/man7;share/man7;${CMAKE_BINARY_DIR}/share/html/final;share/html/final") set(CPACK_PACKAGE_CONTACT "gmx-users@gromacs.org") #must come after all cpack settings! diff --git a/CPackInit.cmake b/CPackInit.cmake index 85dc5a7491..122c751638 100644 --- a/CPackInit.cmake +++ b/CPackInit.cmake @@ -35,10 +35,12 @@ #TODO: add check that source doesn't contain any untracked files if(CPACK_SOURCE_PACKAGE_FILE_NAME) #building source package get_filename_component(CMAKE_BINARY_DIR ${CPACK_OUTPUT_CONFIG_FILE} PATH) - if(NOT EXISTS "${CMAKE_BINARY_DIR}/share/man/man1/gmx-view.1") + if (NOT EXISTS "${CMAKE_BINARY_DIR}/share/man/man1/gmx-view.1" OR + NOT EXISTS "${CMAKE_BINARY_DIR}/share/html/final/online.html") message(FATAL_ERROR - "To create a complete source package all man pages need to be generated. " - "You need to run 'make man' or set GMX_BUILD_MANPAGES=ON to get " + "To create a complete source package all man and HTML pages need " + "to be generated. " + "You need to run 'make man html' or set GMX_BUILD_HELP=ON to get " "them automatically built together with the binaries.") endif() endif() diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index ced9368502..e1cfc80e37 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -32,6 +32,17 @@ # To help us fund GROMACS development, we humbly ask that you cite # the research papers on the package. Check out http://www.gromacs.org. +option(GMX_BUILD_HELP "Build man pages and HTML help automatically" OFF) +mark_as_advanced(GMX_BUILD_HELP) +if (GMX_BUILD_HELP AND SOURCE_IS_SOURCE_DISTRIBUTION AND + "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}") + + message(FATAL_ERROR + "Rebuilding HTML and man pages it not supported for in-source " + "builds from a source distribution. " + "Set GMX_BUILD_HELP=OFF or do an out-of-source build to proceed.") +endif() + add_subdirectory(html) add_subdirectory(man) add_subdirectory(template) @@ -43,12 +54,3 @@ install(DIRECTORY top DESTINATION ${DATA_INSTALL_DIR}/top COMPONENT data PATTERN "*~" EXCLUDE) - -install(DIRECTORY . DESTINATION ${DATA_INSTALL_DIR} - COMPONENT data - PATTERN "Makefile*" EXCLUDE - PATTERN "CMake*" EXCLUDE - PATTERN "cmake*" EXCLUDE - PATTERN "*~" EXCLUDE - PATTERN "template" EXCLUDE -) diff --git a/share/html/CMakeLists.txt b/share/html/CMakeLists.txt index 3897d41ce9..606d6cd423 100644 --- a/share/html/CMakeLists.txt +++ b/share/html/CMakeLists.txt @@ -32,28 +32,40 @@ # To help us fund GROMACS development, we humbly ask that you cite # the research papers on the package. Check out http://www.gromacs.org. -if(NOT CMAKE_CROSSCOMPILING) - set(CAN_BUILD_HTMLHELP ON) -else() - set(CAN_BUILD_HTMLHELP OFF) +set(OUTPUT_DIR final) + +if(SOURCE_IS_SOURCE_DISTRIBUTION) + # Make sure source package contains HTML pages. + if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${OUTPUT_DIR}/online.html") + message(FATAL_ERROR "Man pages are missing from source package.") + endif() endif() -if(CAN_BUILD_HTMLHELP) - set(OUTPUT_DIR final) - add_custom_target(html - ${CMAKE_COMMAND} - -D SOURCE_HTML_DIR=${CMAKE_CURRENT_SOURCE_DIR} - -D OUTPUT_DIR=${OUTPUT_DIR} - -D STEP=PRE - -P ${CMAKE_CURRENT_SOURCE_DIR}/BuildHtmlHelp.cmake - COMMAND gmx -quiet help -export html - COMMAND ${CMAKE_COMMAND} - -D SOURCE_HTML_DIR=${CMAKE_CURRENT_SOURCE_DIR} - -D OUTPUT_DIR=${OUTPUT_DIR} - -D STEP=POST - -P ${CMAKE_CURRENT_SOURCE_DIR}/BuildHtmlHelp.cmake - COMMENT "Generating HTML help" - VERBATIM) +add_custom_target(html + ${CMAKE_COMMAND} + -D SOURCE_HTML_DIR=${CMAKE_CURRENT_SOURCE_DIR} + -D OUTPUT_DIR=${OUTPUT_DIR} + -D STEP=PRE + -P ${CMAKE_CURRENT_SOURCE_DIR}/BuildHtmlHelp.cmake + COMMAND gmx -quiet help -export html + COMMAND ${CMAKE_COMMAND} + -D SOURCE_HTML_DIR=${CMAKE_CURRENT_SOURCE_DIR} + -D OUTPUT_DIR=${OUTPUT_DIR} + -D STEP=POST + -P ${CMAKE_CURRENT_SOURCE_DIR}/BuildHtmlHelp.cmake + COMMENT "Generating HTML help" + VERBATIM) + +set(HTML_PAGE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +if (GMX_BUILD_HELP) + set_target_properties(html PROPERTIES EXCLUDE_FROM_ALL OFF) set_directory_properties(PROPERTIES - ADDITIONAL_MAKE_CLEAN_FILES "${OUTPUT_DIR};header.html") + ADDITIONAL_MAKE_CLEAN_FILES "${OUTPUT_DIR};header.processed.html") + set(HTML_PAGE_DIR ${CMAKE_CURRENT_BINARY_DIR}) +endif() + +if (SOURCE_IS_SOURCE_DISTRIBUTION OR GMX_BUILD_HELP) + install(DIRECTORY ${HTML_PAGE_DIR}/${OUTPUT_DIR}/ + DESTINATION ${DATA_INSTALL_DIR}/html + COMPONENT html) endif() diff --git a/share/man/CMakeLists.txt b/share/man/CMakeLists.txt index 254a453995..f61222e251 100644 --- a/share/man/CMakeLists.txt +++ b/share/man/CMakeLists.txt @@ -32,51 +32,36 @@ # To help us fund GROMACS development, we humbly ask that you cite # the research papers on the package. Check out http://www.gromacs.org. -if(NOT SOURCE_IS_SOURCE_DISTRIBUTION) - if(NOT CMAKE_CROSSCOMPILING) - # Defaults to off to avoid breaking the build. - # Can be changed if someone finds a nice solution for cases where the - # binary does not execute on the compilation host. - option(GMX_BUILD_MANPAGES "Build man pages" OFF) - mark_as_advanced(GMX_BUILD_MANPAGES) - else() - message(STATUS "Building the man pages is not available when " - "cross-compiling the developer version from git") - endif() -else() +if(SOURCE_IS_SOURCE_DISTRIBUTION) # Make sure source package contains all man pages. if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/man1/gmx-view.1") message(FATAL_ERROR "Man pages are missing from source package.") endif() endif() -if(GMX_BUILD_MANPAGES) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man1) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man7) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/man7/gromacs.7.in - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/man7) - # TODO: It could be nicer to not do this as part of the ALL target, - # but instead on demand as part of make install. - add_custom_target(man ALL - gmx -quiet help -export man - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMENT "Generating man pages for programs" - VERBATIM) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man1 - DESTINATION ${MAN_INSTALL_DIR} - COMPONENT man) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man7/gromacs.7 - DESTINATION ${MAN_INSTALL_DIR}/man7 - COMPONENT man) +add_custom_target(man + ${CMAKE_COMMAND} -E make_directory man1 + COMMAND ${CMAKE_COMMAND} -E make_directory man7 + COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/man7/gromacs.7.in" man7/ + COMMAND gmx -quiet help -export man + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating man pages" + VERBATIM) + +set(MAN_PAGE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +if (GMX_BUILD_HELP) + set_target_properties(man PROPERTIES EXCLUDE_FROM_ALL OFF) set_directory_properties(PROPERTIES - ADDITIONAL_MAKE_CLEAN_FILES man1) + ADDITIONAL_MAKE_CLEAN_FILES "man1;man7/gromacs.7") + set(MAN_PAGE_DIR ${CMAKE_CURRENT_BINARY_DIR}) +endif() # man pages are only available if they are either build or this is a source archive -elseif(SOURCE_IS_SOURCE_DISTRIBUTION) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man7/gromacs.7 +if (SOURCE_IS_SOURCE_DISTRIBUTION OR GMX_BUILD_HELP) + install(FILES ${MAN_PAGE_DIR}/man7/gromacs.7 DESTINATION ${MAN_INSTALL_DIR}/man7 COMPONENT man) - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/man1 + install(DIRECTORY ${MAN_PAGE_DIR}/man1 DESTINATION ${MAN_INSTALL_DIR} COMPONENT man) endif() -- 2.22.0