Use CMake install for install-mdrun (bugs #549, #555)
authorTeemu Murtola <teemu.murtola@cbr.su.se>
Mon, 18 Oct 2010 10:47:18 +0000 (12:47 +0200)
committerTeemu Murtola <teemu.murtola@cbr.su.se>
Mon, 18 Oct 2010 10:47:18 +0000 (12:47 +0200)
The custom target install-mdrun now invokes the cmake_install.cmake
script that is generated by CMake to perform the actual installation.
Adds support for DESTDIR and RPATH rewriting (see bug #570).

To implement this, all installation targets are now grouped into
components: "data" for shared data, "development" for headers and
pkgconfig files, "libraries" for libraries needed by mdrun, "mdrun" for
mdrun itself, and "runtime" for other binaries and libraries.  Only
"mdrun" and "libraries" are used at the moment (the latter only when
installing with shared libraries).

Haven't tested this with Visual Studio, but if it doesn't work, it
should be easy to adapt.

include/CMakeLists.txt
man/CMakeLists.txt
scripts/CMakeLists.txt
share/CMakeLists.txt
src/gmxlib/CMakeLists.txt
src/kernel/CMakeLists.txt
src/mdlib/CMakeLists.txt
src/ngmx/CMakeLists.txt
src/tools/CMakeLists.txt

index c0248b9c2cf257c181499e4a4b480953da3b21ad..05b41fd8366783345984428c0d0b928a2e767cdc 100644 (file)
@@ -1,5 +1,6 @@
 # includes: Nothing to build, just installation
 install(DIRECTORY . DESTINATION ${INCL_INSTALL_DIR}/gromacs
+  COMPONENT development
   PATTERN "Makefile*" EXCLUDE
   PATTERN "CMake*" EXCLUDE
   PATTERN "cmake*" EXCLUDE
index 18cf1d1c47bffb116e7f37ebb6f4680a9e3f8fc3..82953fe841083efd853c2467e993a63dd2608863 100644 (file)
@@ -1,5 +1,6 @@
 # Man pages: Nothing to build, just installation
 install(DIRECTORY . DESTINATION ${MAN_INSTALL_DIR}
+  COMPONENT data
   PATTERN "Makefile*" EXCLUDE
   PATTERN "CMake*" EXCLUDE
   PATTERN "cmake*" EXCLUDE
index 87b51fce0dc33ec9ab3ae4114ad827f128f5ae9f..a89c958615d23f5134f0b84ee013035be0cea526 100644 (file)
@@ -3,14 +3,14 @@ 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})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.bash DESTINATION ${BIN_INSTALL_DIR})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.zsh  DESTINATION ${BIN_INSTALL_DIR})
-install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/GMXRC.csh  DESTINATION ${BIN_INSTALL_DIR})
+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)
 
 file(GLOB EXTRA_SCRIPTS completion.*)
-install(FILES ${EXTRA_SCRIPTS} DESTINATION ${BIN_INSTALL_DIR})
+install(FILES ${EXTRA_SCRIPTS} DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
 
-install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/demux.pl      DESTINATION ${BIN_INSTALL_DIR})
-install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/xplor2gmx.pl  DESTINATION ${BIN_INSTALL_DIR})
+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)
 
index 86f1a85517612e0c2b44243cd499f8eb32ecd4c9..dfebb7f8419c0108c7327b49f5605676f14d90d5 100644 (file)
@@ -1,9 +1,13 @@
 # Data: Nothing to build, just installation
 install(DIRECTORY . DESTINATION ${DATA_INSTALL_DIR}
+  COMPONENT data
   PATTERN "Makefile*" EXCLUDE
   PATTERN "CMake*" EXCLUDE
   PATTERN "cmake*" EXCLUDE
   PATTERN "*~" EXCLUDE
 )
 
