From 85bd5c6663dc8c663f86828d1b1a5273ee0a82fe Mon Sep 17 00:00:00 2001 From: _ov4 Date: Tue, 13 Oct 2026 11:04:35 +0000 Subject: build: extract package dependencies and prefer local libraries Co-Authored-By: Claude Fable 5.1 --- cmake/LinuxPackages.cmake | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 cmake/LinuxPackages.cmake (limited to 'cmake/LinuxPackages.cmake') diff --git a/cmake/LinuxPackages.cmake b/cmake/LinuxPackages.cmake new file mode 100644 index 0000000..9e9f26b --- /dev/null +++ b/cmake/LinuxPackages.cmake @@ -0,0 +1,34 @@ +function(cpsc_prepare_linux_packages) + # Development packages can contain absolute links to runtime packages. + file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${CPSC_DEPS_ROOT}/*") + foreach(path IN LISTS files) + if(IS_SYMLINK "${path}") + execute_process(COMMAND readlink "${path}" OUTPUT_VARIABLE target + OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE result) + if(NOT result EQUAL 0) + message(FATAL_ERROR "Cannot read dependency symlink ${path}") + endif() + if(IS_ABSOLUTE "${target}" AND EXISTS "${CPSC_DEPS_ROOT}${target}") + get_filename_component(directory "${path}" DIRECTORY) + file(RELATIVE_PATH relative "${directory}" "${CPSC_DEPS_ROOT}${target}") + file(REMOVE "${path}") + execute_process(COMMAND "${CMAKE_COMMAND}" -E create_symlink + "${relative}" "${path}" RESULT_VARIABLE result) + if(NOT result EQUAL 0) + message(FATAL_ERROR "Cannot relocate dependency symlink ${path}") + endif() + endif() + elseif(path MATCHES "\\.cmake$") + # For example, Debian's LLVMSupport interface hard-codes libz3.so. + file(READ "${path}" contents) + string(REGEX MATCHALL "/(usr/)?lib[^\" ;()\n]+" references "${contents}") + foreach(reference IN LISTS references) + if(EXISTS "${CPSC_DEPS_ROOT}${reference}") + string(REPLACE "${reference}" "${CPSC_DEPS_ROOT}${reference}" + contents "${contents}") + endif() + endforeach() + file(WRITE "${path}" "${contents}") + endif() + endforeach() +endfunction() -- cgit v1.3.1-4-g156e