diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix')
-rw-r--r-- | infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix | 140 |
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; } |