On 2007-10-24 12:16-0600 James Bigler wrote:

So, I had a dynamic library with the following:

SET_TARGET_PROPERTIES(narfencode
 PROPERTIES BUILD_WITH_INSTALL_RPATH OFF
 INSTALL_NAME_DIR "@executable_path"
 )

When I compile it I get this:

/usr/bin/c++ -dynamiclib -headerpad_max_install_names -o libnarfencode.dylib -install_name /Users/bigler/cibc/cpack_install/ opt/libnarfencode.dylib "CMakeFiles/narfencode.dir/encode.o"

Note that the -install_name is the local build directory. This works well for when I run the binary out of the build directory, but if I run "make install" it doesn't relink the library with the *installed* -install_name.

I believe it should be relinking the library during installation to match where it will be after it's installed.

Note that if I set it to ON, it works for the installed version (and may not work for the build tree version).

Here is what works for us:

if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  # No rpath on Darwin. Setting it will only cause trouble.
else(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  option(USE_RPATH "Use -rpath when linking libraries, executables" ON)
endif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")

if(USE_RPATH)
  set_target_properties(
  plplot${LIB_TAG}
  PROPERTIES
  SOVERSION ${plplot_SOVERSION}
  VERSION ${plplot_VERSION}
  INSTALL_RPATH "${LIB_INSTALL_RPATH}"
  INSTALL_NAME_DIR "${LIB_DIR}"
  )
else(USE_RPATH)
  set_target_properties(
  plplot${LIB_TAG}
  PROPERTIES
  SOVERSION ${plplot_SOVERSION}
  VERSION ${plplot_VERSION}
  INSTALL_NAME_DIR "${LIB_DIR}"
  )
endif(USE_RPATH)

For completeness I left in the SOVERSION and VERSION properties we set for
the PLplot principal library, but the only difference between the two
alternatives is INSTALL_RPATH "${LIB_INSTALL_RPATH}"

I only have access to Linux, and the above works great there both for the
build tree (where CMake does all the required rpath stuff automatically so
that build-tree tests work without having to set LD_LIBRARY_PATH).  For
Linux, the above also works great for the install tree where rpath is set
appropriately unless the user specifically wants to turn it off with
-DUSE_RPATH=OFF.  (This no-rpath option for the install tree is useful for
the case of a system install location where rpath is not necessary, and
normally not desired as well).

I hear from PLplot OS X users that the above CMake logic also works well on
that platform both for the build tree (where I assume CMake automatically
does not use rpath for the Darwin case) and install tree (where because
of the above logic CMake does not use rpath for the Darwin case).

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state implementation
for stellar interiors (freeeos.sf.net); PLplot scientific plotting software
package (plplot.org); the libLASi project (unifont.org/lasi); the Loads of
Linux Links project (loll.sf.net); and the Linux Brochure Project
(lbproject.sf.net).
__________________________

Linux-powered Science
__________________________
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to