Update use of CPack components and add install targets
authorMark Abraham <mark.j.abraham@gmail.com>
Wed, 22 Aug 2012 08:21:34 +0000 (18:21 +1000)
committerMark Abraham <mark.j.abraham@gmail.com>
Fri, 31 Aug 2012 10:10:11 +0000 (20:10 +1000)
* Removed component runtime and replaced it with component "scripts",
a component for each tool, and the component group tools. This means
CPack is capable of dealing with a single tool, or with the whole
group.
* Moved gmxpreprocess library to libraries component.
* Created CPack dependencies so that shared libraries accompany
executables.
* Created non-CPack install targets for each GROMACS tool, e.g.
"make install-grompp". Shared libraries are installed with these
tools as appropriate. Using library suffices could be right here,
but that's the user's problem to solve.

Development, regression testing and bug testing is more convenient if
you can easily build and install just a subset of tools. This could
always have been done with CMake black magic, but these targets makes
lives easier. Also users can now easily install MPI or
double-precision flavours of selected tools as suitable.

Change-Id: I1053f7ff91d50169ac930f1ac5b84378d3ab2e67

CMakeLists.txt
scripts/CMakeLists.txt
src/kernel/CMakeLists.txt
src/tools/CMakeLists.txt

index aae25695b867b473624b90a48a0f69498989d44e..4d16ee059ba320b61e236946c8cfcae689a617e9 100644 (file)
@@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 2.8)
 # Keep CMake suitably quiet on Cygwin
 set(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
 
+# Allows CPack to act differently for normal tools and mdrun (e.g. because of MPI)
+set(CPACK_COMPONENT_GROUP_TOOLS_DESCRIPTION "All GROMACS executable tools")
+set(CPACK_COMPONENT_GROUP_MDRUN_DESCRIPTION "GROMACS executable for running simulations")
+
 # override bugs on OS X where Cmake picks gcc (GNU) for C instead of system default cc (Clang).
 if(APPLE)
     set(CMAKE_C_COMPILER_INIT "cc")
index a89c958615d23f5134f0b84ee013035be0cea526..2e0b89b5026aa16a75c2457bc4e1575a55920c9c 100644 (file)
@@ -3,14 +3,15 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GMXRC.bash.cmakein ${CMAKE_CURRENT_BI
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GMXRC.csh.cmakein  ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.csh @ONLY)
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GMXRC.zsh.cmakein  ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh @ONLY)
 
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC      DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.bash DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh  DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.csh  DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC      DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.bash DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh  DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
+install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.csh  DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
 
 file(GLOB EXTRA_SCRIPTS completion.*)
