Skip to content

Handle CMake installation via RPATH #29

Open

Description

@nunoguedelha

Warning message when compiling the repo (commit d703f9b):

Policy CMP0042 is not set: MACOSX_RPATH is enabled by default

CMake Warning (dev):
 Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
 --help-policy CMP0042" for policy details.  Use the cmake_policy command to
 set the policy and suppress this warning.

 MACOSX_RPATH is not specified for the following targets:

  YarpJS

This warning is for project developers.  Use -Wno-dev to suppress it.

Originally posted by @nunoguedelha in #28 (comment)

Activity

  1. self-assigned this
    on Dec 2, 2021
  2. nunoguedelha commented on Dec 3, 2021

    @nunoguedelha
    CollaboratorAuthor

    Running the query on the policy in the terminal gives:

    $ cmake --help-policy CMP0042
    CMP0042
    -------
    
    ``MACOSX_RPATH`` is enabled by default.
    
    CMake 2.8.12 and newer has support for using ``@rpath`` in a target's install
    name.  This was enabled by setting the target property
    ``MACOSX_RPATH``.  The ``@rpath`` in an install name is a more
    flexible and powerful mechanism than ``@executable_path`` or ``@loader_path``
    for locating shared libraries.
    
    CMake 3.0 and later prefer this property to be ON by default.  Projects
    wanting ``@rpath`` in a target's install name may remove any setting of
    the ``INSTALL_NAME_DIR`` and ``CMAKE_INSTALL_NAME_DIR``
    variables.
    
    This policy was introduced in CMake version 3.0.  CMake version
    3.21.3 warns when the policy is not set and uses ``OLD`` behavior.  Use
    the ``cmake_policy()`` command to set it to ``OLD`` or ``NEW`` explicitly.
    
    .. note::
      The ``OLD`` behavior of a policy is
      ``deprecated by definition``
      and may be removed in a future version of CMake.
    

    I was planning to follow the policy suggestion and, as done in other repos, add in the CMakeLists.txt the snippet:

    if(NOT MSVC)
        option(ENABLE_RPATH "Enable RPATH installation" TRUE)
        mark_as_advanced(ENABLE_RPATH)
    endif()
    
    # Settings for RPATH
    include(AddInstallRPATHSupport)
    add_install_rpath_support(BIN_DIRS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}"
                              LIB_DIRS "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
                              DEPENDS ENABLE_RPATH
                              USE_LINK_PATH)
    

    and copy the AddInstallRPATHSupport.cmake file.

    I need to discuss with @traversaro and/or @diegoferigo about this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions