about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/breitbandmessung/default.nix
blob: 31f33be38670eb10ebc20744f04da9831d8aa74d (plain) (blame)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
{ lib
, stdenv
, alsa-lib
, at-spi2-atk
, at-spi2-core
, atk
, autoPatchelfHook
, cairo
, cups
, dbus
, dpkg
, expat
, fetchurl
, gdk-pixbuf
, glib
, gtk3
, libdrm
, libxkbcommon
, makeWrapper
, mesa
, nixosTests
, nspr
, nss
, pango
, pciutils
, systemd
, undmg
, writeShellScriptBin
, xorg
}:

let
  inherit (stdenv.hostPlatform) system;

  version = "3.1.0";

  # At first start, the program checks for supported operating systems by calling `lsb_release -a`
  # and only runs when it finds Debian/Ubuntu. So we present us as Debian an make it happy.
  fake-lsb-release = writeShellScriptBin "lsb_release" ''
    echo "Distributor ID: Debian"
    echo "Description:    Debian GNU/Linux 10 (buster)"
    echo "Release:        10"
    echo "Codename:       buster"
  '';

  binPath = lib.makeBinPath [
    fake-lsb-release
  ];

  systemArgs = rec {
    x86_64-linux = rec {
      src = fetchurl {
        url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-linux.deb";
        sha256 = "sha256-jSP+H9ej9Wd+swBZSy9uMi2ExSTZ191FGZhqaocTl7w=";
      };

      dontUnpack = true;

      nativeBuildInputs = [
        autoPatchelfHook
        dpkg
        makeWrapper
      ];

      buildInputs = runtimeDependencies;

      runtimeDependencies = [
        alsa-lib
        at-spi2-atk
        at-spi2-core
        atk
        cairo
        cups
        dbus
        expat
        gdk-pixbuf
        glib
        gtk3
        libdrm
        libxkbcommon
        mesa
        nspr
        nss
        pango
        pciutils
        systemd
        xorg.libX11
        xorg.libXcomposite
        xorg.libXdamage
        xorg.libXext
        xorg.libXfixes
        xorg.libXrandr
        xorg.libxcb
        xorg.libxshmfence
      ];

      installPhase = ''
        dpkg-deb -x $src $out
        mkdir -p $out/bin

        chmod -R g-w $out

        addAutoPatchelfSearchPath --no-recurse $out/opt/Breitbandmessung
        autoPatchelfFile $out/opt/Breitbandmessung/breitbandmessung

        makeWrapper $out/opt/Breitbandmessung/breitbandmessung $out/bin/breitbandmessung \
          --prefix PATH : ${binPath}

        mv $out/usr/share $out/share
        rmdir $out/usr

        # Fix the desktop link
        substituteInPlace $out/share/applications/breitbandmessung.desktop \
          --replace /opt/Breitbandmessung $out/bin
      '';

      dontAutoPatchelf = true;
      dontPatchELF = true;
    };

    x86_64-darwin = {
      src = fetchurl {
        url = "https://download.breitbandmessung.de/bbm/Breitbandmessung-${version}-mac.dmg";
        sha256 = "sha256-2c8mDKJuHDSw7p52EKnJO5vr2kNTLU6r9pmGPANjE20=";
      };

      nativeBuildInputs = [ undmg ];

      installPhase = ''
        runHook preInstall
        mkdir -p $out/Applications/Breitbandmessung.app
        cp -R . $out/Applications/Breitbandmessung.app
        runHook postInstall
      '';
    };

    aarch64-darwin = x86_64-darwin;
  }.${system} or { src = throw "Unsupported system: ${system}"; };
in
stdenv.mkDerivation ({
  pname = "breitbandmessung";
  inherit version;

  passthru.tests = { inherit (nixosTests) breitbandmessung; };

  meta = with lib; {
    description = "Broadband internet speed test app from the german Bundesnetzagentur";
    homepage = "https://www.breitbandmessung.de";
    license = licenses.unfree;
    maintainers = with maintainers; [ b4dm4n ];
    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
  };
} // systemArgs)