forked from auxolotl/core
140 lines
3.5 KiB
Nix
140 lines
3.5 KiB
Nix
|
# The wrapper script ensures variables like PKG_CONFIG_PATH and
|
||
|
# PKG_CONFIG_PATH_FOR_BUILD work properly.
|
||
|
|
||
|
{ stdenvNoCC
|
||
|
, lib
|
||
|
, buildPackages
|
||
|
, pkg-config
|
||
|
, baseBinName ? "pkg-config"
|
||
|
, propagateDoc ? pkg-config != null && pkg-config ? man
|
||
|
, extraPackages ? [], extraBuildCommands ? ""
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
inherit (lib)
|
||
|
attrByPath
|
||
|
getBin
|
||
|
optional
|
||
|
optionalAttrs
|
||
|
optionals
|
||
|
optionalString
|
||
|
replaceStrings
|
||
|
;
|
||
|
|
||
|
stdenv = stdenvNoCC;
|
||
|
inherit (stdenv) hostPlatform targetPlatform;
|
||
|
|
||
|
# Prefix for binaries. Customarily ends with a dash separator.
|
||
|
#
|
||
|
# TODO(@Ericson2314) Make unconditional, or optional but always true by
|
||
|
# default.
|
||
|
targetPrefix = optionalString (targetPlatform != hostPlatform)
|
||
|
(targetPlatform.config + "-");
|
||
|
|
||
|
# See description in cc-wrapper.
|
||
|
suffixSalt = replaceStrings ["-" "."] ["_" "_"] targetPlatform.config;
|
||
|
|
||
|
wrapperBinName = "${targetPrefix}${baseBinName}";
|
||
|
in
|
||
|
|
||
|
stdenv.mkDerivation {
|
||
|
pname = targetPrefix + pkg-config.pname + "-wrapper";
|
||
|
inherit (pkg-config) version;
|
||
|
|
||
|
enableParallelBuilding = true;
|
||
|
|
||
|
preferLocalBuild = true;
|
||
|
|
||
|
outputs = [ "out" ] ++ optionals propagateDoc ([ "man" ] ++ optional (pkg-config ? doc) "doc");
|
||
|
|
||
|
passthru = {
|
||
|
inherit targetPrefix suffixSalt;
|
||
|
inherit pkg-config;
|
||
|
};
|
||
|
|
||
|
strictDeps = true;
|
||
|
dontBuild = true;
|
||
|
dontConfigure = true;
|
||
|
dontUnpack = true;
|
||
|
|
||
|
# Additional flags passed to pkg-config.
|
||
|
addFlags = optional stdenv.targetPlatform.isStatic "--static";
|
||
|
|
||
|
installPhase =
|
||
|
''
|
||
|
mkdir -p $out/bin $out/nix-support
|
||
|
|
||
|
wrap() {
|
||
|
local dst="$1"
|
||
|
local wrapper="$2"
|
||
|
export prog="$3"
|
||
|
substituteAll "$wrapper" "$out/bin/$dst"
|
||
|
chmod +x "$out/bin/$dst"
|
||
|
}
|
||
|
|
||
|
echo $pkg-config > $out/nix-support/orig-pkg-config
|
||
|
|
||
|
wrap ${wrapperBinName} ${./pkg-config-wrapper.sh} "${getBin pkg-config}/bin/${baseBinName}"
|
||
|
''
|
||
|
# symlink in share for autoconf to find macros
|
||
|
|
||
|
# TODO(@Ericson2314): in the future just make the unwrapped pkg-config a
|
||
|
# propagated dep once we can rely on downstream deps comming first in
|
||
|
# search paths. (https://github.com/NixOS/nixpkgs/pull/31414 took a crack
|
||
|
# at this.)
|
||
|
+ ''
|
||
|
ln -s ${pkg-config}/share $out/share
|
||
|
'';
|
||
|
|
||
|
setupHooks = [
|
||
|
../setup-hooks/role.bash
|
||
|
./setup-hook.sh
|
||
|
];
|
||
|
|
||
|
postFixup =
|
||
|
##
|
||
|
## User env support
|
||
|
##
|
||
|
|
||
|
# Propagate the underling unwrapped pkg-config so that if you
|
||
|
# install the wrapper, you get anything else it might provide.
|
||
|
''
|
||
|
printWords ${pkg-config} > $out/nix-support/propagated-user-env-packages
|
||
|
''
|
||
|
|
||
|
##
|
||
|
## Man page and doc support
|
||
|
##
|
||
|
+ optionalString propagateDoc (''
|
||
|
ln -s ${pkg-config.man} $man
|
||
|
'' + optionalString (pkg-config ? doc) ''
|
||
|
ln -s ${pkg-config.doc} $doc
|
||
|
'')
|
||
|
|
||
|
+ ''
|
||
|
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
|
||
|
substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash
|
||
|
''
|
||
|
|
||
|
##
|
||
|
## Extra custom steps
|
||
|
##
|
||
|
+ extraBuildCommands;
|
||
|
|
||
|
env = {
|
||
|
shell = getBin stdenvNoCC.shell + stdenvNoCC.shell.shellPath or "";
|
||
|
wrapperName = "PKG_CONFIG_WRAPPER";
|
||
|
inherit targetPrefix suffixSalt baseBinName;
|
||
|
};
|
||
|
|
||
|
meta =
|
||
|
let pkg-config_ = optionalAttrs (pkg-config != null) pkg-config; in
|
||
|
(optionalAttrs (pkg-config_ ? meta) (removeAttrs pkg-config.meta ["priority" "mainProgram"])) //
|
||
|
{ description =
|
||
|
attrByPath ["meta" "description"] "pkg-config" pkg-config_
|
||
|
+ " (wrapper script)";
|
||
|
priority = 10;
|
||
|
mainProgram = wrapperBinName;
|
||
|
};
|
||
|
}
|