Fix linker path for MacOS
authorRoland Schulz <roland@utk.edu>
Thu, 22 Nov 2012 05:33:36 +0000 (00:33 -0500)
committerRoland Schulz <roland@utk.edu>
Thu, 22 Nov 2012 05:41:38 +0000 (00:41 -0500)
- Use rpath on MacOS if supported. Makes the installation relocatable
as on Linux. Also fixes it if rpath is not available. The
INSTALL_NAME_DIR was wrong since we are using relative install.
- Fix also that BUILD_RPATH isn't needed anymore because of ORIGIN.
Avoids relinking before installation.

Change-Id: I0f2499ed8052259afe8facd1d93ea849e0cb99c8

12 files changed:
CMakeLists.txt
src/gromacs/CMakeLists.txt
src/programs/g_ana/CMakeLists.txt
src/programs/g_protonate/CMakeLists.txt
src/programs/g_x2top/CMakeLists.txt
src/programs/gmxcheck/CMakeLists.txt
src/programs/gmxdump/CMakeLists.txt
src/programs/grompp/CMakeLists.txt
src/programs/mdrun/CMakeLists.txt
src/programs/pdb2gmx/CMakeLists.txt
src/programs/tpbconv/CMakeLists.txt
src/tools/CMakeLists.txt

index 411b97b155fbb4f14b963bbd5557c76a7e566d9d..6921a92e44c013be8aa6394ab15d70abfd7b1d91 100644 (file)
@@ -226,7 +226,7 @@ if(GMX_OPENMP)
         #- cmake on windows doesn't support linker flags passed to target_link_libraries
         #  (cmake treats /openmp as \openmp library file) and no openmp linker flags are needed
         if(NOT (WIN32 AND NOT CYGWIN))
-            if(CMAKE_COMPILER_IS_GNUCC AND GMX_PREFER_STATIC_OPENMP)
+            if(CMAKE_COMPILER_IS_GNUCC AND GMX_PREFER_STATIC_OPENMP AND NOT APPLE)
                 set(OpenMP_LINKER_FLAGS "-Wl,-static -lgomp -lrt -Wl,-Bdynamic -lpthread")
                 set(OpenMP_SHARED_LINKER_FLAGS "")
             else()
@@ -1096,8 +1096,9 @@ if(NOT GMX_OPENMP)
     #or because it was only partially detected (e.g. only for C but not C++ compiler)
     unset(OpenMP_C_FLAGS CACHE) 
     unset(OpenMP_CXX_FLAGS CACHE)
-    unset(OpenMP_LINKER_FLAGS CACHE)
-    unset(OpenMP_SHARED_LINKER_FLAGS)
+else()
+    set(GMX_EXE_LINKER_FLAGS ${GMX_EXE_LINKER_FLAGS} ${OpenMP_LINKER_FLAGS})
+    set(GMX_SHARED_LINKER_FLAGS ${GMX_SHARED_LINKER_FLAGS} ${OpenMP_SHARED_LINKER_FLAGS})
 endif()
 ######################################
 # Output compiler and CFLAGS used
@@ -1140,13 +1141,20 @@ set(INCL_INSTALL_DIR ${GMX_INSTALL_PREFIX}include)
 set(GMXLIBDIR        ${DATA_INSTALL_DIR}/top)
 
 ##################################################################
-# Shared library settings - Darwin uses INSTALL_NAME_DIR instead!
+# Shared library settings
 ##################################################################
 if(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
     set(CMAKE_SKIP_BUILD_RPATH  FALSE)
     set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
     set(CMAKE_INSTALL_RPATH "\\\$ORIGIN/../${GMXLIB}")
     set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+else()
+    if(CMAKE_SYSTEM_VERSION VERSION_GREATER 8.0) #rpath supported for >10.4
+        set(CMAKE_INSTALL_NAME_DIR "@rpath")
+        set(GMX_EXE_LINKER_FLAGS ${GMX_EXE_LINKER_FLAGS} "-Wl,-rpath,@executable_path/../lib")
+    else()
+        set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}")
+    endif()
 endif()
 
 #COPYING file: Only necessary for binary distributions.
