Files
nixpkgs/pkgs/development/skaware-packages/build-skaware-package.nix
bitbloxhub 2bd54f5f87 skawarePackages: use pkg-config for dependencies
Use pkg-config for dependency discovery while retaining explicit system dependency handling.

Fixes https://github.com/NixOS/nixpkgs/issues/544293.

Assisted-by: pi (GPT-5.6-Luna)
2026-07-30 21:08:53 +00:00

166 lines
4.6 KiB
Nix

{
lib,
stdenv,
cleanPackaging,
fetchurl,
nix-update-script,
pkg-config,
}:
lib.extendMkDerivation {
constructDrv = stdenv.mkDerivation;
excludeDrvArgNames = [
"sha256"
"manpages"
];
extendDrvArgs =
finalAttrs:
{
sha256 ? lib.fakeSha256,
manpages ? null,
meta ? { },
outputs ? [
"bin"
"lib"
"dev"
"doc"
"out"
],
nativeBuildInputs ? [ ],
configureFlags,
passthru ? { },
...
}@args:
let
# File globs that can always be deleted
commonNoiseFiles = [
".gitignore"
"Makefile"
"INSTALL"
"configure"
"patch-for-solaris"
"src/**/*"
"tools/**/*"
"package/**/*"
"config.mak"
"*.pc"
];
# File globs that should be moved to $doc
commonMetaFiles = [
"COPYING"
"AUTHORS"
"NEWS"
"CHANGELOG"
"README"
"README.*"
"DCO"
"CONTRIBUTING"
];
libraryOutput = if lib.elem "lib" outputs then "lib" else "out";
in
{
src = fetchurl {
url = "https://skarnet.org/software/${finalAttrs.pname}/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
inherit sha256;
};
outputs =
if manpages == null then
outputs
else
assert (
lib.assertMsg (!lib.elem "man" outputs)
"If you pass `manpages` to `skawarePackages.buildPackage`, you cannot have a `man` output already!"
);
if lib.length outputs > 0 then
[
(lib.head outputs)
"man"
]
++ lib.tail outputs
else
[ "man" ];
dontDisableStatic = true;
enableParallelBuilding = true;
nativeBuildInputs = [ pkg-config ] ++ nativeBuildInputs;
configureFlags =
configureFlags
++ [
"--enable-absolute-paths"
# We assume every Nix-based cross target has urandom.
# This might not hold for e.g. BSD.
"--with-sysdep-devurandom=yes"
(if stdenv.hostPlatform.isDarwin then "--disable-shared" else "--enable-shared")
# Use pkg-config
"--with-pkgconfig=pkg-config"
"--enable-pkgconfig"
]
# On Darwin, the target triplet from -dumpmachine includes version number,
# but skarnet.org software uses the triplet to test binary compatibility.
# Explicitly setting target ensures code can be compiled against a skalibs
# binary built on a different version of Darwin.
# http://www.skarnet.org/cgi-bin/archive.cgi?1:mss:623:heiodchokfjdkonfhdph
++ (lib.optional stdenv.hostPlatform.isDarwin "--build=${stdenv.hostPlatform.system}");
makeFlags = lib.optionals stdenv.cc.isClang [
"AR=${stdenv.cc.targetPrefix}ar"
"RANLIB=${stdenv.cc.targetPrefix}ranlib"
];
postInstall = ''
echo "Cleaning & moving common files"
${
cleanPackaging.commonFileActions {
noiseFiles = commonNoiseFiles;
docFiles = commonMetaFiles;
}
} $doc/share/doc/${finalAttrs.pname}
${
if manpages == null then
''echo "no manpages for this package"''
else
''
echo "copying manpages"
cp -vr ${manpages} $man
''
}
${args.postInstall or ""}
'';
postFixup = ''
if [ -d "$dev/lib/pkgconfig" ]; then
for pc in "$dev"/lib/pkgconfig/*.pc; do
sed -i "s|^libdir=.*|libdir=${placeholder libraryOutput}/lib|" "$pc"
if ! grep -q '^Libs.private:' "$pc"; then
sed -i "/^Libs:/a Libs.private: -L${placeholder libraryOutput}/lib" "$pc"
fi
done
fi
${cleanPackaging.checkForRemainingFiles}
'';
passthru = {
updateScript = nix-update-script {
extraArgs = [
"--url"
"https://github.com/skarnet/${finalAttrs.pname}"
"--override-filename"
"pkgs/development/skaware-packages/${finalAttrs.pname}/default.nix"
];
};
}
// passthru
// (if manpages == null then { } else { inherit manpages; });
meta = {
homepage = "https://skarnet.org/software/${finalAttrs.pname}/";
platforms = lib.platforms.all;
license = lib.licenses.isc;
maintainers =
with lib.maintainers;
[
pmahoney
Profpatsch
qyliss
]
++ (meta.maintainers or [ ]);
}
// meta;
};
}