-install(FILES template/CMakeLists.txt.template DESTINATION ${DATA_INSTALL_DIR} RENAME template/CMakeLists.txt)
+install(FILES template/CMakeLists.txt.template
+        DESTINATION ${DATA_INSTALL_DIR}
+        RENAME template/CMakeLists.txt
+        COMPONENT data)
index 4cbe2e9bdf7bce0b70faf5b3fd03405a6ed1b492..2e6bd32453d336b6409c3475495edbaf10cdbf6c 100644 (file)
@@ -135,8 +135,11 @@ target_link_libraries(gmx ${GMX_EXTRA_LIBRARIES}  ${THREAD_LIB})
 add_dependencies(gmx gmx_version) 
 set_target_properties(gmx PROPERTIES OUTPUT_NAME "gmx${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
 
-install(TARGETS gmx DESTINATION ${LIB_INSTALL_DIR})
+install(TARGETS gmx DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libgmx.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libgmx.pc @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmx.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig RENAME "libgmx${GMX_LIBS_SUFFIX}.pc")
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmx.pc
+        DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
+        RENAME "libgmx${GMX_LIBS_SUFFIX}.pc"
+        COMPONENT development)
 
index e6f701c825715153c135d63e4f181d30d9c72988..2e73c17957f9d36a5a69115a88f7a4d511dd0126 100644 (file)
@@ -40,7 +40,6 @@ set(MDRUN_SOURCES
 add_library(gmxpreprocess ${GMXPREPROCESS_SOURCES})
 target_link_libraries(gmxpreprocess md)
 set_target_properties(gmxpreprocess PROPERTIES OUTPUT_NAME "gmxpreprocess${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
-set_target_properties(md PROPERTIES OUTPUT_NAME "md${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
 
 
 if(GMX_OPENMM) 
@@ -110,6 +109,8 @@ if(GMX_OPENMM AND MSVC)
 endif()
 
 
+install(TARGETS gmxpreprocess DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
+install(TARGETS mdrun DESTINATION ${BIN_INSTALL_DIR} COMPONENT mdrun)
 install(TARGETS 
         grompp
         tpbconv
@@ -119,57 +120,30 @@ install(TARGETS
         gmxdump
         g_x2top
         gmxcheck
-        mdrun
-       gmxpreprocess DESTINATION ${LIB_INSTALL_DIR}
+        COMPONENT runtime
         RUNTIME DESTINATION ${BIN_INSTALL_DIR})
 
-
-# if we build shared gromacs libs, when installing throught the install-mdrun target 
-# these libs need to be installed as well
-if(BUILD_SHARED_LIBS)
-    # in MDRUN_LIBS we store the libraries MDRUN links against (NOTE: hardcoded!!!)
-    set(MDRUN_LIBS gmxpreprocess md gmx)
-    
-    # generate install-libXXX custom target for each shared lib that mdrun links against
-    foreach(_lib ${MDRUN_LIBS})
-        # double-check that the type is SHARED
-        get_target_property(_type ${_lib} TYPE)
-        if(NOT ${_type} STREQUAL "SHARED_LIBRARY")
-            message(FATAL_ERROR " Internal error: library ${_lib} is not shared so it's not supposed to be processed for installing")
-        endif()
-
-        # figure out the path and filename under which the lib will be installed
-        # (libname with pre- and suffix)
-        get_target_property(_lib_path ${_lib} LOCATION)
-        string(REGEX REPLACE "/" ";" _lib_fname ${_lib_path})
-        list(REVERSE _lib_fname)
-        list(GET _lib_fname 0 _lib_fname)
-
-        # create custom target for copying each library to the install location 
-        # TODO: need to fix this to have the .so.6 form
-        add_custom_target(install-${_lib}
-            COMMAND ${CMAKE_COMMAND} -E copy 
-                "${_lib_path}" "${LIB_INSTALL_DIR}/${_lib_fname}.${SOVERSION}"
-            COMMAND ${CMAKE_COMMAND} -E create_symlink 
-                "${_lib_fname}.${SOVERSION}" "${LIB_INSTALL_DIR}/${_lib_fname}"
-            COMMENT "Installing library ${_lib}")
-        add_dependencies(install-${_lib} ${_lib})
-
-        # gather the custom target names in a string
-        # set(_lib_install_targets "${_lib_install_targets} install-lib${_lib}")
-        list(APPEND _lib_install_targets "install-${_lib}")
-    endforeach(_lib)
-endif(BUILD_SHARED_LIBS)
-
-get_target_property(_mdrun_path mdrun LOCATION)
-add_custom_target(install-mdrun
-    COMMAND ${CMAKE_COMMAND} -E copy "${_mdrun_path}" 
-        "${BIN_INSTALL_DIR}/${_mdrun_exec_name}"
-    COMMENT "Installing mdrun")
-add_dependencies(install-mdrun mdrun ${_lib_install_targets})
+# Create the custom install-mdrun target
+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)
 
 endif(GMX_FAHCORE)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libgmxpreprocess.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libgmxpreprocess.pc @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxpreprocess.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig 
-  RENAME "libgmxpreprocess${GMX_LIBS_SUFFIX}.pc")
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxpreprocess.pc
+        DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
+        RENAME "libgmxpreprocess${GMX_LIBS_SUFFIX}.pc"
+        COMPONENT development)
index 967632833e437f0d539cd49ed20f0f85343ebf53..18f3a6e3370eb2f86c5ffd797bd2497990b59765 100644 (file)
@@ -8,9 +8,12 @@ list(REMOVE_ITEM MDLIB_SOURCES ${NOT_MDLIB_SOURCES})
 
 add_library(md ${MDLIB_SOURCES})
 target_link_libraries(md gmx ${GMX_EXTRA_LIBRARIES} ${FFT_LIBRARIES} ${XML_LIBRARIES})
-set_target_properties(md PROPERTIES OUTPUT_NAME "md${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION})
+set_target_properties(md PROPERTIES OUTPUT_NAME "md${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
 
-install(TARGETS md DESTINATION ${LIB_INSTALL_DIR})
+install(TARGETS md DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libmd.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libmd.pc @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libmd.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig RENAME "libmd${GMX_LIBS_SUFFIX}.pc")
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libmd.pc
+        DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
+        RENAME "libmd${GMX_LIBS_SUFFIX}.pc"
+        COMPONENT development)
index 753f4436cfd436164bf42e69ee76390130ebc4e5..1721941b6afddc751243f0f8dd2044b2fb21a6ce 100644 (file)
@@ -24,6 +24,7 @@ foreach(PROG ${NGMX_PROGRAMS})
 endforeach(PROG) 
 
 install(TARGETS ${NGMX_PROGRAMS}
+        COMPONENT ngmx
         RUNTIME DESTINATION ${BIN_INSTALL_DIR})
 
 endif(X11_FOUND)
index 0b05ab3670097d835c9bdba9826a62c5fd03cb22..79a84a49ae1836f3d9a02b7aae5de531b214e7ce 100644 (file)
@@ -62,9 +62,13 @@ foreach(TOOL ${GMX_TOOLS_PROGRAMS})
 endforeach(TOOL ${GMX_TOOLS_PROGRAMS}) 
 
 
+install(TARGETS gmxana DESTINATION ${LIB_INSTALL_DIR} COMPONENT runtime)
 install(TARGETS ${GMX_TOOLS_PROGRAMS}
-       gmxana DESTINATION ${LIB_INSTALL_DIR}   
-       RUNTIME DESTINATION ${BIN_INSTALL_DIR})
+        DESTINATION ${BIN_INSTALL_DIR}
+        COMPONENT runtime)
 
 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libgmxana.pc.cmakein ${CMAKE_CURRENT_BINARY_DIR}/libgmxana.pc @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxana.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig RENAME "libgmxana${GMX_LIBS_SUFFIX}.pc")
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libgmxana.pc
+        DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
+        RENAME "libgmxana${GMX_LIBS_SUFFIX}.pc"
+        COMPONENT development)