summaryrefslogtreecommitdiff
path: root/pkgs/applications/version-management/p4v/linux.nix
blob: f2af8b4056002bbcff07259507e3bda8a73d4824 (about) (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
{
  stdenv,
  autoPatchelfHook,
  cups,
  dbus,
  fontconfig,
  gccForLibs,
  libX11,
  libXcomposite,
  libXcursor,
  libXdamage,
  libXext,
  libXi,
  libXrandr,
  libXrender,
  libXtst,
  libinput,
  libxcb,
  libxkbcommon,
  nss,
  qtbase,
  qtmultimedia,
  qtsvg,
  qttools,
  qtwebengine,
  qtwebview,
  xcbutilimage,
  xcbutilkeysyms,
  xcbutilrenderutil,
  xcbutilwm,
}:

{
  pname,
  version,
  src,
  meta,
}:
let
  unwrapped = stdenv.mkDerivation {
    pname = "${pname}-unwrapped";
    inherit version src meta;

    nativeBuildInputs = [ autoPatchelfHook ];
    buildInputs = [
      cups
      dbus
      fontconfig
      gccForLibs
      libX11
      libXcomposite
      libXcursor
      libXdamage
      libXext
      libXi
      libXrandr
      libXrender
      libXtst
      libinput
      libxcb
      libxkbcommon
      nss
      qtbase
      qtmultimedia
      qtsvg
      qttools
      qtwebengine
      qtwebview
      xcbutilimage
      xcbutilkeysyms
      xcbutilrenderutil
      xcbutilwm
    ];

    dontBuild = true;

    # Don't wrap the Qt apps; upstream has its own wrapper scripts.
    dontWrapQtApps = true;

    postPatch = ''
      rm -r lib/plugins lib/libQt6* lib/libssl* lib/libicu* lib/libcrypto*
    '';

    installPhase = ''
      mkdir -p $out
      cp -r bin lib $out
      addAutoPatchelfSearchPath $out/lib
      ln -s "${qtbase}/${qtbase.qtPluginPrefix}" $out/lib/plugins
    '';

    preFixup = ''
      patchelf --clear-symbol-version close $out/bin/p4{v,admin}.bin
    '';
  };
in
stdenv.mkDerivation {
  inherit pname version;

  # Build a "clean" version of the package so that we don't add extra ".bin" or
  # configuration files to users' PATHs. We can't easily put the unwrapped
  # package files in libexec (where they belong, probably) because the upstream
  # wrapper scripts have the bin directory hardcoded.
  buildCommand = ''
    mkdir -p $out/bin
    for f in p4admin p4merge p4v p4vc; do
      ln -s ${unwrapped}/bin/$f $out/bin
    done
  '';
  preferLocalBuild = true;

  inherit (unwrapped) meta passthru;
}