Skip to content

Commit 7fbf5d6

Browse files
authored
[cmake] Fix libneko.so loading error when installing to /usr/local (#271)
* [cmake] Add install library path to rpath This way rpath is correctly set by default, avoiding errors like: `libneko.so.2: cannot open shared object file` when installing to /usr/local/ * [cmake] Don't set LD_LIBRARY_PATH during tests If rpath is set correctly then this is not necessary * [cmake] Clean up rpath settings Only build with install path if RELOCATABLE is on, otherwise we can stick to the default build rpath. We were setting these options to their default values: CMAKE_MACOS_RPATH, CMAKE_SKIP_BUILD_RPATH, CMAKE_SKIP_INSTALL_RPATH
1 parent 90c8195 commit 7fbf5d6

File tree

1 file changed

+6
-26
lines changed

1 file changed

+6
-26
lines changed

CMakeLists.txt

+6-26
Original file line numberDiff line numberDiff line change
@@ -158,23 +158,19 @@ endforeach()
158158

159159
include(ExternalProject)
160160

161-
162-
# CMAKE_BUILD_WITH_INSTALL_RPATH should be set to true.
163-
# It is because `nekotools boot` will use the neko in build dir during build.
164-
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
165-
166161
if (RELOCATABLE)
167-
# https://cmake.org/Wiki/CMake_RPATH_handling
168-
set(CMAKE_SKIP_BUILD_RPATH FALSE)
169-
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
162+
# https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
163+
# Set this to true, otherwise the binaries won't be relocatable until after installation:
164+
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
170165
if(APPLE)
171-
set(CMAKE_MACOSX_RPATH TRUE)
172166
set(CMAKE_INSTALL_RPATH @executable_path/)
173167
elseif(UNIX)
174168
set(CMAKE_INSTALL_RPATH \$ORIGIN)
175169
endif()
176170
endif()
177171

172+
list(APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR})
173+
178174
if(UNIX AND NOT APPLE)
179175
add_definitions(-DABI_ELF)
180176
endif()
@@ -395,12 +391,9 @@ set_target_properties(libneko
395391
if (CMAKE_HOST_WIN32)
396392
set(set_neko_env set NEKOPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
397393
set(neko_exec $<TARGET_FILE:nekovm>)
398-
elseif(CMAKE_HOST_APPLE)
399-
set(set_neko_env "")
400-
set(neko_exec DYLD_FALLBACK_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} NEKOPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} $<TARGET_FILE:nekovm>)
401394
else()
402395
set(set_neko_env "")
403-
set(neko_exec LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} NEKOPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} $<TARGET_FILE:nekovm>)
396+
set(neko_exec NEKOPATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} $<TARGET_FILE:nekovm>)
404397
endif()
405398

406399
file(GLOB compilers_src
@@ -781,26 +774,13 @@ if (WITH_NEKOML)
781774
COMMAND nekoml
782775
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
783776
)
784-
785-
set_tests_properties(nekoml
786-
PROPERTIES
787-
ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
788-
)
789777
endif()
790778

791779
add_test(NAME nekotools
792780
COMMAND nekotools
793781
WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
794782
)
795783

796-
if (UNIX AND NOT APPLE)
797-
set_tests_properties(-version test.n nekoc nekotools
798-
PROPERTIES
799-
ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
800-
)
801-
endif()
802-
803-
804784
#######################
805785

806786
# debian source packages

0 commit comments

Comments
 (0)