index cb0111d4d7f30f0eab766f0328adab7a43537bb8..8fef9dc243faed2f227ea2a1d361303e90ad2c1b 100644 (file)
@@ -62,11 +62,10 @@ endif ()
 
 target_link_libraries(libgromacs ${GMX_GPU_LIBRARIES}
                       ${GMX_EXTRA_LIBRARIES} ${FFT_LIBRARIES} ${XML_LIBRARIES}
-                      ${THREAD_LIB} ${OpenMP_SHARED_LINKER_FLAGS})
+                      ${THREAD_LIB} ${GMX_SHARED_LINKER_FLAGS})
 set_target_properties(libgromacs PROPERTIES
                       OUTPUT_NAME "gromacs${GMX_LIBS_SUFFIX}"
                       SOVERSION ${SOVERSION}
-                      INSTALL_NAME_DIR "${LIB_INSTALL_DIR}"
                       COMPILE_FLAGS "${OpenMP_C_FLAGS}")
 
 install(TARGETS libgromacs DESTINATION ${LIB_INSTALL_DIR} COMPONENT libraries)
index 3b2c360275bb55d8f9fdc147e79eb22a71b875f4..ca7dca6c50afd937d8b5e78f5f5ee8d5ce6bba3f 100644 (file)
@@ -1,5 +1,5 @@
 add_executable(g_ana g_ana.cpp)