-install(FILES ${EXTRA_SCRIPTS} DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
+install(FILES ${EXTRA_SCRIPTS} DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
 
-install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/demux.pl      DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
-install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/xplor2gmx.pl  DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
+install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/demux.pl      DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
+install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/xplor2gmx.pl  DESTINATION ${BIN_INSTALL_DIR} COMPONENT scripts)
 
+set(CPACK_COMPONENT_SCRIPTS_GROUP tools)
index 218e9c3b7630cd93906fb0daccf1d422f4cb531b..50f77476416a1d1045fb450c7dbbefe2bbf094c7 100644 (file)
@@ -89,29 +89,40 @@ if(GMX_OPENMM AND MSVC)
     set_target_properties(mdrun PROPERTIES LINK_FLAGS "/NODEFAULTLIB:LIBCMT")
 endif()
 
+# Construct component groups for installation
+foreach(PROGRAM ${GMX_KERNEL_PROGRAMS} mdrun)
+    set(CPACK_COMPONENT_${PROGRAM}_GROUP tools)
+endforeach()
+set(CPACK_COMPONENT_MDRUN_GROUP mdrun)
 
-install(TARGETS gmxpreprocess DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
-install(TARGETS mdrun DESTINATION ${BIN_INSTALL_DIR} COMPONENT mdrun)
-install(TARGETS ${GMX_KERNEL_PROGRAMS} COMPONENT runtime
-        RUNTIME DESTINATION ${BIN_INSTALL_DIR})
-
-# Create the custom install-mdrun target
-if (BUILD_SHARED_LIBS)
+# Create custom install-xxxx targets, component dependences,
+# and trigger the installation
+foreach(PROGRAM ${GMX_KERNEL_PROGRAMS} mdrun)
+    set(CPACK_COMPONENT_${PROGRAM}_DEPENDS libraries)
+    if (BUILD_SHARED_LIBS)
     # If shared libraries are used, we need to install the libraries in
     # addition to the mdrun binary.
-    add_custom_target(install-mdrun
-        COMMAND ${CMAKE_COMMAND} -DCOMPONENT=libraries
-                -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
-        COMMAND ${CMAKE_COMMAND} -DCOMPONENT=mdrun
-                -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
-        COMMENT "Installing mdrun")
-else (BUILD_SHARED_LIBS)
-    add_custom_target(install-mdrun
-        COMMAND ${CMAKE_COMMAND} -DCOMPONENT=mdrun
-                -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
-        COMMENT "Installing mdrun")
-endif (BUILD_SHARED_LIBS)
-add_dependencies(install-mdrun mdrun)
+       add_custom_target(install-${PROGRAM}
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=libraries
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${PROGRAM}
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMENT "Installing ${PROGRAM}")
+    else()
+       add_custom_target(install-${PROGRAM}
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${PROGRAM}
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMENT "Installing ${PROGRAM}")
+    endif()
+    add_dependencies(install-${PROGRAM} ${PROGRAM})
+    install(
+      TARGETS ${PROGRAM}
+      COMPONENT ${PROGRAM}
+      DESTINATION ${BIN_INSTALL_DIR}
+      )
+endforeach()
+
+install(TARGETS gmxpreprocess DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
 
 endif(GMX_FAHCORE)
 
index d5833701aa3dc559a7bf80b9128d37c8b86dc0f3..4c07ad9c5e50e3ed7fe5a11ca567227d7649c7e2 100644 (file)
@@ -66,18 +66,43 @@ set(GMX_TOOLS_PROGRAMS_NOT_FOR_INSTALLATION
 
 foreach(TOOL ${GMX_TOOLS_PROGRAMS} ${GMX_TOOLS_PROGRAMS_NOT_FOR_INSTALLATION})
     add_executable(${TOOL} ${TOOL}.c)
+    target_link_libraries(${TOOL} gmxana ${OpenMP_LINKER_FLAGS})
+    set_target_properties(${TOOL} PROPERTIES OUTPUT_NAME "${TOOL}${GMX_BINARY_SUFFIX}")
+endforeach()
+
+foreach(TOOL ${GMX_TOOLS_PROGRAMS})
     if (NOT ${TOOL} STREQUAL "g_options")
         gmx_add_man_page(${TOOL})
     endif()
-    target_link_libraries(${TOOL} gmxana ${OpenMP_LINKER_FLAGS})
-    set_target_properties(${TOOL} PROPERTIES OUTPUT_NAME "${TOOL}${GMX_BINARY_SUFFIX}")
-endforeach(TOOL ${GMX_TOOLS_PROGRAMS}) 
 
+    # Create custom install-xxxx targets, manage components and
+    # component groups, and trigger the installation
+    set(CPACK_COMPONENT_${TOOL}_DEPENDS libraries)
+    set(CPACK_COMPONENT_${TOOL}_GROUP tools)
+    if (BUILD_SHARED_LIBS)
+    # If shared libraries are used, we need to install the libraries in
+    # addition to the tool binary.
+       add_custom_target(install-${TOOL}
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=libraries
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${TOOL}
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMENT "Installing ${TOOL}")
+    else()
+       add_custom_target(install-${TOOL}
+           COMMAND ${CMAKE_COMMAND} -DCOMPONENT=${TOOL}
+                   -P ${CMAKE_BINARY_DIR}/cmake_install.cmake
+           COMMENT "Installing ${TOOL}")
+    endif()
+    add_dependencies(install-${TOOL} ${TOOL})
+    install(
+      TARGETS ${TOOL}
+      COMPONENT ${TOOL}
+      DESTINATION ${BIN_INSTALL_DIR}
+      )
+endforeach()
 
-install(TARGETS gmxana DESTINATION ${LIB_INSTALL_DIR} COMPONENT runtime)
-install(TARGETS ${GMX_TOOLS_PROGRAMS}
-        DESTINATION ${BIN_INSTALL_DIR}
-        COMPONENT runtime)
+install(TARGETS gmxana DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libgmxana.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libgmxana.pc @ONLY)
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxana.pc