aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix140
1 files changed, 125 insertions, 15 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix b/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix
index ffed3da03187..6b854918f571 100644
--- a/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix
+++ b/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix
@@ -1,24 +1,134 @@
-{ stdenv, gnuradio, makeWrapper, python, extraPackages ? [] }:
+{ 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 ? []
+}:
-with { inherit (stdenv.lib) appendToName makeSearchPath; };
+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 {
- name = (appendToName "with-packages" gnuradio).name;
- buildInputs = [ makeWrapper python ];
+ inherit name;
- buildCommand = ''
- mkdir -p $out/bin
- ln -s "${gnuradio}"/bin/* $out/bin/
+ buildInputs = [
+ makeWrapper
+ xorg.lndir
+ ];
- for file in $(find -L $out/bin -type f); do
- if test -x "$(readlink -f "$file")"; then
- wrapProgram "$file" \
- --prefix PYTHONPATH : ${stdenv.lib.concatStringsSep ":"
- (map (path: "$(toPythonPath ${path})") extraPackages)} \
- --prefix GRC_BLOCKS_PATH : ${makeSearchPath "share/gnuradio/grc/blocks" extraPackages}
- fi
+ 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 (gnuradio) meta;
+ inherit (unwrapped) meta;
}