-target_link_libraries(g_ana libgromacs)
+target_link_libraries(g_ana libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(g_ana PROPERTIES OUTPUT_NAME "g_ana${GMX_BINARY_SUFFIX}")
 
 install(TARGETS g_ana
index 60645be5e1325080532be8dde56aa934b8e18628..b330f848880274dcf3ad23c0c8e6809a162f6894 100644 (file)
@@ -4,6 +4,6 @@ file(GLOB PROTONATE_SOURCES g_protonate.c)
 
 add_executable(g_protonate ${PROTONATE_SOURCES})
 gmx_add_man_page(g_protonate)
-target_link_libraries(g_protonate ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(g_protonate ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(g_protonate PROPERTIES OUTPUT_NAME "g_protonate${GMX_BINARY_SUFFIX}")
 install(TARGETS g_protonate DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index 0e5549620076f9e7a8c52287ac9fd9b5be4d5353..6d965db387f1024b567fa4a5ec2302ee26a98c9c 100644 (file)
@@ -4,6 +4,6 @@ file(GLOB X2TOP_SOURCES g_x2top.c nm2type.c)
 
 add_executable(g_x2top ${X2TOP_SOURCES})
 gmx_add_man_page(g_x2top)
-target_link_libraries(g_x2top ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(g_x2top ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(g_x2top PROPERTIES OUTPUT_NAME "g_x2top${GMX_BINARY_SUFFIX}")
 install(TARGETS g_x2top DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index 8a38a59a63b25babf322b859cbef3335aeda5751..aa2342e945d04d73e115532f585cdfaf203d8380 100644 (file)
@@ -2,6 +2,6 @@ file(GLOB GMXCHECK_SOURCES gmxcheck.c tpbcmp.c)
 
 add_executable(gmxcheck ${GMXCHECK_SOURCES})
 gmx_add_man_page(gmxcheck)
-target_link_libraries(gmxcheck ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(gmxcheck ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(gmxcheck PROPERTIES OUTPUT_NAME "gmxcheck${GMX_BINARY_SUFFIX}")
 install(TARGETS gmxcheck DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index 9ce84757d39a590b5475ba25518898a349428f7a..821a04135c874e77e19f90c5a0d2ec49c9aa1a12 100644 (file)
@@ -2,6 +2,6 @@ file(GLOB GMXDUMP_SOURCES gmxdump.c)
 
 add_executable(gmxdump ${GMXDUMP_SOURCES})
 gmx_add_man_page(gmxdump)
-target_link_libraries(gmxdump ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(gmxdump ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(gmxdump PROPERTIES OUTPUT_NAME "gmxdump${GMX_BINARY_SUFFIX}")
 install(TARGETS gmxdump DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index d8a437cffe23cce55ebb9aa6b4cb93b821fd364c..5d1eaadf313890507967c65e71cff2b792b22b50 100644 (file)
@@ -4,6 +4,6 @@ file(GLOB GROMPP_SOURCES *.c)
 
 add_executable(grompp ${GROMPP_SOURCES})
 gmx_add_man_page(grompp)
-target_link_libraries(grompp ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(grompp ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(grompp PROPERTIES OUTPUT_NAME "grompp${GMX_BINARY_SUFFIX}")
 install(TARGETS grompp DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index 85f65b9a96dd88945182374f3f3d70863a72699d..7a4118251cb5fb21a7b8a2d2ef720c87fbce09a5 100644 (file)
@@ -23,7 +23,7 @@ else(GMX_FAHCORE)
     add_executable(mdrun ${MDRUN_SOURCES})
     gmx_add_man_page(mdrun)
     target_link_libraries(mdrun ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_OPENMM_LIBRARIES}
-        ${OpenMP_LINKER_FLAGS})
+        ${GMX_EXE_LINKER_FLAGS})
     set_target_properties(mdrun PROPERTIES OUTPUT_NAME "mdrun${GMX_BINARY_SUFFIX}"
         COMPILE_FLAGS "${OpenMP_C_FLAGS}")
     install(TARGETS mdrun DESTINATION ${BIN_INSTALL_DIR} COMPONENT mdrun)
index 0c5bd2f6bd474e87fd6944f84185f642e855a2be..efd88719ca78791c8f1e9a92b1e7f840c55a7457 100644 (file)
@@ -4,6 +4,6 @@ file(GLOB PDB2GMX_SOURCES *.c)
 
 add_executable(pdb2gmx ${PDB2GMX_SOURCES})
 gmx_add_man_page(pdb2gmx)
-target_link_libraries(pdb2gmx ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(pdb2gmx ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(pdb2gmx PROPERTIES OUTPUT_NAME "pdb2gmx${GMX_BINARY_SUFFIX}")
 install(TARGETS pdb2gmx DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index bf63c8d0d627c62e2cb401494a92c54b8009d5c5..f0d02789b6101f752cf2ff1045d9afd154c4f965 100644 (file)
@@ -4,6 +4,6 @@ file(GLOB TPBCONV_SOURCES tpbconv.c)
 
 add_executable(tpbconv ${TPBCONV_SOURCES})
 gmx_add_man_page(tpbconv)
-target_link_libraries(tpbconv ${GMX_EXTRA_LIBRARIES} libgromacs)
+target_link_libraries(tpbconv ${GMX_EXTRA_LIBRARIES} libgromacs ${GMX_EXE_LINKER_FLAGS})
 set_target_properties(tpbconv PROPERTIES OUTPUT_NAME "tpbconv${GMX_BINARY_SUFFIX}")
 install(TARGETS tpbconv DESTINATION ${BIN_INSTALL_DIR} COMPONENT runtime)
index a6162a43418cb81234447ee20f994c336d758292..af0a67b4b709fa90cba7231e44be794399505eee 100644 (file)
@@ -33,8 +33,8 @@ add_library(gmxana
             )
 
 
-target_link_libraries(gmxana libgromacs ${GSL_LIBRARIES})
-set_target_properties(gmxana PROPERTIES OUTPUT_NAME "gmxana${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION} INSTALL_NAME_DIR "${LIB_INSTALL_DIR}"
+target_link_libraries(gmxana libgromacs ${GSL_LIBRARIES} ${GMX_SHARED_LINKER_FLAGS})
+set_target_properties(gmxana PROPERTIES OUTPUT_NAME "gmxana${GMX_LIBS_SUFFIX}" SOVERSION ${SOVERSION}
     COMPILE_FLAGS "${OpenMP_C_FLAGS}")
 
 # List of programs with single corresponding .c source file,
@@ -67,7 +67,7 @@ foreach(TOOL ${GMX_TOOLS_PROGRAMS} ${GMX_TOOLS_PROGRAMS_NOT_FOR_INSTALLATION})
     if (NOT ${TOOL} STREQUAL "g_options")
         gmx_add_man_page(${TOOL})
     endif()
-    target_link_libraries(${TOOL} gmxana ${OpenMP_LINKER_FLAGS})
+    target_link_libraries(${TOOL} gmxana ${GMX_EXE_LINKER_FLAGS})
     set_target_properties(${TOOL} PROPERTIES OUTPUT_NAME "${TOOL}${GMX_BINARY_SUFFIX}")
 endforeach(TOOL ${GMX_TOOLS_PROGRAMS})