135 lines
4.2 KiB
Nix
135 lines
4.2 KiB
Nix
{ stdenv
|
|
, unwrapped
|
|
, makeWrapper
|
|
# For lndir
|
|
, xorg
|
|
# For Emulating wrapGAppsHook
|
|
, gsettings-desktop-schemas
|
|
, glib
|
|
, hicolor-icon-theme
|
|
, pango
|
|
, json-glib
|
|
, dconf
|
|
, gobject-introspection
|
|
, librsvg
|
|
, gdk-pixbuf
|
|
, harfbuzz
|
|
, at-spi2-core
|
|
, atk
|
|
# For Adding additional GRC blocks
|
|
, extraPackages ? []
|
|
# For Adding additional python packaages
|
|
, extraPythonPackages ? []
|
|
# Allow to add whatever you want to the wrapper
|
|
, extraMakeWrapperArgs ? []
|
|
}:
|
|
|
|
let
|
|
pythonPkgs = extraPythonPackages
|
|
# Add the extraPackages as python modules as well
|
|
++ (builtins.map unwrapped.python.pkgs.toPythonModule extraPackages)
|
|
++ stdenv.lib.flatten (stdenv.lib.mapAttrsToList (
|
|
feat: info: (
|
|
if unwrapped.hasFeature feat unwrapped.features then
|
|
(if builtins.hasAttr "pythonRuntime" info then info.pythonRuntime else [])
|
|
else
|
|
[]
|
|
)
|
|
) unwrapped.featuresInfo)
|
|
++ stdenv.lib.optionals (unwrapped.hasFeature "python-support" unwrapped.features) [
|
|
# Add unwrapped itself as a python module
|
|
(unwrapped.python.pkgs.toPythonModule unwrapped)
|
|
]
|
|
;
|
|
python3Env = unwrapped.python.withPackages(ps: pythonPkgs);
|
|
|
|
name = (stdenv.lib.appendToName "wrapped" unwrapped).name;
|
|
makeWrapperArgs = builtins.concatStringsSep " " ([
|
|
]
|
|
# Emulating wrapGAppsHook & wrapQtAppsHook working together
|
|
++ stdenv.lib.optionals (
|
|
(unwrapped.hasFeature "gnuradio-companion" unwrapped.features)
|
|
|| (unwrapped.hasFeature "gr-qtgui" unwrapped.features)
|
|
) [
|
|
"--prefix" "XDG_DATA_DIRS" ":" "$out/share"
|
|
"--prefix" "XDG_DATA_DIRS" ":" "$out/share/gsettings-schemas/${name}"
|
|
"--prefix" "XDG_DATA_DIRS" ":" "${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}"
|
|
"--prefix" "XDG_DATA_DIRS" ":" "${hicolor-icon-theme}/share"
|
|
# Needs to run `gsettings` on startup, see:
|
|
# https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1764890.html
|
|
"--prefix" "PATH" ":" "${stdenv.lib.getBin glib}/bin"
|
|
]
|
|
++ stdenv.lib.optionals (unwrapped.hasFeature "gnuradio-companion" unwrapped.features) [
|
|
"--set" "GDK_PIXBUF_MODULE_FILE" "${librsvg}/${gdk-pixbuf.moduleDir}.cache"
|
|
"--prefix" "GIO_EXTRA_MODULES" ":" "${stdenv.lib.getLib dconf}/lib/gio/modules"
|
|
"--prefix" "XDG_DATA_DIRS" ":" "${unwrapped.gtk}/share"
|
|
"--prefix" "XDG_DATA_DIRS" ":" "${unwrapped.gtk}/share/gsettings-schemas/${unwrapped.gtk.name}"
|
|
"--prefix" "GI_TYPELIB_PATH" ":" "${stdenv.lib.makeSearchPath "lib/girepository-1.0" [
|
|
unwrapped.gtk
|
|
gsettings-desktop-schemas
|
|
atk
|
|
# From some reason, if .out is not used, .bin is used, and we want
|
|
# what's in `.out`.
|
|
pango.out
|
|
gdk-pixbuf
|
|
json-glib
|
|
harfbuzz
|
|
librsvg
|
|
gobject-introspection
|
|
at-spi2-core
|
|
]}"
|
|
]
|
|
++ stdenv.lib.optionals (extraPackages != []) [
|
|
"--prefix" "GRC_BLOCKS_PATH" ":" "${stdenv.lib.makeSearchPath "share/gnuradio/grc/blocks" extraPackages}"
|
|
]
|
|
++ stdenv.lib.optionals (unwrapped.hasFeature "gr-qtgui" unwrapped.features)
|
|
# 3.7 builds with qt4
|
|
(if unwrapped.versionAttr.major == "3.8" then
|
|
[
|
|
"--prefix" "QT_PLUGIN_PATH" ":"
|
|
"${stdenv.lib.getBin unwrapped.qt.qtbase}/${unwrapped.qt.qtbase.qtPluginPrefix}"
|
|
"--prefix" "QML2_IMPORT_PATH" ":"
|
|
"${stdenv.lib.getBin unwrapped.qt.qtbase}/${unwrapped.qt.qtbase.qtQmlPrefix}"
|
|
]
|
|
else
|
|
# TODO: Add here qt4 related environment for 3.7?
|
|
[
|
|
|
|
]
|
|
)
|
|
++ extraMakeWrapperArgs
|
|
);
|
|
in
|
|
stdenv.mkDerivation {
|
|
inherit name;
|
|
|
|
buildInputs = [
|
|
makeWrapper
|
|
xorg.lndir
|
|
];
|
|
|
|
passthru = {
|
|
inherit python3Env pythonPkgs unwrapped;
|
|
};
|
|
|
|
buildCommand = ''
|
|
mkdir $out
|
|
cd $out
|
|
lndir -silent ${unwrapped}
|
|
for i in $out/bin/*; do
|
|
if [[ ! -x "$i" ]]; then
|
|
continue
|
|
fi
|
|
cp -L "$i" "$i".tmp
|
|
mv -f "$i".tmp "$i"
|
|
if head -1 "$i" | grep -q ${unwrapped.python}; then
|
|
substituteInPlace "$i" \
|
|
--replace ${unwrapped.python} ${python3Env}
|
|
fi
|
|
wrapProgram "$i" ${makeWrapperArgs}
|
|
done
|
|
'';
|
|
|
|
inherit (unwrapped) meta;
|
|
}
|