aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/radio/gnuradio/wrapper.nix
blob: 6b854918f5712af07afe7b199e47b72da6d046f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
{ 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;
}