forked from NixOS/nixpkgs
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
9 changed files
with
208 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# See cc-wrapper for comments. | ||
var_templates_list=( | ||
PKG_CONFIG_PATH | ||
) | ||
|
||
accumulateRoles | ||
|
||
for var in "${var_templates_list[@]}"; do | ||
mangleVarList "$var" ${role_suffixes[@]+"${role_suffixes[@]}"} | ||
done | ||
|
||
export NIX_PKG_CONFIG_WRAPPER_FLAGS_SET_@suffixSalt@=1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
# The wrapper script ensures variables like PKG_CONFIG_PATH and | ||
# PKG_CONFIG_PATH_FOR_BUILD work properly. | ||
|
||
{ stdenvNoCC | ||
, buildPackages | ||
, pkg-config | ||
, propagateDoc ? pkg-config != null && pkg-config ? man | ||
, extraPackages ? [], extraBuildCommands ? "" | ||
}: | ||
|
||
with stdenvNoCC.lib; | ||
|
||
let | ||
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 = stdenv.lib.optionalString (targetPlatform != hostPlatform) | ||
(targetPlatform.config + "-"); | ||
|
||
# See description in cc-wrapper. | ||
suffixSalt = replaceStrings ["-" "."] ["_" "_"] targetPlatform.config; | ||
|
||
in | ||
|
||
stdenv.mkDerivation { | ||
pname = targetPrefix + pkg-config.pname + "-wrapper"; | ||
inherit (pkg-config) version; | ||
|
||
preferLocalBuild = true; | ||
|
||
shell = getBin stdenvNoCC.shell + stdenvNoCC.shell.shellPath or ""; | ||
|
||
inherit targetPrefix suffixSalt; | ||
|
||
outputs = [ "out" ] ++ optionals propagateDoc [ "man" ]; | ||
|
||
passthru = { | ||
inherit pkg-config; | ||
}; | ||
|
||
dontBuild = true; | ||
dontConfigure = true; | ||
|
||
unpackPhase = '' | ||
src=$PWD | ||
''; | ||
|
||
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 ${targetPrefix}pkg-config ${./pkg-config-wrapper.sh} "${getBin pkg-config}/bin/pkg-config" | ||
''; | ||
|
||
strictDeps = true; | ||
|
||
wrapperName = "PKG_CONFIG_WRAPPER"; | ||
|
||
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 | ||
'' | ||
|
||
+ optionalString propagateDoc '' | ||
## | ||
## Man page and info support | ||
## | ||
ln -s ${pkg-config.man} $man | ||
'' | ||
|
||
+ '' | ||
substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh | ||
substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash | ||
## | ||
## Extra custom steps | ||
## | ||
'' | ||
|
||
+ extraBuildCommands; | ||
|
||
meta = | ||
let pkg-config_ = if pkg-config != null then pkg-config else {}; in | ||
(if pkg-config_ ? meta then removeAttrs pkg-config.meta ["priority"] else {}) // | ||
{ description = | ||
stdenv.lib.attrByPath ["meta" "description"] "pkg-config" pkg-config_ | ||
+ " (wrapper script)"; | ||
priority = 10; | ||
}; | ||
} |
21 changes: 21 additions & 0 deletions
21
pkgs/build-support/pkg-config-wrapper/pkg-config-wrapper.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#! @shell@ | ||
set -eu -o pipefail +o posix | ||
shopt -s nullglob | ||
|
||
if (( "${NIX_DEBUG:-0}" >= 7 )); then | ||
set -x | ||
fi | ||
|
||
source @out@/nix-support/utils.bash | ||
|
||
if [ -z "${NIX_PKG_CONFIG_WRAPPER_FLAGS_SET_@suffixSalt@:-}" ]; then | ||
source @out@/nix-support/add-flags.sh | ||
fi | ||
|
||
if (( ${#role_suffixes[@]} > 0 )); then | ||
# replace env var with nix-modified one | ||
PKG_CONFIG_PATH=$PKG_CONFIG_PATH_@suffixSalt@ exec @prog@ "$@" | ||
else | ||
# pkg-config isn't a bonafied dependency so ignore setup hook entirely | ||
exec @prog@ "$@" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# pkg-config Wrapper hygiene | ||
# | ||
# See comments in cc-wrapper's setup hook. This works exactly the same way. | ||
|
||
# Skip setup hook if we're neither a build-time dep, nor, temporarily, doing a | ||
# native compile. | ||
# | ||
# TODO(@Ericson2314): No native exception | ||
[[ -z ${strictDeps-} ]] || (( "$hostOffset" < 0 )) || return 0 | ||
|
||
pkgConfigWrapper_addPkgConfigPath () { | ||
# See ../setup-hooks/role.bash | ||
local role_post | ||
getHostRoleEnvHook | ||
|
||
addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/lib/pkgconfig" | ||
addToSearchPath "PKG_CONFIG_PATH${role_post}" "$1/share/pkgconfig" | ||
} | ||
|
||
# See ../setup-hooks/role.bash | ||
getTargetRole | ||
getTargetRoleWrapper | ||
|
||
addEnvHooks "$targetOffset" pkgConfigWrapper_addPkgConfigPath | ||
|
||
export PKG_CONFIG${role_post}=@targetPrefix@pkg-config | ||
|
||
# No local scope in sourced file | ||
unset -v role_post |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters