Skip to content

Incorrect CMAKE_INSTALL_RPATH on Rocky Linux 9 #1563

@bas-jpro

Description

@bas-jpro

When building MBSystem 5.8.3beta12 on Rocky Linux 9 using cmake 3.26.5 the CMAKE_INSTALL_RPATH is being set incorrectly to ${CMAKE_INSTALL_PREFIX}/lib, but the libraries are installed in ${CMAKE_INSTALL_PREFIX}/lib64, so the binaries don't find the mb libraries at runtime.

I was unable to override this by adding -DCMAKE_INSTALL_RPATH to the cmake command line.

Instead I had to modify CMakeLists.txt line 94 and change it to

set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib64")

To Reproduce
Attempt to build MBsystem 5.8.3beta12 while setting the CMAKE_INSTALL_PREFIX

In the build directory

cmake .. -DCMAKE_INSTALL_PREFIX=/packages/mb/5.8.3beta12 -DotpsDir=/packages/mb/otps \
             -DCMAKE_INSTALL_RPATH=/packages/mb/5.8.3beta12/lib64

Output of the cmake command is

----------------------------------------------------------
CMAKE_SYSTEM_NAME: Linux
CMAKE_C_COMPILER_ID: GNU
CMAKE_SOURCE_DIR: /packages/mb/src/MB-System-5.8.3beta12
CMAKE_MODULE_PATH: /packages/mb/src/MB-System-5.8.3beta12/build-utils
CMAKE_INSTALL_PREFIX: /packages/mb/5.8.3beta12
CMAKE_INSTALL_FULL_LIBDIR: /packages/mb/5.8.3beta12/lib64
CMAKE_INSTALL_FULL_INCLUDEDIR: /packages/mb/5.8.3beta12/include
CMAKE_INSTALL_FULL_BINDIR: /packages/mb/5.8.3beta12/bin
CMAKE_INSTALL_FULL_DOCDIR: /packages/mb/5.8.3beta12/share/doc/MB-System
CMAKE_INSTALL_FULL_DATADIR: /packages/mb/5.8.3beta12/share
CMAKE_INSTALL_FULL_DATAROOTDIR: /packages/mb/5.8.3beta12/share
CMAKE_SYSTEM_PREFIX_PATH: /usr/local;/usr;/;/usr;/packages/mb/5.8.3beta12;/usr/X11R6;/usr/pkg;/opt
CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES: /usr/lib/gcc/x86_64-redhatlinux/11/include;/usr/local/include;/usr/include
CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES: /usr/include/c++/11;/usr/include/c++/11/x86_64-redhat-linux;/usr/include/c++/11/backward;/usr/lib/gcc/x86_64-redhat-linux/11/include;/usr/local/include;/usr/include
BYTESWAPPED: 
CMAKE_C_FLAGS:  -DBYTESWAPPED -DENABLE_GSF -DTRN_USE_PROJ
CMAKE_CXX_FLAGS:  -DBYTESWAPPED -DENABLE_GSF -DTRN_USE_PROJ
CMAKE_INSTALL_RPATH: /packages/mb/5.8.3beta12/lib
OTPSdirectory:/packages/mb/otps
----------------------------------------------------------
-- Configuring done (1.7s)
-- Generating done (2.8s)
-- Build files have been written to: /packages/mb/src/MB-System-5.8.3beta12/build

Expected behavior
I expected CMAKE_INSTALL_RPATH to be set to lib64 instead of lib, or failing that to allow me to override with the -DCMAKE_INSTALL_RPATH=/packages/mb/5.8.3beta12/lib64 cmake parameter.

Additional context
This can be fixed by allowing a command line override - e.g

if (NOT CMAKE_INSTALL_RPATH)
  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif()

or by using CMAKE_INSTALL_FULL_LIBDIR - though this has to be done later in the file as CMAKE_INSTALL_FULL_LIBDIR isn't defined until later

if (NOT CMAKE_INSTALL_RPATH)
  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
endif()

Thanks

Jeremy

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions