about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix
blob: 1314853ad6684e2cbaadbdb15de51ae27f1b0ac5 (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
{ stdenv
, callPackage
, fetchurl
, makeWrapper
, aspell
, avahi
, cacert
, dbus
, dbus-glib
, farstream
, gettext
, gst_all_1
, gtk2
, gtk2-x11
, gtkspell2
, intltool
, lib
, libICE
, libSM
, libXScrnSaver
, libXext
, libgcrypt
, libgnt
, libidn
, libstartup_notification
, libxml2
, ncurses
, nspr
, nss
, perlPackages
, pkg-config
, python3
, pidgin
, plugins        ? []
, withOpenssl    ? false, openssl
, withGnutls     ? false , gnutls
, withCyrus_sasl ? true, cyrus_sasl
, pidginPackages
}:

# FIXME: clean the mess around choosing the SSL library (nss by default)

let
  unwrapped = stdenv.mkDerivation rec {
    pname = "pidgin";
    version = "2.14.12";

    src = fetchurl {
      url = "mirror://sourceforge/pidgin/pidgin-${version}.tar.bz2";
      sha256 = "sha256-KwUka+IIYF7buTrp7cB5WD1EniqXENttNI0X9ZAgpLc=";
    };

    nativeBuildInputs = [ makeWrapper intltool ];

    env.NIX_CFLAGS_COMPILE = "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0";

    buildInputs = let
      python-with-dbus = python3.withPackages (pp: with pp; [ dbus-python ]);
    in [
      aspell
      avahi
      cyrus_sasl
      dbus
      dbus-glib
      gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
      gst_all_1.gstreamer
      libICE
      libSM
      libXScrnSaver
      libXext
      libgnt
      libidn
      libstartup_notification
      libxml2
      ncurses # optional: build finch - the console UI
      nspr
      nss
      python-with-dbus
    ]
    ++ lib.optional withOpenssl openssl
    ++ lib.optionals withGnutls [ gnutls libgcrypt ]
    ++ lib.optionals stdenv.isLinux [ gtk2 gtkspell2 farstream ]
    ++ lib.optional stdenv.isDarwin gtk2-x11;


    propagatedBuildInputs = [ pkg-config gettext ]
      ++ (with perlPackages; [ perl XMLParser ])
      ++ lib.optional stdenv.isLinux gtk2
      ++ lib.optional stdenv.isDarwin gtk2-x11;

    patches = [
      ./add-search-path.patch
      ./pidgin-makefile.patch
    ];

    configureFlags = [
      "--with-nspr-includes=${nspr.dev}/include/nspr"
      "--with-nspr-libs=${nspr.out}/lib"
      "--with-nss-includes=${nss.dev}/include/nss"
      "--with-nss-libs=${nss.out}/lib"
      "--with-ncurses-headers=${ncurses.dev}/include"
      "--with-system-ssl-certs=${cacert}/etc/ssl/certs"
      "--disable-meanwhile"
      "--disable-nm"
      "--disable-tcl"
      "--disable-gevolution"
    ]
    ++ lib.optionals withCyrus_sasl [ "--enable-cyrus-sasl=yes" ]
    ++ lib.optionals withGnutls [ "--enable-gnutls=yes" "--enable-nss=no" ]
    ++ lib.optionals stdenv.isDarwin [ "--disable-gtkspell" "--disable-vv" ];

    enableParallelBuilding = true;

    postInstall = ''
      wrapProgram $out/bin/pidgin \
        --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
    '';

    doInstallCheck = stdenv.hostPlatform == stdenv.buildPlatform;
    # In particular, this detects missing python imports in some of the tools.
    postFixup = let
      # TODO: python is a script, so it doesn't work as interpreter on darwin
      binsToTest = lib.optionalString stdenv.isLinux "purple-remote," + "pidgin,finch";
    in lib.optionalString doInstallCheck ''
      for f in "''${!outputBin}"/bin/{${binsToTest}}; do
        echo "Testing: $f --help"
        "$f" --help
      done
    '';

    passthru = {
      makePluginPath = lib.makeSearchPathOutput "lib" "lib/purple-${lib.versions.major version}";
      withPlugins = pluginfn: callPackage ./wrapper.nix {
        plugins = pluginfn pidginPackages;
        pidgin = unwrapped;
      };
    };

    meta = {
      description = "Multi-protocol instant messaging client";
      homepage = "https://pidgin.im/";
      license = lib.licenses.gpl2Plus;
      platforms = lib.platforms.unix;
      maintainers = [ lib.maintainers.lucasew ];
    };
  };

in if plugins == [] then unwrapped
  else unwrapped.withPlugins (_: plugins)