Uniform behavior for 'make man' and 'make html'
authorTeemu Murtola <teemu.murtola@gmail.com>
Mon, 25 Nov 2013 18:11:33 +0000 (20:11 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Mon, 2 Dec 2013 14:55:40 +0000 (15:55 +0100)
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
CPackInit.cmake
share/CMakeLists.txt
share/html/CMakeLists.txt
share/man/CMakeLists.txt

index c0136750d19c69fc7503f66095f856b06acf305b..e59ab3aad18d79627957f01994b93fdce6a16970 100644 (file)
@@ -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!
index 85dc5a749100b2b80a342f92ef527704fecfecb5..122c751638ac86995d8c7a51421d1bf52a02eddf 100644 (file)
 #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()
index ced936850209743222e7b0bd9cc498c4b13ebbbd..e1cfc80e37b44ab8a7aafefbf8c2131c279f08c6 100644 (file)
 # 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
-)
index 3897d41ce98e7d1f91102c0a5531c69f380dd502..606d6cd423bd389d728344e0fe2bef9a3524a4de 100644 (file)
 # 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()
index 254a453995d374fda203b0fd1b8d004928f2f2ff..f61222e25117587baf42f98ae785dcbfa95df0f5 100644 (file)
 # 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()