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; dontWrapGApps = true;
# Arguments to be passed to `makeWrapper`, only used by qt5s mkDerivation # Arguments to be passed to `makeWrapper`, only used by qt5s mkDerivation
qtWrapperArgs [ qtWrapperArgs = [
"\${gappsWrapperArgs[@]}" "\${gappsWrapperArgs[@]}"
]; ];
} }
@ -258,6 +258,16 @@ mkDerivation {
</para> </para>
</listitem> </listitem>
</varlistentry> </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> </variablelist>
</section> </section>
</section> </section>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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