wrapGAppsHook: add wrapGApp helper (#68402)

wrapGAppsHook: add wrapGApp helper
This commit is contained in:
Jan Tojnar 2019-09-10 19:09:12 +02:00 committed by GitHub
commit a0ec91d69f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 41 additions and 23 deletions

View File

@ -210,7 +210,7 @@ mkDerivation {
dontWrapGApps = true;
# Arguments to be passed to `makeWrapper`, only used by qt5s mkDerivation
qtWrapperArgs [
qtWrapperArgs = [
"\${gappsWrapperArgs[@]}"
];
}
@ -258,6 +258,16 @@ mkDerivation {
</para>
</listitem>
</varlistentry>
<varlistentry xml:id="ssec-gnome-common-issues-weird-location">
<term>
I need to wrap a binary outside <filename>bin</filename> and <filename>libexec</filename> directories.
</term>
<listitem>
<para>
You can manually trigger the wrapping with <function>wrapGApp</function> in <literal>preFixup</literal> phase. It takes a path to a program as a first argument; the remaining arguments are passed directly to <function xlink:href="#fun-wrapProgram">wrapProgram</function> function.
</para>
</listitem>
</varlistentry>
</variablelist>
</section>
</section>

View File

@ -102,7 +102,7 @@ stdenv.mkDerivation rec {
'';
postFixup = ''
wrapProgram "${placeholder "installedTests"}/libexec/installed-tests/gnome-photos/basic.py" "''${gappsWrapperArgs[@]}"
wrapGApp "${placeholder "installedTests"}/libexec/installed-tests/gnome-photos/basic.py"
'';
passthru = {

View File

@ -85,8 +85,8 @@ in stdenv.mkDerivation rec {
find -L "$out/bin" -type f -executable -print0 \
| while IFS= read -r -d ''' file; do
if [[ "''${file}" != *-bin ]]; then
echo "Wrapping program ''${file}"
wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
echo "Wrapping program $file"
wrapGApp "$file"
fi
done
'';

View File

@ -107,7 +107,7 @@ in stdenv.mkDerivation rec {
buildPythonPath "$out $pythonPath"
gappsWrapperArgs+=(--set PYTHONPATH "$program_PYTHONPATH")
wrapProgram "$out/bin/kicad" "''${gappsWrapperArgs[@]}"
wrapGApp "$out/bin/kicad"
'';
meta = {

View File

@ -1,12 +1,19 @@
# shellcheck shell=bash
gappsWrapperArgs=()
find_gio_modules() {
if [ -d "$1"/lib/gio/modules ] && [ -n "$(ls -A $1/lib/gio/modules)" ] ; then
if [ -d "$1/lib/gio/modules" ] && [ -n "$(ls -A "$1/lib/gio/modules")" ] ; then
gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$1/lib/gio/modules")
fi
}
addEnvHooks "$targetOffset" find_gio_modules
addEnvHooks "${targetOffset:?}" find_gio_modules
wrapGApp() {
local program="$1"
shift 1
wrapProgram "$program" "${gappsWrapperArgs[@]}" "$@"
}
# Note: $gappsWrapperArgs still gets defined even if $dontWrapGApps is set.
wrapGAppsHook() {
@ -26,20 +33,19 @@ wrapGAppsHook() {
gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH")
fi
if [ -d "$prefix/share" ]; then
if [ -d "${prefix:?}/share" ]; then
gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$prefix/share")
fi
if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A $prefix/lib/gio/modules)" ] ; then
if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A "$prefix/lib/gio/modules")" ] ; then
gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules")
fi
for v in $wrapPrefixVariables GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do
eval local dummy="\$$v"
gappsWrapperArgs+=(--prefix $v : "$dummy")
for v in ${wrapPrefixVariables:-} GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do
gappsWrapperArgs+=(--prefix "$v" : "${!v}")
done
if [[ -z "$dontWrapGApps" ]]; then
if [[ -z "${dontWrapGApps:-}" ]]; then
targetDirsThatExist=()
targetDirsRealPath=()
@ -52,7 +58,7 @@ wrapGAppsHook() {
find "${targetDir}" -type f -executable -print0 \
| while IFS= read -r -d '' file; do
echo "Wrapping program '${file}'"
wrapProgram "${file}" "${gappsWrapperArgs[@]}"
wrapGApp "${file}"
done
fi
done
@ -71,7 +77,7 @@ wrapGAppsHook() {
fi
done
echo "Wrapping link: '$linkPath'"
wrapProgram "${linkPath}" "${gappsWrapperArgs[@]}"
wrapGApp "${linkPath}"
done
fi
fi

View File

@ -115,7 +115,7 @@ buildGoPackage rec {
postFixup = ''
# wrapGAppsHook does not work with binaries outside of $out/bin or $out/libexec
for binary in $out/lib/deepin-daemon/*; do
wrapProgram $binary "''${gappsWrapperArgs[@]}"
wrapGApp "$binary"
done
searchHardCodedPaths $out # debugging

View File

@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \
-i $file
wrapProgram $file "''${gappsWrapperArgs[@]}"
wrapGApp "$file"
done
'';

View File

@ -76,8 +76,8 @@ stdenv.mkDerivation rec {
postFixup = ''
# Lets wrap the daemons
for file in $out/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/{{daemon,nativeMessagingHost}.js,components/folks.py}; do
echo "Wrapping program ''${file}"
wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
echo "Wrapping program $file"
wrapGApp "$file"
done
'';

View File

@ -237,9 +237,9 @@ stdenv.mkDerivation rec {
postFixup = ''
find -L "$out/bin" "$out/libexec" -type f -executable -print0 \
| while IFS= read -r -d ''' file; do
if [[ "''${file}" != *.efi ]]; then
echo "Wrapping program ''${file}"
wrapProgram "''${file}" "''${gappsWrapperArgs[@]}"
if [[ "$file" != *.efi ]]; then
echo "Wrapping program $file"
wrapGApp "$file"
fi
done
'';

View File

@ -8,6 +8,7 @@
, qtbase
, qtx11extras
, wrapQtAppsHook
, wrapGAppsHook
, gtk3
, xmlto
, docbook_xsl
@ -36,6 +37,7 @@ stdenv.mkDerivation rec {
autoreconfHook
docbook_xsl
wrapQtAppsHook
wrapGAppsHook
];
buildInputs = [
@ -68,7 +70,7 @@ stdenv.mkDerivation rec {
dontWrapGApps = true;
postFixup = lib.optionalString enableVideo ''
wrapProgram "$out/bin/zbarcam-gtk" "''${gappsWrapperArgs[@]}"
wrapGApp "$out/bin/zbarcam-gtk"
wrapQtApp "$out/bin/zbarcam-qt"
'';