2018-07-21 01:44:44 +01:00
|
|
|
{ stdenv, fetchurl, lib
|
2017-11-03 10:25:22 +00:00
|
|
|
, ncurses, openssl, aspell, gnutls
|
|
|
|
, zlib, curl, pkgconfig, libgcrypt
|
2016-10-20 13:28:27 +01:00
|
|
|
, cmake, makeWrapper, libobjc, libresolv, libiconv
|
2016-10-14 22:30:38 +01:00
|
|
|
, asciidoctor # manpages
|
2016-02-18 06:07:23 +00:00
|
|
|
, guileSupport ? true, guile
|
|
|
|
, luaSupport ? true, lua5
|
2019-06-16 20:59:06 +01:00
|
|
|
, perlSupport ? true, perl
|
2017-11-03 10:25:22 +00:00
|
|
|
, pythonSupport ? true, pythonPackages
|
2016-02-18 06:07:23 +00:00
|
|
|
, rubySupport ? true, ruby
|
|
|
|
, tclSupport ? true, tcl
|
2017-11-03 10:25:22 +00:00
|
|
|
, extraBuildInputs ? []
|
2018-09-05 16:01:45 +01:00
|
|
|
}:
|
2016-02-18 06:07:23 +00:00
|
|
|
|
|
|
|
let
|
2018-07-20 20:36:12 +01:00
|
|
|
inherit (pythonPackages) python;
|
2017-11-03 10:25:22 +00:00
|
|
|
plugins = [
|
|
|
|
{ name = "perl"; enabled = perlSupport; cmakeFlag = "ENABLE_PERL"; buildInputs = [ perl ]; }
|
|
|
|
{ name = "tcl"; enabled = tclSupport; cmakeFlag = "ENABLE_TCL"; buildInputs = [ tcl ]; }
|
|
|
|
{ name = "ruby"; enabled = rubySupport; cmakeFlag = "ENABLE_RUBY"; buildInputs = [ ruby ]; }
|
|
|
|
{ name = "guile"; enabled = guileSupport; cmakeFlag = "ENABLE_GUILE"; buildInputs = [ guile ]; }
|
|
|
|
{ name = "lua"; enabled = luaSupport; cmakeFlag = "ENABLE_LUA"; buildInputs = [ lua5 ]; }
|
|
|
|
{ name = "python"; enabled = pythonSupport; cmakeFlag = "ENABLE_PYTHON"; buildInputs = [ python ]; }
|
|
|
|
];
|
|
|
|
enabledPlugins = builtins.filter (p: p.enabled) plugins;
|
2016-02-18 06:07:23 +00:00
|
|
|
|
weechat: seperate weechat-unwrapped from wrapper
If I have a patch I want to apply to weechat, I can't do that with
overrideAttrs like I can with almost every other package, because that
only applies to the wrapper derivation. For other wrapped packages, one
can usually call the wrapper with any version of the derivation, but the
weechat derivation didn't expose a wrapper creation function.
Taking inspiration from other packages, particularly Firefox, I
extracted the wrapper into its own function, made the default weechat
derivation use that, and added weechat-unwrapped.
Now I can add my custom patch like this:
(wrapWeechat
(weechat-unwrapped.overrideAttrs (oldAttrs: {
patches = [
(fetchpatch {
url = "https://github.com/weechat/weechat/commit/55767f5f116db3cb56cf85f52aa80feff45b6abf.patch?full_index=1";
sha256 = "1pkcdsby57diqds1y5hhl0fr4i8j0zax32jb0gqd36siki3lza3d";
})
];
}))
{ configure =
{ availablePlugins, ... }:
{
plugins = with availablePlugins; [
(python.withPackages (packages: with packages; [ potr websocket_client ]))
];
};
})
There is a small backward incompatibility here: previously, it was
possible to get an unwrapped weechat like this:
weechat.override { configure = null; }
This didn't seem too important to keep around since it was also possible
to get an unwrapped weechat in a much more obvious way:
weechat.unwrapped
I could probably make it so that the first way still worked, if that
behavior turns out to really have been important.
2018-07-25 17:36:41 +01:00
|
|
|
in
|
2017-11-03 10:25:22 +00:00
|
|
|
assert lib.all (p: p.enabled -> ! (builtins.elem null p.buildInputs)) plugins;
|
|
|
|
stdenv.mkDerivation rec {
|
weechat: 2.4 -> 2.5
Changelog [1]:
New features
- core: use getopt to parse command line arguments
- core: add option weechat.look.prefix_same_nick_middle
- core: add option weechat.look.buffer_time_same
- core: use seconds by default in /repeat interval, allow unit for the interval
- core: allow text in addition to a command in command /repeat
- core: add option "addreplace" in command /filter
- api: return allocated string in hook_info callback and function info_get
- api: replace argument "keep_eol" by "flags" in function string_split
- api: add function command_options
- api: add function string_match_list
- irc: add bar items "irc_nick", "irc_host" and "irc_nick_host"
- irc: add variable "host" in server structure
- relay: add support of UNIX socket
- relay: add option relay.weechat.commands
- script: use SHA-512 instead of MD5 for script checksum
- spell: rename aspell plugin to spell
- trigger: add hooks "info" and "info_hashtable"
- xfer: rename option xfer.network.speed_limit to xfer.network.speed_limit_send, add option xfer.network.speed_limit_recv
Bug fixes
- core: don’t execute command scheduled by /repeat and /wait if the buffer does not exist any more
- core: set max length to 4096 for /secure passphrase
- core: refilter only affected buffers on filter change
- fset: fix slow refresh of fset buffer during /reload
- irc: fix parsing of MODE command when there are colons after the first mode argument
- irc: fix memory leak in infos "irc_server_isupport" and "irc_server_isupport_value"
- irc: fix length of string for SHA-512, SHA-256 and SHA-1 in help on ssl_fingerprint option
- irc: display an error with /allchan -current or /allpv -current if the current buffer is not an irc buffer
- irc: fix update of channels modes with arguments when joining a channel
- irc: quote NICK command argument sent to the server
- php: fix memory leak in functions string_eval_expression, string_eval_path_home, key_bind, hook_process_hashtable, hook_hsignal_send, info_get_hashtable, hdata_update
- relay: fix crash when a weechat relay client reloads the relay plugin with /plugin reload relay
- spell: fix detection of nick followed by the nick completer
- trigger: fix split of hook arguments
Tests
- unit: add tests on function util_signal_search
Build
- core: fix value of libdir in file weechat.pc
- core: fix generation of man page weechat-headless with autotools
- core: add CMake option "ENABLE_CODE_COVERAGE" to compile with code coverage options (CMake ≥ 3.0 is now required)
- core: fix compilation on Mac OS
- lua: add detection of Lua 5.3 with autotools
- ruby: add detection of Ruby 2.6
- tests: fix compilation of tests on FreeBSD
[1] https://weechat.org/files/changelog/ChangeLog-2.5.html#v2.5
2019-06-07 08:56:56 +01:00
|
|
|
version = "2.5";
|
2017-11-03 10:25:22 +00:00
|
|
|
name = "weechat-${version}";
|
2010-08-05 16:47:15 +01:00
|
|
|
|
2017-11-03 10:25:22 +00:00
|
|
|
src = fetchurl {
|
2018-10-25 12:42:48 +01:00
|
|
|
url = "https://weechat.org/files/src/weechat-${version}.tar.bz2";
|
weechat: 2.4 -> 2.5
Changelog [1]:
New features
- core: use getopt to parse command line arguments
- core: add option weechat.look.prefix_same_nick_middle
- core: add option weechat.look.buffer_time_same
- core: use seconds by default in /repeat interval, allow unit for the interval
- core: allow text in addition to a command in command /repeat
- core: add option "addreplace" in command /filter
- api: return allocated string in hook_info callback and function info_get
- api: replace argument "keep_eol" by "flags" in function string_split
- api: add function command_options
- api: add function string_match_list
- irc: add bar items "irc_nick", "irc_host" and "irc_nick_host"
- irc: add variable "host" in server structure
- relay: add support of UNIX socket
- relay: add option relay.weechat.commands
- script: use SHA-512 instead of MD5 for script checksum
- spell: rename aspell plugin to spell
- trigger: add hooks "info" and "info_hashtable"
- xfer: rename option xfer.network.speed_limit to xfer.network.speed_limit_send, add option xfer.network.speed_limit_recv
Bug fixes
- core: don’t execute command scheduled by /repeat and /wait if the buffer does not exist any more
- core: set max length to 4096 for /secure passphrase
- core: refilter only affected buffers on filter change
- fset: fix slow refresh of fset buffer during /reload
- irc: fix parsing of MODE command when there are colons after the first mode argument
- irc: fix memory leak in infos "irc_server_isupport" and "irc_server_isupport_value"
- irc: fix length of string for SHA-512, SHA-256 and SHA-1 in help on ssl_fingerprint option
- irc: display an error with /allchan -current or /allpv -current if the current buffer is not an irc buffer
- irc: fix update of channels modes with arguments when joining a channel
- irc: quote NICK command argument sent to the server
- php: fix memory leak in functions string_eval_expression, string_eval_path_home, key_bind, hook_process_hashtable, hook_hsignal_send, info_get_hashtable, hdata_update
- relay: fix crash when a weechat relay client reloads the relay plugin with /plugin reload relay
- spell: fix detection of nick followed by the nick completer
- trigger: fix split of hook arguments
Tests
- unit: add tests on function util_signal_search
Build
- core: fix value of libdir in file weechat.pc
- core: fix generation of man page weechat-headless with autotools
- core: add CMake option "ENABLE_CODE_COVERAGE" to compile with code coverage options (CMake ≥ 3.0 is now required)
- core: fix compilation on Mac OS
- lua: add detection of Lua 5.3 with autotools
- ruby: add detection of Ruby 2.6
- tests: fix compilation of tests on FreeBSD
[1] https://weechat.org/files/changelog/ChangeLog-2.5.html#v2.5
2019-06-07 08:56:56 +01:00
|
|
|
sha256 = "14giv8j1phmpg3i9whx45nmskan501lwcq352ps9z52rkja2qxsc";
|
2017-11-03 10:25:22 +00:00
|
|
|
};
|
2010-08-05 16:47:15 +01:00
|
|
|
|
2017-11-03 10:25:22 +00:00
|
|
|
outputs = [ "out" "man" ] ++ map (p: p.name) enabledPlugins;
|
2015-08-21 22:02:39 +01:00
|
|
|
|
2017-11-03 10:25:22 +00:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
cmakeFlags = with stdenv.lib; [
|
|
|
|
"-DENABLE_MAN=ON"
|
|
|
|
"-DENABLE_DOC=ON"
|
2016-10-14 22:30:38 +01:00
|
|
|
]
|
2017-11-03 10:25:22 +00:00
|
|
|
++ optionals stdenv.isDarwin ["-DICONV_LIBRARY=${libiconv}/lib/libiconv.dylib" "-DCMAKE_FIND_FRAMEWORK=LAST"]
|
|
|
|
++ map (p: "-D${p.cmakeFlag}=" + (if p.enabled then "ON" else "OFF")) plugins
|
|
|
|
;
|
|
|
|
|
|
|
|
buildInputs = with stdenv.lib; [
|
|
|
|
ncurses openssl aspell gnutls zlib curl pkgconfig
|
|
|
|
libgcrypt makeWrapper cmake asciidoctor
|
|
|
|
]
|
|
|
|
++ optionals stdenv.isDarwin [ libobjc libresolv ]
|
|
|
|
++ concatMap (p: p.buildInputs) enabledPlugins
|
|
|
|
++ extraBuildInputs;
|
|
|
|
|
|
|
|
NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}"
|
|
|
|
# Fix '_res_9_init: undefined symbol' error
|
|
|
|
+ (stdenv.lib.optionalString stdenv.isDarwin "-DBIND_8_COMPAT=1 -lresolv");
|
|
|
|
|
|
|
|
postInstall = with stdenv.lib; ''
|
|
|
|
for p in ${concatMapStringsSep " " (p: p.name) enabledPlugins}; do
|
|
|
|
from=$out/lib/weechat/plugins/$p.so
|
|
|
|
to=''${!p}/lib/weechat/plugins/$p.so
|
|
|
|
mkdir -p $(dirname $to)
|
|
|
|
mv $from $to
|
|
|
|
done
|
|
|
|
'';
|
2010-08-05 16:47:15 +01:00
|
|
|
|
2017-11-03 10:25:22 +00:00
|
|
|
meta = {
|
|
|
|
homepage = http://www.weechat.org/;
|
|
|
|
description = "A fast, light and extensible chat client";
|
2018-04-04 13:42:06 +01:00
|
|
|
longDescription = ''
|
|
|
|
You can find more documentation as to how to customize this package
|
|
|
|
(eg. adding python modules for scripts that would require them, etc.)
|
|
|
|
on https://nixos.org/nixpkgs/manual/#sec-weechat .
|
|
|
|
'';
|
2017-11-03 10:25:22 +00:00
|
|
|
license = stdenv.lib.licenses.gpl3;
|
2019-07-03 10:27:39 +01:00
|
|
|
maintainers = with stdenv.lib.maintainers; [ lovek323 the-kenny lheckemann ma27 ];
|
2017-11-03 10:25:22 +00:00
|
|
|
platforms = stdenv.lib.platforms.unix;
|
|
|
|
};
|
weechat: seperate weechat-unwrapped from wrapper
If I have a patch I want to apply to weechat, I can't do that with
overrideAttrs like I can with almost every other package, because that
only applies to the wrapper derivation. For other wrapped packages, one
can usually call the wrapper with any version of the derivation, but the
weechat derivation didn't expose a wrapper creation function.
Taking inspiration from other packages, particularly Firefox, I
extracted the wrapper into its own function, made the default weechat
derivation use that, and added weechat-unwrapped.
Now I can add my custom patch like this:
(wrapWeechat
(weechat-unwrapped.overrideAttrs (oldAttrs: {
patches = [
(fetchpatch {
url = "https://github.com/weechat/weechat/commit/55767f5f116db3cb56cf85f52aa80feff45b6abf.patch?full_index=1";
sha256 = "1pkcdsby57diqds1y5hhl0fr4i8j0zax32jb0gqd36siki3lza3d";
})
];
}))
{ configure =
{ availablePlugins, ... }:
{
plugins = with availablePlugins; [
(python.withPackages (packages: with packages; [ potr websocket_client ]))
];
};
})
There is a small backward incompatibility here: previously, it was
possible to get an unwrapped weechat like this:
weechat.override { configure = null; }
This didn't seem too important to keep around since it was also possible
to get an unwrapped weechat in a much more obvious way:
weechat.unwrapped
I could probably make it so that the first way still worked, if that
behavior turns out to really have been important.
2018-07-25 17:36:41 +01:00
|
|
|
}
|