Install file failed since upgrade cmake from 3.21.4 to 3.22
With version 3.22.0:
cmake -DCMAKE_INSTALL_COMPONENT=cxx -D CMAKE_INSTALL_PREFIX=/libcxx/13.0.1-r0/build/projects/libcxx/src -P /libcxx/13.0.1-r0/build/projects/libcxx/cmake_install.cmake
-- Install configuration: "Debug"
-- Installing: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so.1.0
-- Installing: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so.1
-- Set runtime path of "/libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so.1.0" to ""
-- Installing: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so
CMake Error at cmake_install.cmake:88 (file):
file RPATH_CHANGE could not write new RPATH:
to the file:
/libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so
Call Stack (most recent call first):
/libcxx/13.0.1-r0/build/projects/libcxx/cmake_install.cmake:56 (include)
With cmake 3.21.4
cmake -DCMAKE_INSTALL_COMPONENT=cxx -D CMAKE_INSTALL_PREFIX=/libcxx/13.0.1-r0/build/projects/libcxx/src -P /libcxx/13.0.1-r0/build/projects/libcxx/cmake_install.cmake^C
cli10@pek-lpg-core2:/libcxx/13.0.1-r0/build/projects/libcxx/src$ cmake -DCMAKE_INSTALL_COMPONENT=cxx -D CMAKE_INSTALL_PREFIX=/libcxx/13.0.1-r0/build/projects/libcxx/src -P /libcxx/13.0.1-r0/build/projects/libcxx/cmake_install.cmake
-- Install configuration: "Debug"
-- Up-to-date: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so.1.0
-- Up-to-date: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so.1
-- Up-to-date: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.so
-- Installing: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++.a
-- Installing: /libcxx/13.0.1-r0/build/projects/libcxx/src/lib64/libc++experimental.a
Part of CMakeList.txt
install(FILES "${LIBCXX_LIBRARY_DIR}/libc++${CMAKE_SHARED_LIBRARY_SUFFIX}" //this is libc++.so
DESTINATION ${LIBCXX_INSTALL_LIBRARY_DIR}
COMPONENT libcxx)
Part of the cmake_install.cmake
[snip]
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib64" TYPE SHARED_LIBRARY FILES "/libcxx/13.0.1-r0/build/lib64/libc++.so")
if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib64/libc++.so" AND
NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib64/libc++.so")
file(RPATH_CHANGE
FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib64/libc++.so"
OLD_RPATH "\$ORIGIN:"
NEW_RPATH "")
if(CMAKE_INSTALL_DO_STRIP)
execute_process(COMMAND "/libcxx/13.0.1-r0/recipe-sysroot-native/usr/bin/llvm-strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib64/libc++.so")
endif()
endif()
[snip]
Part of build.ninja
[snip]
#############################################
# Create library symlink lib64/libc++.so
build lib64/libc++.so.1 lib64/libc++.so: CMAKE_SYMLINK_LIBRARY lib64/libc++.so.1.0
POST_BUILD = cd /libcxx/13.0.1-r0/build/projects/libcxx/src && /libcxx/13.0.1-r0/recipe-sysroot-native/usr/bin/cmake -E remove /libcxx/13.0.1-r0/build/lib64/libc++.so && /libcxx/13.0.1-r0/recipe-sysroot-native/usr/bin/cmake -E echo "INPUT(libc++.so.1 -lc++abi)" > /libcxx/13.0.1-r0/build/lib64/libc++.so
[snip]
Here is libc++.so libc++.so $file libc++.so libc++.so: ASCII text $ cat libc++.so INPUT(libc++.so.1 -lc++abi)
Question
I noticed that there is some changes related to "bool cmSystemTools::ChangeRPath" in cmake 3.22.0 , maybe it is related to that change. As I understand, libc++.so is just "ASCII text", so it should not have RPATH. BUT, seems new cmake still try to find it and change it. so error occurred.