aboutsummaryrefslogtreecommitdiff
path: root/cmake/LinuxPackages.cmake
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-13 11:04:35 +0000
committer_ov4 <ov4@ov4.org>2026-10-13 11:04:35 +0000
commit85bd5c6663dc8c663f86828d1b1a5273ee0a82fe (patch)
tree1618bd538c148f9164c95405898bba454e2836b3 /cmake/LinuxPackages.cmake
parent08fe39b4394b0fcd0272e08f17b7fed852bc2a47 (diff)
build: extract package dependencies and prefer local libraries
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Diffstat (limited to 'cmake/LinuxPackages.cmake')
-rw-r--r--cmake/LinuxPackages.cmake34
1 files changed, 34 insertions, 0 deletions
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()