Files
lunarwm/nix/cmake-importstd-patched/package.nix
Slendi 2e38196ea5 import std
Signed-off-by: Slendi <slendi@socopon.com>
2025-07-05 03:17:42 +03:00

38 lines
1.3 KiB
Nix

# Dummy cmake package for replacing the ImportStd module.
# Symlink existing derivation to avoid rebuilding package from source.
# I.e. rather than using overlay or override(Attr) to add patch.
#
# Note this is actually a clang/llvm issue (`-print-file-name` flag not working),
# but it is much simpler to just patch the cmake module itself. Maybe fixed in llvm 19.1.7
#
# See relevant issues:
# 1. https://github.com/NixOS/nixpkgs/issues/370217
# 2. https://gitlab.kitware.com/cmake/cmake/-/issues/25965#note_1523575
{
lib,
cmake,
libcxx,
symlinkJoin,
}:
let
cmake-ver = "${lib.versions.majorMinor cmake.version}";
module-path = "share/cmake-${cmake-ver}/Modules/Compiler/Clang-CXX-CXXImportStd.cmake";
in
symlinkJoin {
name = "${cmake.name}-importstd-module-patched";
paths = [ cmake ];
postBuild = ''
# copy binaries to avoid using original derivation
for link in $(find $out/bin/ -type l); do
cp --remove-destination $(readlink $link) $out/bin/
done;
# replace symlink to existing module with copy for editing
cp --remove-destination $(readlink $out/${module-path}) $out/${module-path}
# replace "libc++.modules.json" with full path
# to libc++ module json in new copied module file
sed -i 's#libc++.modules.json#${libcxx}/lib/libc++.modules.json#' $out/${module-path}
'';
}