Compare commits

..

509 Commits

Author SHA1 Message Date
Ailin Nemui
fb5c99d27f Merge remote-tracking branch 'irssi/master' 2022-04-25 23:33:58 +02:00
Tom Wesley
7d673653a1
Merge pull request #1372 from dwfreed/rebrand-1.3.2
Merge Nei's changes
2022-04-25 18:09:44 +01:00
Doug Freed
6d2cfc24b7 Clean up remaining branding reverts 2022-04-24 20:40:01 +00:00
Doug Freed
2f700bebc7 NEWS: remove 2 lines that would be confusing 2022-04-24 20:07:30 +00:00
ailin-nemui
4cec2d98c5
Merge pull request #83 from ailin-nemui/shelp
new SHELP default alias
2022-04-24 15:40:54 +02:00
Ailin Nemui
37e65ba168 new SHELP default alias 2022-04-24 15:40:20 +02:00
ailin-nemui
b446d06b9d
Merge pull request #82 from ailin-nemui/progval-help
Format RPL_HELPSTART/RPL_HELPTXT/RPL_ENDOFHELP
2022-04-21 23:02:17 +02:00
Ailin Nemui
49479f151c up abi 2022-04-21 22:18:33 +02:00
Ailin Nemui
4f1e5f35a3 fix formatting 2022-04-21 22:00:18 +02:00
Ailin Nemui
ba16d71e9f add SERVER_ to constants 2022-04-21 22:00:18 +02:00
Valentin Lorentz
f684c18867 s/irctxt_/server_/ 2022-04-21 22:00:18 +02:00
Valentin Lorentz
48571389c7 Revert "Add ERR_HELPNOTFOUND"
This reverts commit 91439c099e1bbf848dac03f67a3239fcc4c1f771;
because it adds handling for numeric 524, which conflicts with
ERR_QUARANTINED and ERR_OPERSPVERIFY.
2022-04-21 22:00:18 +02:00
Valentin Lorentz
41b3895ce3 Free signals 2022-04-21 22:00:18 +02:00
Valentin Lorentz
1415ef5389 Add ERR_HELPNOTFOUND 2022-04-21 22:00:18 +02:00
Valentin Lorentz
3a3301e19b Format RPL_HELPSTART/RPL_HELPTXT/RPL_ENDOFHELP
They are typical replies when using the HELP command.
2022-04-21 22:00:18 +02:00
ailin-nemui
e300fee93d
Merge pull request #81 from ailin-nemui/pubnotices
add new PUBNOTICES level
2022-04-21 21:09:20 +02:00
Ailin Nemui
7360944900 add new PUBNOTICES level
separating private notices and channel notices
2022-04-21 13:38:40 +02:00
Ailin Nemui
0bd7fc459c revert branding 2022-03-23 17:16:32 +01:00
ailin-nemui
ae5a9283ee
Merge pull request #79 from ailin-nemui/query-bounds
restore irc bound queries
2022-03-18 22:58:39 +01:00
ailin-nemui
ed4ec313a2
Merge pull request #80 from ailin-nemui/meson
don't do stupid things
2022-03-18 22:45:00 +01:00
Ailin Nemui
cfd421a948 update meson requirement, add check for built files 2022-03-18 22:31:40 +01:00
Ailin Nemui
8381e13e4c up abi 2022-03-16 00:07:06 +01:00
Ailin Nemui
884cabd55d restore irc bound queries 2022-03-16 00:02:29 +01:00
ailin-nemui
84a98d0e08
Merge pull request #76 from ailin-nemui/scroll_page_count
fix scroll_page_count settings with .
2022-03-11 12:11:18 +01:00
ailin-nemui
c62505386f
Merge pull request #77 from ailin-nemui/fix_ignore_help
Clarify the help for /ignore -time
2022-03-11 12:09:26 +01:00
ailin-nemui
4986a4f9db
Merge pull request #75 from ailin-nemui/termux
simplify termux github workflow
2022-03-11 09:14:08 +01:00
Ailin Nemui
0c49ba0bda fix clang-format 2022-03-11 09:06:37 +01:00
vague666
344398dd2a Update SYNTAX 2022-03-11 08:58:05 +01:00
vague666
82dd550184 Clarify the help 2022-03-11 08:58:05 +01:00
Ailin Nemui
8fa2d01a7f fix scroll_page_count settings with . 2022-03-11 08:56:35 +01:00
Ailin Nemui
bb4859d3d5 simplify termux github workflow 2022-03-11 08:54:44 +01:00
ailin-nemui
4bf129084f
Merge pull request #74 from ailin-nemui/makedist
Add some missing files to make-dist
2022-02-21 17:52:15 +01:00
ailin-nemui
4115e47434
Merge pull request #73 from ailin-nemui/cruft
remove deprecated defines
2022-02-21 17:15:18 +01:00
Ailin Nemui
c0929e3aaf Add some missing files to make-dist 2022-02-20 18:55:45 +01:00
Ailin Nemui
883510a3fd remove deprecated defines
- PERL_STATIC_LIBS (was not tested anymore)
- HAVE_GMODULE (always required)
- HAVE_STATIC_IRC
- HAVE_STATIC_PERL
- HAVE_SOCKS (was not working properly)
- USE_GREGEX (we use it)
2022-02-20 17:33:36 +01:00
ailin-nemui
06a7dcad99
Merge pull request #72 from ailin-nemui/load-silent-doc
add -silent switch in syntax comment and respect it without args
2022-02-20 16:29:21 +01:00
Ailin Nemui
10caed057a add -silent switch in syntax comment and respect it without args 2022-02-20 15:54:04 +01:00
ailin-nemui
854c88da03
Merge pull request #70 from ailin-nemui/update-screenshot
update screenshot
2022-02-19 23:24:58 +01:00
ailin-nemui
9b768abfd7
update screenshot 2022-02-19 23:17:49 +01:00
ailin-nemui
3a5f93bbcc
Merge pull request #69 from ailin-nemui/always-24bit
remove enable-true-color compile time switch
2022-02-19 22:45:37 +01:00
Ailin Nemui
0682cbed3c remove TERM_TRUECOLOR define 2022-02-19 22:23:29 +01:00
Ailin Nemui
b34f16e9df remove enable-true-color compile time switch 2022-02-19 22:23:29 +01:00
ailin-nemui
58efc6371a
Merge pull request #64 from ailin-nemui/remove-autotools
good-bye and thanks, autotools
2022-02-19 22:22:42 +01:00
Ailin Nemui
e692f85f4a remove install_rpath
reported by dwfreed / Unit193
2022-02-19 21:44:10 +01:00
Ailin Nemui
b8736225cf good-bye and thanks, autotools 2022-02-19 21:44:10 +01:00
ailin-nemui
cf6bc31172
Merge pull request #68 from ailin-nemui/gint64fmt
use gint64 define
2022-02-19 11:00:34 +01:00
ailin-nemui
7ec61c4ec0
Merge pull request #67 from ailin-nemui/spelling
spelling fixes
2022-02-19 10:58:05 +01:00
Ailin Nemui
9b73d152fe use gint64 define 2022-02-19 00:34:06 +01:00
Ailin Nemui
bfcafa76c0 spelling fixes
by lintian / dwfreed
2022-02-19 00:27:02 +01:00
ailin-nemui
d9b181e4a1
Merge pull request #42 from ailin-nemui/module-autoload
Protocol module autoloading
2022-02-17 18:03:12 +01:00
Ailin Nemui
b335e5526d up abi 2022-02-16 23:54:51 +01:00
Ailin Nemui
1f8e167295 test termux pkg 2022-02-16 23:54:51 +01:00
Ailin Nemui
ef2c55fc18 fix irc module in fuzzer 2022-02-16 22:05:04 +01:00
Ailin Nemui
2e6c376342 add android cross link deps 2022-02-16 21:49:11 +01:00
Ailin Nemui
89bcff606f fix meson deprecations 2022-02-16 21:49:11 +01:00
Ailin Nemui
f4938a2804 remove unused function 2022-02-16 21:49:11 +01:00
Ailin Nemui
3760fcd1ca load config on chat protocol cre 2022-02-16 21:49:11 +01:00
Ailin Nemui
bee057ff21 fix something 2022-02-16 21:49:11 +01:00
Ailin Nemui
82f8ee57c3 autoload the IRC module 2022-02-16 21:49:11 +01:00
ailin-nemui
738931762b
Merge pull request #60 from ailin-nemui/paste
Add "paste event" signal
2022-02-11 14:17:49 +01:00
Ailin Nemui
76d140650a add settings*choice functions to perl 2022-02-07 16:44:14 +01:00
ailin-nemui
27008bf447
Merge pull request #58 from ailin-nemui/erase-cutbuffer
Add empty_kill_clears_cutbuffer option
2022-02-06 16:33:20 +01:00
ailin-nemui
d523ceacf0
Merge pull request #61 from ailin-nemui/actlist_separator
Actlist separator
2022-02-06 14:38:57 +01:00
Ailin Nemui
e5d02bd57b simplify 2022-02-06 14:22:56 +01:00
Ailin Nemui
32ab41625f simplify code 2022-02-06 09:50:38 +01:00
Ailin Nemui
089cab715f fix formatting 2022-02-06 02:27:36 +01:00
Ailin Nemui
75e56297fc fix intentation 2022-02-06 02:25:19 +01:00
Mikael Magnusson
d652055060 Add empty_kill_clears_cutbuffer option
Adapted revert of 13524b1f76bb.
2022-02-06 02:24:17 +01:00
vague666
d6b55c6d43 Make redrawing of item actually work 2022-02-06 01:49:24 +01:00
vague666
de626250b5 Added statusbar_items_redraw code 2022-02-06 01:49:24 +01:00
vague666
cdda5ab759 Make actlist separator a setting 2022-02-06 01:49:24 +01:00
Ailin Nemui
f47154d1a9 support multiple scripts 2022-02-06 01:47:55 +01:00
ailin-nemui
cc411a1be0
Merge pull request #59 from ailin-nemui/ilog-domain
fix crash when accessing settings during shutdown
2022-02-06 01:11:41 +01:00
Ailin Nemui
d4ed3460fc fix some stupidness 2022-02-06 00:41:13 +01:00
Ailin Nemui
5cd13d6ea2 compatibility code for old GLib 2022-02-05 23:24:52 +01:00
Ailin Nemui
17f185d833 add setting to ignore first newline 2022-02-05 23:01:55 +01:00
Ailin Nemui
5f29b35fbe fix crash when accessing settings during shutdown 2022-02-05 22:33:34 +01:00
Ailin Nemui
4846e4f319 Add "paste event" signal 2022-02-05 22:32:57 +01:00
ailin-nemui
53187de6a2
Merge pull request #57 from ailin-nemui/lr-skip-visible
Make window left/right skip windows that are already visible in other…
2022-01-31 10:47:31 +01:00
Ailin Nemui
2e6375d4ff Merge tag '1.3.2-an' into HEAD 2022-01-21 13:37:41 +01:00
Ailin Nemui
7b22f41ec5 formatting 2022-01-19 20:49:56 +01:00
Mikael Magnusson
29e36a8fb0 Make window left/right skip windows that are already visible in other mainwins 2022-01-19 20:41:52 +01:00
Ailin Nemui
c0123a1487 Merge tag '1.3.2-an' into integrate/1.3.2-an 2022-01-14 13:40:56 +01:00
Ailin Nemui
b60b0f0ff9 tag as 1.3.2-an 2022-01-14 13:18:41 +01:00
ailin-nemui
3603d47990 Merge pull request #56 from ailin-nemui/line-bookmark
fix crash in Perl's $view->set_bookmark

(cherry picked from commit 95e3fea62236b606b9c9e4d0c4231c75589ef71f)
2022-01-14 11:36:21 +01:00
ailin-nemui
c96a8d9fae Merge pull request #54 from ailin-nemui/chantypes
use chantypes instead of # for irc channel defaults

(cherry picked from commit f7fd4d72e488081f180fc1f4cc8bb269e50a9067)
2022-01-14 11:36:17 +01:00
ailin-nemui
95e3fea622
Merge pull request #56 from ailin-nemui/line-bookmark
fix crash in Perl's $view->set_bookmark
2022-01-14 11:29:25 +01:00
Ailin Nemui
937786b731 fix crash in Perl's $view->set_bookmark
reported on the freebsd issue tracker https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254237#c13
2022-01-13 19:38:36 +01:00
Ailin Nemui
d4e3655f1f update news 2021-12-30 23:25:23 +01:00
ailin-nemui
f7fd4d72e4
Merge pull request #54 from ailin-nemui/chantypes
use chantypes instead of # for irc channel defaults
2021-12-30 23:23:53 +01:00
Ailin Nemui
3e4d7ded77 use chantypes instead of # for irc channel defaults 2021-12-26 01:13:57 +01:00
Ailin Nemui
d4ad71c831 Merge tag '1.3.1-an' into integrate/1.3.1-an 2021-12-17 22:47:18 +01:00
Ailin Nemui
85a6ade7e8 tag as 1.3.1-an 2021-12-17 22:42:13 +01:00
ailin-nemui
dbf9fc3dfc Merge pull request #53 from ailin-nemui/keepops
keep own ops status on /upgrade

(cherry picked from commit a2feef5e735d3bb3d5a4eecb05e813ba6bd2fe95)
2021-12-17 22:37:46 +01:00
ailin-nemui
6763be847f Merge pull request #52 from ailin-nemui/help
fix help text wrt SERVER LIST command

(cherry picked from commit 8281b103108820aa104c8e0fe5c33960838d2f99)
2021-12-17 22:37:26 +01:00
ailin-nemui
bb1957bafb Merge pull request #51 from ailin-nemui/help
fix help text wrt SERVER command

(cherry picked from commit d33fd0c5da2287f5496a4a78940490f0c4466428)
2021-12-17 22:37:20 +01:00
ailin-nemui
a2feef5e73
Merge pull request #53 from ailin-nemui/keepops
keep own ops status on /upgrade
2021-12-17 22:29:15 +01:00
Ailin Nemui
60cb9451b3 keep own ops status on /upgrade 2021-12-13 15:32:30 +01:00
ailin-nemui
8281b10310
Merge pull request #52 from ailin-nemui/help
fix help text wrt SERVER LIST command
2021-12-01 23:34:53 +01:00
Ailin Nemui
62eff3d2a7 fix help text wrt SERVER LIST command 2021-12-01 23:34:20 +01:00
ailin-nemui
d33fd0c5da
Merge pull request #51 from ailin-nemui/help
fix help text wrt SERVER command
2021-12-01 22:51:43 +01:00
Ailin Nemui
8088353ed0 fix help text wrt SERVER command
reported by Remco
2021-12-01 22:50:06 +01:00
Ailin Nemui
920e827ae5 Merge commit '2cdcf86174b420091372edd295dc81cda8b46d8f' into HEAD 2021-12-01 13:37:13 +01:00
ailin-nemui
0e3f6aa4a2
Merge pull request #50 from ailin-nemui/gliblog
Improve handling of GLib log messages
2021-11-17 11:17:59 +01:00
Ailin Nemui
9579105748 up abi 2021-11-17 11:00:16 +01:00
Andrej Kacian
9b79749f6c Improve handling of GLib log messages
This patch introduces setting "glib_log_domains", which is
a space-separated list of log domain names, optionally prefixed
with a '-'. The list is parsed from left to right to determine
whether or not user wants to see message from a particular log
domain. Keywords 'all' or '*' are allowed as well.
Examples: "GLib-GIO", "all -GLib-GIO", "-*"

This patch also changes the default format for displaying GLib log
messages to include the log domain.
2021-11-17 10:59:39 +01:00
Ailin Nemui
608c7b09d7 Merge tag '1.3.0-pre8' into integrate/1.3.0 2021-11-12 09:25:47 +01:00
Ailin Nemui
05063da999 tag as 1.3.0-pre8 2021-11-11 10:54:09 +01:00
ailin-nemui
eed9b32f97 Merge pull request #49 from ailin-nemui/dccmsgs
fix stuck meta on dcc chat

(cherry picked from commit a54a00c803067bfc669658f64aaac54dfe95c69b)
2021-11-11 10:50:10 +01:00
ailin-nemui
bdadbb183f Merge pull request #48 from ailin-nemui/news
add news ref

(cherry picked from commit b9f773ba6a8913eff2812da122a62528550b0534)
2021-11-11 10:47:45 +01:00
ailin-nemui
a54a00c803
Merge pull request #49 from ailin-nemui/dccmsgs
fix stuck meta on dcc chat
2021-11-10 14:12:47 +01:00
Ailin Nemui
2f99f3a5d3 update news 2021-11-10 13:52:18 +01:00
Ailin Nemui
c5dc3fc2a0 fix stuck meta on dcc chat 2021-11-09 21:18:40 +01:00
ailin-nemui
b9f773ba6a
Merge pull request #48 from ailin-nemui/news
add news ref
2021-11-09 14:48:54 +01:00
Ailin Nemui
8f40b3ba7b add news ref 2021-10-23 11:04:47 +02:00
Ailin Nemui
815ee7b2dd Merge tag '1.3.0-pre7' into integrate/1.3.0 2021-10-11 22:21:22 +02:00
Ailin Nemui
47f8582e68 update NEWS 2021-10-11 22:11:17 +02:00
ailin-nemui
23abfb9123 Merge pull request #44 from ailin-nemui/lag
fix max_lag disconnect

(cherry picked from commit 6db881d8ef70b261b1f237188b53a1de76c6fadb)
2021-10-11 22:08:53 +02:00
ailin-nemui
6db881d8ef
Merge pull request #44 from ailin-nemui/lag
fix max_lag disconnect
2021-10-11 22:08:14 +02:00
ailin-nemui
3bb8c619e2 Merge pull request #43 from ailin-nemui/server-outgoing
remove newline from "server outgoing modify"

(cherry picked from commit ea961623f575529ab2a94d7d394b399d29729b57)
2021-10-11 22:07:44 +02:00
Ailin Nemui
44298db814 chghost news 2021-10-11 22:01:44 +02:00
ailin-nemui
f5d74bd81b
Merge pull request #45 from ailin-nemui/server-outgoing
simplify duplicate code in outgoing modify
2021-10-10 22:16:46 +02:00
Ailin Nemui
bec9e04714 up abi 2021-10-10 13:15:49 +02:00
Ailin Nemui
b22588a9ad simplify duplicate code in outgoing modify 2021-10-10 13:15:49 +02:00
ailin-nemui
ea961623f5
Merge pull request #43 from ailin-nemui/server-outgoing
remove newline from "server outgoing modify"
2021-10-10 12:45:21 +02:00
Ailin Nemui
db200f266b remove newline from "server outgoing modify" 2021-10-10 11:03:00 +02:00
Ailin Nemui
b878c7f079 fix max_lag disconnect 2021-10-09 21:26:01 +02:00
Ailin Nemui
1d3cdfa2d2 Merge tag '1.3.0-pre6' into integrate/1.3.0 2021-10-01 13:43:20 +02:00
Ailin Nemui
96d99534c3 update NEWS 2021-09-29 20:20:56 +02:00
ailin-nemui
5bff40593f Merge pull request #41 from ailin-nemui/ports
fix /server modify port argument order

(cherry picked from commit 235c5b03281a3ae5c7849921cebbf7d46d39a4fc)
2021-09-29 19:03:25 +02:00
ailin-nemui
0ba449d8be Merge pull request #39 from ailin-nemui/sync
run syncdocs.sh and syncscripts.sh

(cherry picked from commit 85a9dc146d803be344bf3806395ac294d6929c13)
2021-09-29 19:03:21 +02:00
ailin-nemui
117758fb90 Merge pull request #40 from ailin-nemui/gh-actions
update github actions ubuntu version to 18.04 and meson to <0.60.0

(cherry picked from commit db705278d2f766433d3c28f776241c4997efde70)
2021-09-29 19:03:17 +02:00
ailin-nemui
0932bbed7b Merge pull request #37 from ailin-nemui/int-min-reached
fix pedantic error in MSGLEVEL enum

(cherry picked from commit b0fdbb144d5c5723269b2571761b0a073a392454)
2021-09-29 19:03:11 +02:00
ailin-nemui
235c5b0328
Merge pull request #41 from ailin-nemui/ports
fix /server modify port argument order
2021-09-29 18:59:09 +02:00
Ailin Nemui
2d9c27d617 fix wrong argument type in printformat 2021-09-28 13:27:56 +02:00
Ailin Nemui
4943cc5e58 fix /server modify port argument order 2021-09-27 22:20:15 +02:00
ailin-nemui
85a9dc146d
Merge pull request #39 from ailin-nemui/sync
run syncdocs.sh and syncscripts.sh
2021-09-22 12:33:10 +02:00
ailin-nemui
9f9d49a2f1
Merge pull request #38 from ailin-nemui/docs
update docs
2021-09-22 12:32:51 +02:00
Ailin Nemui
6a83eddf84 run syncdocs.sh and syncscripts.sh 2021-09-22 11:26:24 +02:00
bw1
32a3f4463c update docs
+ version()
+ $abiversion
+ parse_special()
2021-09-22 11:26:13 +02:00
ailin-nemui
db705278d2
Merge pull request #40 from ailin-nemui/gh-actions
update github actions ubuntu version to 18.04 and meson to <0.60.0
2021-09-22 11:25:32 +02:00
Ailin Nemui
df227eb094 update github actions ubuntu version to 18.04 and meson to <0.60.0 2021-09-22 11:14:13 +02:00
ailin-nemui
b0fdbb144d
Merge pull request #37 from ailin-nemui/int-min-reached
fix pedantic error in MSGLEVEL enum
2021-09-21 22:35:30 +02:00
Ailin Nemui
bcea697e7c fix pedantic error in MSGLEVEL enum
reported by horgh
2021-09-19 20:59:14 +02:00
ailin-nemui
8b49cd012d Merge pull request #36 from ailin-nemui/missing-hilights
correctly store updated message levels e.g. from /hilight

(cherry picked from commit ad8221835c90969a6ba87807b072ba9f4d63bd48)
2021-09-15 17:57:21 +02:00
ailin-nemui
ad8221835c
Merge pull request #36 from ailin-nemui/missing-hilights
correctly store updated message levels e.g. from /hilight
2021-09-15 17:56:45 +02:00
Ailin Nemui
515e493db3 update news 2021-09-15 17:52:44 +02:00
Ailin Nemui
949dc06af3 correctly store updated message levels e.g. from /hilight 2021-09-15 17:48:27 +02:00
ailin-nemui
0f3e95892d Merge pull request #35 from ailin-nemui/fixes
duplicate issue in NEWS

(cherry picked from commit d3e105a3963cbc693ac316ae884b000902999828)
2021-09-08 17:37:53 +02:00
ailin-nemui
42f749346b Merge pull request #34 from ailin-nemui/no-maxline
remove oragono.io/maxline-2

(cherry picked from commit 7e1401140412361b813accd99aa367658435c12f)
2021-09-08 17:37:34 +02:00
ailin-nemui
d3e105a396
Merge pull request #35 from ailin-nemui/fixes
duplicate issue in NEWS
2021-09-08 13:03:14 +02:00
ailin-nemui
7e14011404
Merge pull request #34 from ailin-nemui/no-maxline
remove oragono.io/maxline-2
2021-09-08 13:03:03 +02:00
Ailin Nemui
27a73e253b duplicate issue in NEWS
reported by @tobbez
2021-09-08 12:04:18 +02:00
Ailin Nemui
85eb4f118f also remove from NEWS 2021-09-08 12:03:05 +02:00
Ailin Nemui
521c0d4e6f remove oragono.io/maxline-2 2021-09-08 11:57:25 +02:00
Ailin Nemui
2003446e98 continue head 2021-09-08 11:54:44 +02:00
Ailin Nemui
2cdcf86174 branding 2021-09-06 23:44:23 +02:00
ailin-nemui
921c40f09b
Merge pull request #31 from ailin-nemui/package-version
add a PACKAGE_VERSION override for meson
2021-09-03 20:26:31 +02:00
ailin-nemui
69358fbe7c
Merge pull request #15 from ailin-nemui/server-outgoing
Add a "server outgoing modify" signal to intercept outgoing messages
2021-09-03 20:26:12 +02:00
Ailin Nemui
9e12890110 add a "server outgoing modify" signal to intercept outgoing messages 2021-09-03 20:04:29 +02:00
ailin-nemui
3e08ac538d
Merge pull request #33 from ailin-nemui/queues
fix queue bug
2021-09-03 20:03:58 +02:00
Ailin Nemui
37eb6c351c fix queue bug 2021-09-03 19:44:29 +02:00
ailin-nemui
fe09dccdcb
Merge pull request #21 from ailin-nemui/sasl-plain-nonull
only enable sasl plain when username and password are set
2021-09-03 18:00:31 +02:00
ailin-nemui
ce1eed94d1
Merge pull request #26 from ailin-nemui/queues
send channel sync requests "later" in the command queue
2021-09-03 18:00:12 +02:00
Ailin Nemui
cb11fd9cf7 add a PACKAGE_VERSION override for meson 2021-09-03 16:18:21 +02:00
ailin-nemui
03217a487e
Merge pull request #29 from ailin-nemui/hilight-color
actually remember the hilight -color
2021-09-03 11:41:15 +02:00
ailin-nemui
10b5087ded
Merge pull request #30 from vague666/patch-1
Allow -tls_ca{file,path} '' to unset an argument
2021-09-02 23:46:43 +02:00
Jari Matilainen
cf90384023
Allow -tls_ca{file,path} '' to unset an argument 2021-09-02 23:10:37 +02:00
Ailin Nemui
37237f377e actually remember the hilight -color 2021-09-02 22:39:14 +02:00
Ailin Nemui
2de9c25376 up abi 2021-09-02 19:58:00 +02:00
Ailin Nemui
157913bd98 do not chase during netsplit 2021-09-02 19:58:00 +02:00
Ailin Nemui
240b79aa26 send channel sync requests "later" in the command queue 2021-09-02 19:58:00 +02:00
ailin-nemui
0e8717acf6
Merge pull request #23 from ailin-nemui/ssl-flip
do not unconditionally enable tls on /connect -!
2021-09-01 22:51:53 +02:00
Ailin Nemui
82d2cd88e7 Revert "Irssi does not take a political stance."
This reverts commit a4486c236a3bf15192d0500b3a1892f7465826c7.
2021-09-01 13:37:37 +02:00
Ailin Nemui
1a30e646d9 Revert "Applied the updated docs changes in line with the upcoming blog post."
This reverts commit 1773fa8d191c9f1dcc7c1e59dbcdf31c1263c918.
2021-09-01 13:37:17 +02:00
Ailin Nemui
939b773b8b Revert "Changed the support channel to LiberaChat."
This reverts commit a5d4fd5aa7ad1d57c0b8e11e382944a3654cfa00.
2021-09-01 13:37:07 +02:00
Ailin Nemui
1a6d74ac26 fix reading of starttls = "no" in config, attempt 2 2021-08-31 21:54:41 +02:00
Ailin Nemui
6c47fcf10d Revert "Merge pull request #19 from ailin-nemui/starttls-no"
This reverts commit 3324c5da89c694ce5bbd20ecb313da870d1bb914, reversing
changes made to d3115f38550f26b935d4e22201d09287ce44e5ac.
2021-08-31 21:49:29 +02:00
Ailin Nemui
21701a1299 do not unconditionally enable tls on /connect -! 2021-08-31 17:30:28 +02:00
ailin-nemui
b7b91ed2bf
Merge pull request #22 from ailin-nemui/ports
Something with server add
2021-08-31 15:30:48 +02:00
ailin-nemui
3324c5da89
Merge pull request #19 from ailin-nemui/starttls-no
fix reading of starttls = "no" in config
2021-08-31 15:17:03 +02:00
ailin-nemui
d3115f3855
Merge pull request #18 from ailin-nemui/ssl-verify
fix reading of old config ssl_verify key
2021-08-31 15:16:54 +02:00
Ailin Nemui
215cf08828 fuzz server ssl init 2021-08-31 14:54:08 +02:00
Ailin Nemui
e10e1c2da7 fix reading of old config ssl_verify key 2021-08-31 14:54:08 +02:00
Ailin Nemui
92ade2f591 fuzz server ssl init 2021-08-31 14:53:53 +02:00
Ailin Nemui
6710b35736 fix reading of starttls = "no" in config 2021-08-31 14:53:53 +02:00
Ailin Nemui
63a5b80ba7 only enable sasl plain when username and password are set
may fix #1325
2021-08-31 14:53:31 +02:00
Ailin Nemui
4b506fc45c remove duplicated servers on load 2021-08-31 14:49:56 +02:00
Ailin Nemui
c4fd417cce up abi 2021-08-31 12:34:01 +02:00
Ailin Nemui
49903f4185 mess with server ports 2021-08-31 12:34:01 +02:00
ailin-nemui
4001871552
Merge pull request #20 from ailin-nemui/fuzz-test
use an internal build of openssl when fuzzer is enabled
2021-08-30 22:15:08 +02:00
Ailin Nemui
a07a4c1ea8 use an internal build of openssl when fuzzer is enabled 2021-08-30 21:07:03 +02:00
ailin-nemui
e88f476115
Merge pull request #16 from ailin-nemui/log-server-time
add a log_server_time setting
2021-08-15 16:17:49 +02:00
Ailin Nemui
b3f74fe0ab up abi 2021-08-15 15:58:10 +02:00
Ailin Nemui
6a33139939 compat for glib 2.55 2021-08-15 15:57:34 +02:00
Ailin Nemui
fdd61f5898 add a log_server_time setting 2021-08-15 15:57:34 +02:00
ailin-nemui
d6f876d5ca
Merge pull request #17 from ailin-nemui/cifuzz-fork
Run CIFuzz docker manually
2021-08-15 15:56:11 +02:00
Ailin Nemui
0c82a3adfd Workaround for google/oss-fuzz#3731
Run CIFuzz docker manually
2021-08-15 15:26:35 +02:00
ailin-nemui
a6722f5c71
Merge pull request #14 from ailin-nemui/perl-draw-mod
Allow access to "gui render line text" from Perl
2021-08-13 18:59:32 +02:00
Ailin Nemui
5a8b23cab0 up abi 2021-08-13 17:38:57 +02:00
ailin-nemui
85f0a4c1f0
Merge pull request #13 from ailin-nemui/hilight
Add code to make hilight work with textbuffer changes
2021-08-13 17:37:52 +02:00
Ailin Nemui
96e9ab41e9 add "gui render line text" to signals.txt 2021-08-13 17:32:25 +02:00
Ailin Nemui
ed23d89a5a fix recursive crash in Perl scripts 2021-08-13 17:32:09 +02:00
Ailin Nemui
425178e793 add GString to Perl 2021-08-13 17:31:49 +02:00
Ailin Nemui
1602b506a6 add LINE_INFO_META_REC to Perl 2021-08-13 17:31:14 +02:00
Ailin Nemui
6a52b5ac07 up abi 2021-08-13 00:44:33 +02:00
Ailin Nemui
5953b675b9 store the hilight result in the meta table and apply it during the "gui render line text" signal 2021-08-12 23:53:44 +02:00
Ailin Nemui
8d314eadf1 move TEXT_BUFFER_META_REC -> LINE_INFO_META_REC 2021-08-12 23:51:18 +02:00
Ailin Nemui
9677b07488 fix wrong server_time in $line->get_meta 2021-08-12 23:49:40 +02:00
Ailin Nemui
7d13cfba07 add a meta table to all lines 2021-08-12 23:48:37 +02:00
Ailin Nemui
554a8556d2 fix use of wrong "equal" function in meta hash tables 2021-08-12 23:46:31 +02:00
ailin-nemui
7452ec34ad
Merge pull request #12 from ailin-nemui/ticho/singlenet
can do /server add -matrix -network my_matrix_network
2021-08-11 15:59:10 +02:00
ailin-nemui
b38d254d04
Merge pull request #11 from ailin-nemui/vague666/activity_hide_targets_tagstar
Allow tag/* in activity_hide_targets
2021-08-10 23:46:30 +02:00
Jari Matilainen
3aeebd310d Update fe-common-core.c 2021-08-10 23:45:22 +02:00
Jari Matilainen
d2062e34cf Update fe-common-core.c 2021-08-10 23:45:22 +02:00
ailin-nemui
be7a3a85e7
Merge pull request #10 from ailin-nemui/mteofrancis
Fix minor typos in help text
2021-08-10 23:43:26 +02:00
Francis M
77741b187c Fix minor typos in help text 2021-08-10 23:39:48 +02:00
ailin-nemui
a6ca512150
Merge pull request #9 from ailin-nemui/guntbert/issue-1329
Add documentation for  escaping some characters
2021-08-10 23:36:53 +02:00
Guntbert Reiter
aecf087014 Add documentation for escaping some characters
this is especially important when using `sendcmd` to send a password for autologin
2021-08-10 22:42:35 +02:00
ailin-nemui
53b2e0775a
Merge pull request #8 from ailin-nemui/ffrogman
Fix cursor getting stuck for auto completions that changes case
2021-08-10 22:36:03 +02:00
ailin-nemui
471046f5b6
Merge pull request #7 from ailin-nemui/names-limit
add a limit to showing /NAMES on join
2021-08-10 22:17:19 +02:00
Ailin Nemui
6591c94635 add a limit to showing /NAMES on join
only show the counts if too many nicks
2021-08-10 22:12:26 +02:00
Ailin Nemui
f147589e52 can do /server add -matrix -network my_matrix_network
By Andrej Kacian
2021-07-28 11:06:58 +02:00
Geert Hauwaerts
e31d42b381
Merge pull request #1328 from irssi/docs-change
Applied the updated docs changes in line with the upcoming blog post.
2021-05-30 11:20:49 +03:00
Geert Hauwaerts
a5d4fd5aa7
Changed the support channel to LiberaChat. 2021-05-27 20:50:38 +03:00
Geert Hauwaerts
1773fa8d19
Applied the updated docs changes in line with the upcoming blog post. 2021-05-27 20:47:09 +03:00
Geert Hauwaerts
a4486c236a
Irssi does not take a political stance. 2021-05-26 09:24:32 +03:00
ffrogman
700ec4c472 Fix cursor getting stuck for auto completions that exclusively change the case of letters 2021-05-25 23:37:36 -04:00
ailin-nemui
ca9fcbc124
Merge pull request #1316 from FeepingCreature/feature/add-serv-shorthands
Add aliases for ns, ms, os, cs shorthand commands supported by many servers to message services easily
2021-05-23 18:25:03 +02:00
Ailin Nemui
1ba48840a1 update default network 2021-05-20 15:57:06 +02:00
Mathis Beer
5779306df0 Add aliases for ns, ms, os, cs shorthand commands supported by many servers to message services easily. 2021-05-20 10:20:40 +02:00
ailin-nemui
58c9aecf86
Merge pull request #1315 from pekdon/otr_g_strndup
Use g_strndup, strndup is not available on old platforms
2021-05-17 14:43:31 +02:00
ailin-nemui
5df2d6e300
Merge pull request #1312 from ailin-nemui/nocap
slightly improve nocap detection
2021-05-17 10:54:21 +02:00
Claes Nästén
a3248d43ec Use g_strndup, strndup is not available on old platforms
strndup is not available on Solaris 10, to ensure building is ok use
glib function.
2021-05-15 18:10:02 +02:00
ailin-nemui
768658f5d5
Merge pull request #1314 from ailin-nemui/meson
fix build with meson 0.58.0
2021-05-10 13:14:40 +02:00
Ailin Nemui
af489b2d5f fix build with meson 0.58.0 2021-05-10 13:07:22 +02:00
ailin-nemui
da21a7f279
Merge pull request #1313 from ailin-nemui/meson
downgrade meson in github actions
2021-05-10 11:18:41 +02:00
Ailin Nemui
dcbc895e26 downgrade meson in github actions 2021-05-10 10:42:48 +02:00
Ailin Nemui
f5303c153c slightly improve nocap detection
Fixes #1311
2021-05-10 08:34:19 +02:00
ailin-nemui
b4b040d93d
Merge pull request #1308 from niacat/tparm-args
Fix build on operating systems with X/Open Curses, version 2
2021-05-02 09:02:46 +02:00
Ailin Nemui
2122daa3f3 Run clang-format 2021-04-30 10:27:47 +02:00
nia
4fa72e857c Fix build on operating systems with X/Open Curses, version 2
Add the missing arguments to tparm. X/Open Curses specifies
tparm takes a fixed number of 10 arguments, while ncurses
has implemented it as a varargs function. tiparm is a standardized
version of varargs tparm, support in both NetBSD libcurses and
ncurses, but not by older versions of Solaris.

This is an alternate fix to the one proposed in irssi/irssi/#1305
that should keep compatibility with older versions of Solaris by
avoiding tiparm.
2021-04-26 10:31:34 +02:00
ailin-nemui
9503d4bcba
Merge pull request #1304 from ailin-nemui/fuzztest
fuzz test
2021-04-20 10:27:32 +02:00
Ailin Nemui
3dbfac5699 fuzz test 2021-04-20 09:25:08 +02:00
ailin-nemui
afcb48384e
Merge pull request #1302 from rkta/update_gitignore
Ignore files generated by ./autogen.sh
2021-04-18 12:01:24 +02:00
ailin-nemui
4432b0bf0d
Merge pull request #1170 from ailin-nemui/starttls
use starttls / enable tls_verify
2021-04-18 12:01:14 +02:00
ailin-nemui
afdd9f8f05
Merge pull request #1259 from ailin-nemui/beep-ignore-opts
do not beep on hidden lines with /set beep_msg_level ... -hidden
2021-04-18 12:01:03 +02:00
ailin-nemui
f93879baff
Merge pull request #1260 from ailin-nemui/nohilight
add /IGNORE ... NOHILIGHT to ignore some hilights
2021-04-18 12:00:52 +02:00
Ailin Nemui
90003a2bf6 up abi 2021-04-18 11:38:20 +02:00
ailin-nemui
fa913091bd
Merge pull request #1297 from ailin-nemui/memory
missing strdup on netsplits w/o chan
2021-04-11 13:24:42 +02:00
ailin-nemui
3a54c85b15
Merge pull request #1295 from ailin-nemui/module-autoload-one
autoload modules from default setting
2021-04-11 13:24:21 +02:00
Rene Kita
8bb4875007 Ignore files generated by ./autogen.sh 2021-04-10 09:44:53 +02:00
Ailin Nemui
645d80d3b8 Merge tag '1.2.3' into integrate/1.2.3 2021-04-09 19:03:58 +02:00
Ailin Nemui
8a5d5d384e add nocap flag 2021-04-08 22:38:44 +02:00
Ailin Nemui
61237ee6c0 reorder code 2021-04-08 21:55:35 +02:00
Ailin Nemui
085c08e65c use enum 2021-04-08 21:55:35 +02:00
Ailin Nemui
244a8c72b4 verify tls connection 2021-04-08 21:55:35 +02:00
Ailin Nemui
2a0f1d7636 fix fe-fuzz 2021-04-08 21:55:35 +02:00
Ailin Nemui
f2795abcc5 actually use the tls settings on upgrade, and disconnect gracefully 2021-04-08 21:55:35 +02:00
Ailin Nemui
db2fed0d38 fix reconnect to use tls settings 2021-04-08 21:55:35 +02:00
Ailin Nemui
9668217509 changes suggested by ahf 2021-04-08 21:55:35 +02:00
ailin-nemui
51508ff1d3 use starttls 2021-04-08 21:55:35 +02:00
ailin-nemui
9b02424f30
Merge pull request #1298 from ailin-nemui/connect-crashes
fix crash on /connect -tls
2021-04-08 15:46:18 +02:00
Ailin Nemui
308400154b fix crash on tls error 2021-04-07 22:18:34 +02:00
Ailin Nemui
46493c051b add /IGNORE ... NOHILIGHT to ignore some hilights 2021-04-07 14:31:36 +02:00
Ailin Nemui
1e54b92220 fix crash on /connect -tls
fixes #1239
2021-04-03 22:38:00 +02:00
Ailin Nemui
efd705ba59 fix crash on /connect /dev/null 2021-04-03 21:54:53 +02:00
Ailin Nemui
b4ab8c1ada missing strdup on netsplits w/o chan 2021-04-03 21:32:04 +02:00
Ailin Nemui
d20d2753da autoload modules from default setting 2021-04-03 21:25:18 +02:00
ailin-nemui
628ca79e6a
Merge pull request #1293 from ihsinme/patch-1
fix memory leak.
2021-04-02 14:44:32 +02:00
ihsinme
7a3a383772
Update sasl.c 2021-04-02 14:21:06 +03:00
Ailin Nemui
80926476fc do not beep on hidden lines with /set beep_msg_level ... -hidden 2021-04-01 22:13:53 +02:00
ailin-nemui
e0b98e1fa5
Merge pull request #1292 from ailin-nemui/nonick
don't bother if we don't have a nick
2021-04-01 22:13:01 +02:00
Ailin Nemui
4c25bef29c don't bother if we don't have a nick
Credit to OSS-Fuzz
2021-04-01 21:53:30 +02:00
ailin-nemui
cdb30695f9
Merge pull request #1291 from ailin-nemui/nobool
remove unused bool include
2021-04-01 21:28:16 +02:00
ailin-nemui
a731525012
Merge pull request #1290 from mistydemeo/check_for_term_h
Add a check for term.h
2021-04-01 21:28:04 +02:00
ailin-nemui
437accdfa6
Merge pull request #1250 from ailin-nemui/whox
better account tracking
2021-04-01 21:27:51 +02:00
ailin-nemui
9362c59cd2
Merge pull request #1283 from ailin-nemui/freenode
fail redirects on EFNet/freenode 263
2021-04-01 21:27:29 +02:00
ailin-nemui
eeccfc3db1
Merge pull request #1284 from ailin-nemui/printformats
printformats
2021-04-01 21:27:12 +02:00
ailin-nemui
cd866c548a
Merge pull request #1286 from ailin-nemui/perl_formats
add format_string_expand and format_string_unexpand methods to Perl
2021-04-01 21:24:18 +02:00
ailin-nemui
9a8fc7112a
Merge pull request #1288 from jesopo/perl-chatnet-usermode
add IRC_CHATNET_REC->usermode to perl chatnet hashes
2021-04-01 21:24:01 +02:00
Ailin Nemui
8b597cb753 fix clang formatting 2021-04-01 21:21:06 +02:00
Ailin Nemui
c5cc58d34e remove unused include 2021-03-27 21:17:15 +01:00
Misty De Meo
0b82f14151
Add a check for term.h
If term.h is present, use that instead of defining prototypes for the
terminfo functions in terminfo-core.c. This causes problems on certain
platforms (e.g. Apple aarch64) due to the functions being prototyped as
non-variadic but called as variadic. If term.h isn't found, it falls
back to the old behaviour.

Fixes #1238.
2021-03-27 10:54:30 -07:00
ailin-nemui
6f38095cd6
Merge pull request #1287 from ailin-nemui/clang-enum
update clang-format to clang-format-11, fixes enum bug
2021-03-20 19:02:20 +01:00
jesopo
a0142ce384 add IRC_CHATNET_REC->usermode to perl chatnet hashes 2021-03-17 20:32:16 +00:00
Ailin Nemui
030da3ec9c add format_string_expand and format_string_unexpand methods to Perl 2021-03-14 19:00:22 +01:00
Ailin Nemui
25ad30d5e4 add format_string_expand to Perl 2021-03-14 19:00:22 +01:00
Ailin Nemui
7d213da88a update clang-format to clang-format-11, fixes enum bug 2021-03-14 18:53:35 +01:00
Ailin Nemui
9ce3420440 printformats 2021-03-12 23:17:53 +01:00
Ailin Nemui
f5339edbbc fail redirects on freenode 263 2021-03-12 21:16:43 +01:00
ailin-nemui
bf41bfa2f7
Merge pull request #1279 from ailin-nemui/cifuzz
Test CIFuzz offering
2021-03-08 18:25:57 +01:00
Ailin Nemui
5f1fe607e4 Test CIFuzz offering 2021-03-06 18:42:26 +01:00
ailin-nemui
5223ff1bcc
Merge pull request #1280 from ailin-nemui/op_public
fix level uninitialised
2021-03-06 18:37:34 +01:00
ailin-nemui
f4e64e488d
Merge pull request #1281 from ailin-nemui/line-under-construction
fix assertion failure when the line does not have text (yet)
2021-03-06 18:37:15 +01:00
Ailin Nemui
4e1aad6679 fix assertion failure when the line does not have text (yet) 2021-03-05 20:28:10 +01:00
Ailin Nemui
53c91623c5 fix level uninitialised
Credit to OSS-Fuzz
2021-03-03 17:39:44 +01:00
Ailin Nemui
b957d3ad4b add constants for WHOX queries 2021-02-27 21:30:29 +01:00
Ailin Nemui
18ee6bb6f9 queue the who command on join 2021-02-27 21:05:30 +01:00
Ailin Nemui
6eeec6a112 fix double free 2021-02-27 21:04:02 +01:00
Ailin Nemui
04b44a8f8d Revert "queue the who command on join"
This reverts commit 79be775f2bf653a886b351e3552d4c8cbdb35f26.
2021-02-27 21:02:48 +01:00
ailin-nemui
b2c9365623
Merge pull request #1275 from ailin-nemui/tags-heap
stop parsing on lone tag escape
2021-02-27 18:43:48 +01:00
Ailin Nemui
4c069f5c8f stop parsing on lone tag escape
It's C

Credit to OSS-Fuzz
2021-02-27 18:31:00 +01:00
ailin-nemui
73e73df1c5
Merge pull request #1274 from ailin-nemui/tags-heap
skip parsing empty tags
2021-02-26 20:40:03 +01:00
Ailin Nemui
a8144cd98f skip parsing empty tags
Credit to OSS-Fuzz
2021-02-26 20:25:48 +01:00
Ailin Nemui
3a929898e2 up abi 2021-02-26 14:28:51 +01:00
Ailin Nemui
79be775f2b queue the who command on join 2021-02-26 14:28:37 +01:00
Ailin Nemui
b11f973345 fix off by one 2021-02-26 14:19:33 +01:00
Ailin Nemui
09c17c3302 maybe this matches the command now 2021-02-26 14:19:33 +01:00
Ailin Nemui
a0a9a82673 fix missing output 2021-02-26 14:19:33 +01:00
Ailin Nemui
04089d5866 purge whos from queue 2021-02-26 14:19:33 +01:00
Ailin Nemui
04035ab7ca Track the account queries which are in progress 2021-02-26 14:19:33 +01:00
Ailin Nemui
dc87199100 better account tracking 2021-02-26 14:19:33 +01:00
Ailin Nemui
bf1376e34e update clang-format to clang-format-11, fixes enum bug 2021-02-26 14:19:33 +01:00
Ailin Nemui
7adf81f9b5 raise glib version requirement to 2.32 for g_hash_table_contains 2021-02-26 14:19:33 +01:00
ailin-nemui
b47257048c
Merge pull request #1108 from ailin-nemui/server-time
implement server-time
2021-02-25 19:25:41 +01:00
Ailin Nemui
3ea25fb704 up abi 2021-02-25 10:59:19 +01:00
Ailin Nemui
322df0d2c8 replace refstring macro implementation with C functions 2021-02-25 10:50:51 +01:00
ailin-nemui
d535a79730 implement server-time 2021-02-25 10:41:05 +01:00
ailin-nemui
33d8cc3254 GLib < 2.56 compat code for g_date_time_new_from_iso8601 2021-02-25 10:41:05 +01:00
ailin-nemui
395453aa23
Merge pull request #1272 from ailin-nemui/checks
update deprecated GLib symbol
2021-02-25 06:52:09 +01:00
Ailin Nemui
ccf59868e2 update deprecated GLib symbol
g_main_quit -> g_main_loop_quit
2021-02-24 21:57:11 +01:00
ailin-nemui
672f127544
Merge pull request #1271 from irssi/vague666-fix-159
Update dcc-get.c
2021-02-24 21:50:18 +01:00
Jari Matilainen
a426d669dc
Update dcc-get.c 2021-02-18 14:47:07 +01:00
ailin-nemui
0dd60755f0
Merge pull request #1269 from ihsinme/patch-1
fix invalid unsigned arithmetic.
2021-02-10 10:59:39 +01:00
ailin-nemui
33b4154b0c
Merge pull request #1270 from ihsinme/ihsinme-patch-238
correction of incorrect sequence of checks.
2021-02-08 17:17:07 +01:00
ihsinme
23e4bfa1db
Update write-buffer.c 2021-02-08 12:17:09 +03:00
ihsinme
39ed1ba055
Update gui-entry.c 2021-02-05 22:48:43 +03:00
ihsinme
5e88c107f1
Update gui-entry.c 2021-02-05 18:36:15 +03:00
ihsinme
33bfd88d9e
Update gui-entry.c 2021-02-05 18:34:54 +03:00
ailin-nemui
95f131da2d
Merge pull request #1268 from ailin-nemui/nostdinc
configure automake with nostdinc
2021-02-03 17:46:11 +01:00
Ailin Nemui
e7f3946583 configure automake with nostdinc
the current directoryh won't be added to the compiler's -I path
2021-02-02 00:24:34 +01:00
ailin-nemui
c108cae02f
Merge pull request #1264 from ailin-nemui/wrong-prefixes
correct two more wrong prefixes

    [M] 'function GList* i_list_find_icase_string(GList*, const char*)'    {glist_find_icase_string}
    [M] 'function GList* i_list_find_string(GList*, const char*)'    {glist_find_string}
2021-01-30 23:33:19 +01:00
Ailin Nemui
feb83b2058 two more wrong prefixes 2021-01-30 23:30:59 +01:00
ailin-nemui
db9aa817d5
Merge pull request #1246 from ailin-nemui/wrong-prefixes
correct wrong function prefixes

Module authors will have to adapt these changes:

    [M] 'constant I_INPUT_READ'    {G_INPUT_READ}
    [M] 'constant I_INPUT_WRITE'    {G_INPUT_WRITE}
    [M] 'function int i_input_add(GIOChannel*, int, GInputFunction, void*)'    {g_input_add}
    [M] 'function int i_input_add_full(GIOChannel*, int, int, GInputFunction, void*)'    {g_input_add_full}
    [M] 'function int i_input_add_poll(int, int, int, GInputFunction, void*)'    {g_input_add_poll}
    [M] 'function GIOChannel* i_io_channel_new(int)'    {g_io_channel_new}
    [M] 'function int i_io_channel_read_block(GIOChannel*, void*, int)'    {g_io_channel_read_block}
    [M] 'function int i_io_channel_write_block(GIOChannel*, void*, int)'    {g_io_channel_write_block}
    [M] 'function int i_istr_cmp(gconstpointer, gconstpointer)'    {g_istr_cmp}
    [M] 'function int i_istr_equal(gconstpointer, gconstpointer)'    {g_istr_equal}
    [M] 'function guint i_istr_hash(gconstpointer)'    {g_istr_hash}
    [M] 'function void i_log_func(const char*, GLogLevelFlags, const char*)'    {glog_func}
    [M] 'function GSList* i_slist_delete_string(GSList*, const char*, GDestroyNotify)'    {gslist_delete_string}
    [M] 'function GSList* i_slist_find_icase_string(GSList*, const char*)'    {gslist_find_icase_string}
    [M] 'function GSList* i_slist_find_string(GSList*, const char*)'    {gslist_find_string}
    [M] 'function void* i_slist_foreach_find(GSList*, FOREACH_FIND_FUNC, void*)'    {gslist_foreach_find}
    [M] 'function void i_slist_free_full(GSList*, GDestroyNotify)'    {gslist_free_full}
    [M] 'function GSList* i_slist_remove_string(GSList*, const char*)'    {gslist_remove_string}
    [M] 'function char* i_slist_to_string(GSList*, const char*)'    {gslist_to_string}
2021-01-30 21:09:26 +01:00
ailin-nemui
adb50a7409
Merge pull request #1261 from ailin-nemui/unfix-meson
unfix breakage in python setuptools
2021-01-20 10:06:32 +01:00
Ailin Nemui
a76debde58 unfix breakage in python setuptools
see pypa/setuptools#2541
2021-01-20 09:58:25 +01:00
ailin-nemui
ea5121da3b
Merge pull request #1252 from ailin-nemui/build-fixes-test-actions
fix autotools build and package the meson.build files
2021-01-11 11:15:57 +01:00
ailin-nemui
cd8a0cb701
Merge pull request #1255 from irssi/vague666-patch-1
Update ignore.in examples
2021-01-09 10:38:36 +01:00
ailin-nemui
24999a066c
Merge pull request #1243 from ailin-nemui/config-setup-comments
ignore comments and abort irssi on servers and channels config errors
2021-01-08 23:12:31 +01:00
ailin-nemui
8e69b2bbb4
Merge pull request #1254 from ailin-nemui/cap-setname
undraft setname capability
2021-01-08 18:58:51 +01:00
ailin-nemui
8f23e6c6db
Merge pull request #1253 from ailin-nemui/bad-version-tags
put proper versions in PACKAGE_VERSION
2021-01-08 18:58:23 +01:00
Jari Matilainen
b7bea3d2f3
Update ignore.in 2021-01-07 20:00:26 +01:00
Ailin Nemui
4db0535b32 undraft setname 2021-01-07 18:31:41 +01:00
Ailin Nemui
16b1d58703 Abort Irssi on wrong entries in the channels or servers config 2021-01-07 16:31:11 +01:00
Ailin Nemui
68da49db78 up abi 2021-01-07 10:14:34 +01:00
Ailin Nemui
504cf21783 correct wrong function prefixes: remove g_free_true 2021-01-07 10:14:34 +01:00
Ailin Nemui
aa653aa389 correct wrong function prefixes: glog_func -> i_log_func 2021-01-07 10:14:34 +01:00
Ailin Nemui
b5ddc55fe6 correct wrong function prefixes: gslist -> i_slist 2021-01-07 10:14:34 +01:00
Ailin Nemui
8405c6970a correct wrong function prefixes: g_hash_free_value -> i_hash_free_value 2021-01-07 10:09:45 +01:00
Ailin Nemui
50ed476623 correct wrong function prefixes: g_io_channel -> i_io_channel 2021-01-07 10:09:45 +01:00
Ailin Nemui
9181796472 correct wrong function prefixes: g_istr -> i_istr 2021-01-07 10:09:45 +01:00
Ailin Nemui
edb2f699d1 correct wrong function prefixes: g_input -> i_input 2021-01-07 10:09:45 +01:00
Ailin Nemui
9cbdf9175e put proper versions in PACKAGE_VERSION 2021-01-07 10:09:45 +01:00
Ailin Nemui
168ba937c1 remove travis 2021-01-07 01:42:19 +01:00
Ailin Nemui
57408b19d5 put proper versions in PACKAGE_VERSION 2021-01-07 01:38:21 +01:00
Ailin Nemui
7379833b53 move clang-format-xs into utils 2021-01-07 01:36:32 +01:00
Ailin Nemui
8f6e67b9b3 Check Irssi compilation using github actions 2021-01-07 01:36:32 +01:00
Ailin Nemui
1f05f86167 package the meson.build files 2021-01-06 22:12:46 +01:00
Ailin Nemui
1e7af8bf61 fix autotools build 2021-01-06 22:12:46 +01:00
ailin-nemui
0ae27530d6
Merge pull request #1249 from ailin-nemui/dup-caps
fix multiple identical active caps
2021-01-06 19:23:07 +01:00
Ailin Nemui
18a1a0ba7c fix multiple identical active caps 2021-01-06 10:41:57 +01:00
ailin-nemui
a1cbb8d28f
Merge pull request #1247 from ailin-nemui/clang-format-checker
fix clang-format-xs formatting whole file
2021-01-04 16:17:59 +01:00
Ailin Nemui
e08aca6c85 fix clang-format-xs formatting whole file
incomplete fix in #1234
2021-01-04 16:06:10 +01:00
ailin-nemui
9f1822be3d
Merge pull request #1245 from ailin-nemui/meson-cc-links
use cc.links in meson.build to fix regression of meson 0.56
2021-01-04 10:17:51 +01:00
Ailin Nemui
0706ad14fc use cc.links in meson.build to fix regression of meson 0.56
fixes #1235 reported by dcbaker
2021-01-04 08:37:56 +01:00
ailin-nemui
cfc2ddf56a
Merge pull request #1244 from ailin-nemui/empty-perl-lib
error out on empty perlmodlib, for example non-existant vendor
2021-01-04 00:48:19 +01:00
Ailin Nemui
06396e9c8f error out on empty perlmodlib, for example non-existant vendor
reported by Xogium
2021-01-03 23:07:27 +01:00
Ailin Nemui
ae5e2fe5e5 properly ignore empty lines and comments in servers and channels config
fixes #1242
2020-12-31 17:50:40 +01:00
ailin-nemui
581c43ed1e
Merge pull request #1232 from vague666/fix_1228
Implement priority on the matched lines for /hilight
2020-12-14 15:22:56 +01:00
vague666
69396482be style format change 2020-12-02 14:33:23 +01:00
ailin-nemui
f57dcfe90d
Merge pull request #1234 from ailin-nemui/fix/perlsignals
Copy Perl signal arguments prior to running callbacks
2020-11-14 19:43:10 +01:00
Ailin Nemui
c9ccf9867f Make a copy of the signal arguments so we don't have to worry about the stack
plug some mem leaks

later copy
2020-11-12 13:00:02 +01:00
Ailin Nemui
5f7d274ec5 fix clang-format-xs formatting whole file
regression of #1230
2020-11-12 13:00:02 +01:00
ailin-nemui
e0292665c1
Merge pull request #1230 from ailin-nemui/fix-clang-format-xs-opts
fix clang-format-xs option parser by using getopt
2020-10-27 10:39:25 +01:00
ailin-nemui
dd8478dcde
Merge pull request #1231 from ailin-nemui/gh-actions
keep up with github-actions changes
2020-10-27 10:27:46 +01:00
vague666
323b60f339 Initialize tmprec 2020-10-27 09:49:54 +01:00
Ailin Nemui
5c0d798ef4 keep up with github-actions changes 2020-10-26 23:24:30 +01:00
Ailin Nemui
11b9cbdf35 fix clang-format-xs option parser by using getopt 2020-10-26 17:00:58 +01:00
vague666
8f4f0be6d4 Add prio check to hilight_nick_cache also 2020-10-26 11:01:03 +01:00
vague666
4fb10322d1 Optimize execution 2020-10-26 10:57:05 +01:00
vague666
eb4174ee1e Make hilight priority work 2020-10-23 21:49:09 +02:00
ailin-nemui
17c6c22c89
Merge pull request #1224 from ailin-nemui/meson-capsicum
Fix meson capsicum
2020-09-26 16:51:26 +02:00
ailin-nemui
447e565309 Fix meson capsicum
Fixes #1223
2020-09-26 16:40:18 +02:00
ailin-nemui
561619f23c
Merge pull request #1221 from nachanon/bug1220
Decolor the vertical window split bar in stock `colorless` theme
2020-09-11 14:15:41 +02:00
Nutchanon Wetchasit
a88806640b Make colorless.theme de-color vertical window borders
Fixes #1220.
2020-09-08 17:59:24 +07:00
ailin-nemui
300cd14a70
Merge pull request #1214 from irssi/vague666-update-help-1
Update ignore help
2020-07-30 19:09:28 +02:00
ailin-nemui
dfba73225d
Merge pull request #1213 from irssi/vague666-update-help
Update help with HIDDEN level
2020-07-30 09:04:03 +02:00
Jari Matilainen
ec2f269e98
Update ignore.in 2020-07-28 23:48:52 +02:00
Jari Matilainen
556cb25239
Update ignore.in 2020-07-27 17:37:01 +02:00
Jari Matilainen
fcf2919348
Update help with HIDDEN level 2020-07-27 16:14:44 +02:00
ailin-nemui
f8052b7f57
Merge pull request #1209 from ailin-nemui/perl_line_signal_arg
fix missing wrapping of line in signals
2020-07-26 10:47:13 +02:00
ailin-nemui
cd10745711
Merge pull request #1211 from ailin-nemui/disco_lastmsg
fix crash when server got disconnected/reconnected before it was properly connected
2020-07-26 10:43:51 +02:00
ailin-nemui
79c32cefe7
Merge pull request #1212 from ailin-nemui/master
update github actions/checkout to new branch
2020-07-23 12:15:05 +02:00
ailin-nemui
f4f2350d3c update github actions/checkout to new branch 2020-07-23 12:05:19 +02:00
Ailin Nemui
ffe0c71554 up abi 2020-07-23 11:54:18 +02:00
Ailin Nemui
468d8b0c78 fix missing wrapping of line in signals 2020-07-23 00:52:55 +02:00
Ailin Nemui
4e9dab4aeb fix crash when server got disconnected/reconnected before it was properly connected 2020-07-23 00:42:54 +02:00
ailin-nemui
40ed4122b1
Merge pull request #1208 from ailin-nemui/daychange
do not use localtime result after other functions
2020-07-16 12:07:16 +02:00
ailin-nemui
e55f1f5cea
Merge pull request #1206 from aquanight/selfunload-fix
Fix crash from self-unloading script
2020-07-14 03:14:47 +02:00
ailin-nemui
ad30d568d6 do not use localtime result after other functions 2020-07-13 13:25:18 +02:00
aquanight
12685f8074
Merge branch 'master' into selfunload-fix 2020-07-10 18:32:48 -06:00
aquanight
af5987827c ABI version again 2020-07-10 18:31:47 -06:00
aquanight
cc759e1179 Clean up commented out stuff and fix merge issues 2020-07-10 18:27:54 -06:00
ailin-nemui
70626d86ae
Merge pull request #1159 from vague666/fix_cmd_cat_bug
Make sure witem exists in cmd_cat when using -window
2020-07-10 10:24:06 +02:00
ailin-nemui
76802985a4
Merge pull request #1183 from ailin-nemui/glib-2-63
manually handle NUL unicode in g_utf8_get_next_char_validated
2020-07-08 17:43:11 +02:00
ailin-nemui
37cac5a862
Merge pull request #1205 from ailin-nemui/formatflags
properly restore the saved text dest
2020-07-08 10:07:07 +02:00
ailin-nemui
1b5bb8cdd7
Merge pull request #1204 from ailin-nemui/bgcolours
fix extended bg colours
2020-07-07 09:48:42 +02:00
ailin-nemui
357beb91f5 make clang-format happy 2020-07-07 09:28:41 +02:00
vague666
9593be14f5 print to active window when -window is specified 2020-07-06 12:22:16 +02:00
aquanight
26f3049a86 Refactor to pure refcount for PERL_SCRIPT_REC 2020-07-05 17:20:08 -06:00
aquanight
2d59df8162 Don't try to use the PERL_SIGNAL_REC after it could be freed 2020-07-05 16:09:19 -06:00
aquanight
7daeaa25b6 Fix wrong way on unloaded checks 2020-07-05 15:46:34 -06:00
aquanight
6012ec9e56 Prevent double calls of perl_script_unload 2020-07-05 15:31:07 -06:00
ailin-nemui
6684e5cc41
Merge pull request #1155 from vague666/bind_shenanigans
rewrite how /bind searches for bindings when listing them
2020-07-04 20:37:36 +02:00
ailin-nemui
0cc1e4b7cd properly restore the saved text dest 2020-07-04 18:19:37 +02:00
ailin-nemui
108f57ac7b fix extended bg colours 2020-07-04 12:15:25 +02:00
ailin-nemui
0d2997b36f
make clang-format happy in keyboard.c 2020-06-30 09:29:50 +02:00
vague666
fe9a443380 change to strstr 2020-06-29 16:11:45 +02:00
ailin-nemui
964c067b1e
Merge pull request #1199 from ailin-nemui/termux
Add support for building in Termux-Android in meson
2020-06-17 13:57:30 +02:00
ailin-nemui
01ecb879a6 Add support for building in Termux-Android in meson
- introduce cross perl
- workaround for the android linker
2020-06-02 10:38:01 +02:00
ailin-nemui
4b2c710ebe disable setuid/setgid on android 2020-06-02 10:04:54 +02:00
ailin-nemui
fbe62a34d0
Merge pull request #1198 from ailin-nemui/actlist-sort-type
make actlist_sort a choice type now that we have it
2020-05-24 18:59:15 +02:00
ailin-nemui
d5017cfc7c make actlist_sort a choice type now that we have it 2020-05-24 18:44:25 +02:00
ailin-nemui
99b941db8e
Merge pull request #1197 from lotheac/master
use visible channel name in layout save
2020-05-21 16:00:30 +02:00
Lauri Tirkkonen
7c1237de98 use visible channel name in layout save 2020-05-21 12:15:07 +03:00
ailin-nemui
2a2f7b826d
Merge pull request #1196 from mh-source/master
Add better support for numeric 489 ERR_SECUREONLYCHAN along with a print format
2020-05-16 13:58:35 +02:00
Michael Hansen
214c7ad7da make clang-format happy about the code i added, instead of the code above it.
modified:   src/fe-common/irc/fe-events-numeric.c
2020-05-16 01:26:00 +02:00
Michael Hansen
451e3692b2 disable clang-format check for a few sections of code from before format strictnes got tightened
modified:   src/fe-common/irc/fe-events-numeric.c
modified:   src/fe-common/irc/module-formats.c
modified:   src/fe-common/irc/module-formats.h
2020-05-16 01:20:22 +02:00
Michael Hansen
1fef8f82a5 make git-clang-format check happy
modified:   src/fe-common/irc/fe-events-numeric.c
2020-05-16 01:00:17 +02:00
Michael Hansen
28768e40a3 Increased IRSSI_ABI_VERSION to 29
modified:   src/common.h
2020-05-16 00:48:58 +02:00
Michael Hansen
ae6c8a1bd5 Add better support for numeric 489 ERR_SECUREONLYCHAN along with a print format
modified:   src/fe-common/irc/fe-events-numeric.c
modified:   src/fe-common/irc/module-formats.c
modified:   src/fe-common/irc/module-formats.h
2020-05-15 20:25:41 +02:00
ailin-nemui
3ba8eeba4b
Merge pull request #1195 from ailin-nemui/xs-abi
also check XS abi in abi-diff github workflow
2020-05-15 12:13:22 +02:00
ailin-nemui
3cb6627973 also check XS abi 2020-05-15 12:08:45 +02:00
ailin-nemui
5ba58d9067
Merge pull request #1192 from ailin-nemui/perl-signals-format
add "print format" signal to perl
2020-05-14 11:20:22 +02:00
ailin-nemui
b0cd72aadd up abi 2020-05-13 00:23:12 +02:00
ailin-nemui
3ea854816d Correct a wrong package for format_create_dest 2020-05-13 00:22:56 +02:00
ailin-nemui
4330dbec62 add "print format" signal to perl
fix syntax in signals.txt with regards to GLists

simplify signal emit code
2020-05-13 00:22:38 +02:00
ailin-nemui
784373a7b3
Merge pull request #1191 from ailin-nemui/null-format
fix NULL assertion in format args
2020-05-08 15:42:55 +02:00
ailin-nemui
ba57684d73 fix NULL assertion in format args 2020-05-08 15:34:49 +02:00
ailin-nemui
9bfbb5cdf3
Merge pull request #1188 from ailin-nemui/null-format
fix npe on no text from format_get_text_theme_charargs
2020-05-07 21:46:55 +02:00
ailin-nemui
08ead5ef06 fix npe on no text from format_get_text_theme_charargs 2020-05-07 01:27:25 +02:00
ailin-nemui
86b72d5829
Merge pull request #1079 from ailin-nemui/reformat2
reapply a theme to previous formats
2020-04-30 09:00:34 +02:00
ailin-nemui
bbd73ce58c
Merge pull request #1184 from ailin-nemui/clangformat
also check xs files in the clang-format github action
2020-04-29 19:08:23 +02:00
ailin-nemui
66a7cc3c34 check xs format 2020-04-29 04:24:51 +02:00
ailin-nemui
675696aa84 up abi 2020-04-28 15:46:53 +02:00
ailin-nemui
449d86caf0 add setting to disable reformat 2020-04-28 15:46:53 +02:00
ailin-nemui
8fd6dccaf1 enable mirc colour processing 2020-04-28 15:46:53 +02:00
ailin-nemui
57fb173130 add perl code for textbuffer-formats
- compatibility shim for new line

- make format accessible from perl

- fix perl line IDs being mixed up due to wrapper
2020-04-28 15:46:53 +02:00
ailin-nemui
a0544571a8 manually handle NUL unicode in g_utf8_get_next_char_validated
A change in GLib 2.63 broke some assumptions in Irssi that the null-byte
NUL / U+0000 is a valid Unicode character. This would occur when the
user types Ctrl+Space. As a result, the input loop never manages to
process the NUL-byte (and any other user input that follows, ever).

This patch adds a manual check that properly advances the input loop if
GLib returns -2 (incomplete character) despite the length being positive
and a NUL is in first position.

Fixes #1180
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/967
https://gitlab.gnome.org/GNOME/glib/-/issues/2093
2020-04-28 15:40:21 +02:00
ailin-nemui
6b93d6e338 implement expando cache
- the expando values need to be stored now that the lines are
  reformattable, otherwise the old values are lost (and they depend on
  context only available at the time the line is initially printed)

- the cache is collected from the special-vars evaluation code

- the cache is controlled by the textbuffer-formats code, and stored in
  the text_buffer_format_rec
2020-04-26 20:42:02 +02:00
ailin-nemui
d2291ec6eb
Merge pull request #1182 from ailin-nemui/cleanup
remove some old compat code
2020-04-26 19:18:52 +02:00
ailin-nemui
f95fc81130 make lines reformattable
- completely removed the old textbuffer representation (
  https://github.com/shabble/irssi-docs/wiki/Notes-256-Colour#textbuffer-encoding
  )

- textbuffer-formats is an extra module, so if we unhook the signals it
  should go back to the "old way" of storing pre-rendered tex

- design uses cache, original formats and list of arguments
2020-04-26 18:54:16 +02:00
ailin-nemui
4b24d0a51d remove some old compat code
we already rely on c99 in other parts of the code
2020-04-25 12:04:26 +02:00
ailin-nemui
94ae7f9cd3
Merge pull request #1181 from ailin-nemui/buildfixes
build fixes when using install-glib and on openbsd
2020-04-23 12:52:44 +02:00
Ailin Nemui
244ebaaa2e build fixes when using install-glib and on openbsd 2020-04-23 12:31:52 +02:00
ailin-nemui
316c8157a5
Merge pull request #1179 from ailin-nemui/abidiff
Check for abi compatibility using github actions
2020-04-23 07:41:12 +02:00
ailin-nemui
9ec9a9afc8 try abipkgdiff 2020-04-21 23:52:01 +02:00
ailin-nemui
0bedcfccbd
Merge pull request #1140 from dequis/tear-down-the-wall
meson.build: Remove unnecessary -Wall
2020-04-14 10:23:09 +02:00
ailin-nemui
6d67cadcdb
Merge pull request #1173 from ailin-nemui/clangformat
Fix clang-format checker on empty diff
2020-04-14 09:59:40 +02:00
ailin-nemui
0548bb1a3c empty is also good 2020-04-14 09:55:23 +02:00
ailin-nemui
3d3305a893
Merge pull request #1172 from ailin-nemui/clangformat
run clang-format as a pull request hook
2020-04-13 22:52:17 +02:00
ailin-nemui
6317db5ccb run clang-format as a pull request hook 2020-04-13 22:14:50 +02:00
ailin-nemui
261631a6e1
Merge pull request #1171 from ailin-nemui/hidden-options
hide the deprecated -ssl options from completion
2020-04-07 19:12:04 +00:00
ailin-nemui
f1647bdfa9
Merge pull request #1169 from Pinguin1234/feature/close_on_sighup
Added option to quit in SIGHUP
2020-04-06 15:14:40 +00:00
=
1bfe27c66e Used Tabs instead of spaces and increased ABI_VERSION 2020-04-06 17:04:35 +02:00
ailin-nemui
485ed2f52b hide the deprecated -ssl options from completion 2020-04-05 21:29:39 +02:00
Dennis Pentmeier
f9595c03b1 Changed to async-signal safe method as suggested by dequis 2020-04-04 18:07:08 +02:00
ailin-nemui
cae37e37ca run git-clang-format 2020-04-04 01:12:03 +02:00
Pinguin1234
81dc94c406 Added option to quit in SIGHUP 2020-04-04 00:55:58 +02:00
ailin-nemui
8b7bf1f04e
Merge pull request #1167 from ailin-nemui/quit-crash
fix crash on /quit when unloading modules
2020-04-03 23:26:54 +02:00
ailin-nemui
5d6baeb0b5
Merge pull request #1166 from ailin-nemui/build-fix
fix perl module build on openbsd
2020-04-03 23:26:40 +02:00
ailin-nemui
46ae8c20c5
Merge pull request #1164 from ailin-nemui/modes-noact
fix /ignore ... MODES NO_ACT not working
2020-04-03 10:20:52 +02:00
ailin-nemui
8a446d24de fix /ignore ... MODES NO_ACT not working
reported by letty
2020-04-02 15:47:15 +02:00
ailin
ae89ba7164 fix crash on /quit when unloading modules
this fixes a crash on /quit when the module unloaded is trying
to reference symbols from already-unloaded modules, by reversing
the lists.
2020-04-02 15:39:40 +02:00
ailin
4594b0c4cf fix perl module build on openbsd
unfortunately, some mangling is needed to create the correct linker
and compiler invocations
2020-04-02 04:39:30 +02:00
ailin-nemui
b69074bb39
Merge pull request #1163 from ailin-nemui/docs
update docs and sync scriptassist
2020-03-30 16:21:26 +02:00
ailin-nemui
97670d1dc1 run syncscripts.sh
sync scriptassist.pl to 2003020807
2020-03-30 14:30:05 +02:00
ailin-nemui
be467111fa update docs 2020-03-30 14:28:26 +02:00
ailin-nemui
aab5349256
Merge pull request #1161 from vague666/ignore_readable_time
unignore_time can not be NULL, check for 0 instead
2020-03-18 19:53:55 +01:00
ailin-nemui
6fc9362c65
Merge pull request #1160 from irssi/ailin-nemui/workflow-pr
Use github actions to test PRs
2020-03-18 19:53:19 +01:00
ailin-nemui
597afa4043 Use github actions to test PRs 2020-03-18 19:29:00 +01:00
vague666
d5a55f5e6e unignore_time can not be NULL, check for 0 instead 2020-03-18 17:27:18 +01:00
ailin-nemui
c8440d49d8
Merge pull request #1158 from vague666/ignore_readable_time
-time was missing in /ignore output. now the time is displayed
2020-03-18 16:58:01 +01:00
ailin-nemui
22851686f5
simplify logic 2020-03-17 00:58:48 +00:00
ailin-nemui
f0c1bc4dde
Merge pull request #1156 from vague666/add_server_nopass
Improve help for how to remove saved server password
2020-03-17 01:54:34 +01:00
ailin-nemui
1ad1083f84
improve wording 2020-03-17 00:54:23 +00:00
vague666
7e898fdcf4 Make sure witem exists 2020-03-12 22:52:12 +01:00
vague666
ca04e0ba5d -time was missing in /ignore output and made it human-readable 2020-03-09 14:15:40 +01:00
vague666
43092a5bcc Improve server help 2020-02-19 16:55:11 +01:00
vague666
03295b73b4 Improve server help 2020-02-17 19:55:38 +01:00
ailin-nemui
b38ae68fb5
Merge pull request #1154 from ailin-nemui/zerowidth
refine zero width input test in empty line
2020-02-14 20:17:50 +01:00
vague666
5dba9fd0cc Search for word anywhere, not only from the beginning of string 2020-02-09 12:40:09 +01:00
ailin-nemui
e59c42bcc0 refine zero width input test in empty line
fixes #1153
2020-02-07 16:33:53 +01:00
ailin-nemui
363a79dc7a
Merge pull request #1145 from ailin-nemui/time
remove GTimeVal following glib 2.61.2 deprecation
2020-01-08 10:41:08 +01:00
ailin-nemui
b8be290640
Update src/irc/core/lag.c
Co-Authored-By: dx <dx@dxzone.com.ar>
2020-01-08 10:15:47 +01:00
ailin-nemui
6e14acee17
Merge pull request #1146 from slingamn/issue641_ipv6_failover.1
Reconnect retry IPv4 on IPv6 failure
2020-01-06 10:42:28 +01:00
Shivaram Lingamneni
7d44964dcd fix #641
Track the address family of the last failed connection attempt
(either immediately or during TLS handshake), then disprefer
that address family during reconnection.
2019-12-09 22:48:56 -05:00
ailin-nemui
1cdb4bc311 remove GTimeVal following glib 2.61.2 deprecation 2019-12-06 10:56:25 +01:00
ailin-nemui
4c5f708b9b
Merge pull request #1135 from horgh/horgh/resolve-setting
Remove resolve_reverse_lookup setting
2019-11-19 19:42:06 +01:00
ailin-nemui
942462f23f
Merge pull request #1141 from dequis/glib-deprecations
Fix some glib deprecation warnings
2019-11-19 19:41:16 +01:00
dequis
664c38afba Fix some glib deprecation warnings
Most of these have been deprecated since forever (2.2), but they didn't
raise warnings. Now they do, and the warnings are not the most verbose
warnings you could ask for, but, they point in the right direction.

This doesn't handle the GTimeVal deprecation warnings. Those seem
trickier since they cover API, will look into those right after this.
2019-10-31 23:49:40 +01:00
dequis
bdf5d748f2 meson.build: Remove unnecessary -Wall 2019-10-31 21:02:26 +01:00
ailin-nemui
50f8791f1e
Merge pull request #1138 from mquin/patch-1
Improve clarity of nick in use message
2019-10-19 16:01:16 +02:00
Mike Quin
b7f165a609
Improve clarity of nick in use message
If irssi's preferred nick is in use irssi will issue a whois command and report some information
on the current user of the nick. As the "is owned by" wording can be confusing to users of networks
with nickname registration, propose rephrasing this to "is in use by".
2019-10-19 11:34:15 +01:00
Will Storey
a827c69183 Bump ABI 2019-10-17 19:43:29 -07:00
Will Storey
d84f285b91 Keep unused parameter for API compatibility 2019-10-15 19:07:48 -07:00
Will Storey
7e6d24420c Remove resolve_reverse_lookup setting
This setting seems ill advised and breaks TLS verification.

Fixes #1034.
2019-10-12 17:09:48 -07:00
Will Storey
f9db4019af Remove else since prior condition returns 2019-10-12 17:03:40 -07:00
317 changed files with 6947 additions and 6838 deletions

View File

@ -27,7 +27,7 @@ Language: Cpp
Cpp11BracedListStyle: false
MaxEmptyLinesToKeep: 1
PointerAlignment: Right
SortIncludes: true
SortIncludes: false
SpaceAfterCStyleCast: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements

43
.github/actions.yml vendored
View File

@ -1,43 +0,0 @@
before_install:
- ./autogen.sh --with-proxy=module --with-bot --with-perl=module --with-otr=module
- make dist
- CO_DIR=$(pwd)
- mkdir -p $HOME/src
- cd $HOME/src
- tar xaf $CO_DIR/irssi-*.tar.*
install:
- cd $HOME/src/irssi-*
- ./configure --with-proxy=module --with-bot --with-perl=module --with-otr=module --prefix=$HOME/irssi-build --enable-always-build-tests
- make CFLAGS="-Wall -Werror -Werror=declaration-after-statement"
- make install
unit_tests:
- cd $HOME/src/irssi-*
- make -C tests -sk check
after_unit_tests:
- cd $HOME/src/irssi-*
- find -name test-suite.log -exec cat {} +
before_script:
- cd $HOME
- mkdir irssi-test
- |
echo 'echo automated irssi launch test
^set settings_autosave off
^set -clear log_close_string
^set -clear log_day_changed
^set -clear log_open_string
^set log_timestamp *
^window log on' > irssi-test/startup
- echo load perl >> irssi-test/startup
- echo load proxy >> irssi-test/startup
- echo ^quit >> irssi-test/startup
script:
- cd $HOME
- irssi-build/bin/irssi --home irssi-test | /tools/render.pl
after_script:
- cat $HOME/irc.log.*

127
.github/workflows/abicheck.yml vendored Normal file
View File

@ -0,0 +1,127 @@
on: [pull_request]
name: abicheck
env:
build_options: -Dbuildtype=debug -Denable-true-color=yes -Dwith-proxy=yes -Dc_args=-DPERL_EUPXS_ALWAYS_EXPORT
prefix: /usr/local
apt_build_deps: ninja-build libutf8proc-dev libperl-dev libotr5-dev
get_pip_build_deps: pip3 install setuptools; pip3 install wheel; pip3 install 'meson<0.59.0'
getabidef_def: getabidef() { awk '$1=="#define" && $2=="IRSSI_ABI_VERSION" { print $3 }' "$1"/include/irssi/src/common.h; }
jobs:
build-base-ref:
runs-on: ubuntu-latest
outputs:
base_abi: ${{ steps.out.outputs.base_abi }}
steps:
- name: set PATH
run: |
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: prepare required software
run: |
sudo apt install $apt_build_deps
eval "$get_pip_build_deps"
- name: checkout base ref
uses: actions/checkout@main
with:
path: base.src
ref: ${{ github.base_ref }}
- name: build base ref
run: |
meson Build.base base.src $build_options
ninja -C Build.base
DESTDIR=$PWD/base ninja -C Build.base install
- id: out
run: |
# print versions and abi versions
eval "$getabidef_def"
base_abi=$(getabidef base$prefix)
echo base abi : $base_abi
./base$prefix/bin/irssi --version
echo "::set-output name=base_abi::$base_abi"
- uses: actions/upload-artifact@v2
with:
name: base.inst
path: base
retention-days: 1
build-merge-ref:
runs-on: ubuntu-latest
outputs:
merge_abi: ${{ steps.out.outputs.merge_abi }}
steps:
- name: set PATH
run: |
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: prepare required software
run: |
sudo apt install $apt_build_deps
eval "$get_pip_build_deps"
- name: checkout merge ref
uses: actions/checkout@main
with:
path: merge.src
- name: build merge ref
run: |
meson Build.merge merge.src $build_options
ninja -C Build.merge
DESTDIR=$PWD/merge ninja -C Build.merge install
- id: out
run: |
# print versions and abi versions
eval "$getabidef_def"
merge_abi=$(getabidef merge$prefix)
echo merge abi : $merge_abi
./merge$prefix/bin/irssi --version
echo "::set-output name=merge_abi::$merge_abi"
- uses: actions/upload-artifact@v2
with:
name: merge.inst
path: merge
retention-days: 1
check-abi-diff:
runs-on: ubuntu-latest
needs:
- build-merge-ref
- build-base-ref
env:
base_abi: ${{ needs.build-base-ref.outputs.base_abi }}
merge_abi: ${{ needs.build-merge-ref.outputs.merge_abi }}
steps:
- name: prepare required software
run: |
sudo apt install abigail-tools
- name: fetch base build
uses: actions/download-artifact@v2
with:
name: base.inst
path: base
- name: fetch merge build
uses: actions/download-artifact@v2
with:
name: merge.inst
path: merge
- run: |
# abipkgdiff
abipkgdiff -l base merge >abipkgdiff.out && diff_ret=0 || diff_ret=$?
echo "diff_ret=$diff_ret" >> $GITHUB_ENV
cat abipkgdiff.out
- uses: actions/upload-artifact@v2
with:
path: abipkgdiff.out
- run: |
# Check if no changes are needed
if [ "$diff_ret" -ne 0 ]; then
if [ "$base_abi" -lt "$merge_abi" ]; then
echo "::warning ::abigail found changes and ABI changed from $base_abi to $merge_abi"
exit 0
else
echo "::error ::Looks like the ABI changed but the IRSSI_ABI_VERSION did not"
exit $diff_ret
fi
else
if [ "$base_abi" -ne "$merge_abi" ]; then
echo "::error ::abigail found no changes yet the IRSSI_ABI_VERSION changed. Is this correct?"
exit 1
else
: "No changes detected and IRSSI_ABI_VERSION untouched"
exit 0
fi
fi

101
.github/workflows/check.yml vendored Normal file
View File

@ -0,0 +1,101 @@
on:
push:
branches:
- master
pull_request:
name: Check Irssi
env:
apt_build_deps: libutf8proc-dev libperl-dev libotr5-dev
apt_build_deps_meson: ninja-build
get_pip_build_deps_meson: pip3 install setuptools${setuptools_ver}; pip3 install wheel; pip3 install meson${meson_ver}
build_options_meson: -Dwith-proxy=yes -Dwith-bot=yes -Dwith-perl=yes -Dwith-otr=yes
prefix: ~/irssi-build
jobs:
dist:
runs-on: ubuntu-latest
steps:
- name: prepare required software
run: |
sudo apt update && sudo apt install $apt_build_deps
- uses: actions/checkout@main
- name: make dist
run: |
./utils/make-dist.sh
- uses: actions/upload-artifact@v2
with:
path: irssi-*.tar.gz
retention-days: 1
install:
runs-on: ${{ matrix.os }}
env:
CC: ${{ matrix.compiler }}
needs: dist
continue-on-error: ${{ contains(matrix.flags, 'FAILURE-OK') }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-18.04, ubuntu-latest]
builder: [meson]
compiler: [clang, gcc]
flags: [regular]
include:
- os: ubuntu-18.04
builder: meson
meson_ver: ==0.53.2
setuptools_ver: <51
- os: ubuntu-latest
builder: meson
meson_ver: <0.63.0
- os: ubuntu-latest
builder: meson
flags: meson-latest FAILURE-OK
steps:
- name: fetch dist
uses: actions/download-artifact@v2
- name: set PATH
run: |
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: prepare required software
env:
meson_ver: ${{ matrix.meson_ver }}
setuptools_ver: ${{ matrix.setuptools_ver }}
run: |
sudo apt update && sudo apt install $apt_build_deps $apt_build_deps_${{ matrix.builder }}
eval "$get_pip_build_deps_${{ matrix.builder }}"
curl -SLf https://github.com/irssi-import/actions-irssi/raw/master/check-irssi/render.pl -o ~/render.pl && chmod +x ~/render.pl
- name: unpack archive
run: tar xaf artifact/irssi-*.tar.gz
- name: build and install with meson
run: |
# ninja install
cd irssi-*/
meson Build $build_options_meson --prefix=${prefix/\~/~}
ninja -C Build
ninja -C Build install
if: ${{ matrix.builder == 'meson' }}
- name: run tests with Meson
run: |
# ninja test
cd irssi-*/
ninja -C Build test
find -name testlog.txt -exec sed -i -e '/Inherited environment:.* GITHUB/d' {} + -exec cat {} +
if: ${{ matrix.builder == 'meson' }}
- name: run launch test
env:
TERM: xterm
run: |
# automated irssi launch test
cd
mkdir irssi-test
echo 'echo automated irssi launch test
^set settings_autosave off
^set -clear log_close_string
^set -clear log_day_changed
^set -clear log_open_string
^set log_timestamp *
^window log on' > irssi-test/startup
echo load perl >> irssi-test/startup
echo load proxy >> irssi-test/startup
echo ^quit >> irssi-test/startup
irssi-build/bin/irssi --home irssi-test | perl -Mutf8 -C ~/render.pl
cat irc.log.*

51
.github/workflows/cifuzz.yml vendored Normal file
View File

@ -0,0 +1,51 @@
name: CIFuzz
on:
pull_request:
paths:
- 'src/core/**/*.c'
- 'src/fe-common/core/**/*.c'
- 'src/fe-text/gui-*.c'
- 'src/irc/**/*.c'
- 'src/fe-common/irc/**/*.c'
- 'src/lib-config/**/*.c'
- 'src/fe-fuzz/**/*.c'
- 'tests/**/*.c'
- '.github/workflows/cifuzz.yml'
jobs:
Fuzzing:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sanitizer: [address, undefined, memory]
steps:
- uses: actions/checkout@main
with:
path: irssi
- name: Docker build build_fuzzers container
run: |
# google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
docker build -t build_fuzzers:actions -f "/home/runner/work/_actions/google/oss-fuzz/master/infra/build_fuzzers.Dockerfile" "/home/runner/work/_actions/google/oss-fuzz/master/infra"
- name: Build Fuzzers (${{ matrix.sanitizer }})
id: build
env:
OSS_FUZZ_PROJECT_NAME: 'irssi'
DRY_RUN: false
SANITIZER: ${{ matrix.sanitizer }}
PROJECT_SRC_PATH: /github/workspace/irssi
REPOSITORY: 'irssi'
run: |
docker run --workdir /github/workspace --rm -e OSS_FUZZ_PROJECT_NAME -e DRY_RUN -e SANITIZER -e PROJECT_SRC_PATH -e REPOSITORY -e WORKSPACE=/github/workspace -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "$GITHUB_WORKSPACE":"/github/workspace" build_fuzzers:actions
- name: Run Fuzzers (${{ matrix.sanitizer }})
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'irssi'
fuzz-seconds: 600
dry-run: false
sanitizer: ${{ matrix.sanitizer }}
- name: Upload Crash
uses: actions/upload-artifact@v1
if: failure() && steps.build.outcome == 'success'
with:
name: ${{ matrix.sanitizer }}-artifacts
path: ./out/artifacts

29
.github/workflows/clangformat.yml vendored Normal file
View File

@ -0,0 +1,29 @@
on: [pull_request]
name: clang-format
jobs:
check-clang-format:
runs-on: ubuntu-20.04
steps:
- name: install clang-format
run: sudo apt install clang-format-11
- uses: actions/checkout@main
- name: fetch target ref
run:
|
refs=($(git log -1 --format=%s))
git fetch --depth=1 origin "${refs[3]}"
- name: configure clang-format
run:
|
git config clangformat.binary $PWD/utils/clang-format-xs/clang-format-xs
git config clangformat.extensions c,h,xs
- name: run git-clang-format and Check if no changes are needed
run:
|
CLANG_FORMAT=clang-format-11 git-clang-format-11 --diff FETCH_HEAD HEAD | tee git-clang-format.diff
cmp -s <(echo no modified files to format) git-clang-format.diff || cmp -s <(echo -n) git-clang-format.diff
- uses: actions/upload-artifact@v1
if: failure()
with:
name: git-clang-format.diff
path: git-clang-format.diff

View File

@ -1,21 +0,0 @@
on: [push]
name: Check Irssi
jobs:
install:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: install
uses: irssi-import/actions-irssi/check-irssi@master
with:
args: before_install install
- name: unit_tests
uses: irssi-import/actions-irssi/check-irssi@master
with:
args: unit_tests after_unit_tests
- name: script
uses: irssi-import/actions-irssi/check-irssi@master
env:
TERM: xterm
with:
args: before_script script after_script

82
.github/workflows/termuxpkg.yml vendored Normal file
View File

@ -0,0 +1,82 @@
on:
push:
branches:
- master
pull_request:
name: Build Irssi Termux package
jobs:
termux-package:
runs-on: ubuntu-latest
steps:
- name: checkout termux-packages
uses: actions/checkout@main
with:
repository: termux/termux-packages
- name: checkout irssi
uses: actions/checkout@main
with:
path: src.irssi.git
- name: download termux docker container
uses: docker://termux/package-builder:latest
- name: build perl package
run: |
./scripts/run-docker.sh ./build-package.sh -i perl
- name: create irssi build receipe
run: |
mkdir packages/irssi-an
cat << 'BUILD_SH' > packages/irssi-an/build.sh
TERMUX_PKG_HOMEPAGE=https://ailin-nemui.github.io/irssi/
TERMUX_PKG_DESCRIPTION="Terminal based IRC client"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_MAINTAINER="@ailin-nemui"
TERMUX_PKG_VERSION=@VERSION@
TERMUX_PKG_REVISION=@REVISION@
TERMUX_PKG_SRCURL=file:///home/builder/termux-packages/src.irssi.git
TERMUX_PKG_AUTO_UPDATE=true
TERMUX_PKG_DEPENDS="glib, libandroid-glob, libiconv, libotr, ncurses, openssl, perl, utf8proc"
TERMUX_PKG_BREAKS="irssi"
TERMUX_PKG_REPLACES="irssi"
TERMUX_MESON_PERL_CROSS_FILE=$TERMUX_PKG_TMPDIR/meson-miniperl-cross-$TERMUX_ARCH.txt
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
-Dfhs-prefix=$TERMUX_PREFIX
--cross-file $TERMUX_MESON_PERL_CROSS_FILE
"
termux_step_post_configure() {
# Make build log less noisy.
sed -i "s:-I$TERMUX_PREFIX/:-isystem$TERMUX_PREFIX/:g" $TERMUX_PKG_BUILDDIR/build.ninja
}
termux_step_pre_configure() {
LDFLAGS+=" -landroid-glob"
# Make build log less noisy.
CFLAGS+=" -Wno-compound-token-split-by-macro"
# Make sure that perl stuff is reinstalled.
rm -rf $TERMUX_PREFIX/lib/irssi/perl
local perl_version=$(. $TERMUX_SCRIPTDIR/packages/perl/build.sh; echo $TERMUX_PKG_VERSION)
local perl_srcdir=$TERMUX_TOPDIR/perl/src
cat <<MESON_PERL_CROSS >$TERMUX_MESON_PERL_CROSS_FILE
[binaries]
perl = ['$perl_srcdir/miniperl', '-I$TERMUX_PREFIX/lib/perl5/$perl_version/${TERMUX_ARCH}-android', '-I$TERMUX_PREFIX/lib/perl5/$perl_version']
MESON_PERL_CROSS
}
BUILD_SH
version=$(awk '/^v/ { $0=$1; gsub(/^v/,""); gsub(/-head/,"dev"); gsub(/-/,""); print; exit }' src.irssi.git/NEWS)
version=$version+g$(git -C src.irssi.git rev-parse --short HEAD)
sed -i \
-e "s:@VERSION@:$version:" \
-e "s:@REVISION@:$GITHUB_RUN_NUMBER:" \
packages/irssi-an/build.sh
git -C src.irssi.git tag v$version
- name: build irssi package
run: |
./scripts/run-docker.sh ./build-package.sh -I irssi-an
- uses: actions/upload-artifact@v2
with:
name: irssi-termux-pkg
path: output/irssi-an*.deb

5
.gitignore vendored
View File

@ -50,6 +50,8 @@ src/fe-fuzz/crash-*
src/fe-fuzz/oom-*
/core
/irssi-1.pc
/irssi/
/tests/fe-common/core/test-formats
/tests/fe-common/core/test-formats.log
/tests/fe-common/core/test-formats.trs
@ -84,3 +86,6 @@ src/fe-fuzz/oom-*
Build
subprojects/*
!subprojects/*.wrap
Irssi-Dist
setup.cfg
*.egg-info

View File

@ -1,65 +0,0 @@
sudo: false
dist: xenial
language: perl
perl:
# ~stretch
- "5.24-shrplib"
- "system-perl"
env:
- CC=clang UNITTESTS=false
- CC=gcc UNITTESTS=false
- CC=clang UNITTESTS=true
matrix:
exclude:
- env: CC=clang UNITTESTS=true
perl: "system-perl"
allow_failures:
- env: CC=clang UNITTESTS=true
addons:
apt:
packages:
- libperl-dev
- elinks
- libgcrypt11-dev
- libotr5-dev
before_install:
- perl -V
- pushd ~
- curl -sSLf https://github.com/ninja-build/ninja/releases/download/v1.9.0/ninja-linux.zip | funzip > bin/ninja
- chmod +x bin/ninja
- curl -sSLf https://github.com/mesonbuild/meson/releases/download/0.51.1/meson-0.51.1.tar.gz | tar xz
- ( cd bin ; ln -s ../meson-*/meson.py meson )
- curl -sSLf https://github.com/irssi-import/glib-travis-build/releases/download/2.58.3/travis-xenial-glib-2.58.3.tar.xz | tar xJ
- export PKG_CONFIG_PATH=$HOME/glib-build/lib/x86_64-linux-gnu/pkgconfig
- export LD_LIBRARY_PATH=$HOME/glib-build/lib/x86_64-linux-gnu
- popd
install:
- meson Build -Dwith-proxy=yes -Dwith-bot=yes -Dwith-perl=yes -Dwith-otr=yes --prefix=$HOME/irssi-build
- ninja -C Build
- ninja -C Build install
before_script:
- pushd ~
- mkdir irssi-test
- echo echo automated irssi launch test > irssi-test/startup;
echo ^set settings_autosave off >> irssi-test/startup;
echo ^set -clear log_close_string >> irssi-test/startup;
echo ^set -clear log_day_changed >> irssi-test/startup;
echo ^set -clear log_open_string >> irssi-test/startup;
echo ^set log_timestamp '* ' >> irssi-test/startup;
echo ^window log on >> irssi-test/startup
- echo load perl >> irssi-test/startup
- echo load proxy >> irssi-test/startup
- echo ^quit >> irssi-test/startup
script:
- irssi-build/bin/irssi --home irssi-test
- popd
- if $UNITTESTS; then ninja -C Build test; fi
after_script:
- cat ~/irc.log.*
- find -name testlog.txt -exec sed -i -e '/Inherited environment:.* TRAVIS/d' {} + -exec cat {} +

94
INSTALL
View File

@ -2,12 +2,12 @@
Irssi installation instructions
-------------------------------
To compile irssi you need:
To compile Irssi you need:
- meson-0.49 build system with ninja-1.5 or greater
- glib-2.28 or greater
- meson-0.53 build system with ninja-1.8 or greater
- glib-2.32 or greater
- openssl (for ssl support)
- perl-5.6 or greater (for perl support)
- perl-5.6 or greater (for Perl support)
- terminfo or ncurses (for text frontend)
For most people, this should work just fine:
@ -17,62 +17,48 @@ For most people, this should work just fine:
su
ninja -C Build install
For the moment, autotools is also supported:
meson options
./autogen.sh (for people who just cloned the repository)
./configure (if this script already exists, skip ./autogen.sh)
make
su
make install (not _really_ required except for perl support)
configure options
These options can be given to meson or ./configure.
The first syntax is for meson, the 2nd for ./configure
These options can be given to meson.
For a complete list of options, run
meson configure / ./configure --help
meson configure
--prefix
Specifies the path where irssi will be installed.
YES, you can install irssi WITHOUT ROOT permissions
Specifies the path where Irssi will be installed.
YES, you can install Irssi WITHOUT ROOT permissions
by using --prefix=/home/dir
-Dwith-proxy=yes / --with-proxy
-Dwith-proxy=yes
Build the irssi proxy (see startup-HOWTO).
Build the Irssi proxy (see startup-HOWTO).
-Dwith-perl=[yes|no] / --with-perl=[yes|no|module]
-Dwith-perl=[yes|no]
Enable Perl support
yes enable builtin (default)
no disable
module enable as module
-Dwith-perl-lib=[site|vendor|DIR] / --with-perl-lib=[site|vendor|DIR]
-Dwith-perl-lib=[site|vendor|DIR]
Specify installation dir for Perl libraries
site install in dir for site-specific modules (default)
vendor install in dir for vendor-specific modules
DIR install in DIR
[N/A] / --with-socks
Build with socks library
-Dwith-bot=yes / --with-bot
-Dwith-bot=yes
Build irssi-bot
-Dwithout-textui=yes / --without-textui
-Dwithout-textui=yes
Build without text frontend
If anything is in non-standard path, you can just give the paths in
CPPFLAGS and LIBS environment variable, eg.:
the -Dc_args and -Dc_link_args options variable, eg.:
CPPFLAGS=-I/opt/openssl/include LDFLAGS=-L/opt/openssl/lib ./configure
meson Build -Dc_args='-I/opt/openssl/include' -Dc_link_args='-L/opt/openssl/lib'
@ -82,47 +68,43 @@ CPPFLAGS and LIBS environment variable, eg.:
Perl support generates most of the problems. There's quite a many
things that can go wrong:
- Compiling fails if you compile irssi with GCC in a system that has
perl compiled with some other C compiler. Very common problem with
non-Linux/BSD systems. You'll need to edit src/perl/*/Makefile files
and remove the parameters that gcc doesn't like. Mostly you'll just
need to keep the -I and -D parameters and add -fPIC.
- If there's any weird crashing at startup, you might have older irssi's
perl libraries installed somewhere, and you should remove those.
- Dynamic libraries don't want to work with some systems, so if your
system complains about some missing symbol in Irssi.so file, configure
irssi with --with-perl-staticlib option (NOT same as --with-perl=static).
- If configure complains that it doesn't find some perl stuff, you're
- If meson complains that it doesn't find some perl stuff, you're
probably missing libperl.so or libperl.a. In debian, you'll need to do
apt-get install libperl-dev
- For unprivileged home directory installations, you probably do not want
to specify --with-perl-lib=(site|vendor). Instead, you can use the
default perl installation target (below the irssi prefix). If you are
using local::lib you can also choose to install there by specifying
--with-perl-lib=$PERL_LOCAL_LIB_ROOT/lib/perl5
You can verify that the perl module is loaded and working with "/LOAD"
command. It should print something like:
Module Type Submodules
...
perl static core fe
perl dynamic fe core
System specific notes
---------------------
Android
When cross compiling Irssi for Android, you can specify the path of
the cross-perl in the cross file.
You may not have a cross-perl available. In that case, you will have
to manually supply the required Perl arguments in the cross file. See
the commented properties in the example cross file.
An example cross file can be found in the docs folder. To use it, you
would call:
meson Build --cross-file cross-android-aarch64.txt \
--prefix /data/data/com.termux/files/usr \
--libdir lib \
-Dfhs-prefix=/data/data/com.termux/files/usr \
Cygwin
Getting perl scripting to work needs a few things:
- configure with --with-perl-staticlib
- libperl.dll is required in linking and running irssi, it's normally
located somewhere around /usr/lib/perl5/5.6.1/cygwin/CORE/libperl5_6_1.dll
copy it to eg. /usr/bin/libperl.dll
- -DUSEIMPORTLIB is needed to be defined while compiling src/perl directory.
It doesn't hurt to be defined everywhere, so configure irssi with:
CFLAGS='-DUSEIMPORTLIB' ./configure --with-perl-staticlib
- TODO

35
MANIFEST.in Normal file
View File

@ -0,0 +1,35 @@
global-include meson.build
recursive-include src *.c *.h meson.build
recursive-include src/perl *.c *.h *.xs *.pm *.pl typemap meson.build
recursive-include src/fe-fuzz *.c *.h *.txt meson.build
recursive-include tests *.c meson.build
include meson_options.txt
include subprojects/*.wrap
# prune subprojects/*
include utils/*.pl utils/*.sh
exclude utils/make-dist.sh
include irssi.conf
include themes/*.theme
include docs/*.1 docs/*.txt docs/*.html
include docs/help/in/[a-z]*.in
include scripts/*.pl scripts/examples/*.pl
include irssi-icon.png
include NEWS
include INSTALL
include TODO
include ChangeLog
include .clang-format
# prune Build
# prune dist
prune *.egg-info
# ignore fuzz-support/fuzz.diff
# ignore utils/clang-format-xs/*

View File

@ -1,33 +0,0 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
# create default-config.h
BUILT_SOURCES = default-config.h default-theme.h irssi-version.h
CLEANFILES = default-config.h default-theme.h
@MAINTAINER_MODE_TRUE@.PHONY: irssi-version.h
default-config.h: $(srcdir)/irssi.conf
$(srcdir)/utils/file2header.sh $(srcdir)/irssi.conf default_config > default-config.h
default-theme.h: $(srcdir)/themes/default.theme
$(srcdir)/utils/file2header.sh $(srcdir)/themes/default.theme default_theme > default-theme.h
irssi-version.h:
VERSION="$(VERSION)" $(srcdir)/utils/irssi-version.sh $(srcdir) | \
cmp -s - $@ || VERSION="$(VERSION)" $(srcdir)/utils/irssi-version.sh $(srcdir) >$@
SUBDIRS = src tests docs scripts themes utils
confdir = $(sysconfdir)
conf_DATA = irssi.conf
pkgconfig_DATA = irssi-1.pc
pkginclude_HEADERS = irssi-config.h irssi-version.h
EXTRA_DIST = \
ChangeLog \
autogen.sh \
README.md \
$(conf_DATA) \
irssi-icon.png

332
NEWS
View File

@ -1,8 +1,336 @@
v1.3-head 2019-xx-xx The Irssi team <staff@irssi.org>
v1.4-head-an 2022-xx-xx Ailin Nemui <Nei>
v1.3.2-an 2022-01-14 Ailin Nemui <Nei>
- CHANTYPES take precedence over (missing) STATUSMSG in /join
(#1358, an#54)
- Fix crash in Perl's $view->set_bookmark (freebsd#254237,
an#56)
v1.3.1-an 2021-12-17 Ailin Nemui <Nei>
- Minor help fixes (an#51, an#52)
- Fix regression where own channel status was forgotten after
/UPGRADE (#1357, an#53)
v1.3.0-an 2021-11-11 Ailin Nemui <Nei>
* /SET resolve_reverse_lookup setting was removed (#1034,
#1135)
* Irssi will try to connect on IPv4 if IPv6 connection failed
(#1146). By Shivaram Lingamneni
* The display system now renders formats on the fly (#1079,
#1188, #1191, #1192, #1204, #1205, #1209, #1349, #1355,
an#13, an#14, an#28, an#29, an#36, an#37, an#49)
This major change will break scripts that try to modify
printed text during "print text" signal (#1189). They need
to be ported to modify the text during "print format"
instead. It also breaks the usage of using /FORMAT to add
different colours to a line. Such usage needs to be ported
to using $expando variables instead. Affected scripts
include format_identify.pl, friends_peder.pl, nickcolor.pl,
nm.pl, people.pl
The "gui print text finished" and "gui print text after
finished" signals gained a TEXT_DEST_REC *parameter in the
process.
A new "gui render line text" signal is available to change
the rendering of a line
* made the $Z expando (time) dynamic (#1087, #1207, #1208)
This change breaks the usage of /SET timestamp_format to
supply a custom displayed time stamp. Affected scripts
include binary_time.pl
* /HILIGHT -priority now affects which hilight rule gets
applied (#1228, #1232)
* The NAMES list is now hidden by default if there are more
than 18 users on the channel (an#7)
To revert to the previous behaviour
/SET show_names_on_join_limit -1
* -tls_verify is now enabled by default (#1170, an#18, #1309,
an#23, #1343, #1351)
This may cause an ugly display of notls_verify in the output
of /SERVER LIST, even on plain-text connection, on old
configs. Kindly remove the "tls_verify = "no";" entries from
your config file manually.
* Irssi will now attempt STARTTLS if advertised (#1170, #1312,
an#19)
Use -disallow_starttls if you absolutely do not want this
In order to check for a STARTTLS advertisement, Irssi will
now wait for a response (even an error) to CAP LS 302. If
your bouncer/server does not want to communicate before
receiving USER/PASS at all, use -nocap to disable the CAP
check.
* Channel sync requests (WHO, MODE) are now sent "later" than
user commands. This should improve responsiveness to user
commands in the autojoin phase (an#26, an#32, an#33)
* Irssi is now using full paths in #include directives and
consequently does not add all directories to the include
path anymore (#1040)
* The Build System was ported to Meson (#1064, #1065, #1068,
#1071, #1072, #1073, #1074, #1075, #1084, #1085, #1118, #1166,
#1223, #1224, #1245, #1313, #1314, an#31)
* Scriptassist was changed to use a YAML database (#1163)
It will tell you when you need to update your setting
* /BIND shows all partial matches (#1155)
* Cleanup of unused functions (#1017, #1132, #1145, #1182,
#1246, #1264)
Functions removed:
NET_CALLBACK
NET_HOST_CALLBACK
RESOLVED_NAME_REC
net_gethostbyaddr_nonblock
net_connect_nonblock
[ SIMPLE_THREAD_REC, simple_init, simple_readpipe ]
hash_save_key
Functions deprecated:
dec2octal
g_timeval_cmp
get_timeval_diff
Function names corrected:
g_input -> i_input
g_istr -> i_istr
g_io_channel -> i_io_channel
g_hash_free_value -> i_hash_free_value
remove g_free_true
gslist -> i_slist
glog_func -> i_log_func
glist -> i_list
If multi-version compatibility is desired, module authors
can find an example of backwards compatible code in
cdidier/irssi-xmpp#55
+ Add MSGLEVEL_HIDDEN to Perl (#1044)
+ Add $view->set_hidden_level and $view->remove_lines_by_level
to Perl (#1026)
+ Add a /SET scrollback_max_age setting (#1022). By Heikki
Orsila
+ Add /SET actlist_prefer_window_name (#1025)
+ Add -window option to /CAT (#1023, #1159)
+ Add an option to list specific sections with
/SET -section lookandfeel
(#1048)
+ Add support for IRCv3 CAP LS 302 (#1091)
+ Add a new "print noformat" signal that goes together with
"print format" (#1088, #1192)
+ Add support for IRCv3 extended-join. /SET show_extended_join
to enable (#1097, #1107, #1124)
There are two new /FORMATs, join_extended and
join_extended_account, that theme writers need to take into
account if desired.
+ Add support for IRCv3 setname (#1093, #1104, #1254, GL#33)
+ Add support for IRCv3 account-notify (#1100, #1098, GL#33,
#1105, #1131). Credit to oss-fuzz
/SET show_account_notify to enable
+ Add support for IRCv3 invite-notify (#1094)
+ Add support for receiving IRCv3 message-tags (#576, #1090)
+ Add support for sending IRCv3 message-tags (#1092, an#34)
+ Enable the znc.in/self-message CAP by default (#1123)
+ Add support for IRCv3 away-notify. /SET away_notify_public
to enable (#1099, GL#33, #1105)
+ Add support for IRCv3 chghost (#1096, GL#33, #1105)
For servers with broken chghost implementation that fill the
status window with host changed messages, one may add "quote
cap req -chghost" to the -autosendcmd or, if the host change
messages are entirely undesired, "/format -delete
host_changed"
+ Add support for IRCv3 server-time. /SET show_server_time to
enable (#1108)
+ Add support for logging IRCv3 server-time.
/SET log_server_time to disable (#1318, an#16)
+ Add IRCv3 features to signals.txt (#1111)
In particular, "message join" now takes 2 additional
arguments, script and module authors must beware of this
change.
+ Show the unignore time in /IGNORE output (#1158, #1161)
+ Add /SET quit_on_hup to make the behaviour of SIGHUP
configurable (#828, #1169). By Pinguin1234
+ Support numeric 489 as ERR_SECUREONLYCHAN (#1193, #1196). By
Michael Hansen
+ Improve support for building Irssi in Termux-Android with
Meson (#1199)
+ Add usermode key to Irssi::Irc::Chatnet in Perl (#1288). By
Jessica Sophie Porter
+ Add format_string_expand and format_string_unexpand
functions to Perl (#1286)
+ Add ...->format_create_dest(...)->printformat("format",
args...) and ...->printformat_module("module", "format",
args...) methods to Perl (#1284)
You can avoid any CORE::GLOBAL::caller hacks using the
printformat_module method, especially sind that hack was not
safe during signal emissions
+ Add tracking of user accounts in the channel nicklist using
WHOX on join (#1250)
+ Add auto-loading of the Perl and otr module from /SET
autoload_modules (#1295)
+ Add /IGNORE ... NOHILIGHT to ignore some hilights (#1260)
+ Do not beep on hidden lines with /SET beep_msg_level
... -HIDDEN (#1259)
+ Added /CS, /MS, /NS, and /OS aliases to the default config
(#1316). By Mathis Beer
+ Allow -tls_ca{file,path} '' to unset an argument (#730,
#1060, an#30)
+ Add a "server outgoing modify" signal to intercept outgoing
messages (#1148, #1151, an#15, an#43). Original by
JustAnotherArchivist
- remove some hard-coded 510 byte assumptions (#1086)
- Several fixes for error checks in SSL (#944, #1037, #943,
#1036). Reported by Chi Li
- Wrong variable tested in mask_match (#902, #1035)
- Fix bug where irssi-proxy with `?'-port would not reconnect
(#1041)
- Allow shrinking of /SET rawlog_lines (#957, #1020). By
Marcus "Teschi" Prinz
- Fix /WINDOW BALANCE warning (#1054)
- fix overflow when first command history entry expires
(#1070)
- begin modularising IRC module (#1067, #1112, #1113)
- fix some memory leaks in /DCC RESUME and settings_add
(#1077). By Zero King
- fix cut-off text with theme_indent module and /SET
indent_always OFF (#1078)
- fix the cap_queue order (#1095)
- add reference counted strings (#1089)
- Fix irc_op_public messages not triggering hilights (#354,
#891, #1129). By Dan Collins
- Fix /IGNORE not setting the right level in irc_op_public
messages (#1280). Credit to oss-fuzz
- Fix GTimeVal deprecation (#1141, #1144, #1145, #1350, an#44)
If multi-version compatibility is desired, module authors
can find an example of backwards compatible code in
cdidier/irssi-xmpp#53
- Fix /IGNORE ... MODES NO_ACT not working (#1164)
- Deprecated -ssl* options are hidden from tab completion
(#1171)
- Make /SET actlist_sort a choice type (#1198)
- Fix crash from self-unloading script (#1206). By Thomas
Stagner
- Fix crash during Perl signal emission (#1233, #1234)
- Fix a case where empty lines or comments inside channels or
servers in the config would confuse Irssi (#1062, #1242,
#1243)
- Fix reported freezing in DCC GET on slow disks (#159, #1271)
- Fix message-tags parsing (#1274, #1275). Credit to oss-fuzz
- Fail redirects when receiving numeric 263 (RPL_TRYAGAIN) in
response to /WHO (#1283)
- Some updates to .gitignore (#1302). By Rene Kita
- Fix build on operating systems with X/Open Curses, version 2
(#1305, #1308). By Nia Alarie (Regression introduced with
#1290, alternative fix for Irssi 1.2.3 no-term.h.patch)
- Fix otr module not using g_strndup, e.g. on Solaris 10
(#1315). By Claes Nästén
- Fix cursor getting stuck for auto completions that changes
case (#1176, #1322, an#8). By ffrogman
- Restore operation of tag/* in /SET activity_hide_targets
(#1337, an#11) nb. the ::all syntax was working in Irssi 1.1
and 1.2 (and continues to work)
- Fix /SERVER ADD -matrix -network my_matrix_network
(an#12). By Andrej Kacian
- Fix /SERVER ADD creating duplicated entries in the config
file (#1317, an#22, an#41)
- Fix critical when SASL user is set and SASL password is
empty (#1325, an#21)
- Misc fixes (#1106, #1141, #1272, #1297, an#35)
- Fuzz fixes (#1116, #1117, #1119, #1125, #1126, an#20)
- Build system fixes (#1101, #1102, #1069, #1140, #1181, #1253)
- Sync docs and scripts (an#39)
- Text and Help updates
- add -tls_* options to manual (#1029, #1030). By Jacob
V. Rasmussen
- missing targets in /MSG (#1032)
- wrong parameter in /ECHO (#1024)
- Spelling in OTR (#1047). By David Gall
- Clarify statusbar priority (#1049). By Marius Gedminas
- Document get_irssi_dir in Perl (#1051, #1052). By Alex
Shafer
- typo in /HILIGHT help (#1081). By DFrostByte
- improved clarity of your_nick_owned (#1138). By Mike Quin
- Update some URLs to https (#1163)
- Add documentation for escaping some characters (#1329,
#1330, an#9). By Guntbert Reiter
- Fix some typos (#1336, an#10). By Francis Mteo
- Document $abiversion and parse_special (an#38). By bw1
- Infrastructure updates:
- Support for Github Actions (#1039, #1103, #1160, #1212,
#1231, #1252, #1261, an#40)
- Run clang-format on pull requests (#1172, #1173, #1184,
#1230, #1247, #1287)
- Run abidiff on pull requests (#1179, #1195)
- Test CI-Fuzz (#1279, #1304, an#17)
v1.2.3 2021-04-11 The Irssi team <staff@irssi.org>
- Fix the compilation of utf8proc (#1021)
- Fix wrong call to free. By Zero King (#1076)
- Fix a colour reset in true colour themes when encountering
mIRC colours (#1059)
- Fix memory leak on malformed CAP requests (#1120)
- Fix an erroneous free of SASL data. Credit to Oss-Fuzz (#1128,
#1130)
- Re-set the TLS flag when reconnecting (#1027, #1134)
- Fix the scrollback getting stuck after /clear (#1115, #1136)
- Fix the input of Ctrl+C as the first character (#1153, #1154)
- Fix crash on quit during unloading of modules on certain
platforms (#1167)
- Fix Irssi freezing input after Ctrl+Space on GLib >2.62 (#1180,
#1183)
- Fix layout of IDCHANs. By Lauri Tirkkonen (#1197)
- Fix crash when server got reconnected before it was properly
connected (#1210, #1211)
- Fix multiple identical active caps (#1249)
- Minor help corrections (#1156, #1213, #1214, #1255)
- Remove erroneous colour in the colorless theme. Reported and
fixed by Nutchanon Wetchasit (#1220, #1221)
- Fix invalid bounds calculation when editing the text
entry. Found and fixed by Sergey Valentey (#1269)
- Fix passing of negative size in buffer writes. Found and
fixed by Sergey Valentey (#1270)
- Fix Irssi freezing on slow hardware and fast DCC transfers (#159,
#1271)
- Fix compilation on Solaris (#1291)
- Fix null pointer dereference when receiving broken JOIN
record. Credit to Oss-Fuzz (#1292)
- Fix crash on /connect to some sockets (#1239, #1298)
- Fix Irssi rendering on Apple ARM. By Misty De Méo (#1267,
#1268, #1290)
- Fix crash on /lastlog with broken lines (#1281, #1299)
- Fix memory leak when receiving bogus SASL authentication
data. Found and fixed by Sergey Valentey (#1293)
v1.2.2 2019-08-29 The Irssi team <staff@irssi.org>
- Fix a use after free issue when receiving IRCv3 CAP
information from the server (GL#34)
information from the server (GL#34, GL!35)
- Fix a crash during startup when windows weren't fully
initialised yet (#1114, bdo#935813)

View File

@ -1,27 +1,26 @@
# [Irssi](https://irssi.org/)
# Neırssi
[![Build Status](https://travis-ci.org/irssi/irssi.svg?branch=master)](https://travis-ci.org/irssi/irssi)
![Build Status](https://github.com/ailin-nemui/irssi/workflows/Check%20Irssi/badge.svg?branch=master)
Irssi is a modular chat client that is most commonly known for its
text mode user interface, but 80% of the code isn't text mode
specific. Irssi comes with IRC support built in, and there are
third party [ICB](https://github.com/jperkin/irssi-icb),
Neırssi is a modular text mode chat client mostly compatible with
[Irssi](https://irssi.org). It comes with IRC support built in, and
there are third party [ICB](https://github.com/jperkin/irssi-icb),
[SILC](http://www.silcnet.org/),
[XMPP](http://cybione.org/~irssi-xmpp/) (Jabber),
[PSYC](http://about.psyc.eu/Irssyc) and
[Quassel](https://github.com/phhusson/quassel-irssi) protocol modules
available.
![irssi](https://user-images.githubusercontent.com/5665186/32180643-cf127f60-bd92-11e7-8aa2-882313ce1d8e.png)
![irssi](https://user-images.githubusercontent.com/5665186/154820868-50c35841-04f4-4f4c-8df9-dd5aa4bbcde8.png)
## [Download information](https://irssi.org/download/)
## [Download information](https://ailin-nemui.github.io/irssi/Getting.html)
#### Development source installation
[Ninja](https://ninja-build.org/) 1.5 and [Meson](https://mesonbuild.com/) 0.49
[Ninja](https://ninja-build.org/) 1.8 and [Meson](https://mesonbuild.com/) 0.53
```
git clone https://github.com/irssi/irssi
git clone https://github.com/ailin-nemui/irssi
cd irssi
meson Build
ninja -C Build && sudo ninja -C Build install
@ -29,41 +28,41 @@ ninja -C Build && sudo ninja -C Build install
#### Release source installation
* Download [release](https://github.com/irssi/irssi/releases)
* [Verify](https://irssi.org/download/#release-sources) signature
* Download [release](https://github.com/ailin-nemui/irssi/releases)
* Verify signature
```
tar xJf irssi-*.tar.xz
cd irssi-*
./configure
make && sudo make install
meson Build
ninja -C Build && sudo ninja -C Build install
```
### Requirements
- [glib-2.28](https://wiki.gnome.org/Projects/GLib) or greater
- [glib-2.32](https://wiki.gnome.org/Projects/GLib) or greater
- [openssl](https://www.openssl.org/)
- [perl-5.6](https://www.perl.org/) or greater (for perl support)
- terminfo or ncurses (for text frontend)
#### See the [INSTALL](INSTALL) file for details
## [Documentation](https://irssi.org/documentation/)
## Documentation
* [Frequently Asked Questions](https://irssi.org/documentation/faq)
* [Startup How-To](https://irssi.org/documentation/startup)
* [New users guide](https://ailin-nemui.github.io/irssi/New-users.html)
* Check the built-in `/HELP`, it has all the details on command syntax
* Other random Irssi documentation on https://irssi.org/documentation/
## [Themes](https://irssi-import.github.io/themes/)
## [Scripts](https://scripts.irssi.org/)
## [Modules](https://irssi.org/modules/)
## [Modules](https://ailin-nemui.github.io/irssi/Modules.html)
## [Security information](https://irssi.org/security/)
Please report security issues to staff@irssi.org. Thanks!
## [Bugs](https://github.com/irssi/irssi/issues) / Suggestions / [Contributing](https://irssi.org/development/)
## [Bugs](https://github.com/irssi/irssi/issues) / Suggestions / Contributing
Check the GitHub issues if it is already listed in there; if not, open
an issue on GitHub or send a mail to [staff@irssi.org](mailto:staff@irssi.org).
@ -72,4 +71,4 @@ Irssi is always looking for developers. Feel free to submit patches through
GitHub pull requests.
You can also contact the Irssi developers in
[#irssi](https://irssi.org/support/irc/) on freenode.
[#irssi](https://irssi.org/support/irc/) on irc.libera.chat.

View File

@ -1,67 +0,0 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
PKG_NAME="Irssi"
srcdir=`dirname "$0"`
test -z "$srcdir" && srcdir=.
mydir=`pwd`
if test ! -f "$srcdir"/configure.ac; then
echo -n "**Error**: Directory \`$srcdir' does not look like the"
echo " top-level $PKG_NAME directory"
exit 1
fi
cd "$srcdir"
# create help files
echo "Creating help files..."
perl utils/syntax.pl
echo "Creating ChangeLog..."
git log > ChangeLog
if test "$?" -ne 0; then
echo "**Error**: ${PKG_NAME} Autogen must be run in a git clone, cannot proceed."
exit 1
fi
files=`echo docs/help/in/*.in|sed -e 's,docs/help/in/Makefile.in ,,' -e 's,docs/help/in/,!,g' -e 's/\.in /.in ?/g'`
cat docs/help/in/Makefile.am.gen|sed "s/@HELPFILES@/$files/g"|sed 's/?/\\?/g'|tr '!?' '\t\n' > docs/help/in/Makefile.am
files=`echo $files|sed 's/\.in//g'`
cat docs/help/Makefile.am.gen|sed "s/@HELPFILES@/$files/g"|sed 's/?/\\?/g'|tr '!?' '\t\n' > docs/help/Makefile.am
if test x$NOCONFIGURE = x && test -z "$*"; then
echo "**Warning**: I am going to run \`configure' with no arguments."
echo "If you wish to pass any to it, please specify them on the"
echo \`$0\'" command line."
echo
fi
rm -f aclocal.m4
echo "Running autoreconf ..."
autoreconf -i || exit $?
# make sure perl hashes have correct length
find src/perl -name '*.c' -o -name '*.xs' -exec grep -n hv_store {} + | perl -l -ne 'if (/"(\w+)",\s*(\d+)/ && $2 != length $1) { $X=1; print "Incorrect key length in $_" } END { exit $X }'
cd "$mydir"
conf_flags="--enable-maintainer-mode"
if test x$NOCONFIGURE = x; then
echo Running "$srcdir"/configure $conf_flags "$@" ...
"$srcdir"/configure $conf_flags "$@" \
&& echo Now type \`make\' to compile $PKG_NAME || exit 1
else
echo Skipping configure process.
fi
if grep -q '==\|\[\[' "$srcdir"/build-aux/test-driver; then
echo
echo "************************************************************************"
echo "**Warning**: your build is not portable, please do not make dist"
echo " see https://bugzilla.opensuse.org/show_bug.cgi?id=1076146"
echo "************************************************************************"
fi

View File

@ -1,816 +0,0 @@
AC_INIT(irssi, 1.3-head)
AC_CONFIG_SRCDIR([src])
AC_CONFIG_AUX_DIR(build-aux)
AC_PREREQ(2.50)
AC_CONFIG_HEADERS([irssi-config.h])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([1.9 no-define foreign subdir-objects])
AM_SILENT_RULES([yes])
AM_MAINTAINER_MODE
AC_PROG_CC
AC_PROG_CPP
AM_PROG_LIBTOOL
AC_PATH_PROG(sedpath, sed)
AC_PATH_PROG(perlpath, perl)
PKG_INSTALLDIR
AC_CHECK_HEADERS(unistd.h dirent.h sys/ioctl.h sys/resource.h)
# check posix headers..
AC_CHECK_HEADERS(sys/socket.h sys/time.h sys/utsname.h)
AC_SYS_LARGEFILE
AC_ARG_WITH(socks,
[ --with-socks Build with socks support],
if test x$withval = xno; then
want_socks=no
else
want_socks=yes
fi,
want_socks=no)
AC_ARG_WITH(textui,
[ --without-textui Build without text frontend],
if test x$withval = xno; then
want_textui=no
else
want_textui=yes
fi,
want_textui=yes)
AC_ARG_WITH(bot,
[ --with-bot Build irssi-bot],
if test x$withval = xno; then
want_irssibot=no
else
want_irssibot=yes
fi,
want_irssibot=no)
AC_ARG_WITH(fuzzer,
[ --with-fuzzer Build irssi-fuzzer],
if test x$withval = xno; then
want_irssifuzzer=no
else
want_irssifuzzer=yes
fi,
want_irssifuzzer=no)
AC_ARG_WITH(fuzzer-lib,
[ --with-fuzzer-lib Specify path to fuzzer library],
fuzzerlibpath="$withval")
AC_ARG_WITH(proxy,
[ --with-proxy Build irssi-proxy],
if test x$withval = xno; then
want_irssiproxy=no
else
want_irssiproxy=yes
fi,
want_irssiproxy=no)
AC_ARG_WITH(modules,
[ --with-modules Specify what modules to build in binary],
if test x$withval != xyes -a x$withval != xno; then
build_modules="$withval"
fi)
if test "x$prefix" != "xNONE"; then
prefix=`eval echo $prefix`
PERL_MM_PARAMS="INSTALLDIRS=perl INSTALL_BASE=$prefix"
perl_set_use_lib=yes
perl_prefix_note=yes
fi
AC_ARG_WITH(perl-staticlib,
[ --with-perl-staticlib Specify that we want to link perl libraries
statically in irssi, default is no],
if test x$withval = xno; then
want_staticperllib=no
else
want_staticperllib=yes
fi,
want_staticperllib=no)
AC_ARG_WITH(perl-lib,
[ --with-perl-lib=[perl|site|vendor|DIR] Specify where to install the
Perl libraries for irssi, default is site],
if test "x$withval" = xyes; then
want_perl=yes
elif test "x$withval" = xno; then
want_perl=no
elif test "x$withval" = xperl; then
want_perl=yes
perl_prefix_note=no
PERL_MM_PARAMS="INSTALLDIRS=perl"
perl_set_use_lib=no
elif test "x$withval" = xsite; then
want_perl=yes
perl_prefix_note=no
PERL_MM_PARAMS=""
perl_set_use_lib=no
elif test "x$withval" = xvendor; then
want_perl=yes
perl_prefix_note=no
if test -z "`$perlpath -v|grep '5\.0'`"; then
PERL_MM_PARAMS="INSTALLDIRS=vendor"
else
PERL_MM_PARAMS="INSTALLDIRS=perl PREFIX=`$perlpath -e 'use Config; print $Config{prefix}'`"
fi
perl_set_use_lib=no
else
want_perl=yes
perl_prefix_note=no
PERL_MM_PARAMS="INSTALLDIRS=perl LIB=$withval"
perl_set_use_lib=yes
fi,
want_perl=yes)
AC_ARG_WITH(perl,
[ --with-perl[=yes|no|module] Build with Perl support - also specifies
if it should be built into main irssi binary
(static, default) or as module],
if test x$withval = xyes; then
want_perl=static
elif test x$withval = xstatic; then
want_perl=static
elif test x$withval = xmodule; then
want_perl=module
else
want_perl=no
fi,
want_perl=static)
AC_ARG_WITH(otr,
[ --with-otr[=yes|no|static] Build with OTR support - also specifies
if it should be built into the main irssi
binary (static) or as a module (default)],
if test x$withval = xyes; then
want_otr=module
elif test x$withval = xstatic; then
want_otr=static
elif test x$withval = xmodule; then
want_otr=module
else
want_otr=no
fi,
want_otr=no)
AC_ARG_ENABLE(true-color,
[ --enable-true-color Build with true color support in terminal],
if test x$enableval = xno ; then
want_truecolor=no
else
want_truecolor=yes
fi,
want_truecolor=no)
AC_ARG_ENABLE(gregex,
[ --disable-gregex Build without GRegex (fall back to regex.h)],
if test x$enableval = xno ; then
want_gregex=no
else
want_gregex=yes
fi,
want_gregex=yes)
AC_ARG_ENABLE(utf8proc,
[ --disable-utf8proc Build without Julia's utf8proc],
if test x$enableval = xno ; then
want_utf8proc=no
else
want_utf8proc=yes
fi,
want_utf8proc=yes)
AC_ARG_WITH(capsicum,
[ --with-capsicum Build with Capsicum support],
if test x$withval = xno; then
want_capsicum=no
else
want_capsicum=yes
fi,
want_capsicum=yes)
dnl **
dnl ** just some generic stuff...
dnl **
dnl * OS specific options
case "$host_os" in
hpux*)
CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
;;
*)
;;
esac
AC_SEARCH_LIBS([socket], [network socket])
AC_SEARCH_LIBS([inet_addr], [nsl])
dnl * gcc specific options
if test "x$ac_cv_prog_gcc" = "xyes"; then
CFLAGS="$CFLAGS -Wall"
fi
AC_CHECK_TYPE(socklen_t, ,
[AC_DEFINE([socklen_t], [int], [Define to 'int' if <sys/socket.h> doesn't define.])], [
AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
])
AC_CHECK_SIZEOF(int)
AC_CHECK_SIZEOF(long)
AC_CHECK_SIZEOF(long long)
AC_CHECK_SIZEOF(off_t)
if test $ac_cv_sizeof_off_t = 8; then
offt_64bit=yes
else
offt_64bit=no
fi
dnl **
dnl ** check for socks
dnl **
if test "x$want_socks" = "xyes"; then
AC_CHECK_LIB(socks, connect, [
AC_DEFINE(HAVE_SOCKS,, Build with socks support)
LIBS="$LIBS -lsocks"
AC_CHECK_HEADER(socks.h, [
AC_DEFINE(HAVE_SOCKS_H)
CFLAGS="$CFLAGS -DSOCKS"
AC_MSG_RESULT(["socks5 library found, building with it"])
], [
AC_MSG_RESULT(["socks4 library found, building with it"])
CFLAGS="$CFLAGS -Dconnect=Rconnect -Dgetsockname=Rgetsockname -Dgetpeername=Rgetpeername -Dbind=Rbind -Daccept=Raccept -Dlisten=Rlisten -Dselect=Rselect"
])
])
fi
dnl **
dnl ** fe-text checks
dnl **
for try in 1 2; do
if test $try = 1; then
glib_modules=gmodule
else
echo "*** trying without -lgmodule"
glib_modules=
fi
AM_PATH_GLIB_2_0(2.28.0,,, $glib_modules)
if test "$GLIB_LIBS"; then
if test $glib_modules = gmodule; then
AC_DEFINE(HAVE_GMODULE)
have_gmodule=yes
fi
break
fi
done
if test -z "$GLIB_LIBS"; then
echo
echo "*** If you don't have GLIB, you can get it from ftp://ftp.gtk.org/pub/glib/"
echo "*** We recommend you get the latest stable GLIB 2 version."
echo "*** Compile and install it, and make sure pkg-config finds it,"
echo "*** by adding the path where the .pc file is located to PKG_CONFIG_PATH"
echo -n "*** Or alternatively install your distribution's package"
if test -f /etc/debian_version; then
echo :
echo "*** sudo apt-get install libglib2.0-dev"
elif test -f /etc/redhat-release; then
echo " (glib2-devel)"
else
echo .
fi
echo
AC_ERROR([GLIB is required to build irssi.])
fi
LIBS="$LIBS $GLIB_LIBS"
GLIB_TESTS
dnl **
dnl ** OpenSSL checks
dnl **
PKG_CHECK_MODULES([OPENSSL], [openssl], [
CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
LIBS="$LIBS $OPENSSL_LIBS"
], [
AC_CHECK_LIB([ssl], [SSL_library_init], [
LIBS="$LIBS -lssl -lcrypto"
], [
AC_MSG_ERROR([The OpenSSL library was not found])
])
])
dnl **
dnl ** utf8proc
dnl **
if test "x$want_utf8proc" != "xno"; then
AC_CHECK_HEADER([utf8proc.h], [
AC_CHECK_LIB([utf8proc], [utf8proc_version], [
want_utf8proc=yes
AC_DEFINE(HAVE_LIBUTF8PROC,, [Define to 1 if you have the `utf8proc' library (-lutf8proc).])
LIBS="$LIBS -lutf8proc"
], [
want_utf8proc="no, library not found"
])
], [
want_utf8proc="no, library header not found"
])
fi
dnl **
dnl ** curses checks
dnl **
if test "x$want_textui" != "xno"; then
TEXTUI_NO_LIBS="$LIBS"
LIBS=
AC_SEARCH_LIBS([setupterm], [tinfo ncursesw ncurses terminfo], [want_textui=yes], [
AC_ERROR(Terminfo not found - install libncurses-dev or ncurses-devel package)
want_textui="no, Terminfo not found"
])
TEXTUI_LIBS="$LIBS"
AC_SUBST(TEXTUI_LIBS)
LIBS="$TEXTUI_NO_LIBS"
fi
dnl **
dnl ** irssifuzzer checks
dnl **
if test "$want_irssifuzzer" != "no"; then
dnl * we need to build with -fsanitize-coverage=trace-pc-guard
dnl * otherwise fuzzer won't be very successful at finding bugs :)
if test -z "$SANFLAGS"; then
SANFLAGS="-g -fsanitize=address -fsanitize-coverage=trace-pc-guard"
fi
CFLAGS="$CFLAGS $SANFLAGS"
CXXFLAGS="$CXXFLAGS $SANFLAGS"
AC_MSG_CHECKING(for fuzzer library)
if test -z "$fuzzerlibpath"; then
AC_MSG_RESULT([not found, building without fuzzer front end])
want_irssifuzzer=no
else
FUZZER_LIBS="$fuzzerlibpath"
AC_SUBST(FUZZER_LIBS)
fi
fi
dnl **
dnl ** perl checks
dnl **
if test "$want_perl" != "no"; then
AC_MSG_CHECKING(for working Perl support)
if test -z "$perlpath"; then
perl_check_error="perl binary not found"
else
PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null`
fi
if test "x$ac_cv_prog_gcc" = "xyes" -a -z "`echo $host_os|grep 'bsd\|linux'`"; then
dnl * several systems have Perl compiled with native compiler
dnl * but irssi is being compiled with GCC. Here we try to
dnl * fix those command line options a bit so GCC won't
dnl * complain about them. Normally there's only few options
dnl * that we want to keep:
dnl * -Ddefine -Uundef -I/path -fopt -mopt -iwithsysroot
PERL_CFLAGS=`echo $PERL_CFLAGS | $perlpath -pe 's/^(.* )?-@<:@^DUIifm@:>@@<:@^ @:>@+/\1/g; s/^(.* )?\+@<:@^ @:>@+/\1/g'`
PERL_EXTRA_OPTS="CCCDLFLAGS=\"-fPIC\""
AC_SUBST(PERL_EXTRA_OPTS)
fi
if test -z "$PERL_CFLAGS"; then
if test -n "$perl_check_error"; then
perl_check_error="Error getting perl CFLAGS"
fi
AC_MSG_RESULT([not found, building without Perl])
want_perl=no
else
PERL_LDFLAGS=`$perlpath -MExtUtils::Embed -e ldopts 2>/dev/null`
dnl * remove all database stuffs
dnl * nsl is already in ldflags
dnl * libc is of course linked without needing -lc
dnl * -rdynamic must not be in LIBADD line
for word in -ldb -ldbm -lndbm -lgdbm -lc -rdynamic; do
PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath -e "s/$word //" -e "s/$word$//"`
done
case "$host_os" in
linux*)
PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath -e 's/-lposix //' -e 's/-lposix$//'`
;;
hpux*)
if test "x$ac_cv_prog_gcc" = "xyes"; then
PERL_CFLAGS=`echo $PERL_CFLAGS | $sedpath -e 's/-Ae //' -e 's/-Ae$//'`
PERL_LDFLAGS=`echo $PERL_LDFLAGS | $sedpath -e 's/-Ae //' -e 's/-Ae$//'`
fi
;;
*)
;;
esac
dnl * check that perl's ldflags actually work
echo "#include <EXTERN.h>" > conftest.c
echo "#include <perl.h>" >> conftest.c
echo "int main(){perl_alloc(); return 0;}" >> conftest.c
$CC $CFLAGS $PERL_CFLAGS conftest.c -o conftest $LDFLAGS $PERL_LDFLAGS 2> perl.error.tmp > /dev/null
if test ! -s conftest -a "x$ignore_perl_errors" = "x"; then
perl_check_error="Error linking with perl libraries: $PERL_LDFLAGS: `cat perl.error.tmp`"
AC_MSG_RESULT([error linking with perl libraries, building without Perl])
want_perl=no
fi
rm -f perl.error.tmp
fi
if test "x$want_perl" != "xno"; then
AC_MSG_RESULT(ok)
if test "x$want_perl" = "xstatic"; then
dnl * building with static perl support
dnl * all PERL_LDFLAGS linking is done in fe-text
PERL_LINK_FLAGS="$PERL_LDFLAGS"
PERL_LINK_LIBS="../perl/libperl_core_static.la"
PERL_FE_LINK_LIBS="../perl/libfe_perl_static.la"
PERL_LDFLAGS=
AC_DEFINE(HAVE_STATIC_PERL)
dnl * build only static library of perl module
perl_module_lib=
perl_module_fe_lib=
perl_static_lib=libperl_core_static.la
perl_static_fe_lib=libfe_perl_static.la
else
dnl * build dynamic library of perl module
perl_module_lib=libperl_core.la
perl_module_fe_lib=libfe_perl.la
perl_static_lib=
perl_static_fe_lib=
fi
if test "x$want_staticperllib" = "xyes"; then
PERL_MM_PARAMS="$PERL_MM_PARAMS LINKTYPE=static"
PERL_LINK_LIBS="$PERL_LINK_LIBS ../perl/common/blib/arch/auto/Irssi/Irssi.a ../perl/irc/blib/arch/auto/Irssi/Irc/Irc.a ../perl/ui/blib/arch/auto/Irssi/UI/UI.a ../perl/textui/blib/arch/auto/Irssi/TextUI/TextUI.a"
PERL_STATIC_LIBS=1
else
PERL_STATIC_LIBS=0
fi
# remove any prefix from PERL_MM_OPT
PERL_MM_OPT=`perl -MText::ParseWords -e 'sub qu{$_=shift;s{^(.*?)=(.*)$}{($a,$b)=($1,$2);$b=~s/"/\\\\"/g;qq{$a="$b"}}ge if /@<:@\s"@:>@/;$_} local $,=" "; print map qu($_), grep !/^(INSTALL_BASE|PREFIX)=/, shellwords(@ARGV)' "$PERL_MM_OPT"`
# figure out the correct @INC path - we'll need to do this
# through MakeMaker since it's difficult to get it right
# otherwise.
$perlpath -MExtUtils::MakeMaker -e 'WriteMakefile(NAME => "test", MAKEFILE => "Makefile.test", FIRST_MAKEFILE => "/dev/null", NO_META => 1, NO_MYMETA => 1);' $PERL_MM_PARAMS >/dev/null
echo 'show-INSTALLDIRS:' >> Makefile.test
echo ' @echo $(INSTALLDIRS)' >> Makefile.test
perl_INSTALLDIRS=`$am_make -s -f Makefile.test show-INSTALLDIRS`
if test "x$perl_INSTALLDIRS" = "xsite"; then
perl_library_dir="site default"
perl_INSTALL_VAR=INSTALLSITEARCH
elif test "x$perl_INSTALLDIRS" = "xvendor"; then
perl_library_dir="vendor default"
perl_INSTALL_VAR=INSTALLVENDORARCH
else
perl_library_dir="module default"
perl_INSTALL_VAR=INSTALLARCHLIB
fi
echo 'show-ARCHLIB:' >> Makefile.test
echo ' @echo $('"$perl_INSTALL_VAR"')' >> Makefile.test
perl_use_lib=`$am_make -s -f Makefile.test show-ARCHLIB`
rm -f Makefile.test
if test "x$perl_set_use_lib" = "xyes"; then
if $perlpath -e 'exit ! grep $_ eq $ARGV@<:@0@:>@, grep /^\//, @INC' "$perl_use_lib"; then
perl_library_dir="other path in @INC"
perl_set_use_lib=no
else
perl_library_dir="prepends to @INC with /set perl_use_lib"
PERL_USE_LIB="$perl_use_lib"
fi
fi
AC_SUBST(perl_module_lib)
AC_SUBST(perl_static_lib)
AC_SUBST(perl_module_fe_lib)
AC_SUBST(perl_static_fe_lib)
AC_SUBST(PERL_LINK_FLAGS)
AC_SUBST(PERL_LINK_LIBS)
AC_SUBST(PERL_FE_LINK_LIBS)
AC_SUBST(PERL_LDFLAGS)
AC_SUBST(PERL_CFLAGS)
AC_SUBST(PERL_USE_LIB)
AC_SUBST(PERL_MM_OPT)
AC_SUBST(PERL_MM_PARAMS)
AC_SUBST(PERL_STATIC_LIBS)
fi
fi
dnl **
dnl ** check for capsicum
dnl **
if test "x$want_capsicum" = "xyes"; then
AC_CHECK_LIB(c, cap_enter, [
AC_CHECK_LIB(nv, nvlist_create, [
AC_DEFINE(HAVE_CAPSICUM,, Build with Capsicum support)
LIBS="$LIBS -lnv"
], [
want_capsicum="no, nvlist_create not found"
])
], [
want_capsicum="no, cap_enter not found"
])
fi
dnl **
dnl ** OTR checks
dnl **
have_otr=no
if test "x$want_otr" != "xno"; then
AM_PATH_LIBGCRYPT(1:1.2.0, [], [AC_ERROR(libgcrypt 1.2.0 or newer is required.)])
AM_PATH_LIBOTR(4.1.0, [], [AC_ERROR([libotr 4.1.0 or newer is required.])])
OTR_CFLAGS="$LIBOTR_CFLAGS $LIBGCRYPT_CFLAGS"
OTR_LDFLAGS="$LIBOTR_LIBS $LIBGCRYPT_LIBS"
AC_SUBST(otr_module_lib)
AC_SUBST(otr_static_lib)
if test "x$want_otr" != "xno"; then
if test "x$want_otr" = "xstatic"; then
otr_module_lib=
otr_static_lib=libotr_core_static.la
OTR_LINK_LIBS="../otr/libotr_core_static.la"
OTR_LINK_FLAGS="$OTR_LDFLAGS"
AC_DEFINE(HAVE_STATIC_OTR)
else
otr_module_lib=libotr_core.la
otr_static_lib=
fi
fi
AC_SUBST(otr_module_lib)
AC_SUBST(otr_static_lib)
AC_SUBST(OTR_CFLAGS)
AC_SUBST(OTR_LDFLAGS)
AC_SUBST(OTR_LINK_LIBS)
AC_SUBST(OTR_LINK_FLAGS)
have_otr=yes
fi
dnl ** check what we want to build
AM_CONDITIONAL(BUILD_TEXTUI, test "$want_textui" = "yes")
AM_CONDITIONAL(BUILD_IRSSIBOT, test "$want_irssibot" = "yes")
AM_CONDITIONAL(BUILD_IRSSIFUZZER, test "$want_irssifuzzer" = "yes")
AM_CONDITIONAL(BUILD_IRSSIPROXY, test "$want_irssiproxy" = "yes")
AM_CONDITIONAL(HAVE_PERL, test "$want_perl" != "no")
AM_CONDITIONAL(HAVE_CAPSICUM, test "x$want_capsicum" = "xyes")
AM_CONDITIONAL(USE_GREGEX, test "x$want_gregex" = "xyes")
AM_CONDITIONAL(HAVE_OTR, test "x$have_otr" != "xno")
# move LIBS to PROG_LIBS so they're not tried to be used when linking eg. perl libraries
PROG_LIBS=$LIBS
LIBS=
AC_SUBST(PROG_LIBS)
dnl **
dnl ** Keep all the libraries here so each frontend doesn't need to
dnl ** keep track of them all
dnl **
dnl ** (these could be made configurable)
CHAT_MODULES="irc"
irc_MODULES="dcc flood notifylist"
if test -n "$build_modules"; then
irc_MODULES="$irc_MODULES $build_modules"
fi
dnl ****************************************
AC_SUBST(CHAT_MODULES)
AC_SUBST(irc_MODULES)
CORE_LIBS="../core/libcore.a ../lib-config/libirssi_config.a"
FE_COMMON_LIBS=""
CHAT_LIBS=""
for c in $CHAT_MODULES; do
CHAT_LIBS="$CHAT_LIBS ../$c/lib$c.a ../$c/core/lib${c}_core.a"
if test -f $srcdir/src/fe-common/$c/module.h; then
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/$c/libfe_common_$c.a "
fi
for s in `eval echo \\$${c}_MODULES`; do
CHAT_LIBS="$CHAT_LIBS ../$c/$s/lib${c}_$s.a"
if test -f $srcdir/src/fe-common/$c/$s/module.h; then
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/$c/$s/libfe_${c}_$s.a "
fi
done
done
FE_COMMON_LIBS="$FE_COMMON_LIBS../fe-common/core/libfe_common_core.a"
dnl ** common libraries needed by frontends
COMMON_NOUI_LIBS="$CHAT_LIBS $CORE_LIBS"
COMMON_LIBS="$FE_COMMON_LIBS $COMMON_NOUI_LIBS"
AC_SUBST(COMMON_NOUI_LIBS)
AC_SUBST(COMMON_LIBS)
if test "x$want_truecolor" = "xyes"; then
AC_DEFINE([TERM_TRUECOLOR], [], [true color support in terminal])
else
want_truecolor=no
fi
if test "x$want_gregex" = "xyes"; then
AC_DEFINE([USE_GREGEX], [], [use GRegex for regular expressions])
else
want_gregex=no
fi
AH_TEMPLATE(HAVE_GMODULE)
AH_TEMPLATE(HAVE_SOCKS_H, [misc..])
AH_TEMPLATE(HAVE_STATIC_PERL)
AH_TEMPLATE(HAVE_STATIC_OTR)
AH_TEMPLATE(PRIuUOFF_T, [printf()-format for uoff_t, eg. "u" or "lu" or "llu"])
AH_TEMPLATE(UOFF_T_INT, [What type should be used for uoff_t])
AH_TEMPLATE(UOFF_T_LONG)
AH_TEMPLATE(UOFF_T_LONG_LONG)
AC_CONFIG_FILES([
Makefile
src/Makefile
src/core/Makefile
src/irc/Makefile
src/irc/core/Makefile
src/irc/dcc/Makefile
src/irc/notifylist/Makefile
src/irc/proxy/Makefile
src/irc/flood/Makefile
src/fe-common/Makefile
src/fe-common/core/Makefile
src/fe-common/irc/Makefile
src/fe-common/irc/dcc/Makefile
src/fe-common/irc/notifylist/Makefile
src/fe-fuzz/Makefile
src/fe-fuzz/irc/Makefile
src/fe-fuzz/irc/core/Makefile
src/fe-fuzz/fe-common/Makefile
src/fe-fuzz/fe-common/core/Makefile
src/fe-none/Makefile
src/fe-text/Makefile
src/lib-config/Makefile
src/perl/Makefile
src/perl/common/Makefile.PL
src/perl/irc/Makefile.PL
src/perl/ui/Makefile.PL
src/perl/textui/Makefile.PL
src/otr/Makefile
scripts/Makefile
scripts/examples/Makefile
tests/Makefile
tests/fe-common/Makefile
tests/fe-common/core/Makefile
tests/fe-text/Makefile
tests/irc/Makefile
tests/irc/core/Makefile
tests/irc/flood/Makefile
docs/Makefile
docs/help/Makefile
docs/help/in/Makefile
utils/Makefile
themes/Makefile
irssi-1.pc
])
dnl ** make the paths like include headers later
AC_CONFIG_LINKS([irssi/irssi-config.h:irssi-config.h])
AC_LINK_FILES([$srcdir/src],[irssi/src])
AC_OUTPUT
$LN_S ../irssi-version.h irssi/irssi-version.h
dnl ** for building from objdir
old_dir=`pwd` && cd $srcdir && whole_dir=`pwd` && cd $old_dir
if test "x$old_dir" != "x$whole_dir"; then
$LN_S $srcdir/irssi-version.h irssi-version.h
if test "x$want_perl" != "xno"; then
subdirfiles=""
for i in $whole_dir/src/perl/common $whole_dir/src/perl/irc $whole_dir/src/perl/ui $whole_dir/src/perl/textui; do
subdirfiles=`echo $subdirfiles $i/typemap $i/module.h $i/*.pm $i/*.xs`
done
for file in $whole_dir/src/perl/module.h $subdirfiles; do
link=`echo $file|$sedpath "s?$whole_dir/??"`
rm -f $link
$LN_S $file $link
done
fi
fi
echo
echo "Building text frontend ........... : $want_textui"
echo "Building irssi bot ............... : $want_irssibot"
echo "Building irssi proxy ............. : $want_irssiproxy"
if test "x$have_gmodule" = "xyes"; then
echo "Building with module support ..... : yes"
else
echo "Building with module support : NO!! /LOAD will not work!"
echo " - You're missing gmodule (comes with glib) for some reason,"
echo " or it doesn't work in your system."
fi
if test "x$want_perl" = "xstatic"; then
echo "Building with Perl support ....... : static (in irssi binary)"
elif test "x$want_perl" = "xmodule"; then
echo "Building with Perl support ....... : module"
else
if test -z "$perl_check_error"; then
echo "Building with Perl support ....... : no"
else
echo "Building with Perl support ....... : NO!"
echo " - $perl_check_error"
if test -f /etc/debian_version; then
echo " - Try: sudo apt-get install libperl-dev"
elif test -f /etc/redhat-release; then
echo " - Try installing perl-devel"
fi
fi
fi
if test "x$want_perl" != "xno" -a "x$perl_mod_error" != "x"; then
echo " - NOTE: Perl support will be compiled statically to irssi, not as"
echo " a module as requested. Reason:"
echo " $perl_mod_error"
if test -f /etc/debian_version; then
echo " - Try: sudo apt-get install libperl-dev"
fi
fi
if test "x$want_perl" != "xno"; then
echo "Perl library directory ........... : ($perl_library_dir - $perl_use_lib)"
if test "x$perl_prefix_note" = "xyes"; then
echo " - NOTE: This was automatically set to the same directory you gave with"
echo " --prefix. If you want the perl libraries to install to their 'correct'"
echo " path, you'll need to give --with-perl-lib=site option to configure."
echo " Anyway, installing perl to this directory should work just as well."
fi
fi
echo "Install prefix ................... : $prefix"
echo
echo "Building with 64bit DCC support .. : $offt_64bit"
echo "Building with true color support.. : $want_truecolor"
echo "Building with GRegex ............. : $want_gregex"
echo "Building with Capsicum ........... : $want_capsicum"
echo "Building with utf8proc ........... : $want_utf8proc"
if test "x$want_otr" = "xstatic"; then
echo "Building with OTR support ........ : static (in irssi binary)"
elif test "x$want_otr" = "xmodule"; then
echo "Building with OTR support ........ : module"
else
echo "Building with OTR support ........ : no"
fi
echo
echo "If there are any problems, read the INSTALL file."

View File

@ -1,20 +0,0 @@
man_MANS = \
irssi.1
doc_DATA = \
capsicum.txt \
design.html \
design.txt \
formats.txt \
manual.txt \
faq.html \
faq.txt \
perl.txt \
signals.txt \
special_vars.txt \
startup-HOWTO.html \
startup-HOWTO.txt
EXTRA_DIST = $(doc_DATA) $(man_MANS)
SUBDIRS = help

View File

@ -1,6 +1,5 @@
<base href='https://irssi.org/documentation/design/'>
<h1>Design</h1>
<p>Irssis hierarchy is something like this:</p>
<pre class="repl" id="fig1"><code class="language-ascidia">

View File

@ -0,0 +1,47 @@
[binaries]
ar = 'aarch64-linux-android-ar'
c = 'aarch64-linux-android-clang'
cpp = 'aarch64-linux-android-clang++'
ld = 'aarch64-linux-android-ld'
pkgconfig = '/home/builder/.termux-build/_cache/android-r20-api-24-v3/bin/aarch64-linux-android-pkg-config'
strip = 'aarch64-linux-android-strip'
;; you have to substitute 5.30.2 with the Perl version, that can be
;; obtained by running ` miniperl -e 'print substr $^V, 1' `
perl = ['/home/builder/.termux-build/perl/src/miniperl', '-I/data/data/com.termux/files/usr/lib/perl5/5.30.2/aarch64-android', '-I/data/data/com.termux/files/usr/lib/perl5/5.30.2']
[properties]
needs_exe_wrapper = true
c_args = ['-fstack-protector-strong', '-Oz', '-I/data/data/com.termux/files/usr/include']
cpp_args = ['-fstack-protector-strong', '-Oz', '-I/data/data/com.termux/files/usr/include']
c_link_args = ['-L/data/data/com.termux/files/usr/lib', '-Wl,-rpath=/data/data/com.termux/files/usr/lib', '-Wl,--enable-new-dtags', '-Wl,--as-needed', '-Wl,-z,relro,-z,now', '-landroid-glob']
cpp_link_args = ['-L/data/data/com.termux/files/usr/lib', '-Wl,-rpath=/data/data/com.termux/files/usr/lib', '-Wl,--enable-new-dtags', '-Wl,--as-needed', '-Wl,-z,relro,-z,now', '-landroid-glob']
;; if you do not have a cross-perl like miniperl available, you have
;; to specify the required options by uncommenting the following
;; properties
;; you can get the proper values by running the commands on your
;; Android device:
;; ` perl -V::version: `
; perl_version = '5.30.2'
;; ` perl -MExtUtils::Embed -o ccopts `
; perl_ccopts = ['-I/data/data/com.termux/files/usr/include', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-I/data/data/com.termux/files/usr/lib/perl5/5.30.2/aarch64-android/CORE']
;; ` perl -MExtUtils::Embed -o ldopts `
; perl_ldopts = ['-Wl,-E', '-I/data/data/com.termux/files/usr/include', '-L/data/data/com.termux/files/usr/lib/perl5/5.30.2/aarch64-android/CORE', '-lperl', '-lm', '-ldl']
;; ` perl -V::archname: `
; perl_archname = 'aarch64-android'
;; ` perl -V::installsitearch: `
; perl_installsitearch = '/data/data/com.termux/files/usr/lib/perl5/site_perl/5.30.2/aarch64-android'
;; ` perl -V::installvendorarch: `
; perl_installvendorarch = ''
;; ` perl -E 'say for @INC' `
; perl_inc = ['/data/data/com.termux/files/usr/lib/perl5/site_perl/5.30.2/aarch64-android', '/data/data/com.termux/files/usr/lib/perl5/site_perl/5.30.2', '/data/data/com.termux/files/usr/lib/perl5/5.30.2/aarch64-android', '/data/data/com.termux/files/usr/lib/perl5/5.30.2']
[host_machine]
cpu_family = 'arm'
cpu = 'aarch64'
endian = 'little'
system = 'android'

View File

@ -1,9 +1,8 @@
<base href='https://irssi.org/documentation/faq/'>
<h1>Frequently Asked Questions</h1>
<h3 id="q-why-doesnt-irssi-display-colors-even-when-ircii-etc-displays-them">Q: Why doesnt irssi display colors even when ircii etc. displays them?</h3>
<p>A: They force ANSI colors even if terminal doesnt support them. By default, irssi uses colors only if terminfo/termcap so says. The correct way to fix this would be to change your TERM environment to a value where colors work, like xterm-color or color_xterm (eg. <code>TERM=xterm-color irssi</code>). If this doesnt help, then use the evil way of <code>/SET term_force_colors ON</code>.</p>
<p>A: They force ANSI colors even if terminal doesnt support them. By default, irssi uses colors only if terminfo/termcap so says. The correct way to fix this would be to change your TERM environment to a value where colors work, like xterm-256color or color_xterm (eg. <code>TERM=xterm-256color irssi</code>). If this doesnt help, then use the evil way of <code>/SET term_force_colors ON</code>.</p>
<h3 id="q-how-do-i-easily-write-text-to-channel-that-starts-with--character">Q: How do I easily write text to channel that starts with / character?</h3>
@ -55,7 +54,7 @@
<h3 id="q-will-there-be-detach-like-feature">Q: Will there be /DETACH-like feature?</h3>
<p>A: <a href="http://tmux.github.io/">tmux</a>, <a href="http://www.gnu.org/software/screen/screen.html">screen</a> and <a href="http://dtach.sf.net/">dtach</a> can be used to do it just fine.</p>
<p>A: <a href="https://tmux.github.io/">tmux</a>, <a href="https://www.gnu.org/software/screen/screen.html">screen</a> and <a href="https://sourceforge.net/projects/dtach/">dtach</a> can be used to do it just fine.</p>
<h3 id="q-how-do-i-run-scripts-automatically-at-startup">Q: How do I run scripts automatically at startup?</h3>
@ -71,7 +70,7 @@
<h3 id="q-how-can-i-have-whois-replies-to-active-window">Q: How can I have /WHOIS replies to active window?</h3>
<p>A: You can disable the status window, or do <code>/WINDOW LEVEL -CRAP</code> in it which would also make several other messages show up in active window. You can also use a <a href="http://dgl.cx/irssi/hack-whois-in-current-window.pl">script</a>.</p>
<p>A: You can disable the status window, or do <code>/WINDOW LEVEL -CRAP</code> in it which would also make several other messages show up in active window. You can also use a <a href="https://dgl.cx/irssi/hack-whois-in-current-window.pl">script</a>.</p>
<h3 id="q-how-do-i-add-the-active-network-to-the-statusbar">Q: How do I add the active network to the statusbar</h3>

View File

@ -4,8 +4,8 @@ Q: Why doesnt irssi display colors even when ircii etc. displays them?
A: They force ANSI colors even if terminal doesnt support them. By default,
irssi uses colors only if terminfo/termcap so says. The correct way to fix this
would be to change your TERM environment to a value where colors work, like
xterm-color or color_xterm (eg. TERM=xterm-color irssi). If this doesnt help,
then use the evil way of /SET term_force_colors ON.
xterm-256color or color_xterm (eg. TERM=xterm-256color irssi). If this doesnt
help, then use the evil way of /SET term_force_colors ON.
Q: How do I easily write text to channel that starts with / character?
A: / /text
@ -117,8 +117,8 @@ A: Check [6]here
References:
[1] https://github.com/irssi-import/xirssi
[2] http://tmux.github.io/
[3] http://www.gnu.org/software/screen/screen.html
[4] http://dtach.sf.net/
[5] http://dgl.cx/irssi/hack-whois-in-current-window.pl
[2] https://tmux.github.io/
[3] https://www.gnu.org/software/screen/screen.html
[4] https://sourceforge.net/projects/dtach/
[5] https://dgl.cx/irssi/hack-whois-in-current-window.pl
[6] https://irssi.org/assets/irssi.wav

View File

@ -1,12 +0,0 @@
# Makefile.am is autogenerated by autogen.sh from Makefile.am.gen
helpdir = $(datadir)/irssi/help
help_DATA = \
@HELPFILES@
EXTRA_DIST = \
Makefile.am.gen \
$(help_DATA)
SUBDIRS = in

View File

@ -1,5 +0,0 @@
# Makefile.am is autogenerated by autogen.sh from Makefile.am.gen
EXTRA_DIST = \
Makefile.am.gen \
@HELPFILES@

View File

@ -15,7 +15,7 @@
%9Examples:%9
/ADMIN
/ADMIN orwell.freenode.net
/ADMIN irc.libera.chat
/ADMIN mike
%9See also:%9 INFO

View File

@ -33,12 +33,12 @@
/CHANNEL
/CHANNEL LIST
/CHANNEL ADD -auto #irssi Freenode
/CHANNEL ADD -auto #irssi liberachat
/CHANNEL ADD -auto #basementcat Quakenet secret_lair
/CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout Freenode
/CHANNEL ADD -auto -bots '*!@*.irssi.org *!bot@irssi.org' -botcmd 'msg $0 op WzerTrzq' #hideout liberachat
/CHANNEL ADD -auto -bots 'Q!TheQBot@CServe.quakenet.org' -botcmd '^MSG Q op #irssi' #irssi Quakenet
/CHANNEL MODIFY -noauto #irssi Freenode
/CHANNEL REMOVE #hideout Freenode
/CHANNEL MODIFY -noauto #irssi liberachat
/CHANNEL REMOVE #hideout liberachat
%9Special Example:%9

View File

@ -34,9 +34,9 @@
%9Examples:%9
/CONNECT Freenode
/CONNECT -6 Freenode
/CONNECT -4 -! -host staff.irssi.org -network Freenode orwell.freenode.net
/CONNECT liberachat
/CONNECT -6 liberachat
/CONNECT -4 -! -host staff.irssi.org -network liberachat irc.libera.chat
/CONNECT irc.irssi.org 6667 WzerT8zq mike
%9See also:%9 DISCONNECT, RMRECONNS, SERVER

View File

@ -18,7 +18,7 @@
%9Examples:%9
/DISCONNECT Freenode I'm off for today, take care!
/DISCONNECT liberachat I'm off for today, take care!
/DISCONNECT * Vacation time :D
/DISCONNECT

View File

@ -11,11 +11,17 @@
Evaluates the given commands and executes them; you can use internal
variables and separate multiple commands by using the ';' character.
If the command contains a string with '$', '\' or ';' those characters
need to be escaped:
'$' -> '$$'
'\' -> '\\' (or even '\\\\', depending on where they are used)
';' -> '\;'
%9Examples:%9
/EVAL echo I am connected to ${S} on ${chatnet} as ${N}
/EVAL echo My user privileges are +${usermode}; echo Let's party!
to print '1;2$3\4': /EVAL echo 1\;2$$3\\4
%9References:%9

View File

@ -14,6 +14,8 @@
-network: Ignores only on a specific network.
-channels: Ignores only on specific channels.
-time: The timeout to automatically remove the ignore.
Accepts units specified in days, hours, minutes, seconds,
milliseconds, or no unit for seconds.
The mask, channels and levels to ignore; if no argument is provided, the
list of ignores will be displayed.
@ -25,6 +27,8 @@
The special level 'NO_ACT' can be used to ignore activity in the statusbar
without actually ignoring the message; this behavior is somewhat special
because it is allowed in addition to other ignores for the same target.
The special level 'HIDDEN' can be used to hide matching messages that can
later be revealed using /WINDOW HIDELEVEL -HIDDEN
%9Examples:%9
@ -35,12 +39,15 @@
/IGNORE #irssi ALL -PUBLIC -ACTIONS
/IGNORE -replies *!*@*.irssi.org ALL
/IGNORE -regexp -pattern (away|gone|back|playing|returned) * ACTIONS
/IGNORE -regexp -pattern (away|gone|back|playing|returned) #channel ACTIONS
/IGNORE *zzz* NICKS
/IGNORE *afk* NICKS
/IGNORE *away* NICKS
/IGNORE #irssi NO_ACT JOINS PARTS QUITS
/IGNORE mike NO_ACT -MSGS
/IGNORE -regexp -pattern
/IGNORE mike HIDDEN PUBLIC JOINS PARTS QUITS
/IGNORE -time 5days christmas PUBLICS
/IGNORE -time 300 mike PUBLICS
%9See also:%9 ACCEPT, SILENCE, UNIGNORE

View File

@ -15,7 +15,7 @@
%9Examples:%9
/INFO
/INFO orwell.freenode.net
/INFO irc.libera.chat
%9See also:%9 ADMIN

View File

@ -20,7 +20,7 @@
/JOIN #irssi
/JOIN #basementcat secret_lair
/JOIN -invite
/JOIN -freenode #github,#freenode,#irssi
/JOIN -liberachat #github,#libera,#irssi
%9See also:%9 KICK, PART

View File

@ -23,7 +23,7 @@
%9Examples:%9
/KNOCK #irssi
/KNOCK #freenode
/KNOCK #libera
/KNOCK #github
%9See also:%9 INVITE, JOIN

View File

@ -20,9 +20,10 @@
MODES A channel mode is modified.
MSGS Private messages.
NICKS A nickname changes to another nickname.
NOTICES Notices sent from a nickname.
NOTICES Private notices.
PARTS A nickname leaves a channel.
PUBLIC Public messages in a channel.
PUBNOTICES Public notices in a channel.
QUITS A nickname disconnects from IRC.
SNOTES Notices sent from a server.
TOPICS A channel topic is modified.
@ -32,6 +33,7 @@
HILIGHT The text is highlighted.
NEVER Never ignores or logs the message.
HIDDEN Hides the message when window HIDELEVEL includes HIDDEN.
NO_ACT Doesn't trigger any activity in the statusbar.
NOHILIGHT The text is not highlighted.

View File

@ -33,10 +33,10 @@
%9Examples:%9
/LOG OPEN -targets mike ~/irclogs/mike.log MSGS
/LOG OPEN -targets #irssi-freenode ~/irclogs/freenode/irssi-%%Y-%%m-%%d
/LOG CLOSE ~/irclogs/freenode/irssi-%%Y-%%m-%%d
/LOG STOP ~/irclogs/freenode/irssi-%%Y-%%m-%%d
/LOG START ~/irclogs/freenode/irssi-%%Y-%%m-%%d
/LOG OPEN -targets #irssi ~/irclogs/liberachat/irssi-%%Y-%%m-%%d
/LOG CLOSE ~/irclogs/liberachat/irssi-%%Y-%%m-%%d
/LOG STOP ~/irclogs/liberachat/irssi-%%Y-%%m-%%d
/LOG START ~/irclogs/liberachat/irssi-%%Y-%%m-%%d
/SET autolog ON

View File

@ -15,7 +15,7 @@
%9Examples:%9
/MOTD
/MOTD orwel.freenode.org
/MOTD irc.libera.chat
/MOTD bob
%9See also:%9 ADMIN, INFO, LINKS, MAP

View File

@ -21,7 +21,7 @@
%9Examples:%9
/NAMES -ops
/NAMES -voices #irssi,#freenode
/NAMES -voices #irssi,#libera
%9See also:%9 JOIN, PART, WHO, WHOIS

View File

@ -15,7 +15,7 @@
%9Examples:%9
/NCTCP #irssi VERSION King of the Jungle v1.0
/NCTCP bob,#freenode USERINFO I am bob :p
/NCTCP bob,#libera USERINFO I am bob :p
%9See also:%9 CTCP

View File

@ -19,6 +19,7 @@
-autosendcmd: Specifies the commands, separated by the ';' character,
and enclosed within two "'" characters, to perform after
connecting.
(Some characters need to be escaped - see /help eval)
-querychans: Specifies the maximum number of channels to put in one MODE
or WHO command when synchronizing.
-whois: Specifies the maximum number of nicknames in one WHOIS
@ -59,11 +60,11 @@
%9Examples:%9
/NETWORK ADD -usermode +giw EFnet
/NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org Freenode
/NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' Freenode
/NETWORK ADD -usermode +iw -nick mike -realname 'The one and only mike!' -host staff.irssi.org liberachat
/NETWORK ADD -autosendcmd '^MSG NickServ identify WzerT8zq' liberachat
/NETWORK ADD -autosendcmd '^MSG Q@CServe.quakenet.org AUTH mike WzerT8zq; WAIT 2000; OPER mike WzerT8zq; WAIT 2000; MODE mike +kXP' Quakenet
/NETWORK MODIFY -usermode +gi EFnet
/NETWORK REMOVE Freenode
/NETWORK REMOVE liberachat
%9See also:%9 CHANNEL, CONNECT, SERVER

View File

@ -51,7 +51,7 @@ GENKEY <name>
This process is done in a background worker and can take an arbitrary
amount of time. The completion is checked when another irssi event is
catched.
caught.
HELP
Print this help.

View File

@ -14,7 +14,7 @@
%9Examples:%9
/PART #irssi
/PART #freenode,#irssi
/PART #libera,#irssi
%9See also:%9 JOIN, KICK

View File

@ -17,8 +17,8 @@
%9Examples:%9
/QUERY mike
/QUERY -freenode bob
/QUERY -freenode -window sarah
/QUERY -liberachat bob
/QUERY -liberachat -window sarah
%9See also:%9 MSG, UNQUERY, WINDOW

View File

@ -22,7 +22,7 @@
%9Examples:%9
/RECODE
/RECODE ADD Freenode/mike utf-8
/RECODE ADD liberachat/mike utf-8
/RECODE ADD #korea euc-kr
/RECODE REMOVE #korea

View File

@ -15,7 +15,7 @@
%9Examples:%9
/RECONNECT
/RECONNECT Freenode
/RECONNECT liberachat
/RECONNECT EFnet BRB :)
%9See also:%9 CONNECT, DISCONNECT, NETWORK, RMRECONNS, SERVER

View File

@ -5,7 +5,7 @@
%9Parameters:%9
LIST: Displays the list of servers you are connected to.
LIST: Displays the list of servers you have configured.
CONNECT: Connects to the given server.
ADD: Adds a server to your configuration.
MODIFY: Modifies a server in your configuration.
@ -51,22 +51,24 @@
When using the ADD parameter on a server that already exists, the
configuration will be merged with each other.
When using the command without any of the given parameters, it will
connect to the specified server; the server in the active window will be
disconnected unless you prepend the server with the '+' character; the same
method is applicable to the CONNECT parameter.
When using the CONNECT parameter, it will connect to the specified
server; the server in the active window will be disconnected
unless you prepend the server with the '+' character.
Specify '-' as password to remove a server password
%9Examples:%9
/SERVER
/SERVER CONNECT chat.freenode.net
/SERVER CONNECT +chat.freenode.net
/SERVER ADD -network Freenode -noautosendcmd orwell.freenode.net
/SERVER ADD -! -auto -host staff.irssi.org -4 -network Freenode -noproxy orwell.freenode.net 6667
/SERVER MODIFY -network Freenode -noauto orwell.freenode.net
/SERVER REMOVE orwell.freenode.net 6667 Freenode
/SERVER CONNECT irc.libera.chat
/SERVER CONNECT +irc.libera.chat
/SERVER ADD -network liberachat -noautosendcmd irc.libera.chat
/SERVER ADD -! -auto -host staff.irssi.org -4 -network liberachat -noproxy irc.libera.chat 6667
/SERVER MODIFY -network liberachat -noauto irc.libera.chat
/SERVER MODIFY -network liberachat irc.libera.chat 6697 -
/SERVER REMOVE irc.libera.chat 6667 liberachat
/SERVER PURGE
/SERVER PURGE orwell.freenode.net
/SERVER PURGE irc.libera.chat
%9See also:%9 CHANNEL, CONNECT, DISCONNECT, NETWORK, RECONNECT, RMRECONNS

View File

@ -33,12 +33,12 @@
THEME: %|Applies or removes a per-window theme.
GROW: %|Increase the size of the active split window by the specified number of lines.
SHRINK: %|Decrease the size of the active split window by the specified number of lines.
SIZE: %|Set the current split window size to the specified numer of lines.
SIZE: %|Set the current split window size to the specified number of lines.
BALANCE: %|Balance the heights of all split windows.
HIDE: %|Hides the current split window, or the split window specified by number or item name.
SHOW: %|Show the window specified by number or item name as a new split windows. It is made sticky when autostick_split_windows is turned on.
UP: %|Set the split window left or above the current one active. At the top, wraps to the bottom.
DOWN: %|Set the split window right or below the current one active. At the bottom, wraps teft.
DOWN: %|Set the split window right or below the current one active. At the bottom, wraps left.
LEFT: %|Go to the previous window numerically that is part of the current sticky group (or not part of any sticky group).
RIGHT: %|Go to the next window numerically that is part of the current sticky group (or not part of any sticky group).
STICK: %|Make the currently active window sticky, or stick the window specified by number to the currently visible split window. Or turn off stickyness of the currently active window or the window specified by number.

View File

@ -349,7 +349,7 @@
after connecting to the network. This is useful for automatically
identifying yourself to NickServ, for example
/NETWORK ADD -autosendcmd "/^msg NickServ identify secret" freenode
/NETWORK ADD -autosendcmd "/^msg NickServ identify secret" liberachat
/NETWORK REMOVE <name>

View File

@ -205,6 +205,12 @@ Window::command(cmd)
Windowitem::command(cmd)
Send a command `cmd' (in current channel). The '/' char isn't needed.
version() - return client release date and time (format YYYYMMDD.hhmm)
parse_special(cmd, data="", flags=0)
Server::parse_special(cmd, data="", flags=0)
Windowitem::parse_special(cmd, data="", flags=0)
evaluate a string with special vars
*** Themes

View File

@ -24,7 +24,7 @@ You really should set some password for the proxy with:
Then you'll need to configure the ports/ircnets the proxy listens in,
something like:
/SET irssiproxy_ports ircnet=2777 efnet=2778 freenode=2779
/SET irssiproxy_ports IRCnet=2777 EFNet=2778 liberachat=2779
There we have 3 different irc networks answering in 3 ports. Note that
you'll have to make the correct /IRCNET ADD and /SERVER ADD commands to

View File

@ -151,6 +151,7 @@ irc.c:
"whois default event", SERVER_REC, char *args, char *sender_nick, char *sender_address
"server incoming", SERVER_REC, char *data
"server outgoing modify", SERVER_REC, GString *data, int crlf
(for perl parser..)
"redir "<cmd>, SERVER_REC, char *args, char *sender_nick, char *sender_address
@ -246,12 +247,12 @@ FE common
"gui print text", WINDOW_REC, int fg, int bg, int flags, char *text, TEXT_DEST_REC
(Can be used to determine when all "gui print text"s are sent (not required))
"gui print text finished", WINDOW_REC
"gui print text finished", WINDOW_REC, TEXT_DEST_REC
* Provides signals:
completion.c:
"complete word", GList * of char*, WINDOW_REC, char *word, char *linestart, int *want_space
"complete word", GList * of char *s, WINDOW_REC, char *word, char *linestart, int *want_space
fe-common-core.c:
"irssi init read settings"
@ -285,6 +286,8 @@ keyboard.c:
printtext.c:
"print text", TEXT_DEST_REC *dest, char *text, char *stripped
"print format", THEME_REC *theme, char *module, TEXT_DEST_REC *dest, formatnum_args
"print noformat", TEXT_DEST_REC *dest, char *text
themes.c:
"theme created", THEME_REC
@ -348,14 +351,18 @@ Text FE
gui-readline.c:
"gui key pressed", int key
"paste event", char *paste, char *arg
gui-printtext.c:
"beep"
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line
"gui print text after finished", WINDOW_REC, LINE_REC *line, LINE_REC *prev_line, TEXT_DEST_REC
textbuffer-view.c
"gui textbuffer line removed", TEXTBUFFER_VIEW_REC *view, LINE_REC *line, LINE_REC *prev_line
textbuffer-formats.c
"gui render line text", TEXT_DEST_REC, GString *str, LINE_INFO_META_REC
Perl
----

View File

@ -94,6 +94,8 @@ $A .. $Z is important.
$winname window name
$itemname like $T, but use item's visible_name which may be
different (eg. $T = !12345chan, $itemname = !chan)
$abiversion IRSSI_ABI_VERSION
https://github.com/irssi/irssi/wiki/irssi_abi_version
For example, assume you have the following alias:

View File

@ -1,9 +1,8 @@
<base href='https://irssi.org/documentation/startup/'>
<h1>Startup How-To</h1>
<h3 id="to-new-irssi-users-not-to-new-irc-users-">To new Irssi users (not to new IRC users ..)</h3>
<p>Copyright (c) 2000-2002 by Timo Sirainen, release under <a href="http://www.gnu.org/licenses/fdl.html">GNU FDL</a> 1.1 license.</p>
<p>Copyright (c) 2000-2002 by Timo Sirainen, release under <a href="https://www.gnu.org/licenses/fdl.html">GNU FDL</a> 1.1 license.</p>
<p>Index with some FAQ questions that are answered in the chapter:</p>
@ -69,7 +68,7 @@
<p>And to connect to one of those networks and join a channel:</p>
<div><div><pre><code>/CONNECT Freenode
<div><div><pre><code>/CONNECT liberachat
/JOIN #irssi
</code></pre></div></div>
@ -95,7 +94,7 @@
<p>If you have irssi 0.8.18 or higher and the irc network supports it, you can use SASL instead of nickserv, which is more reliable:</p>
<div><div><pre><code>/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode
<div><div><pre><code>/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN liberachat
</code></pre></div></div>
<p>These commands have many more options, see their help for details:</p>
@ -161,7 +160,7 @@ Ctrl-P, Ctrl-N - Jump to previous / next window
<h3 id="split-windows-and-window-items">Split windows and window items</h3>
<p><em>Note: <a href="http://quadpoint.org/articles/irssisplit/">this guide</a> might be a better introduction to window splits</em></p>
<p><em>Note: <a href="https://quadpoint.org/articles/irssisplit/">this guide</a> might be a better introduction to window splits</em></p>
<p>Irssi also supports split windows, theyve had some problems in past but I think they should work pretty well now :) Heres some commands related to them:</p>
@ -227,7 +226,7 @@ Ctrl-P, Ctrl-N - Jump to previous / next window
<p>And finally channels:</p>
<div><div><pre><code>/CHANNEL ADD -auto -bots *!*user@host -botcmd "/^msg $0 op pass" #irssi efnet
<div><div><pre><code>/CHANNEL ADD -auto -bots *!*bot@host.org -botcmd "/^msg $0 op pass" #irssi efnet
/CHANNEL ADD -auto #secret IRCnet password
</code></pre></div></div>
@ -396,7 +395,7 @@ Ctrl-X - set the next server in list active
<p><code>/HELP bind</code> tells pretty much everything there is to know about keyboard bindings. However, theres the problem of how to bind some non-standard keys. They might differ a bit with each terminal, so youll need to find out what exactly the keypress produces. Easiest way to check that would be to see what it prints in <code>cat</code>. Heres an example for pressing F1 key:</p>
<div><div><pre><code> [user@host] ~% cat
<div><div><pre><code> [cras@hurina] ~% cat
^[OP
</code></pre></div></div>
@ -516,12 +515,12 @@ Ctrl-X - set the next server in list active
<p><strong>SOCKS</strong></p>
<p>Irssi can be compiled with socks support (<code>\--with-socks</code> option to configure), which requires “dante” and routes all connections through the proxy specified in the system-wide /etc/socks.conf. This method is known to have issues in Mac OS X.</p>
<p>Using <a href="https://github.com/rofl0r/proxychains-ng">proxychains-ng</a> is recommended for using irssi with a socks proxy.</p>
<p>Irssi does not support socks proxy natively.</p>
<p>Note that <code>/SET proxy</code> settings dont have anything to do with socks.</p>
<p>Using <a href="https://github.com/rofl0r/proxychains-ng">proxychains-ng</a> is recommended over recompiling irssi.</p>
<p><strong>Others</strong></p>
<p>IRC bouncers usually work like IRC servers, and want a password. You can give it with:</p>

View File

@ -43,7 +43,7 @@ has a few predefined networks, to list them:
And to connect to one of those networks and join a channel:
/CONNECT Freenode
/CONNECT liberachat
/JOIN #irssi
To add more networks:
@ -67,7 +67,7 @@ wait for 2 seconds before joining channels:
If you have irssi 0.8.18 or higher and the irc network supports it, you can use
SASL instead of nickserv, which is more reliable:
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN Freenode
/NETWORK ADD -sasl_username yourname -sasl_password yourpassword -sasl_mechanism PLAIN liberachat
These commands have many more options, see their help for details:
@ -218,7 +218,7 @@ IRC network, other servers are automatically connected in same network if the
And finally channels:
/CHANNEL ADD -auto -bots *!*user@host -botcmd "/^msg $0 op pass" #irssi efnet
/CHANNEL ADD -auto -bots *!*bot@host.org -botcmd "/^msg $0 op pass" #irssi efnet
/CHANNEL ADD -auto #secret IRCnet password
-bots and -botcmd should be the only ones needing a bit of explaining. Theyre
@ -442,7 +442,7 @@ They might differ a bit with each terminal, so youll need to find out what
exactly the keypress produces. Easiest way to check that would be to see what
it prints in cat. Heres an example for pressing F1 key:
[user@host] ~% cat
[cras@hurina] ~% cat
^[OP
So in irssi you would use /BIND ^[OP /ECHO F1 pressed. If you use multiple
@ -578,15 +578,12 @@ Irssi proxy works fine with other IRC clients as well.
SOCKS
Irssi can be compiled with socks support (\--with-socks option to configure),
which requires “dante” and routes all connections through the proxy specified
in the system-wide /etc/socks.conf. This method is known to have issues in Mac
OS X.
Using [4]proxychains-ng is recommended for using irssi with a socks proxy.
Irssi does not support socks proxy natively.
Note that /SET proxy settings dont have anything to do with socks.
Using [4]proxychains-ng is recommended over recompiling irssi.
Others
IRC bouncers usually work like IRC servers, and want a password. You can give
@ -792,8 +789,8 @@ ADD -before act mail.
References:
[1] http://www.gnu.org/licenses/fdl.html
[1] https://www.gnu.org/licenses/fdl.html
[2] https://www.iterm2.com/
[3] http://quadpoint.org/articles/irssisplit/
[3] https://quadpoint.org/articles/irssisplit/
[4] https://github.com/rofl0r/proxychains-ng
[5] https://irssi.org/documentation/settings/

View File

@ -150,7 +150,7 @@ index ad79e0c..84d0c5c 100644
+++ b/src/fe-text/irssi.c
@@ -314,20 +314,16 @@ int main(int argc, char **argv)
textui_finish_init();
main_loop = g_main_new(TRUE);
main_loop = g_main_loop_new(NULL, TRUE);
+#ifdef __AFL_HAVE_MANUAL_CONTROL
+ __AFL_INIT();
@ -162,7 +162,7 @@ index ad79e0c..84d0c5c 100644
can call our dirty-checker after each iteration */
while (!quitting) {
- term_refresh_freeze();
g_main_iteration(TRUE);
g_main_context_iteration(NULL, TRUE);
- term_refresh_thaw();
-
- if (reload_config) {
@ -174,7 +174,7 @@ index ad79e0c..84d0c5c 100644
- dirty_check();
}
g_main_destroy(main_loop);
g_main_loop_unref(main_loop);
diff --git a/src/fe-text/term-terminfo.c b/src/fe-text/term-terminfo.c
index b2478c6..cebe260 100644
--- a/src/fe-text/term-terminfo.c

View File

@ -1,20 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
prog_libs="@PROG_LIBS@"
common_libs="@COMMON_LIBS@"
perl_link_libs="@PERL_LINK_LIBS@"
perl_fe_link_libs="@PERL_FE_LINK_LIBS@"
perl_link_flags="@PERL_LINK_FLAGS@"
chat_modules="@CHAT_MODULES@"
irc_modules="@irc_MODULES@"
Name: Irssi
Description: Irssi chat client
Version: @PACKAGE_VERSION@
Cflags: -I${includedir} @OPENSSL_CFLAGS@
Requires: glib-2.0

View File

@ -1,10 +1,10 @@
servers = (
{ address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
{ address = "ssl.efnet.org"; chatnet = "EFNet"; port = "9999"; use_tls = "yes"; },
{ address = "ssl.efnet.org"; chatnet = "EFNet"; port = "9999"; use_tls = "yes"; tls_verify = "no"; },
{ address = "irc.esper.net"; chatnet = "EsperNet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; },
{ address = "chat.freenode.net"; chatnet = "Freenode"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; },
{ address = "irc.libera.chat"; chatnet = "liberachat";port = "6697"; use_tls = "yes"; tls_verify = "yes"; },
{ address = "irc.gamesurge.net"; chatnet = "GameSurge"; port = "6667"; },
{ address = "eu.irc6.net"; chatnet = "IRCnet"; port = "6667"; use_tls = "yes"; },
{ address = "ssl.ircnet.ovh"; chatnet = "IRCnet"; port = "6697"; use_tls = "yes"; tls_verify = "yes"; },
{ address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; },
{ address = "irc.ircsource.net"; chatnet = "IRCSource"; port = "6667"; },
{ address = "irc.netfuze.net"; chatnet = "NetFuze"; port = "6667"; },
@ -34,7 +34,7 @@ chatnets = {
max_msgs = "4";
max_whois = "1";
};
Freenode = {
liberachat = {
type = "IRC";
max_kicks = "1";
max_msgs = "4";
@ -95,8 +95,8 @@ chatnets = {
channels = (
{ name = "#lobby"; chatnet = "EsperNet"; autojoin = "No"; },
{ name = "#freenode"; chatnet = "Freenode"; autojoin = "No"; },
{ name = "#irssi"; chatnet = "Freenode"; autojoin = "No"; },
{ name = "#libera"; chatnet = "liberachat";autojoin = "No"; },
{ name = "#irssi"; chatnet = "liberachat";autojoin = "No"; },
{ name = "#gamesurge"; chatnet = "GameSurge"; autojoin = "No"; },
{ name = "#irssi"; chatnet = "IRCNet"; autojoin = "No"; },
{ name = "#ircsource"; chatnet = "IRCSource"; autojoin = "No"; },
@ -107,7 +107,7 @@ channels = (
aliases = {
ATAG = "WINDOW SERVER";
ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
ADDALLCHANS = "SCRIPT EXEC foreach my \\$channel (Irssi::channels()) { Irssi::command(\"CHANNEL ADD -auto \\$channel->{visible_name} \\$channel->{server}->{tag} \\$channel->{key}\")\\;}";
B = "BAN";
BACK = "AWAY";
BANS = "BAN";
@ -115,6 +115,7 @@ aliases = {
C = "CLEAR";
CALC = "EXEC - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
CHAT = "DCC CHAT";
CS = "QUOTE CS";
DATE = "TIME";
DEHIGHLIGHT = "DEHILIGHT";
DESCRIBE = "ACTION";
@ -133,9 +134,12 @@ aliases = {
LAST = "LASTLOG";
LEAVE = "PART";
M = "MSG";
MS = "QUOTE MS";
MUB = "UNBAN *";
N = "NAMES";
NMSG = "^MSG";
NS = "QUOTE NS";
OS = "QUOTE OS";
P = "PART";
Q = "QUERY";
RESET = "SET -default";
@ -143,6 +147,7 @@ aliases = {
SAY = "MSG *";
SB = "SCROLLBACK";
SBAR = "STATUSBAR";
SHELP = "QUOTE HELP";
SIGNOFF = "QUIT";
SV = "MSG * Irssi $J ($V) - https://irssi.org";
T = "TOPIC";

View File

@ -1,208 +0,0 @@
# Configure paths for GLIB
# Owen Taylor 1997-2001
dnl AM_PATH_GLIB_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if gmodule, gobject or
dnl gthread is specified in MODULES, pass to pkg-config
dnl
AC_DEFUN([AM_PATH_GLIB_2_0],
[dnl
dnl Get the cflags and libraries from pkg-config
dnl
AC_ARG_ENABLE(glibtest, [ --disable-glibtest do not try to compile and run a test GLIB program],
, enable_glibtest=yes)
pkg_config_args=glib-2.0
for module in . $4
do
case "$module" in
gmodule)
pkg_config_args="$pkg_config_args gmodule-2.0"
;;
gmodule-no-export)
pkg_config_args="$pkg_config_args gmodule-no-export-2.0"
;;
gobject)
pkg_config_args="$pkg_config_args gobject-2.0"
;;
gthread)
pkg_config_args="$pkg_config_args gthread-2.0"
;;
esac
done
PKG_PROG_PKG_CONFIG([0.7])
no_glib=""
if test "x$PKG_CONFIG" = x ; then
no_glib=yes
PKG_CONFIG=no
fi
min_glib_version=ifelse([$1], ,2.0.0,$1)
AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
if test "x$PKG_CONFIG" != xno ; then
## don't try to run the test against uninstalled libtool libs
if $PKG_CONFIG --uninstalled $pkg_config_args; then
echo "Will use uninstalled version of GLib found in PKG_CONFIG_PATH"
enable_glibtest=no
fi
if $PKG_CONFIG --atleast-version $min_glib_version $pkg_config_args; then
:
else
no_glib=yes
fi
fi
if test x"$no_glib" = x ; then
GLIB_GENMARSHAL=`$PKG_CONFIG --variable=glib_genmarshal glib-2.0`
GOBJECT_QUERY=`$PKG_CONFIG --variable=gobject_query glib-2.0`
GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
GLIB_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_args`
GLIB_LIBS=`$PKG_CONFIG --libs $pkg_config_args`
glib_config_major_version=`$PKG_CONFIG --modversion glib-2.0 | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
glib_config_minor_version=`$PKG_CONFIG --modversion glib-2.0 | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
glib_config_micro_version=`$PKG_CONFIG --modversion glib-2.0 | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
if test "x$enable_glibtest" = "xyes" ; then
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS"
LIBS="$GLIB_LIBS $LIBS"
dnl
dnl Now check if the installed GLIB is sufficiently new. (Also sanity
dnl checks the results of pkg-config to some extent)
dnl
rm -f conf.glibtest
AC_TRY_RUN([
#include <glib.h>
#include <stdio.h>
#include <stdlib.h>
int
main ()
{
int major, minor, micro;
char *tmp_version;
system ("touch conf.glibtest");
/* HP/UX 9 (%@#!) writes to sscanf strings */
tmp_version = g_strdup("$min_glib_version");
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
printf("%s, bad version string\n", "$min_glib_version");
exit(1);
}
if ((glib_major_version != $glib_config_major_version) ||
(glib_minor_version != $glib_config_minor_version) ||
(glib_micro_version != $glib_config_micro_version))
{
printf("\n*** 'pkg-config --modversion glib-2.0' returned %d.%d.%d, but GLIB (%d.%d.%d)\n",
$glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
glib_major_version, glib_minor_version, glib_micro_version);
printf ("*** was found! If pkg-config was correct, then it is best\n");
printf ("*** to remove the old version of GLib. You may also be able to fix the error\n");
printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
printf("*** required on your system.\n");
printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n");
printf("*** to point to the correct configuration files\n");
}
else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
(glib_minor_version != GLIB_MINOR_VERSION) ||
(glib_micro_version != GLIB_MICRO_VERSION))
{
printf("*** GLIB header files (version %d.%d.%d) do not match\n",
GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
printf("*** library (version %d.%d.%d)\n",
glib_major_version, glib_minor_version, glib_micro_version);
}
else
{
if ((glib_major_version > major) ||
((glib_major_version == major) && (glib_minor_version > minor)) ||
((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
{
return 0;
}
else
{
printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
glib_major_version, glib_minor_version, glib_micro_version);
printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
major, minor, micro);
printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
printf("***\n");
printf("*** If you have already installed a sufficiently new version, this error\n");
printf("*** probably means that the wrong copy of the pkg-config shell script is\n");
printf("*** being found. The easiest way to fix this is to remove the old version\n");
printf("*** of GLIB, but you can also set the PKG_CONFIG environment to point to the\n");
printf("*** correct copy of pkg-config. (In this case, you will have to\n");
printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
printf("*** so that the correct libraries are found at run-time))\n");
}
}
return 1;
}
],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
if test "x$no_glib" = x ; then
AC_MSG_RESULT(yes (version $glib_config_major_version.$glib_config_minor_version.$glib_config_micro_version))
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
if test "$PKG_CONFIG" = "no" ; then
echo "*** A new enough version of pkg-config was not found."
echo "*** See http://www.freedesktop.org/software/pkgconfig/"
else
if test -f conf.glibtest ; then
:
else
echo "*** Could not run GLIB test program, checking why..."
ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS"
LIBS="$LIBS $GLIB_LIBS"
AC_TRY_LINK([
#include <glib.h>
#include <stdio.h>
], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding GLIB or finding the wrong"
echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
echo "***"
echo "*** If you have an old version installed, it is best to remove it, although"
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ],
[ echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occurred. This usually means GLIB is incorrectly installed."])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
GLIB_CFLAGS=""
GLIB_LIBS=""
GLIB_GENMARSHAL=""
GOBJECT_QUERY=""
GLIB_MKENUMS=""
ifelse([$3], , :, [$3])
fi
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
AC_SUBST(GLIB_GENMARSHAL)
AC_SUBST(GOBJECT_QUERY)
AC_SUBST(GLIB_MKENUMS)
rm -f conf.glibtest
])

View File

@ -1,28 +0,0 @@
dnl GLIB_TESTS
dnl
AC_DEFUN([GLIB_TESTS],
[
AC_ARG_ENABLE(installed-tests,
AS_HELP_STRING([--enable-installed-tests],
[Enable installation of some test cases]),
[case ${enableval} in
yes) ENABLE_INSTALLED_TESTS="1" ;;
no) ENABLE_INSTALLED_TESTS="" ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-installed-tests]) ;;
esac])
AM_CONDITIONAL([ENABLE_INSTALLED_TESTS], test "$ENABLE_INSTALLED_TESTS" = "1")
AC_ARG_ENABLE(always-build-tests,
AS_HELP_STRING([--enable-always-build-tests],
[Enable always building tests during 'make all']),
[case ${enableval} in
yes) ENABLE_ALWAYS_BUILD_TESTS="1" ;;
no) ENABLE_ALWAYS_BUILD_TESTS="" ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-always-build-tests]) ;;
esac])
AM_CONDITIONAL([ENABLE_ALWAYS_BUILD_TESTS], test "$ENABLE_ALWAYS_BUILD_TESTS" = "1")
if test "$ENABLE_INSTALLED_TESTS" = "1"; then
AC_SUBST(installed_test_metadir, [${datadir}/installed-tests/]AC_PACKAGE_NAME)
AC_SUBST(installed_testdir, [${libexecdir}/installed-tests/]AC_PACKAGE_NAME)
fi
])

View File

@ -1,143 +0,0 @@
# libgcrypt.m4 - Autoconf macros to detect libgcrypt
# Copyright (C) 2002, 2003, 2004, 2011, 2014 g10 Code GmbH
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Last-changed: 2014-10-02
dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
dnl with the API version to also check the API compatibility. Example:
dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed
dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using
dnl this features allows to prevent build against newer versions of libgcrypt
dnl with a changed API.
dnl
dnl If a prefix option is not used, the config script is first
dnl searched in $SYSROOT/bin and then along $PATH. If the used
dnl config script does not match the host specification the script
dnl is added to the gpg_config_script_warn variable.
dnl
AC_DEFUN([AM_PATH_LIBGCRYPT],
[ AC_REQUIRE([AC_CANONICAL_HOST])
AC_ARG_WITH(libgcrypt-prefix,
AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
[prefix where LIBGCRYPT is installed (optional)]),
libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
if test x"${LIBGCRYPT_CONFIG}" = x ; then
if test x"${libgcrypt_config_prefix}" != x ; then
LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config"
else
case "${SYSROOT}" in
/*)
if test -x "${SYSROOT}/bin/libgcrypt-config" ; then
LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config"
fi
;;
'')
;;
*)
AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.])
;;
esac
fi
fi
AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
tmp=ifelse([$1], ,1:1.2.0,$1)
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
else
req_libgcrypt_api=0
min_libgcrypt_version="$tmp"
fi
AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
ok=no
if test "$LIBGCRYPT_CONFIG" != "no" ; then
req_major=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
req_minor=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
req_micro=`echo $min_libgcrypt_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
major=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
minor=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
micro=`echo $libgcrypt_config_version | \
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
if test "$major" -gt "$req_major"; then
ok=yes
else
if test "$major" -eq "$req_major"; then
if test "$minor" -gt "$req_minor"; then
ok=yes
else
if test "$minor" -eq "$req_minor"; then
if test "$micro" -ge "$req_micro"; then
ok=yes
fi
fi
fi
fi
fi
fi
if test $ok = yes; then
AC_MSG_RESULT([yes ($libgcrypt_config_version)])
else
AC_MSG_RESULT(no)
fi
if test $ok = yes; then
# If we have a recent libgcrypt, we should also check that the
# API is compatible
if test "$req_libgcrypt_api" -gt 0 ; then
tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
if test "$tmp" -gt 0 ; then
AC_MSG_CHECKING([LIBGCRYPT API version])
if test "$req_libgcrypt_api" -eq "$tmp" ; then
AC_MSG_RESULT([okay])
else
ok=no
AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp])
fi
fi
fi
fi
if test $ok = yes; then
LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
ifelse([$2], , :, [$2])
libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
if test x"$libgcrypt_config_host" != xnone ; then
if test x"$libgcrypt_config_host" != x"$host" ; then
AC_MSG_WARN([[
***
*** The config script $LIBGCRYPT_CONFIG was
*** built for $libgcrypt_config_host and thus may not match the
*** used host $host.
*** You may want to use the configure option --with-libgcrypt-prefix
*** to specify a matching config script or use \$SYSROOT.
***]])
gpg_config_script_warn="$gpg_config_script_warn libgcrypt"
fi
fi
else
LIBGCRYPT_CFLAGS=""
LIBGCRYPT_LIBS=""
ifelse([$3], , :, [$3])
fi
AC_SUBST(LIBGCRYPT_CFLAGS)
AC_SUBST(LIBGCRYPT_LIBS)
])

View File

@ -1,134 +0,0 @@
dnl
dnl Off-the-Record Messaging library
dnl Copyright (C) 2004-2007 Ian Goldberg, Chris Alexander, Nikita Borisov
dnl <otr@cypherpunks.ca>
dnl
dnl This library is free software; you can redistribute it and/or
dnl modify it under the terms of version 2.1 of the GNU Lesser General
dnl Public License as published by the Free Software Foundation.
dnl
dnl This library is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl Lesser General Public License for more details.
dnl
dnl You should have received a copy of the GNU Lesser General Public
dnl License along with this library; if not, write to the Free Software
dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
dnl
dnl AM_PATH_LIBOTR([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
dnl Test for libotr, and define LIBOTR_CFLAGS and LIBOTR_LIBS as appropriate.
dnl enables arguments --with-libotr-prefix=
dnl --with-libotr-inc-prefix=
dnl
dnl You must already have found libgcrypt with AM_PATH_LIBGCRYPT
dnl
dnl Adapted from alsa.m4, originally by
dnl Richard Boulton <richard-alsa@tartarus.org>
dnl Christopher Lansdown <lansdoct@cs.alfred.edu>
dnl Jaroslav Kysela <perex@suse.cz>
AC_DEFUN([AM_PATH_LIBOTR],
[dnl Save the original CFLAGS, LDFLAGS, and LIBS
libotr_save_CFLAGS="$CFLAGS"
libotr_save_LDFLAGS="$LDFLAGS"
libotr_save_LIBS="$LIBS"
libotr_found=yes
dnl
dnl Get the cflags and libraries for libotr
dnl
AC_ARG_WITH(libotr-prefix,
[ --with-libotr-prefix=PFX Prefix where libotr is installed(optional)],
[libotr_prefix="$withval"], [libotr_prefix=""])
AC_ARG_WITH(libotr-inc-prefix,
[ --with-libotr-inc-prefix=PFX Prefix where libotr includes are (optional)],
[libotr_inc_prefix="$withval"], [libotr_inc_prefix=""])
dnl Add any special include directories
AC_MSG_CHECKING(for libotr CFLAGS)
if test "$libotr_inc_prefix" != "" ; then
LIBOTR_CFLAGS="$LIBOTR_CFLAGS -I$libotr_inc_prefix"
CFLAGS="$CFLAGS $LIBOTR_CFLAGS"
fi
AC_MSG_RESULT($LIBOTR_CFLAGS)
dnl add any special lib dirs
AC_MSG_CHECKING(for libotr LIBS)
if test "$libotr_prefix" != "" ; then
LIBOTR_LIBS="$LIBOTR_LIBS -L$libotr_prefix"
LDFLAGS="$LDFLAGS $LIBOTR_LIBS"
fi
dnl add the libotr library
LIBOTR_LIBS="$LIBOTR_LIBS -lotr"
LIBS="$LIBOTR_LIBS $LIBS"
AC_MSG_RESULT($LIBOTR_LIBS)
dnl Check for a working version of libotr that is of the right version.
min_libotr_version=ifelse([$1], ,3.0.0,$1)
no_libotr=""
libotr_min_major_version=`echo $min_libotr_version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
libotr_min_minor_version=`echo $min_libotr_version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
libotr_min_sub_version=`echo $min_libotr_version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
AC_MSG_CHECKING(for libotr headers version $libotr_min_major_version.x >= $min_libotr_version)
AC_LANG_SAVE
AC_LANG_C
AC_TRY_COMPILE([
#include <stdlib.h>
#include <libotr/version.h>
], [
# if(OTRL_VERSION_MAJOR != $libotr_min_major_version)
# error not present
# else
# if(OTRL_VERSION_MINOR > $libotr_min_minor_version)
exit(0);
# else
# if(OTRL_VERSION_MINOR < $libotr_min_minor_version)
# error not present
# endif
# if(OTRL_VERSION_SUB < $libotr_min_sub_version)
# error not present
# endif
# endif
# endif
exit(0);
],
[AC_MSG_RESULT(found.)],
[AC_MSG_RESULT(not present.)
ifelse([$3], , [AC_MSG_ERROR(Sufficiently new version of libotr not found.)])
libotr_found=no]
)
AC_LANG_RESTORE
dnl Now that we know that we have the right version, let's see if we have the library and not just the headers.
AC_CHECK_LIB([otr], [otrl_message_receiving],,
[ifelse([$3], , [AC_MSG_ERROR(No linkable libotr was found.)])
libotr_found=no],
$LIBGCRYPT_LIBS
)
LDFLAGS="$libotr_save_LDFLAGS"
LIBS="$libotr_save_LIBS"
if test "x$libotr_found" = "xyes" ; then
ifelse([$2], , :, [$2])
else
LIBOTR_CFLAGS=""
LIBOTR_LIBS=""
ifelse([$3], , :, [$3])
fi
dnl That should be it. Now just export our symbols:
AC_SUBST(LIBOTR_CFLAGS)
AC_SUBST(LIBOTR_LIBS)
])

275
m4/pkg.m4
View File

@ -1,275 +0,0 @@
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 12 (pkg-config-0.29.2)
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
dnl General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
dnl 02111-1307, USA.
dnl
dnl As a special exception to the GNU General Public License, if you
dnl distribute this file as part of a program that contains a
dnl configuration script generated by Autoconf, you may include it under
dnl the same distribution terms that you use for the rest of that
dnl program.
dnl PKG_PREREQ(MIN-VERSION)
dnl -----------------------
dnl Since: 0.29
dnl
dnl Verify that the version of the pkg-config macros are at least
dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
dnl installed version of pkg-config, this checks the developer's version
dnl of pkg.m4 when generating configure.
dnl
dnl To ensure that this macro is defined, also add:
dnl m4_ifndef([PKG_PREREQ],
dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
dnl
dnl See the "Since" comment for each macro you use to see what version
dnl of the macros you require.
m4_defun([PKG_PREREQ],
[m4_define([PKG_MACROS_VERSION], [0.29.2])
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
])dnl PKG_PREREQ
dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
dnl ----------------------------------
dnl Since: 0.16
dnl
dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
dnl first found in the path. Checks that the version of pkg-config found
dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
dnl used since that's the first version where most current features of
dnl pkg-config existed.
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])dnl PKG_PROG_PKG_CONFIG
dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------------------------------
dnl Since: 0.18
dnl
dnl Check to see whether a particular set of modules exists. Similar to
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
dnl
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
dnl only at the first occurence in configure.ac, so if the first place
dnl it's called might be skipped (such as if it is within an "if", you
dnl have to call PKG_CHECK_EXISTS manually
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_default([$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
dnl ---------------------------------------------
dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
dnl pkg_failed based on the result.
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
pkg_cv_[]$1="$$1"
elif test -n "$PKG_CONFIG"; then
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes ],
[pkg_failed=yes])
else
pkg_failed=untried
fi[]dnl
])dnl _PKG_CONFIG
dnl _PKG_SHORT_ERRORS_SUPPORTED
dnl ---------------------------
dnl Internal check to see if pkg-config supports short errors.
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])dnl _PKG_SHORT_ERRORS_SUPPORTED
dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl [ACTION-IF-NOT-FOUND])
dnl --------------------------------------------------------------
dnl Since: 0.4.0
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $2])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT])[]dnl
])
elif test $pkg_failed = untried; then
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
$3
fi[]dnl
])dnl PKG_CHECK_MODULES
dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
dnl [ACTION-IF-NOT-FOUND])
dnl ---------------------------------------------------------------------
dnl Since: 0.29
dnl
dnl Checks for existence of MODULES and gathers its build flags with
dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
dnl and VARIABLE-PREFIX_LIBS from --libs.
dnl
dnl Note that if there is a possibility the first call to
dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
dnl configure.ac.
AC_DEFUN([PKG_CHECK_MODULES_STATIC],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
_save_PKG_CONFIG=$PKG_CONFIG
PKG_CONFIG="$PKG_CONFIG --static"
PKG_CHECK_MODULES($@)
PKG_CONFIG=$_save_PKG_CONFIG[]dnl
])dnl PKG_CHECK_MODULES_STATIC
dnl PKG_INSTALLDIR([DIRECTORY])
dnl -------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable pkgconfigdir as the location where a module
dnl should install pkg-config .pc files. By default the directory is
dnl $libdir/pkgconfig, but the default can be changed by passing
dnl DIRECTORY. The user can override through the --with-pkgconfigdir
dnl parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([pkgconfigdir],
[AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
[with_pkgconfigdir=]pkg_default)
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_INSTALLDIR
dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
dnl --------------------------------
dnl Since: 0.27
dnl
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
dnl module should install arch-independent pkg-config .pc files. By
dnl default the directory is $datadir/pkgconfig, but the default can be
dnl changed by passing DIRECTORY. The user can override through the
dnl --with-noarch-pkgconfigdir parameter.
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([noarch-pkgconfigdir],
[AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
[with_noarch_pkgconfigdir=]pkg_default)
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
])dnl PKG_NOARCH_INSTALLDIR
dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
dnl -------------------------------------------
dnl Since: 0.28
dnl
dnl Retrieves the value of the pkg-config variable for the given module.
AC_DEFUN([PKG_CHECK_VAR],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
_PKG_CONFIG([$1], [variable="][$3]["], [$2])
AS_VAR_COPY([$1], [pkg_cv_][$1])
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])dnl PKG_CHECK_VAR

View File

@ -1,6 +1,6 @@
project('irssi', 'c',
version : '1.3-head',
meson_version : '>=0.49',
version : '1.4-head-an',
meson_version : '>=0.53',
default_options : ['warning_level=1'])
############################
@ -11,6 +11,12 @@ cc = meson.get_compiler('c')
rootinc = include_directories('.')
dep = []
textui_dep = []
need_dl_cross_link = false
# The Android environment requires that all modules are linked to each other.
# See https://github.com/android/ndk/issues/201
if host_machine.system() == 'android'
need_dl_cross_link = true
endif
includedir = get_option('includedir')
incdir = 'irssi'
@ -26,8 +32,6 @@ want_fuzzer = get_option('with-fuzzer') == 'yes'
fuzzer_lib = get_option('with-fuzzer-lib')
fuzzer_link_language = get_option('fuzzer-link-language')
want_proxy = get_option('with-proxy') == 'yes'
want_truecolor = get_option('enable-true-color') == 'yes'
want_gregex = get_option('disable-gregex') != 'yes'
require_capsicum = get_option('with-capsicum') == 'yes'
want_capsicum = get_option('with-capsicum') != 'no'
@ -47,12 +51,19 @@ require_glib_internal = get_option('install-glib') == 'force'
want_static_dependency = get_option('static-dependency') == 'yes'
package_version = get_option('PACKAGE_VERSION') != '' ? get_option('PACKAGE_VERSION') : meson.project_version()
fs = import('fs')
if fs.exists('config.status') or fs.exists('irssi-version.h') or fs.exists('default-config.h') or fs.exists('default-theme.h') or fs.exists('src/perl/irssi-core.pl.h') or fs.exists('src/perl/perl-signals-list.h') or fs.exists('irssi-config.h')
error('this tree has been configured with autotools, cannot proceed')
endif
chat_modules = ['irc']
run_command('mkdir', meson.current_build_dir() / incdir)
run_command('ln', '-s', meson.current_source_dir() / 'src', meson.current_build_dir() / incdir)
run_command('ln', '-s', meson.current_build_dir() / 'irssi-config.h', meson.current_build_dir() / incdir)
run_command('ln', '-s', meson.current_build_dir() / 'irssi-version.h', meson.current_build_dir() / incdir)
run_command('mkdir', meson.current_build_dir() / incdir, check : false)
run_command('ln', '-s', meson.current_source_dir() / 'src', meson.current_build_dir() / incdir, check : false)
run_command('ln', '-s', meson.current_build_dir() / 'irssi-config.h', meson.current_build_dir() / incdir, check : false)
run_command('ln', '-s', meson.current_build_dir() / 'irssi-version.h', meson.current_build_dir() / incdir, check : false)
def_moduledir = '-D' + 'MODULEDIR' + '="' + (get_option('prefix') / moduledir) + '"'
def_sysconfdir = '-D' + 'SYSCONFDIR' + '="' + (get_option('prefix') / get_option('sysconfdir')) + '"'
@ -66,8 +77,13 @@ def_suppress_printf_fallback = '-D' + 'SUPPRESS_PRINTF_FALLBACK'
# Help files #
##############
perl = find_program('perl')
run_command(perl, files('utils/syntax.pl'))
build_perl = find_program('perl', native : true)
if meson.is_cross_build()
cross_perl = find_program('perl')
else
cross_perl = build_perl
endif
run_command(build_perl, files('utils/syntax.pl'), check : true)
###################
# irssi-version.h #
@ -147,6 +163,7 @@ if not socket_found
error('socket not found')
endif
built_src = []
glib_internal = false
message('*** If you don\'t have GLib, you can run meson ... -Dinstall-glib=yes')
message('*** to download and build it automatically')
@ -154,7 +171,7 @@ message('*** Or alternatively install your distribution\'s package')
message('*** On Debian: sudo apt-get install libglib2.0-dev')
message('*** On Redhat: dnf install glib2-devel')
if not require_glib_internal
glib_dep = dependency('glib-2.0', version : '>=2.28', required : not want_glib_internal, static : want_static_dependency)
glib_dep = dependency('glib-2.0', version : '>=2.32', required : not want_glib_internal, static : want_static_dependency)
else
glib_dep = dependency('', required : false)
endif
@ -162,15 +179,64 @@ if not glib_dep.found()
glib_internal = true
meson_cmd = find_program('meson')
ninja = find_program('ninja')
glib_internal_download_t = custom_target('glib-internal-download',
command : [ meson_cmd, 'subprojects', 'download', 'glib', '--sourcedir', meson.current_source_dir() ],
console : true,
output : ['glib-internal-download'],
)
glib_internal_dependencies = [
dependency('threads'),
]
glib_internal_configure_args = []
glib_internal_usr_local = false
if not cc.has_function('iconv_open')
prov_lib = cc.find_library('iconv', required : false)
if not prov_lib.found()
prov_lib = cc.find_library('iconv', dirs : '/usr/local/lib')
glib_internal_usr_local = true
endif
if cc.has_function('libiconv_open', dependencies : prov_lib)
glib_internal_configure_args += '-Diconv=gnu'
else
glib_internal_configure_args += '-Diconv=native'
endif
glib_internal_dependencies += prov_lib
endif
if not cc.has_function('ngettext')
prov_lib = cc.find_library('intl', required : false)
if not prov_lib.found()
prov_lib = cc.find_library('intl', dirs : '/usr/local/lib')
glib_internal_usr_local = true
endif
glib_internal_dependencies += prov_lib
endif
if glib_internal_usr_local
glib_internal_configure_args += ['-Dc_args=-I/usr/local/include', '-Dc_link_args=-L/usr/local/lib']
endif
if not cc.has_function('getxattr') or not cc.has_header('sys/xattr.h')
if cc.has_header_symbol('attr/xattr.h', 'getxattr')
prov_lib = cc.find_library('xattr', required : false)
else
prov_lib = dependency('', required : false)
endif
if prov_lib.found()
glib_internal_dependencies += prov_lib
else
glib_internal_configure_args += '-Dxattr=false'
endif
endif
glib_internal_configure_t = custom_target('glib-internal-configure',
command : [ meson_cmd, 'setup', '--prefix=/irssi-glib-internal',
'--buildtype=' + get_option('buildtype'),
'-Dlibmount=false', '-Dselinux=false', '-Ddefault_library=static', '-Dinternal_pcre=true',
glib_internal_configure_args,
(meson.current_build_dir() / 'build-subprojects' / 'glib'),
(meson.current_source_dir() / 'subprojects' / glib_internal_version) ],
console : true,
@ -184,9 +250,7 @@ if not glib_dep.found()
output : ['glib-internal-build'],
depends : glib_internal_configure_t,)
glib_dep = declare_dependency(
dependencies : [
dependency('threads'),
],
dependencies : glib_internal_dependencies,
sources : glib_internal_build_t,
compile_args : [
'-I' + (meson.current_source_dir() / 'subprojects' / glib_internal_version / 'glib'),
@ -195,6 +259,7 @@ if not glib_dep.found()
],
link_args : [ meson.current_build_dir() / 'build-subprojects' / 'glib' / 'glib' / 'libglib-2.0.a' ],
)
built_src += glib_internal_build_t
libdl_dep = []
prov_lib = cc.find_library('dl', required : false)
if prov_lib.found() and cc.has_function('dlopen', dependencies : prov_lib)
@ -213,7 +278,12 @@ endif
dep += glib_dep
dep += gmodule_dep
if glib_internal and want_static_dependency and want_fuzzer
openssl_proj = subproject('openssl', default_options : ['default_library=static', 'asm=disabled'])
openssl_dep = openssl_proj.get_variable('openssl_dep')
else
openssl_dep = dependency('openssl', static : want_static_dependency)
endif
dep += openssl_dep
############
@ -264,8 +334,12 @@ if want_perl
perl_rpath = ''
#### ccopts ####
res = run_command(perl, '-MExtUtils::Embed', '-e', 'ccopts')
foreach fl : res.stdout().strip().split()
perl_ccopts = meson.get_cross_property('perl_ccopts', false)
if perl_ccopts == false
res = run_command(cross_perl, '-MExtUtils::Embed', '-e', 'ccopts', check : true)
perl_ccopts = res.stdout().strip().split()
endif
foreach fl : perl_ccopts
if fl.startswith('-D') or fl.startswith('-U') or fl.startswith('-I') or fl.startswith('-i') or fl.startswith('-f') or fl.startswith('-m')
perl_cflags += fl
endif
@ -274,9 +348,13 @@ if want_perl
perl_cflags += cc.get_supported_arguments('-fPIC')
#### ldopts ####
res = run_command(perl, '-MExtUtils::Embed', '-e', 'ldopts')
perl_ldopts = meson.get_cross_property('perl_ldopts', false)
if perl_ldopts == false
res = run_command(cross_perl, '-MExtUtils::Embed', '-e', 'ldopts', check : true)
perl_ldopts = res.stdout().strip().split()
endif
skip_libs = ['-ldb', '-ldbm', '-lndbm', '-lgdbm', '-lc', '-lposix', '-rdynamic']
foreach fl : res.stdout().strip().split()
foreach fl : perl_ldopts
if not fl.startswith('-A') and not skip_libs.contains(fl)
if fl.startswith('-Wl,-rpath,')
perl_rpath = fl.split(',')[2]
@ -287,11 +365,15 @@ if want_perl
endif
endforeach
perl_version = meson.get_cross_property('perl_version', false)
if perl_version == false
perl_version = run_command(cross_perl, '-V::version:', check : true).stdout().split('\'')[1]
endif
perl_dep = declare_dependency(compile_args : perl_cflags, link_args : perl_ldflags,
version : run_command(perl, '-V::version:').stdout().split('\'')[1])
version : perl_version)
####
if not cc.run('''
if not cc.links('''
#include <EXTERN.h>
#include <perl.h>
int main()
@ -300,15 +382,18 @@ int main()
return 0;
}
''', args : perl_cflags + perl_ldflags + perl_rpath_flags,
name : 'working Perl support').compiled()
name : 'working Perl support')
if require_perl
error('error linking with perl libraries')
else
warning('error linking with perl libraries')
endif
else
xsubpp_file_c = run_command(perl, '-MExtUtils::ParseXS', '-Eprint $INC{"ExtUtils/ParseXS.pm"} =~ s{ParseXS\\.pm$}{xsubpp}r').stdout()
xsubpp = generator(perl,
xsubpp_file_c = meson.get_cross_property('perl_xsubpp', false)
if xsubpp_file_c == false
xsubpp_file_c = run_command(build_perl, '-MExtUtils::ParseXS', '-Eprint $INC{"ExtUtils/ParseXS.pm"} =~ s{ParseXS\\.pm$}{xsubpp}r', check : true).stdout()
endif
xsubpp = generator(build_perl,
output : '@BASENAME@.c',
capture : true,
arguments : [ xsubpp_file_c, '@EXTRA_ARGS@', '@INPUT@' ],
@ -316,7 +401,7 @@ int main()
xsubpp_file = files(xsubpp_file_c)
if with_perl_lib == 'module'
perl_install_base = run_command(perl, '-MText::ParseWords=shellwords', '-e', 'grep { s/^INSTALL_BASE=// && print && exit } shellwords $ENV{PERL_MM_OPT}').stdout()
perl_install_base = run_command(build_perl, '-MText::ParseWords=shellwords', '-e', 'grep { s/^INSTALL_BASE=// && print && exit } shellwords $ENV{PERL_MM_OPT}', check : true).stdout()
if perl_install_base == ''
with_perl_lib = ''
endif
@ -328,13 +413,21 @@ int main()
with_perl_lib = 'vendor'
endif
endif
perlmoddir = ''
if with_perl_lib in ['site', 'vendor', 'module']
set_perl_use_lib = false
perl_library_dir = with_perl_lib + ' default'
if with_perl_lib in ['site', 'vendor']
perlmoddir = run_command(perl, '-V::install' + with_perl_lib + 'arch:').stdout().split('\'')[1]
perlmoddir = meson.get_cross_property('perl_install' + with_perl_lib + 'arch', false)
if perlmoddir == false
perlmoddir = run_command(cross_perl, '-V::install' + with_perl_lib + 'arch:', check : true).stdout().split('\'')[1]
endif
elif with_perl_lib == 'module'
perlmoddir = perl_install_base / 'lib' / 'perl5' / run_command(perl, '-V::archname:').stdout().split('\'')[1]
perl_archname = meson.get_cross_property('perl_archname', false)
if perl_archname == false
perl_archname = run_command(cross_perl, '-V::archname:', check : true).stdout().split('\'')[1]
endif
perlmoddir = perl_install_base / 'lib' / 'perl5' / perl_archname
endif
elif with_perl_lib == ''
set_perl_use_lib = true
@ -344,13 +437,19 @@ int main()
set_perl_use_lib = true
perl_library_dir = 'custom'
perlmoddir = with_perl_lib
else
endif
if perlmoddir == ''
error('Unrecognised with-perl-lib value: ' + with_perl_lib)
endif
perl_use_lib = get_option('prefix') / perlmoddir
if set_perl_use_lib
set_perl_use_lib = run_command(perl, '-e', 'exit ! grep $_ eq $ARGV[0], grep /^\\//, @INC', perl_use_lib).returncode() != 0
perl_inc = meson.get_cross_property('perl_inc', false)
if perl_inc == false
set_perl_use_lib = run_command(cross_perl, '-e', 'exit ! grep $_ eq $ARGV[0], grep /^\\//, @INC', perl_use_lib, check : false).returncode() != 0
else
set_perl_use_lib = not perl_inc.contains(perl_use_lib)
endif
if not set_perl_use_lib
perl_library_dir += ' - other path in @INC'
else
@ -390,7 +489,7 @@ have_capsicum = false
if want_capsicum
if cc.has_function('cap_enter', dependencies : cc.find_library('c'))
libnv = cc.find_library('nv', required : require_capsicum)
nvlist_create_found = libnv.found() and cc.has_function('nvlist_create_found', dependencies : libnv)
nvlist_create_found = libnv.found() and cc.has_function('nvlist_create', dependencies : libnv)
if nvlist_create_found
dep += libnv
have_capsicum = true
@ -406,6 +505,16 @@ if want_capsicum
endif
endif
# dependency helper sets
dep_cflagsonly = []
foreach d : dep
dep_cflagsonly += d.partial_dependency(includes : true, compile_args : true)
endforeach
dl_cross_dep = []
if need_dl_cross_link
dl_cross_dep = dep
endif
##################
# irssi-config.h #
##################
@ -414,10 +523,10 @@ conf = configuration_data()
conf.set('HAVE_CAPSICUM', have_capsicum, description : 'Build with Capsicum support')
conf.set('HAVE_GMODULE', true)
conf.set('HAVE_SOCKS', false, description : 'Build with socks support')
conf.set('TERM_TRUECOLOR', want_truecolor, description : 'true color support in terminal')
conf.set('USE_GREGEX', want_gregex, description : 'use GRegex for regular expressions')
conf.set('TERM_TRUECOLOR', true)
conf.set('USE_GREGEX', true)
conf.set10('_DARWIN_USE_64_BIT_INODE', true, description : 'Enable large inode numbers on Mac OS X 10.5.')
conf.set_quoted('FHS_PREFIX', get_option('fhs-prefix'))
headers = [
'sys/ioctl.h',
@ -425,6 +534,7 @@ headers = [
'sys/time.h',
'sys/utsname.h',
'dirent.h',
'term.h',
'unistd.h',
]
foreach h : headers
@ -434,7 +544,7 @@ foreach h : headers
endforeach
conf.set('HAVE_LIBUTF8PROC', have_libutf8proc)
conf.set_quoted('PACKAGE_VERSION', meson.project_version())
conf.set_quoted('PACKAGE_VERSION', package_version)
conf.set_quoted('PACKAGE_TARNAME', meson.project_name())
configure_file(output : 'irssi-config.h',
@ -446,7 +556,6 @@ configure_file(output : 'irssi-config.h',
##########
#### warnings ####
add_project_arguments('-Wall', language : 'c')
add_project_arguments(cc.get_supported_arguments('-Werror=declaration-after-statement'), language : 'c')
#### personality ####
@ -476,7 +585,11 @@ pc_requires = []
if not glib_internal
pc_requires += glib_dep
endif
pc.generate(filebase : 'irssi-1', name : 'Irssi', description : 'Irssi chat client', requires : pc_requires)
pc.generate(filebase : 'irssi-1',
name : 'Irssi',
description : 'Irssi chat client',
version : package_version,
requires : pc_requires)
###########
# irssi.1 #
@ -516,8 +629,6 @@ if have_perl
endif
message('Install prefix ................... : ' + get_option('prefix'))
message('')
message('Building with true color support.. : ' + want_truecolor.to_string('yes', 'no'))
message('Building with GRegex ............. : ' + want_gregex.to_string('yes', 'no'))
message('Building with Capsicum ........... : ' + have_capsicum.to_string('yes', 'no'))
message('Building with utf8proc ........... : ' + have_libutf8proc.to_string('yes', 'no'))
message('Building with OTR support ........ : ' + have_otr.to_string('yes', 'no'))

View File

@ -7,10 +7,10 @@ option('with-proxy', type : 'combo', description : 'Build irssi-proxy',
option('with-perl-lib', type : 'string', description : 'Specify where to install the Perl libraries for Irssi')
option('with-perl', type : 'combo', description : 'Build with Perl support', choices : ['auto', 'yes', 'no'])
option('with-otr', type : 'combo', description : 'Build with OTR support', choices : ['auto', 'yes', 'no'])
option('enable-true-color', type : 'combo', description : 'Build with true color support in terminal', choices : ['no', 'yes'])
option('disable-gregex', type : 'combo', description : 'Build without GRegex (fall back to regex.h)', choices : ['no', 'yes'])
option('disable-utf8proc', type : 'combo', description : 'Build without Julia\'s utf8proc', choices : ['auto', 'yes', 'no'])
option('with-capsicum', type : 'combo', description : 'Build with Capsicum support', choices : ['auto', 'yes', 'no'])
option('static-dependency', type : 'combo', description : 'Request static dependencies', choices : ['no', 'yes'])
option('install-glib', type : 'combo', description : 'Download and install GLib for you', choices : ['no', 'yes', 'force'])
option('docdir', type : 'string', description : 'Documentation directory')
option('fhs-prefix', type : 'string', description : 'System prefix for Termux')
option('PACKAGE_VERSION', type : 'string', description : 'Override PACKAGE_VERSION in tarballs')

View File

@ -1,17 +0,0 @@
SUBDIRS = examples
scriptdir = $(datadir)/irssi/scripts
script_DATA = \
autoop.pl \
autorejoin.pl \
buf.pl \
dns.pl \
kills.pl \
mail.pl \
mlock.pl \
quitmsg.pl \
scriptassist.pl \
usercount.pl
EXTRA_DIST = $(script_DATA)

View File

@ -1,8 +0,0 @@
scriptdir = $(datadir)/irssi/scripts
script_DATA = \
command.pl \
msg-event.pl \
redirect.pl
EXTRA_DIST = $(script_DATA)

View File

@ -6,36 +6,27 @@ use Irssi::Irc;
use strict;
use vars qw($VERSION %IRSSI);
$VERSION = "1.00";
$VERSION = "1.01";
%IRSSI = (
authors => 'Timo Sirainen',
name => 'quitmsg',
description => 'Random quit messages',
license => 'Public Domain',
changed => 'Sun Mar 10 23:18 EET 2002'
changed => 'Mon Jul 22 20:00 EET 2020'
);
my $quitfile = glob "~/.irssi/irssi.quit";
my $quitfile = Irssi::get_irssi_dir() . "/irssi.quit";
sub cmd_quit {
my ($data, $server, $channel) = @_;
return if ($data ne "");
open (f, "<", $quitfile) || return;
my $lines = 0; while(<f>) { $lines++; };
open (my $fh, "<", $quitfile) || return;
my @lines = <$fh>;
my $line = int(rand($lines))+1;
my $quitmsg;
seek(f, 0, 0); $. = 0;
while(<f>) {
next if ($. != $line);
chomp;
$quitmsg = $_;
last;
}
close(f);
my $quitmsg = $lines[int(rand(@lines))];
chomp($quitmsg);
close($fh);
foreach my $server (Irssi::servers) {
$server->command("/disconnect ".$server->{tag}." $quitmsg");

View File

@ -5,30 +5,33 @@
use strict;
our $VERSION = '2003020806';
our $VERSION = '2020042700';
our %IRSSI = (
authors => 'Stefan \'tommie\' Tomanek',
contact => 'stefan@pico.ruhr.de',
name => 'scriptassist',
description => 'keeps your scripts on the cutting edge',
license => 'GPLv2',
url => 'http://irssi.org/scripts/',
modules => 'Data::Dumper LWP::UserAgent (GnuPG)',
url => 'https://scripts.irssi.org/',
modules => 'CPAN::Meta::YAML LWP::Protocol::https (GnuPG)',
commands => "scriptassist"
);
our ($forked, %remote_db, $have_gpg, @complist);
use Irssi 20020324;
use Data::Dumper;
use CPAN::Meta::YAML;
use LWP::UserAgent;
use POSIX;
use version;
# GnuPG is not always needed
$have_gpg = 0;
eval "use GnuPG qw(:algo :trust);";
$have_gpg = 1 if not ($@);
my $irssi_version = qv(Irssi::parse_special('v$J') =~ s/-.*//r);
sub show_help {
my $help = "scriptassist $VERSION
/scriptassist check
@ -39,15 +42,15 @@ sub show_help {
Search the script database
/scriptassist info <scripts>
Display information about <scripts>
".#/scriptassist ratings <scripts>
# Retrieve the average ratings of the the scripts
#/scriptassist top <num>
# Retrieve the first <num> top rated scripts
"/scriptassist new <num>
/scriptassist ratings <scripts|all>
Retrieve the average ratings of the the scripts
/scriptassist top <num>
Retrieve the first <num> top rated scripts
/scriptassist new <num>
Display the newest <num> scripts
".#/scriptassist rate <script> <stars>
# Rate the script with a number of stars ranging from 0-5
"/scriptassist contact <script>
/scriptassist rate <script>
Rate the script if you like it
/scriptassist contact <script>
Write an email to the author of the script
(Requires OpenURL)
/scriptassist cpan <module>
@ -95,6 +98,7 @@ sub call_openurl {
$code->($url);
} else {
print CLIENTCRAP "%R>>%n Please install openurl.pl";
print CLIENTCRAP "%R>>%n or open < $url > manually";
}
}
@ -170,14 +174,13 @@ sub bg_do {
my $cmd = $items[1];
$result{data}{unknown}{$cmd} = get_unknown($cmd, $xml);
}
my $dumper = Data::Dumper->new([\%result]);
$dumper->Purity(1)->Deepcopy(1)->Indent(0);
my $data = $dumper->Dump;
my $yaml = CPAN::Meta::YAML->new(\%result);
my $data = $yaml->write_string();
print($wh $data);
};
if ($@) {
print($wh Data::Dumper->new([+{data=>+{error=>$@}}])
->Purity(1)->Deepcopy(1)->Indent(0)->Dump);
print($wh CPAN::Meta::YAML->new(+{data=>+{error=>$@}})
->write_string());
}
close($wh);
POSIX::_exit(1);
@ -189,7 +192,7 @@ sub get_unknown {
foreach (keys %$db) {
next unless defined $db->{$_}{commands};
foreach my $item (split / /, $db->{$_}{commands}) {
return { $_ => $db->{$_} } if ($item =~ /^$cmd$/i);
return { $_ => +{%{$db->{$_}}} } if ($item =~ /^$cmd$/i);
}
}
return undef;
@ -265,47 +268,80 @@ sub script_info {
$result{$sname}{modules}{$mod}{installed} = module_exist($mod);
}
}
if (defined $xml->{$plname}{depends}) {
my $depends = $xml->{$plname}{depends};
foreach my $dep (split(/ /, $depends)) {
$result{$sname}{depends}{$dep}{installed} = 1;
}
}
# if (defined $xml->{$plname}{depends}) {
# my $depends = $xml->{$plname}{depends};
# foreach my $dep (split(/ /, $depends)) {
# $result{$sname}{depends}{$dep}{installed} = 1; #(defined ${ 'Irssi::Script::'.$dep });
# }
# }
}
return \%result;
}
sub get_rate_url {
my ($src) = @_;
my $ua = LWP::UserAgent->new(env_proxy=>1, keep_alive=>1, timeout=>30);
$ua->agent('ScriptAssist/'.$VERSION);
my $request = HTTP::Request->new('GET', $src);
my $response = $ua->request($request);
unless ($response->is_success) {
my $error = join "\n", $response->status_line(), (grep / at .* line \d+/, split "\n", $response->content()), '';
die("Fetching ratings location failed: $error");
}
my $votes_url;
for my $tag ($response->content() =~ /<script([^>]*)>/g) {
my $attr = " $tag ";
($votes_url = $1) =~ s/\.\w+$/.yml/
if $attr =~ /\sasync\s/ && $attr =~ m{\ssrc="(https?://.*?/votes\.\w+)"\s};
}
unless ($votes_url) {
die("Fetching ratings failed: Could not find votes script\n");
}
$request = HTTP::Request->new('GET', $votes_url);
$response = $ua->request($request);
if (!$response->is_success) {
my $error = join "\n", $response->status_line(), (grep / at .* line \d+/, split "\n", $response->content()), '';
die("Fetching ratings failed: $error");
}
my $data = $response->content();
utf8::decode($data);
CPAN::Meta::YAML->read_string($data)->[0];
}
sub rate_script {
my ($script, $stars) = @_;
my $ua = LWP::UserAgent->new(env_proxy=>1, keep_alive=>1, timeout=>30);
$ua->agent('ScriptAssist/'.2003020803);
my $request = HTTP::Request->new('GET', 'http://ratings.irssi.de/irssirate.pl?&stars='.$stars.'&mode=rate&script='.$script);
my $response = $ua->request($request);
unless ($response->is_success() && $response->content() =~ /You already rated this script/) {
return 1;
} else {
return 0;
}
my $xml = get_scripts();
my $votes = get_rate_url(map { $_->{source} } values %$xml);
my ($sname, $plname, $pname) = get_names($script, $xml);
die "Script $script not found\n" unless $votes->{$plname};
return $votes->{$plname}{u}
}
sub get_ratings {
my ($scripts, $limit) = @_;
my $ua = LWP::UserAgent->new(env_proxy=>1, keep_alive=>1, timeout=>30);
$ua->agent('ScriptAssist/'.2003020803);
my $script = join(',', @{$scripts});
my $request = HTTP::Request->new('GET', 'http://ratings.irssi.de/irssirate.pl?script='.$script.'&sort=rating&limit='.$limit);
my $response = $ua->request($request);
my $xml = get_scripts();
my $votes = get_rate_url(map { $_->{source} } values %$xml);
foreach (keys %{$votes}) {
if ($xml->{$_}) {
$xml->{$_}{votes} = $votes->{$_}{v};
}
}
my %result;
if ($response->is_success()) {
foreach (split /\n/, $response->content()) {
if (/<tr><td><a href=".*?">(.*?)<\/a>/) {
my $entry = $1;
if (/"><\/td><td>([0-9.]+)<\/td><td>(.*?)<\/td><td>/) {
$result{$entry} = [$1, $2];
}
}
if (@{$scripts}) {
foreach (@{$scripts}) {
my ($sname, $plname, $pname) = get_names($_, $xml);
next unless (defined $xml->{$plname} || ( exists $Irssi::Script::{$pname} && exists $Irssi::Script::{$pname}{IRSSI} ));
$result{$plname} = [$xml->{$plname}{votes}];
}
} else {
my @keys = sort { $xml->{$b}{votes} <=> $xml->{$a}{votes}
|| $xml->{$b}{modified} cmp $xml->{$a}{modified} }
grep { !$xml->{$_}{HIDDEN} && $xml->{$_}{votes} ne '' } keys %$xml;
foreach (splice @keys, 0, $limit) {
$result{$_} = [$xml->{$_}{votes}];
}
}
die "No such script found\n" unless keys %result;
return \%result;
}
@ -313,7 +349,7 @@ sub get_new {
my ($num) = @_;
my $result;
my $xml = get_scripts();
foreach (sort {$xml->{$b}{last_modified} cmp $xml->{$a}{last_modified}} keys %$xml) {
foreach (sort {$xml->{$b}{modified} cmp $xml->{$a}{modified}} keys %$xml) {
my %entry = %{ $xml->{$_} };
next if $entry{HIDDEN};
$result->{$_} = \%entry;
@ -427,8 +463,8 @@ sub pipe_input {
print CLIENTCRAP "%R<<%n Something weird happend (no text)";
return();
}
local our $VAR1;
my $incoming = eval($text);
utf8::decode($text);
my $incoming = CPAN::Meta::YAML->read_string($text)->[0];
if ($incoming->{db} && $incoming->{timestamp}) {
$remote_db{db} = $incoming->{db};
$remote_db{timestamp} = $incoming->{timestamp};
@ -598,14 +634,9 @@ sub print_rate {
my (%data) = @_;
my $line;
foreach my $script (sort keys(%data)) {
if ($data{$script}) {
$line .= "%go%n %9".$script."%9 has been rated";
} else {
$line .= "%ro%n %9".$script."%9 : Already rated this script";
call_openurl($data{$script});
}
}
print CLIENTCRAP draw_box('ScriptAssist', $line, 'rating', 1) ;
}
sub print_ratings {
my (%data) = @_;
@ -618,8 +649,7 @@ sub print_ratings {
push @line, "%yo%n";
}
push @line, "%9".$script."%9";
push @line, $data{$script}{rating};
push @line, "[".$data{$script}{votes}." votes]";
push @line, "[".(length $data{$script}{rating} ? $data{$script}{rating} : 'no')." votes]";
push @table, \@line;
}
print CLIENTCRAP draw_box('ScriptAssist', array2table(@table), 'ratings', 1) ;
@ -628,7 +658,7 @@ sub print_ratings {
sub print_new {
my ($list) = @_;
my @table;
foreach (sort {$list->{$b}{last_modified} cmp $list->{$a}{last_modified}} keys %$list) {
foreach (sort {$list->{$b}{modified} cmp $list->{$a}{modified}} keys %$list) {
my @line;
my ($name) = get_names($_);
if (get_local_version($name)) {
@ -637,7 +667,7 @@ sub print_new {
push @line, "%yo%n";
}
push @line, "%9".$name."%9";
push @line, $list->{$_}{last_modified};
push @line, $list->{$_}{modified};
push @table, \@line;
}
print CLIENTCRAP draw_box('ScriptAssist', array2table(@table), 'new scripts', 1) ;
@ -822,7 +852,7 @@ sub contact_author {
sub get_scripts {
my $ua = LWP::UserAgent->new(env_proxy=>1, keep_alive=>1, timeout=>30);
$ua->agent('ScriptAssist/'.2003020803);
$ua->agent('ScriptAssist/'.$VERSION);
$ua->env_proxy();
my @mirrors = split(/ /, Irssi::settings_get_str('scriptassist_script_sources'));
my %sites_db;
@ -846,28 +876,32 @@ sub get_scripts {
}
$fetched = 1;
my $data = $response->content();
my ($src, $type);
my $src = $site;
my $type = '';
if ($site =~ /(.*\/).+\.(.+)/) {
$src = $1;
$type = $2;
}
push @sources, $src;
#my @header = ('name', 'contact', 'authors', 'description', 'version', 'modules', 'last_modified');
#my @header = ('name', 'contact', 'authors', 'description', 'version', 'modules', 'modified');
if ($type eq 'dmp') {
no strict 'vars';
my $new_db = eval "$data";
foreach (keys %$new_db) {
if (defined $sites_db{script}{$_}) {
my $old = $sites_db{$_}{version};
my $new = $new_db->{$_}{version};
die("Support for $type script database has been removed. Please /set scriptassist_script_sources and change $type -> yml.\n");
} elsif ($type eq 'yml') {
utf8::decode($data);
my $new_db = CPAN::Meta::YAML->read_string($data);
foreach (@{$new_db->[0]}) {
my $K = $_->{filename};
if (defined $sites_db{script}{$K}) {
my $old = $sites_db{$K}{version};
my $new = $_->{version};
next if (compare_versions($old, $new) eq 'newer');
}
#foreach my $key (@header) {
foreach my $key (keys %{ $new_db->{$_} }) {
next unless defined $new_db->{$_}{$key};
$sites_db{$_}{$key} = $new_db->{$_}{$key};
foreach my $key (keys %$_) {
next unless defined $_->{$key};
$sites_db{$K}{$key} = $_->{$key};
}
$sites_db{$_}{source} = $src;
$sites_db{$K}{source} = $src;
}
} else {
die("Unknown script database type ($type).\n");
@ -1093,6 +1127,7 @@ sub missing_module {
sub cmd_scripassist {
my ($arg, $server, $witem) = @_;
utf8::decode($arg);
my @args = split(/ /, $arg);
if ($args[0] eq 'help' || $args[0] eq '-h') {
show_help();
@ -1112,9 +1147,9 @@ sub cmd_scripassist {
} elsif ($args[0] eq 'ratings' && defined $args[1]) {
shift @args;
bg_do("ratings ".join(' ', @args));
} elsif ($args[0] eq 'rate' && defined $args[1] && defined $args[2]) {
} elsif ($args[0] eq 'rate' && defined $args[1]) {
shift @args;
bg_do("rate ".join(' ', @args)) if ($args[2] >= 0 && $args[2] < 6);
bg_do("rate ".join(' ', @args));
} elsif ($args[0] eq 'info' && defined $args[1]) {
shift @args;
bg_do("info ".join(' ', @args));
@ -1155,6 +1190,7 @@ sub sig_command_script_load {
sub sig_default_command {
my ($cmd, $server) = @_;
return unless Irssi::settings_get_bool("scriptassist_check_unknown_commands");
return if ($cmd =~ /^\d+$/ && $irssi_version >= v1.2.0 && Irssi::settings_get_bool("window_number_commands"));
bg_do('unknown '.$cmd);
}
@ -1176,7 +1212,7 @@ sub sig_complete {
}
Irssi::settings_add_str($IRSSI{name}, 'scriptassist_script_sources', 'https://scripts.irssi.org/scripts.dmp');
Irssi::settings_add_str($IRSSI{name}, 'scriptassist_script_sources', 'https://scripts.irssi.org/scripts.yml');
Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_cache_sources', 1);
Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_update_verbose', 1);
Irssi::settings_add_bool($IRSSI{name}, 'scriptassist_check_verbose', 1);
@ -1210,11 +1246,11 @@ foreach my $cmd ( ( 'check',
'search',
# '-h',
'help',
# 'ratings',
# 'rate',
'ratings',
'rate',
'info',
# 'echo',
# 'top',
'top',
'cpan',
'autorun',
'new' ) ) {

View File

@ -1,25 +0,0 @@
if BUILD_TEXTUI
TEXTUI=fe-text
endif
if BUILD_IRSSIBOT
BOTUI=fe-none
endif
if BUILD_IRSSIFUZZER
FUZZERUI=fe-fuzz
endif
if HAVE_PERL
PERLDIR=perl
endif
if HAVE_OTR
OTRDIR=otr
endif
pkginc_srcdir=$(pkgincludedir)/src
pkginc_src_HEADERS = \
common.h
SUBDIRS = lib-config core irc fe-common $(PERLDIR) $(OTRDIR) $(TEXTUI) $(BOTUI) $(FUZZERUI)

View File

@ -6,7 +6,7 @@
#define IRSSI_GLOBAL_CONFIG "irssi.conf" /* config file name in /etc/ */
#define IRSSI_HOME_CONFIG "config" /* config file name in ~/.irssi/ */
#define IRSSI_ABI_VERSION 23
#define IRSSI_ABI_VERSION 48
#define DEFAULT_SERVER_ADD_PORT 6667
#define DEFAULT_SERVER_ADD_TLS_PORT 6697
@ -37,23 +37,20 @@
#include <fcntl.h>
#include <glib.h>
#ifdef HAVE_GMODULE
#include <gmodule.h>
#endif
typedef guint64 uoff_t;
#define PRIuUOFF_T G_GUINT64_FORMAT
/* input functions */
#define G_INPUT_READ (1 << 0)
#define G_INPUT_WRITE (1 << 1)
#define I_INPUT_READ (1 << 0)
#define I_INPUT_WRITE (1 << 1)
typedef void (*GInputFunction) (void *data, GIOChannel *source, int condition);
int g_input_add(GIOChannel *source, int condition,
GInputFunction function, void *data);
int g_input_add_full(GIOChannel *source, int priority, int condition,
GInputFunction function, void *data);
int i_input_add(GIOChannel *source, int condition, GInputFunction function, void *data);
int i_input_add_full(GIOChannel *source, int priority, int condition, GInputFunction function,
void *data);
/* return full path for ~/.irssi */
const char *get_irssi_dir(void);

View File

@ -1,119 +0,0 @@
noinst_LIBRARIES = libcore.a
AM_CPPFLAGS = \
$(GLIB_CFLAGS) \
-DSYSCONFDIR=\""$(sysconfdir)"\" \
-DMODULEDIR=\""$(libdir)/irssi/modules"\"
if USE_GREGEX
regex_impl=iregex-gregex.c
else
regex_impl=iregex-regexh.c
endif
libcore_a_SOURCES = \
args.c \
channels.c \
channels-setup.c \
commands.c \
chat-commands.c \
chat-protocols.c \
chatnets.c \
core.c \
expandos.c \
ignore.c \
levels.c \
line-split.c \
log.c \
log-away.c \
masks.c \
misc.c \
modules.c \
modules-load.c \
net-disconnect.c \
net-nonblock.c \
net-sendbuffer.c \
network.c \
network-openssl.c \
nicklist.c \
nickmatch-cache.c \
pidwait.c \
queries.c \
rawlog.c \
recode.c \
refstrings.c \
servers.c \
servers-reconnect.c \
servers-setup.c \
session.c \
settings.c \
signals.c \
special-vars.c \
utf8.c \
$(regex_impl) \
wcwidth.c \
wcwidth-wrapper.c \
tls.c \
write-buffer.c
if HAVE_CAPSICUM
libcore_a_SOURCES += \
capsicum.c
endif
structure_headers = \
channel-rec.h \
channel-setup-rec.h \
chatnet-rec.h \
query-rec.h \
server-rec.h \
server-setup-rec.h \
server-connect-rec.h \
window-item-rec.h
pkginc_coredir=$(pkgincludedir)/src/core
pkginc_core_HEADERS = \
args.h \
capsicum.h \
channels.h \
channels-setup.h \
commands.h \
chat-protocols.h \
chatnets.h \
core.h \
expandos.h \
ignore.h \
levels.h \
line-split.h \
log.h \
masks.h \
misc.h \
module.h \
modules.h \
modules-load.h \
net-disconnect.h \
net-nonblock.h \
net-sendbuffer.h \
network.h \
network-openssl.h \
nick-rec.h \
nicklist.h \
nickmatch-cache.h \
pidwait.h \
queries.h \
rawlog.h \
recode.h \
refstrings.h \
servers.h \
servers-reconnect.h \
servers-setup.h \
session.h \
settings.h \
signals.h \
special-vars.h \
utf8.h \
iregex.h \
window-item-def.h \
tls.h \
write-buffer.h \
$(structure_headers)

View File

@ -34,6 +34,10 @@ static int compare_channel_setup (CONFIG_NODE *node, CHANNEL_SETUP_REC *channel)
{
char *name, *chatnet;
/* skip comment nodes */
if (node->type == NODE_TYPE_COMMENT)
return -1;
name = config_node_get_str(node, "name", NULL);
chatnet = config_node_get_str(node, "chatnet", NULL);
@ -203,9 +207,18 @@ static void channels_read_config(void)
/* Read channels */
node = iconfig_node_traverse("channels", FALSE);
if (node != NULL) {
int i = 0;
tmp = config_node_first(node->value);
for (; tmp != NULL; tmp = config_node_next(tmp))
channel_setup_read(tmp->data);
for (; tmp != NULL; tmp = config_node_next(tmp), i++) {
node = tmp->data;
if (node->type != NODE_TYPE_BLOCK) {
g_critical("Expected block node at `channels[%d]' was of %s type. "
"Corrupt config?",
i, node->type == NODE_TYPE_LIST ? "list" : "scalar");
} else {
channel_setup_read(node);
}
}
}
}
@ -214,8 +227,7 @@ void channels_setup_init(void)
setupchannels = NULL;
source_host_ok = FALSE;
signal_add("setup reread", (SIGNAL_FUNC) channels_read_config);
signal_add("irssi init read settings", (SIGNAL_FUNC) channels_read_config);
signal_add("setup reread channels", (SIGNAL_FUNC) channels_read_config);
}
void channels_setup_deinit(void)
@ -223,6 +235,5 @@ void channels_setup_deinit(void)
while (setupchannels != NULL)
channel_setup_destroy(setupchannels->data);
signal_remove("setup reread", (SIGNAL_FUNC) channels_read_config);
signal_remove("irssi init read settings", (SIGNAL_FUNC) channels_read_config);
signal_remove("setup reread channels", (SIGNAL_FUNC) channels_read_config);
}

View File

@ -126,8 +126,7 @@ CHANNEL_REC *channel_find(SERVER_REC *server, const char *name)
return channel_find_server(server, name);
/* find from any server */
return gslist_foreach_find(servers,
(FOREACH_FIND_FUNC) channel_find_server,
return i_slist_foreach_find(servers, (FOREACH_FIND_FUNC) channel_find_server,
(void *) name);
}
@ -153,8 +152,7 @@ void channel_change_visible_name(CHANNEL_REC *channel, const char *name)
static CHANNEL_REC *channel_find_servers(GSList *servers, const char *name)
{
return gslist_foreach_find(servers,
(FOREACH_FIND_FUNC) channel_find_server,
return i_slist_foreach_find(servers, (FOREACH_FIND_FUNC) channel_find_server,
(void *) name);
}

View File

@ -40,7 +40,7 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
CHAT_PROTOCOL_REC *proto;
SERVER_CONNECT_REC *conn;
GHashTable *optlist;
char *addr, *portstr, *password, *nick, *chatnet, *host, *tmp;
char *addr, *portstr, *password, *nick, *chatnet, *host;
void *free_arg;
g_return_val_if_fail(data != NULL, NULL);
@ -71,8 +71,8 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
if (chatnet == NULL)
chatnet = g_hash_table_lookup(optlist, "network");
conn = server_create_conn(proto != NULL ? proto->id : -1, addr,
atoi(portstr), chatnet, password, nick);
conn = server_create_conn_opt(proto != NULL ? proto->id : -1, addr, atoi(portstr), chatnet,
password, nick, optlist);
if (conn == NULL) {
signal_emit("error command", 1,
GINT_TO_POINTER(CMDERR_NO_SERVER_DEFINED));
@ -94,46 +94,7 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
if (strchr(addr, '/') != NULL)
conn->unix_socket = TRUE;
if (g_hash_table_lookup(optlist, "6") != NULL)
conn->family = AF_INET6;
else if (g_hash_table_lookup(optlist, "4") != NULL)
conn->family = AF_INET;
if (g_hash_table_lookup(optlist, "tls") != NULL || g_hash_table_lookup(optlist, "ssl") != NULL)
conn->use_tls = TRUE;
if ((tmp = g_hash_table_lookup(optlist, "tls_cert")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_cert")) != NULL)
conn->tls_cert = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_pkey")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_pkey")) != NULL)
conn->tls_pkey = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_pass")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_pass")) != NULL)
conn->tls_pass = g_strdup(tmp);
if (g_hash_table_lookup(optlist, "tls_verify") != NULL || g_hash_table_lookup(optlist, "ssl_verify") != NULL)
conn->tls_verify = TRUE;
if ((tmp = g_hash_table_lookup(optlist, "tls_cafile")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_cafile")) != NULL)
conn->tls_cafile = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_capath")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_capath")) != NULL)
conn->tls_capath = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_ciphers")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_ciphers")) != NULL)
conn->tls_ciphers = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_pinned_cert")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_pinned_cert")) != NULL)
conn->tls_pinned_cert = g_strdup(tmp);
if ((tmp = g_hash_table_lookup(optlist, "tls_pinned_pubkey")) != NULL || (tmp = g_hash_table_lookup(optlist, "ssl_pinned_pubkey")) != NULL)
conn->tls_pinned_pubkey = g_strdup(tmp);
if ((conn->tls_capath != NULL && conn->tls_capath[0] != '\0')
|| (conn->tls_cafile != NULL && conn->tls_cafile[0] != '\0'))
conn->tls_verify = TRUE;
if ((conn->tls_cert != NULL && conn->tls_cert[0] != '\0') || conn->tls_verify)
conn->use_tls = TRUE;
if (g_hash_table_lookup(optlist, "!") != NULL)
conn->no_autojoin_channels = TRUE;
if (g_hash_table_lookup(optlist, "noautosendcmd") != NULL)
conn->no_autosendcmd = TRUE;
if (g_hash_table_lookup(optlist, "noproxy") != NULL)
g_free_and_null(conn->proxy);
/* TLS options are handled in server_create_conn_opt ... -> server_setup_fill_optlist */
*rawlog_file = g_strdup(g_hash_table_lookup(optlist, "rawlog"));
@ -149,12 +110,12 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
return conn;
}
/* SYNTAX: CONNECT [-4 | -6] [-tls] [-tls_cert <cert>] [-tls_pkey <pkey>] [-tls_pass <password>]
/* SYNTAX: CONNECT [-4 | -6] [-tls_cert <cert>] [-tls_pkey <pkey>] [-tls_pass <password>]
[-tls_verify] [-tls_cafile <cafile>] [-tls_capath <capath>]
[-tls_ciphers <list>] [-tls_pinned_cert <fingerprint>] [-tls_pinned_pubkey <fingerprint>]
[-!] [-noautosendcmd]
[-noproxy] [-network <network>] [-host <hostname>]
[-rawlog <file>]
[-tls_ciphers <list>] [-tls_pinned_cert <fingerprint>]
[-tls_pinned_pubkey <fingerprint>] [-!] [-noautosendcmd] [-tls | -notls]
[-starttls | -disallow_starttls] [-noproxy] [-network <network>]
[-host <hostname>] [-rawlog <file>]
<address>|<chatnet> [<port> [<password> [<nick>]]] */
/* NOTE: -network replaces the old -ircnet flag. */
static void cmd_connect(const char *data)
@ -517,7 +478,12 @@ void chat_commands_init(void)
signal_add("server sendmsg", (SIGNAL_FUNC) sig_server_sendmsg);
command_set_options("connect", "4 6 !! -network ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_pinned_cert +ssl_pinned_pubkey tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey +host noproxy -rawlog noautosendcmd");
command_set_options(
"connect",
"4 6 !! -network ~ssl ~+ssl_cert ~+ssl_pkey ~+ssl_pass ~ssl_verify ~+ssl_cafile "
"~+ssl_capath ~+ssl_ciphers ~+ssl_pinned_cert ~+ssl_pinned_pubkey tls notls +tls_cert "
"+tls_pkey +tls_pass tls_verify notls_verify +tls_cafile +tls_capath +tls_ciphers "
"+tls_pinned_cert +tls_pinned_pubkey +host noproxy -rawlog noautosendcmd");
command_set_options("msg", "channel nick");
}

View File

@ -47,7 +47,7 @@ int chat_protocol_lookup(const char *name)
g_return_val_if_fail(name != NULL, -1);
rec = chat_protocol_find(name);
return rec == NULL ? -1 : rec->id;
return rec == NULL ? -1 : rec->not_initialized ? CHAT_PROTOCOL_NOT_INITIALIZED : rec->id;
}
CHAT_PROTOCOL_REC *chat_protocol_find(const char *name)
@ -99,6 +99,22 @@ CHAT_PROTOCOL_REC *chat_protocol_find_net(GHashTable *optlist)
return NULL;
}
static void chat_protocol_destroy(CHAT_PROTOCOL_REC *rec)
{
g_return_if_fail(rec != NULL);
chat_protocols = g_slist_remove(chat_protocols, rec);
if (default_proto == rec) {
chat_protocol_set_default(chat_protocols == NULL ? NULL : chat_protocols->data);
}
signal_emit("chat protocol destroyed", 1, rec);
g_free(rec->name);
g_free(rec);
}
/* Register new chat protocol. */
CHAT_PROTOCOL_REC *chat_protocol_register(CHAT_PROTOCOL_REC *rec)
{
@ -108,6 +124,10 @@ CHAT_PROTOCOL_REC *chat_protocol_register(CHAT_PROTOCOL_REC *rec)
g_return_val_if_fail(rec != NULL, NULL);
newrec = chat_protocol_find(rec->name);
if (newrec != NULL && newrec->not_initialized) {
chat_protocol_destroy(newrec);
newrec = NULL;
}
created = newrec == NULL;
if (newrec == NULL) {
newrec = g_new0(CHAT_PROTOCOL_REC, 1);
@ -131,23 +151,6 @@ CHAT_PROTOCOL_REC *chat_protocol_register(CHAT_PROTOCOL_REC *rec)
return newrec;
}
static void chat_protocol_destroy(CHAT_PROTOCOL_REC *rec)
{
g_return_if_fail(rec != NULL);
chat_protocols = g_slist_remove(chat_protocols, rec);
if (default_proto == rec) {
chat_protocol_set_default(chat_protocols == NULL ? NULL :
chat_protocols->data);
}
signal_emit("chat protocol destroyed", 1, rec);
g_free(rec->name);
g_free(rec);
}
/* Unregister chat protocol. */
void chat_protocol_unregister(const char *name)
{
@ -191,15 +194,6 @@ static CHANNEL_SETUP_REC *create_channel_setup(void)
return g_new0(CHANNEL_SETUP_REC, 1);
}
static SERVER_CONNECT_REC *create_server_connect(void)
{
return g_new0(SERVER_CONNECT_REC, 1);
}
static void destroy_server_connect(SERVER_CONNECT_REC *conn)
{
}
/* Return "unknown chat protocol" record. Used when protocol name is
specified but it isn't registered yet. */
CHAT_PROTOCOL_REC *chat_protocol_get_unknown(const char *name)
@ -218,8 +212,10 @@ CHAT_PROTOCOL_REC *chat_protocol_get_unknown(const char *name)
rec->create_chatnet = create_chatnet;
rec->create_server_setup = create_server_setup;
rec->create_channel_setup = create_channel_setup;
/*
rec->create_server_connect = create_server_connect;
rec->destroy_server_connect = destroy_server_connect;
*/
newrec = chat_protocol_register(rec);
g_free(rec);

View File

@ -35,6 +35,8 @@ void *chat_protocol_check_cast(void *object, int type_pos, const char *id);
((object) == NULL ? chat_protocol_get_default() : \
chat_protocol_find_id((object)->chat_type))
#define CHAT_PROTOCOL_NOT_INITIALIZED -2
/* Register new chat protocol. */
CHAT_PROTOCOL_REC *chat_protocol_register(CHAT_PROTOCOL_REC *rec);

View File

@ -24,12 +24,13 @@
#include <irssi/src/core/special-vars.h>
#include <irssi/src/lib-config/iconfig.h>
#include <irssi/src/core/settings.h>
#include <irssi/src/core/misc.h>
#include <irssi/src/core/chat-protocols.h>
#include <irssi/src/core/chatnets.h>
#include <irssi/src/core/servers.h>
GSList *chatnets; /* list of available chat networks */
GSList *chatnets, *chatnets_unavailable; /* list of available chat networks */
static void chatnet_config_save(CHATNET_REC *chatnet)
{
@ -60,6 +61,7 @@ static void chatnet_config_remove(CHATNET_REC *chatnet)
void chatnet_create(CHATNET_REC *chatnet)
{
g_return_if_fail(chatnet != NULL);
g_return_if_fail(!CHAT_PROTOCOL(chatnet)->not_initialized);
chatnet->type = module_get_uniq_id("CHATNET", 0);
if (g_slist_find(chatnets, chatnet) == NULL)
@ -112,6 +114,21 @@ CHATNET_REC *chatnet_find(const char *name)
return NULL;
}
gboolean chatnet_find_unavailable(const char *name)
{
CHAT_PROTOCOL_REC *proto;
if (i_slist_find_icase_string(chatnets_unavailable, name) != NULL)
return TRUE;
proto = CHAT_PROTOCOL(chatnet_find(name));
if (proto == NULL || proto->not_initialized)
return TRUE;
return FALSE;
}
static void sig_connected(SERVER_REC *server)
{
CHATNET_REC *rec;
@ -136,14 +153,22 @@ static void chatnet_read(CONFIG_NODE *node)
return;
type = config_node_get_str(node, "type", NULL);
proto = type == NULL ? NULL : chat_protocol_find(type);
if (proto == NULL) {
proto = type == NULL ? chat_protocol_get_default() :
chat_protocol_get_unknown(type);
if (type == NULL) {
proto = chat_protocol_get_default();
} else {
proto = chat_protocol_find(type);
}
if (type == NULL)
if (proto == NULL) {
/* protocol not loaded */
if (i_slist_find_icase_string(chatnets_unavailable, node->key) == NULL)
chatnets_unavailable =
g_slist_append(chatnets_unavailable, g_strdup(node->key));
return;
} else if (type == NULL) {
iconfig_node_set_str(node, "type", proto->name);
}
rec = proto->create_chatnet();
rec->type = module_get_uniq_id("CHATNET", 0);
@ -167,6 +192,12 @@ static void read_chatnets(void)
while (chatnets != NULL)
chatnet_destroy(chatnets->data);
while (chatnets_unavailable != NULL) {
char *name = chatnets_unavailable->data;
chatnets_unavailable = g_slist_remove(chatnets_unavailable, name);
g_free(name);
}
node = iconfig_node_traverse("chatnets", FALSE);
if (node != NULL) {
tmp = config_node_first(node->value);
@ -180,8 +211,7 @@ void chatnets_init(void)
chatnets = NULL;
signal_add_first("event connected", (SIGNAL_FUNC) sig_connected);
signal_add("setup reread", (SIGNAL_FUNC) read_chatnets);
signal_add_first("irssi init read settings", (SIGNAL_FUNC) read_chatnets);
signal_add("setup reread chatnets", (SIGNAL_FUNC) read_chatnets);
}
void chatnets_deinit(void)
@ -189,6 +219,5 @@ void chatnets_deinit(void)
module_uniq_destroy("CHATNET");
signal_remove("event connected", (SIGNAL_FUNC) sig_connected);
signal_remove("setup reread", (SIGNAL_FUNC) read_chatnets);
signal_remove("irssi init read settings", (SIGNAL_FUNC) read_chatnets);
signal_remove("setup reread chatnets", (SIGNAL_FUNC) read_chatnets);
}

View File

@ -25,6 +25,8 @@ void chatnet_destroy(CHATNET_REC *chatnet);
/* Find the chat network by name */
CHATNET_REC *chatnet_find(const char *name);
/* Check if this chatnet is unavailable because the protocol is not loaded */
gboolean chatnet_find_unavailable(const char *name);
void chatnets_init(void);
void chatnets_deinit(void);

View File

@ -339,11 +339,28 @@ void command_runsub(const char *cmd, const char *data,
g_free(orig);
}
static char *optname(char *option)
{
char *opt = option;
if (*opt == '~')
opt++;
if (iscmdtype(*opt))
opt++;
return opt;
}
static gboolean optflag(char *option, char *flag)
{
if (*option == '~')
return optflag(option + 1, flag);
return (strchr(flag, *option) != NULL) || (!iscmdtype(*option) && strchr(flag, ' '));
}
static GSList *optlist_find(GSList *optlist, const char *option)
{
while (optlist != NULL) {
char *name = optlist->data;
if (iscmdtype(*name)) name++;
char *name = optname(optlist->data);
if (g_ascii_strcasecmp(name, option) == 0)
return optlist;
@ -369,7 +386,7 @@ int command_have_option(const char *cmd, const char *option)
return FALSE;
for (tmp = rec->options; *tmp != NULL; tmp++) {
char *name = iscmdtype(**tmp) ? (*tmp)+1 : *tmp;
char *name = optname(*tmp);
if (g_ascii_strcasecmp(name, option) == 0)
return TRUE;
@ -399,7 +416,7 @@ static void command_calc_options(COMMAND_REC *rec, const char *options)
/* merge the options */
for (tmp = optlist; *tmp != NULL; tmp++) {
name = iscmdtype(**tmp) ? (*tmp)+1 : *tmp;
name = optname(*tmp);
oldopt = optlist_find(list, name);
if (oldopt != NULL) {
@ -414,7 +431,7 @@ static void command_calc_options(COMMAND_REC *rec, const char *options)
g_strfreev(optlist);
/* linked list -> string[] */
str = gslist_to_string(list, " ");
str = i_slist_to_string(list, " ");
rec->options = g_strsplit(str, " ", -1);
g_free(str);
@ -501,7 +518,7 @@ char *cmd_get_quoted_param(char **data)
while (**data != '\0' && (**data != quote ||
((*data)[1] != ' ' && (*data)[1] != '\0'))) {
if (**data == '\\' && (*data)[1] != '\0')
g_memmove(*data, (*data)+1, strlen(*data));
memmove(*data, (*data)+1, strlen(*data));
(*data)++;
}
@ -529,7 +546,7 @@ static int option_find(char **array, const char *option)
found = -1; index = 0; multiple = FALSE;
for (tmp = array; *tmp != NULL; tmp++, index++) {
const char *text = *tmp + iscmdtype(**tmp);
const char *text = optname(*tmp);
if (g_ascii_strncasecmp(text, option, len) == 0) {
if (text[len] == '\0') {
@ -568,9 +585,9 @@ static int get_cmd_options(char **data, int ignore_unknown,
option = NULL; pos = -1;
for (;;) {
if (**data == '\0' || **data == '-') {
if (option != NULL && *optlist[pos] == '+') {
if (option != NULL && optflag(optlist[pos], "+")) {
/* required argument missing! */
*data = optlist[pos] + 1;
*data = optname(optlist[pos]);
return CMDERR_OPTION_ARG_MISSING;
}
}
@ -621,14 +638,12 @@ static int get_cmd_options(char **data, int ignore_unknown,
if (pos >= 0) {
/* if we used a shortcut of parameter, put
the whole parameter name in options table */
option = optlist[pos] +
iscmdtype(*optlist[pos]);
option = optname(optlist[pos]);
}
if (options != NULL && pos != -3)
g_hash_table_insert(options, option, "");
if (pos < 0 || !iscmdtype(*optlist[pos]) ||
*optlist[pos] == '!')
if (pos < 0 || optflag(optlist[pos], " !"))
option = NULL;
while (**data == ' ') (*data)++;
@ -638,7 +653,7 @@ static int get_cmd_options(char **data, int ignore_unknown,
if (option == NULL)
break;
if (*optlist[pos] == '@' && !is_numeric(*data, ' '))
if (optflag(optlist[pos], "@") && !is_numeric(*data, ' '))
break; /* expected a numeric argument */
/* save the argument */
@ -725,8 +740,7 @@ int cmd_get_params(const char *data, gpointer *free_me, int count, ...)
opthash = (GHashTable **) va_arg(args, GHashTable **);
rec->options = *opthash =
g_hash_table_new((GHashFunc) g_istr_hash,
(GCompareFunc) g_istr_equal);
g_hash_table_new((GHashFunc) i_istr_hash, (GCompareFunc) i_istr_equal);
ignore_unknown = count & PARAM_FLAG_UNKNOWN_OPTIONS;
error = get_cmd_options(&datad, ignore_unknown,
@ -817,7 +831,7 @@ void commands_remove_module(const char *module)
COMMAND_REC *rec = tmp->data;
next = tmp->next;
modlist = gslist_find_string(rec->modules, module);
modlist = i_slist_find_string(rec->modules, module);
if (modlist != NULL)
command_module_unbind_all(rec, modlist->data);
}
@ -851,8 +865,7 @@ static int cmd_protocol_match(COMMAND_REC *cmd, SERVER_REC *server)
#define alias_runstack_pop(alias) \
alias_runstack = g_slist_remove(alias_runstack, alias)
#define alias_runstack_find(alias) \
(gslist_find_icase_string(alias_runstack, alias) != NULL)
#define alias_runstack_find(alias) (i_slist_find_icase_string(alias_runstack, alias) != NULL)
static void parse_command(const char *command, int expand_aliases,
SERVER_REC *server, void *item)

View File

@ -34,16 +34,17 @@
#endif
#include <irssi/src/core/chat-protocols.h>
#include <irssi/src/core/servers.h>
#include <irssi/src/core/chatnets.h>
#include <irssi/src/core/commands.h>
#include <irssi/src/core/expandos.h>
#include <irssi/src/core/write-buffer.h>
#include <irssi/src/core/ignore.h>
#include <irssi/src/core/log.h>
#include <irssi/src/core/rawlog.h>
#include <irssi/src/core/ignore.h>
#include <irssi/src/core/recode.h>
#include <irssi/src/core/refstrings.h>
#include <irssi/src/core/servers.h>
#include <irssi/src/core/special-vars.h>
#include <irssi/src/core/write-buffer.h>
#include <irssi/src/core/channels.h>
#include <irssi/src/core/queries.h>
@ -66,7 +67,7 @@ void wcwidth_wrapper_deinit(void);
int irssi_gui;
int irssi_init_finished;
int reload_config;
int sighup_received;
time_t client_start_time;
static char *irssi_dir, *irssi_config_file;
@ -83,9 +84,9 @@ const char *get_irssi_config(void)
return irssi_config_file;
}
static void sig_reload_config(int signo)
static void sig_hup(int signo)
{
reload_config = TRUE;
sighup_received = TRUE;
}
static void read_settings(void)
@ -108,8 +109,7 @@ static void read_settings(void)
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
/* reload config on SIGHUP */
act.sa_handler = sig_reload_config;
act.sa_handler = sig_hup;
sigaction(SIGHUP, &act, NULL);
for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) {
@ -223,6 +223,13 @@ static void sig_irssi_init_finished(void)
irssi_init_finished = TRUE;
}
static void reread_setup(void)
{
signal_emit("setup reread chatnets", 0);
signal_emit("setup reread servers", 0);
signal_emit("setup reread channels", 0);
}
void core_init(void)
{
dialog_type_queue = NULL;
@ -263,16 +270,22 @@ void core_init(void)
chat_commands_init();
i_refstr_init();
special_vars_init();
wcwidth_wrapper_init();
settings_add_str("misc", "ignore_signals", "");
settings_add_bool("misc", "override_coredump_limit", FALSE);
settings_add_bool("misc", "quit_on_hup", FALSE);
settings_add_str("misc", "autoload_modules", "irc dcc flood notifylist perl otr");
#ifdef HAVE_SYS_RESOURCE_H
getrlimit(RLIMIT_CORE, &orig_core_rlimit);
#endif
read_settings();
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
signal_add("setup reread", (SIGNAL_FUNC) reread_setup);
signal_add("irssi init read settings", (SIGNAL_FUNC) reread_setup);
signal_add_last("chat protocol created", (SIGNAL_FUNC) reread_setup);
signal_add("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished);
settings_check();
@ -285,9 +298,13 @@ void core_deinit(void)
module_uniq_destroy("WINDOW ITEM TYPE");
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
signal_remove("setup reread", (SIGNAL_FUNC) reread_setup);
signal_remove("irssi init read settings", (SIGNAL_FUNC) reread_setup);
signal_remove("chat protocol created", (SIGNAL_FUNC) reread_setup);
signal_remove("irssi init finished", (SIGNAL_FUNC) sig_irssi_init_finished);
wcwidth_wrapper_deinit();
special_vars_deinit();
i_refstr_deinit();
chat_commands_deinit();

View File

@ -13,7 +13,7 @@
extern int irssi_gui;
extern int irssi_init_finished; /* TRUE after "irssi init finished" signal is sent */
extern int reload_config; /* TRUE after received SIGHUP. */
extern int sighup_received; /* TRUE after received SIGHUP. */
extern time_t client_start_time;
void core_preinit(const char *path);

View File

@ -48,6 +48,7 @@ typedef struct {
} EXPANDO_REC;
const char *current_expando = NULL;
time_t reference_time = (time_t) -1;
time_t current_time = (time_t)-1;
static int timer_tag;
@ -59,6 +60,7 @@ static char *last_privmsg_from, *last_public_from;
static char *sysname, *sysrelease, *sysarch;
static char *timestamp_format;
static char *timestamp_format_alt;
static int timestamp_seconds;
static time_t last_timestamp;
@ -441,11 +443,23 @@ static char *expando_time(SERVER_REC *server, void *item, int *free_ret)
time_t now;
struct tm *tm;
char str[256];
char *format;
now = current_time != (time_t) -1 ? current_time : time(NULL);
tm = localtime(&now);
format = timestamp_format;
if (strftime(str, sizeof(str), timestamp_format, tm) == 0)
if (reference_time != (time_t) -1) {
time_t ref = reference_time;
struct tm tm_ref;
if (localtime_r(&ref, &tm_ref)) {
if (tm_ref.tm_yday != tm->tm_yday || tm_ref.tm_year != tm->tm_year) {
format = timestamp_format_alt;
}
}
}
if (strftime(str, sizeof(str), format, tm) == 0)
return "";
*free_ret = TRUE;
@ -576,7 +590,9 @@ static int sig_timer(void)
static void read_settings(void)
{
g_free_not_null(timestamp_format);
g_free_not_null(timestamp_format_alt);
timestamp_format = g_strdup(settings_get_str("timestamp_format"));
timestamp_format_alt = g_strdup(settings_get_str("timestamp_format_alt"));
timestamp_seconds =
strstr(timestamp_format, "%r") != NULL ||
@ -594,6 +610,7 @@ void expandos_init(void)
#endif
settings_add_str("misc", "STATUS_OPER", "*");
settings_add_str("lookandfeel", "timestamp_format", "%H:%M");
settings_add_str("lookandfeel", "timestamp_format_alt", "%a %e %b %H:%M");
settings_add_bool("lookandfeel", "chanmode_expando_strip", FALSE);
last_sent_msg = NULL; last_sent_msg_body = NULL;
@ -730,6 +747,7 @@ void expandos_deinit(void)
g_free_not_null(sysrelease);
g_free_not_null(sysarch);
g_free_not_null(timestamp_format);
g_free_not_null(timestamp_format_alt);
g_source_remove(timer_tag);
signal_remove("message public", (SIGNAL_FUNC) sig_message_public);

View File

@ -18,6 +18,7 @@ typedef char* (*EXPANDO_FUNC)
extern const char *current_expando;
extern time_t current_time;
extern time_t reference_time;
/* Create expando - overrides any existing ones.
... = signal, type, ..., NULL - list of signals that might change the

View File

@ -81,7 +81,7 @@ static int ignore_match_pattern(IGNORE_REC *rec, const char *text)
* used as a flag to indicate it should only look at ignore items with NO_ACT.
* However we also want to allow NO_ACT combined with levels, so mask it out and
* match levels if set. */
#define FLAG_MSGLEVELS ( MSGLEVEL_NO_ACT | MSGLEVEL_HIDDEN )
#define FLAG_MSGLEVELS (MSGLEVEL_NO_ACT | MSGLEVEL_HIDDEN | MSGLEVEL_NOHILIGHT)
static int ignore_match_level(IGNORE_REC *rec, int level, int flags)
{
level &= ~FLAG_MSGLEVELS;
@ -214,6 +214,9 @@ int ignore_check_plus(SERVER_REC *server, const char *nick, const char *address,
if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_HIDDEN))
*level |= MSGLEVEL_HIDDEN;
if (ignore_check_flags(server, nick, address, target, msg, olevel, MSGLEVEL_NOHILIGHT))
*level |= MSGLEVEL_NOHILIGHT;
return FALSE;
}
@ -252,6 +255,12 @@ IGNORE_REC *ignore_find_full(const char *servertag, const char *mask, const char
if (!(flags & IGNORE_FIND_HIDDEN) && (rec->level & MSGLEVEL_HIDDEN) != 0)
continue;
if ((flags & IGNORE_FIND_NOHILIGHT) && (rec->level & MSGLEVEL_NOHILIGHT) == 0)
continue;
if (!(flags & IGNORE_FIND_NOHILIGHT) && (rec->level & MSGLEVEL_NOHILIGHT) != 0)
continue;
if ((rec->mask == NULL && mask != NULL) ||
(rec->mask != NULL && mask == NULL))
continue;
@ -299,16 +308,6 @@ IGNORE_REC *ignore_find(const char *servertag, const char *mask, char **channels
return ignore_find_full(servertag, mask, NULL, channels, 0);
}
IGNORE_REC *ignore_find_noact(const char *servertag, const char *mask, char **channels, int noact)
{
return ignore_find_full(servertag, mask, NULL, channels, IGNORE_FIND_NOACT);
}
IGNORE_REC *ignore_find_hidden(const char *servertag, const char *mask, char **channels, int hidden)
{
return ignore_find_full(servertag, mask, NULL, channels, IGNORE_FIND_HIDDEN);
}
static void ignore_set_config(IGNORE_REC *rec)
{
CONFIG_NODE *node;

View File

@ -34,6 +34,7 @@ enum {
IGNORE_FIND_PATTERN = 0x01, /* Match the pattern */
IGNORE_FIND_NOACT = 0x02, /* Exclude the targets with NOACT level */
IGNORE_FIND_HIDDEN = 0x04, /* Exclude the targets with HIDDEN level */
IGNORE_FIND_NOHILIGHT = 0x08, /* Exclude the targets with NOHILIGHT level */
};
IGNORE_REC *ignore_find_full (const char *servertag, const char *mask, const char *pattern,
@ -42,8 +43,6 @@ IGNORE_REC *ignore_find_full (const char *servertag, const char *mask, const cha
/* Convenience wrappers around ignore_find_full, for compatibility purpose */
IGNORE_REC *ignore_find(const char *servertag, const char *mask, char **channels);
IGNORE_REC *ignore_find_noact(const char *servertag, const char *mask, char **channels, int noact);
IGNORE_REC *ignore_find_hidden(const char *servertag, const char *mask, char **channels, int hidden);
void ignore_add_rec(IGNORE_REC *rec);
void ignore_update_rec(IGNORE_REC *rec);

View File

@ -1,99 +0,0 @@
#include <irssi/src/core/iregex.h>
Regex *
i_regex_new (const gchar *pattern,
GRegexCompileFlags compile_options,
GRegexMatchFlags match_options,
GError **error)
{
Regex *regex;
char *errbuf;
int cflags;
int errcode, errbuf_len;
regex = g_new0(Regex, 1);
cflags = REG_EXTENDED;
if (compile_options & G_REGEX_CASELESS)
cflags |= REG_ICASE;
if (compile_options & G_REGEX_MULTILINE)
cflags |= REG_NEWLINE;
if (match_options & G_REGEX_MATCH_NOTBOL)
cflags |= REG_NOTBOL;
if (match_options & G_REGEX_MATCH_NOTEOL)
cflags |= REG_NOTEOL;
errcode = regcomp(regex, pattern, cflags);
if (errcode != 0) {
errbuf_len = regerror(errcode, regex, 0, 0);
errbuf = g_malloc(errbuf_len);
regerror(errcode, regex, errbuf, errbuf_len);
g_set_error(error, G_REGEX_ERROR, errcode, "%s", errbuf);
g_free(errbuf);
g_free(regex);
return NULL;
} else {
return regex;
}
}
void
i_regex_unref (Regex *regex)
{
regfree(regex);
g_free(regex);
}
gboolean
i_regex_match (const Regex *regex,
const gchar *string,
GRegexMatchFlags match_options,
MatchInfo **match_info)
{
int groups;
int eflags;
g_return_val_if_fail(regex != NULL, FALSE);
if (match_info != NULL) {
groups = 1 + regex->re_nsub;
*match_info = g_new0(MatchInfo, groups);
} else {
groups = 0;
}
eflags = 0;
if (match_options & G_REGEX_MATCH_NOTBOL)
eflags |= REG_NOTBOL;
if (match_options & G_REGEX_MATCH_NOTEOL)
eflags |= REG_NOTEOL;
return regexec(regex, string, groups, groups ? *match_info : NULL, eflags) == 0;
}
gboolean
i_match_info_fetch_pos (const MatchInfo *match_info,
gint match_num,
gint *start_pos,
gint *end_pos)
{
if (start_pos != NULL)
*start_pos = match_info[match_num].rm_so;
if (end_pos != NULL)
*end_pos = match_info[match_num].rm_eo;
return TRUE;
}
gboolean
i_match_info_matches (const MatchInfo *match_info)
{
g_return_val_if_fail(match_info != NULL, FALSE);
return match_info[0].rm_so != -1;
}
void
i_match_info_free (MatchInfo *match_info)
{
g_free(match_info);
}

View File

@ -3,20 +3,10 @@
#include <irssi/src/common.h>
#ifdef USE_GREGEX
#include <glib.h>
typedef GRegex Regex;
typedef struct _MatchInfo MatchInfo;
#else
#include <regex.h>
typedef regex_t Regex;
typedef regmatch_t MatchInfo;
#endif
gboolean
i_match_info_matches (const MatchInfo *match_info);

View File

@ -23,10 +23,12 @@
/* the order of these levels must match the bits in levels.h */
static const char *levels[] = {
/* clang-format off */
"CRAP",
"MSGS",
"PUBLICS",
"NOTICES",
"PUBNOTICES",
"SNOTES",
"CTCPS",
"ACTIONS",
@ -46,6 +48,7 @@ static const char *levels[] = {
"CLIENTERRORS",
"HILIGHTS",
NULL
/* clang-format on */
};
int level_get(const char *level)
@ -61,6 +64,9 @@ int level_get(const char *level)
if (g_ascii_strcasecmp(level, "NO_ACT") == 0)
return MSGLEVEL_NO_ACT;
if (g_ascii_strcasecmp(level, "NOHILIGHT") == 0)
return MSGLEVEL_NOHILIGHT;
if (g_ascii_strcasecmp(level, "HIDDEN") == 0)
return MSGLEVEL_HIDDEN;
@ -154,6 +160,9 @@ char *bits2level(int bits)
}
}
if (bits & MSGLEVEL_NOHILIGHT)
g_string_append(str, "NOHILIGHT ");
if (bits & MSGLEVEL_HIDDEN)
g_string_append(str, "HIDDEN ");

View File

@ -6,40 +6,46 @@
difficult message leveling system (which might be done if really
needed..). */
/* clang-format off */
/* Message levels */
enum {
MSGLEVEL_CRAP = 0x0000001,
MSGLEVEL_MSGS = 0x0000002,
MSGLEVEL_PUBLIC = 0x0000004,
MSGLEVEL_NOTICES = 0x0000008,
MSGLEVEL_SNOTES = 0x0000010,
MSGLEVEL_CTCPS = 0x0000020,
MSGLEVEL_ACTIONS = 0x0000040,
MSGLEVEL_JOINS = 0x0000080,
MSGLEVEL_PARTS = 0x0000100,
MSGLEVEL_QUITS = 0x0000200,
MSGLEVEL_KICKS = 0x0000400,
MSGLEVEL_MODES = 0x0000800,
MSGLEVEL_TOPICS = 0x0001000,
MSGLEVEL_WALLOPS = 0x0002000,
MSGLEVEL_INVITES = 0x0004000,
MSGLEVEL_NICKS = 0x0008000,
MSGLEVEL_DCC = 0x0010000,
MSGLEVEL_DCCMSGS = 0x0020000,
MSGLEVEL_CLIENTNOTICE = 0x0040000,
MSGLEVEL_CLIENTCRAP = 0x0080000,
MSGLEVEL_CLIENTERROR = 0x0100000,
MSGLEVEL_HILIGHT = 0x0200000,
MSGLEVEL_PUBNOTICES = 0x0000010,
MSGLEVEL_SNOTES = 0x0000020,
MSGLEVEL_CTCPS = 0x0000040,
MSGLEVEL_ACTIONS = 0x0000080,
MSGLEVEL_JOINS = 0x0000100,
MSGLEVEL_PARTS = 0x0000200,
MSGLEVEL_QUITS = 0x0000400,
MSGLEVEL_KICKS = 0x0000800,
MSGLEVEL_MODES = 0x0001000,
MSGLEVEL_TOPICS = 0x0002000,
MSGLEVEL_WALLOPS = 0x0004000,
MSGLEVEL_INVITES = 0x0008000,
MSGLEVEL_NICKS = 0x0010000,
MSGLEVEL_DCC = 0x0020000,
MSGLEVEL_DCCMSGS = 0x0040000,
MSGLEVEL_CLIENTNOTICE = 0x0080000,
MSGLEVEL_CLIENTCRAP = 0x0100000,
MSGLEVEL_CLIENTERROR = 0x0200000,
MSGLEVEL_HILIGHT = 0x0400000,
MSGLEVEL_ALL = 0x03fffff,
MSGLEVEL_ALL = 0x07fffff,
MSGLEVEL_NOHILIGHT = 0x1000000, /* Don't highlight this message */
MSGLEVEL_NO_ACT = 0x2000000, /* Don't trigger channel activity */
MSGLEVEL_NEVER = 0x4000000, /* never ignore / never log */
MSGLEVEL_LASTLOG = 0x8000000, /* used for /lastlog */
MSGLEVEL_HIDDEN = 0x10000000 /* Hidden from view */
MSGLEVEL_HIDDEN = 0x10000000, /* Hidden from view */
MSGLEVEL_RESERVED1 = 0x20000000,
MSGLEVEL_RESERVED2 = 0x40000000,
MSGLEVEL_FORMAT = (int)0x80000000 /* Format data */
};
/* clang-format on */
int level_get(const char *level);
int level2bits(const char *level, int *errorp);

View File

@ -96,7 +96,7 @@ int line_split(const char *data, int len, char **output, LINEBUF_REC **buffer)
if (rec->remove > 0) {
rec->len -= rec->remove;
g_memmove(rec->str, rec->str+rec->remove, rec->len);
memmove(rec->str, rec->str+rec->remove, rec->len);
rec->remove = 0;
}

View File

@ -204,11 +204,10 @@ static void log_rotate_check(LOG_REC *log)
g_free(new_fname);
}
void log_write_rec(LOG_REC *log, const char *str, int level)
void log_write_rec(LOG_REC *log, const char *str, int level, time_t now)
{
char *colorstr;
struct tm *tm;
time_t now;
int hour, day;
g_return_if_fail(log != NULL);
@ -217,6 +216,7 @@ void log_write_rec(LOG_REC *log, const char *str, int level)
if (log->handle == -1)
return;
if (now == (time_t) -1)
now = time(NULL);
tm = localtime(&now);
hour = tm->tm_hour;
@ -282,8 +282,8 @@ LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item,
return NULL;
}
void log_file_write(const char *server_tag, const char *item, int level,
const char *str, int no_fallbacks)
void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str,
int no_fallbacks)
{
GSList *tmp, *fallbacks;
char *tmpstr;
@ -309,7 +309,7 @@ void log_file_write(const char *server_tag, const char *item, int level,
fallbacks = g_slist_append(fallbacks, rec);
else if (log_item_find(rec, LOG_ITEM_TARGET, item,
server_tag) != NULL)
log_write_rec(rec, str, level);
log_write_rec(rec, str, level, t);
}
if (!found && !no_fallbacks && fallbacks != NULL) {
@ -319,7 +319,7 @@ void log_file_write(const char *server_tag, const char *item, int level,
g_strdup(str);
for (tmp = fallbacks; tmp != NULL; tmp = tmp->next)
log_write_rec(tmp->data, tmpstr, level);
log_write_rec(tmp->data, tmpstr, level, t);
g_free(tmpstr);
}
@ -561,7 +561,7 @@ static void log_read_config(void)
if (node != NULL)
log_items_read_config(node, log);
if (log->autoopen || gslist_find_string(fnames, log->fname))
if (log->autoopen || i_slist_find_string(fnames, log->fname))
log_start_logging(log);
}

View File

@ -51,9 +51,9 @@ void log_item_destroy(LOG_REC *log, LOG_ITEM_REC *item);
LOG_ITEM_REC *log_item_find(LOG_REC *log, int type, const char *item,
const char *servertag);
void log_file_write(const char *server_tag, const char *item, int level,
const char *str, int no_fallbacks);
void log_write_rec(LOG_REC *log, const char *str, int level);
void log_file_write(const char *server_tag, const char *item, int level, time_t t, const char *str,
int no_fallbacks);
void log_write_rec(LOG_REC *log, const char *str, int level, time_t now);
int log_start_logging(LOG_REC *log);
void log_stop_logging(LOG_REC *log);

View File

@ -1,13 +1,7 @@
# this file is part of irssi
if want_gregex
regex_impl = files('iregex-gregex.c')
else
regex_impl = files('iregex-regexh.c')
endif
if have_capsicum
core_capsicum_source = files('fe-capsicum.c')
core_capsicum_source = files('capsicum.c')
else
core_capsicum_source = []
endif
@ -24,6 +18,7 @@ libcore_a = static_library('core',
'core.c',
'expandos.c',
'ignore.c',
'iregex-gregex.c',
'levels.c',
'line-split.c',
'log-away.c',
@ -58,7 +53,6 @@ libcore_a = static_library('core',
'write-buffer.c',
)
+ core_capsicum_source
+ regex_impl
+ [
default_config_h,
irssi_version_h,

View File

@ -37,15 +37,15 @@ static int irssi_io_invoke(GIOChannel *source, GIOCondition condition,
if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL)) {
/* error, we have to call the function.. */
if (rec->condition & G_IO_IN)
icond |= G_INPUT_READ;
icond |= I_INPUT_READ;
else
icond |= G_INPUT_WRITE;
icond |= I_INPUT_WRITE;
}
if (condition & (G_IO_IN | G_IO_PRI))
icond |= G_INPUT_READ;
icond |= I_INPUT_READ;
if (condition & G_IO_OUT)
icond |= G_INPUT_WRITE;
icond |= I_INPUT_WRITE;
if (rec->condition & icond)
rec->function(rec->data, source, icond);
@ -53,8 +53,8 @@ static int irssi_io_invoke(GIOChannel *source, GIOCondition condition,
return TRUE;
}
int g_input_add_full(GIOChannel *source, int priority, int condition,
GInputFunction function, void *data)
int i_input_add_full(GIOChannel *source, int priority, int condition, GInputFunction function,
void *data)
{
IRSSI_INPUT_REC *rec;
unsigned int result;
@ -66,9 +66,9 @@ int g_input_add_full(GIOChannel *source, int priority, int condition,
rec->data = data;
cond = (GIOCondition) (G_IO_ERR|G_IO_HUP|G_IO_NVAL);
if (condition & G_INPUT_READ)
if (condition & I_INPUT_READ)
cond |= G_IO_IN|G_IO_PRI;
if (condition & G_INPUT_WRITE)
if (condition & I_INPUT_WRITE)
cond |= G_IO_OUT;
result = g_io_add_watch_full(source, priority, cond,
@ -77,23 +77,22 @@ int g_input_add_full(GIOChannel *source, int priority, int condition,
return result;
}
int g_input_add(GIOChannel *source, int condition,
GInputFunction function, void *data)
int i_input_add(GIOChannel *source, int condition, GInputFunction function, void *data)
{
return g_input_add_full(source, G_PRIORITY_DEFAULT, condition,
function, data);
return i_input_add_full(source, G_PRIORITY_DEFAULT, condition, function, data);
}
/* easy way to bypass glib polling of io channel internal buffer */
int g_input_add_poll(int fd, int priority, int condition,
GInputFunction function, void *data)
int i_input_add_poll(int fd, int priority, int condition, GInputFunction function, void *data)
{
GIOChannel *source = g_io_channel_unix_new(fd);
int ret = g_input_add_full(source, priority, condition, function, data);
int ret = i_input_add_full(source, priority, condition, function, data);
g_io_channel_unref(source);
return ret;
}
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2)
{
if (tv1->tv_sec < tv2->tv_sec)
@ -119,6 +118,22 @@ long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2)
return usecs;
}
#pragma GCC diagnostic pop
#if GLIB_CHECK_VERSION(2, 56, 0)
/* nothing */
#else
/* compatibility code for old GLib */
GDateTime *g_date_time_new_from_iso8601(const gchar *iso_date, GTimeZone *default_tz)
{
GTimeVal time;
if (g_time_val_from_iso8601(iso_date, &time)) {
return g_date_time_new_from_timeval_utc(&time);
} else {
return NULL;
}
}
#endif
int find_substr(const char *list, const char *item)
{
@ -164,7 +179,7 @@ int strarray_find(char **array, const char *item)
return -1;
}
GSList *gslist_find_string(GSList *list, const char *key)
GSList *i_slist_find_string(GSList *list, const char *key)
{
for (; list != NULL; list = list->next)
if (g_strcmp0(list->data, key) == 0) return list;
@ -172,7 +187,7 @@ GSList *gslist_find_string(GSList *list, const char *key)
return NULL;
}
GSList *gslist_find_icase_string(GSList *list, const char *key)
GSList *i_slist_find_icase_string(GSList *list, const char *key)
{
for (; list != NULL; list = list->next)
if (g_ascii_strcasecmp(list->data, key) == 0) return list;
@ -180,7 +195,7 @@ GSList *gslist_find_icase_string(GSList *list, const char *key)
return NULL;
}
void *gslist_foreach_find(GSList *list, FOREACH_FIND_FUNC func, const void *data)
void *i_slist_foreach_find(GSList *list, FOREACH_FIND_FUNC func, const void *data)
{
void *ret;
@ -194,7 +209,7 @@ void *gslist_foreach_find(GSList *list, FOREACH_FIND_FUNC func, const void *data
return NULL;
}
void gslist_free_full (GSList *list, GDestroyNotify free_func)
void i_slist_free_full(GSList *list, GDestroyNotify free_func)
{
GSList *tmp;
@ -207,7 +222,7 @@ void gslist_free_full (GSList *list, GDestroyNotify free_func)
g_slist_free(list);
}
GSList *gslist_remove_string (GSList *list, const char *str)
GSList *i_slist_remove_string(GSList *list, const char *str)
{
GSList *l;
@ -218,7 +233,7 @@ GSList *gslist_remove_string (GSList *list, const char *str)
return list;
}
GSList *gslist_delete_string (GSList *list, const char *str, GDestroyNotify free_func)
GSList *i_slist_delete_string(GSList *list, const char *str, GDestroyNotify free_func)
{
GSList *l;
@ -252,7 +267,7 @@ char *gslistptr_to_string(GSList *list, int offset, const char *delimiter)
}
/* `list' contains char* */
char *gslist_to_string(GSList *list, const char *delimiter)
char *i_slist_to_string(GSList *list, const char *delimiter)
{
GString *str;
char *ret;
@ -290,7 +305,7 @@ GList *optlist_remove_known(const char *cmd, GHashTable *optlist)
return list;
}
GList *glist_find_string(GList *list, const char *key)
GList *i_list_find_string(GList *list, const char *key)
{
for (; list != NULL; list = list->next)
if (g_strcmp0(list->data, key) == 0) return list;
@ -298,7 +313,7 @@ GList *glist_find_string(GList *list, const char *key)
return NULL;
}
GList *glist_find_icase_string(GList *list, const char *key)
GList *i_list_find_icase_string(GList *list, const char *key)
{
for (; list != NULL; list = list->next)
if (g_ascii_strcasecmp(list->data, key) == 0) return list;
@ -405,17 +420,17 @@ char *convert_home(const char *path)
}
}
int g_istr_equal(gconstpointer v, gconstpointer v2)
int i_istr_equal(gconstpointer v, gconstpointer v2)
{
return g_ascii_strcasecmp((const char *) v, (const char *) v2) == 0;
}
int g_istr_cmp(gconstpointer v, gconstpointer v2)
int i_istr_cmp(gconstpointer v, gconstpointer v2)
{
return g_ascii_strcasecmp((const char *) v, (const char *) v2);
}
guint g_istr_hash(gconstpointer v)
guint i_istr_hash(gconstpointer v)
{
const signed char *p;
guint32 h = 5381;

View File

@ -1,8 +1,7 @@
#ifndef IRSSI_CORE_MISC_H
#define IRSSI_CORE_MISC_H
int g_input_add_poll(int fd, int priority, int condition,
GInputFunction function, void *data);
int i_input_add_poll(int fd, int priority, int condition, GInputFunction function, void *data);
/* `str' should be type char[MAX_INT_STRLEN] */
#define ltoa(str, num) \
@ -11,27 +10,37 @@ int g_input_add_poll(int fd, int priority, int condition,
typedef void* (*FOREACH_FIND_FUNC) (void *item, void *data);
typedef int (*COLUMN_LEN_FUNC)(void *data);
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
/* Returns 1 if tv1 > tv2, -1 if tv2 > tv1 or 0 if they're equal. */
int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2);
int g_timeval_cmp(const GTimeVal *tv1, const GTimeVal *tv2) G_GNUC_DEPRECATED;
/* Returns "tv1 - tv2", returns the result in milliseconds. Note that
if the difference is too large, the result might be invalid. */
long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2);
long get_timeval_diff(const GTimeVal *tv1, const GTimeVal *tv2) G_GNUC_DEPRECATED;
#pragma GCC diagnostic pop
GSList *gslist_find_string(GSList *list, const char *key);
GSList *gslist_find_icase_string(GSList *list, const char *key);
GList *glist_find_string(GList *list, const char *key);
GList *glist_find_icase_string(GList *list, const char *key);
GSList *gslist_remove_string (GSList *list, const char *str) G_GNUC_DEPRECATED;
GSList *gslist_delete_string (GSList *list, const char *str, GDestroyNotify free_func);
#if GLIB_CHECK_VERSION(2, 56, 0)
/* nothing */
#else
/* compatibility code for old GLib */
GDateTime *g_date_time_new_from_iso8601(const gchar *iso_date, GTimeZone *default_tz);
#endif
void gslist_free_full (GSList *list, GDestroyNotify free_func);
GSList *i_slist_find_string(GSList *list, const char *key);
GSList *i_slist_find_icase_string(GSList *list, const char *key);
GList *i_list_find_string(GList *list, const char *key);
GList *i_list_find_icase_string(GList *list, const char *key);
GSList *i_slist_remove_string(GSList *list, const char *str) G_GNUC_DEPRECATED;
GSList *i_slist_delete_string(GSList *list, const char *str, GDestroyNotify free_func);
void *gslist_foreach_find(GSList *list, FOREACH_FIND_FUNC func, const void *data);
void i_slist_free_full(GSList *list, GDestroyNotify free_func);
void *i_slist_foreach_find(GSList *list, FOREACH_FIND_FUNC func, const void *data);
/* `list' contains pointer to structure with a char* to string. */
char *gslistptr_to_string(GSList *list, int offset, const char *delimiter);
/* `list' contains char* */
char *gslist_to_string(GSList *list, const char *delimiter);
char *i_slist_to_string(GSList *list, const char *delimiter);
GList *optlist_remove_known(const char *cmd, GHashTable *optlist);
@ -39,11 +48,11 @@ GList *optlist_remove_known(const char *cmd, GHashTable *optlist);
char *convert_home(const char *path);
/* Case-insensitive string hash functions */
int g_istr_equal(gconstpointer v, gconstpointer v2);
unsigned int g_istr_hash(gconstpointer v);
int i_istr_equal(gconstpointer v, gconstpointer v2);
unsigned int i_istr_hash(gconstpointer v);
/* Case-insensitive GCompareFunc func */
int g_istr_cmp(gconstpointer v, gconstpointer v2);
int i_istr_cmp(gconstpointer v, gconstpointer v2);
/* Find `mask' from `data', you can use * and ? wildcards. */
int match_wildcards(const char *mask, const char *data);

View File

@ -27,8 +27,6 @@
#include <irssi/src/core/commands.h>
#include <irssi/src/core/misc.h>
#ifdef HAVE_GMODULE
/* Returns the module name without path, "lib" prefix or ".so" suffix */
static char *module_get_name(const char *path, int *start, int *end)
{
@ -395,15 +393,6 @@ static void module_file_deinit_gmodule(MODULE_FILE_REC *file)
g_module_close(file->gmodule);
}
#else /* !HAVE_GMODULE - modules are not supported */
int module_load(const char *path, char **prefixes)
{
return FALSE;
}
#endif
void module_file_unload(MODULE_FILE_REC *file)
{
MODULE_REC *root;
@ -414,10 +403,8 @@ void module_file_unload(MODULE_FILE_REC *file)
if (file->initialized)
signal_emit("module unloaded", 2, file->root, file);
#ifdef HAVE_GMODULE
if (file->gmodule != NULL)
module_file_deinit_gmodule(file);
#endif
g_free(file->name);
g_free(file->defined_module_name);

View File

@ -214,7 +214,7 @@ MODULE_FILE_REC *module_register_full(const char *name, const char *submodule,
module = g_new0(MODULE_REC, 1);
module->name = g_strdup(name);
modules = g_slist_append(modules, module);
modules = g_slist_prepend(modules, module);
}
file = module_file_find(module, submodule);
@ -226,7 +226,7 @@ MODULE_FILE_REC *module_register_full(const char *name, const char *submodule,
file->name = g_strdup(submodule);
file->defined_module_name = g_strdup(defined_module_name);
module->files = g_slist_append(module->files, file);
module->files = g_slist_prepend(module->files, file);
return file;
}

View File

@ -16,13 +16,7 @@
#define MODULE_DATA(rec) \
g_hash_table_lookup((rec)->module_data, MODULE_NAME)
#ifdef HAVE_GMODULE
# define MODULE_IS_STATIC(rec) \
((rec)->gmodule == NULL)
#else
# define MODULE_IS_STATIC(rec) TRUE
#endif
#define MODULE_IS_STATIC(rec) ((rec)->gmodule == NULL)
#define MODULE_ABICHECK(fn_modulename) \
void fn_modulename ## _abicheck(int *version) \
@ -45,9 +39,7 @@ typedef struct {
char *defined_module_name;
void (*module_deinit) (void);
#ifdef HAVE_GMODULE
GModule *gmodule; /* static, if NULL */
#endif
unsigned int initialized:1;
} MODULE_FILE_REC;

View File

@ -97,8 +97,7 @@ void net_disconnect_later(GIOChannel *handle)
rec = g_new(NET_DISCONNECT_REC, 1);
rec->created = time(NULL);
rec->handle = handle;
rec->tag = g_input_add(handle, G_INPUT_READ,
(GInputFunction) sig_disconnect, rec);
rec->tag = i_input_add(handle, I_INPUT_READ, (GInputFunction) sig_disconnect, rec);
if (timeout_tag == -1) {
timeout_tag = g_timeout_add(10000, (GSourceFunc)

View File

@ -27,13 +27,13 @@
/* nonblocking gethostbyname(), ip (IPADDR) + error (int, 0 = not error) is
written to pipe when found PID of the resolver child is returned */
int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe,
int reverse_lookup)
int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe, int reverse_lookup)
{
RESOLVED_IP_REC rec;
const char *errorstr;
int pid;
int len;
(void) reverse_lookup; /* Kept for API backward compatibility */
g_return_val_if_fail(addr != NULL, FALSE);
@ -57,37 +57,14 @@ int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe,
rec.error = net_gethostbyname(addr, &rec.ip4, &rec.ip6);
if (rec.error == 0) {
errorstr = NULL;
if (reverse_lookup) {
/* reverse lookup the IP, ignore any error */
if (rec.ip4.family != 0)
net_gethostbyaddr(&rec.ip4, &rec.host4);
if (rec.ip6.family != 0)
net_gethostbyaddr(&rec.ip6, &rec.host6);
}
} else {
errorstr = net_gethosterror(rec.error);
rec.errlen = errorstr == NULL ? 0 : strlen(errorstr)+1;
}
g_io_channel_write_block(pipe, &rec, sizeof(rec));
i_io_channel_write_block(pipe, &rec, sizeof(rec));
if (rec.errlen != 0)
g_io_channel_write_block(pipe, (void *) errorstr, rec.errlen);
else {
if (rec.host4) {
len = strlen(rec.host4) + 1;
g_io_channel_write_block(pipe, (void *) &len,
sizeof(int));
g_io_channel_write_block(pipe, (void *) rec.host4,
len);
}
if (rec.host6) {
len = strlen(rec.host6) + 1;
g_io_channel_write_block(pipe, (void *) &len,
sizeof(int));
g_io_channel_write_block(pipe, (void *) rec.host6,
len);
}
}
i_io_channel_write_block(pipe, (void *) errorstr, rec.errlen);
if (pid == 0)
_exit(99);
@ -99,17 +76,13 @@ int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe,
/* get the resolved IP address */
int net_gethostbyname_return(GIOChannel *pipe, RESOLVED_IP_REC *rec)
{
int len;
rec->error = -1;
rec->errorstr = NULL;
rec->host4 = NULL;
rec->host6 = NULL;
fcntl(g_io_channel_unix_get_fd(pipe), F_SETFL, O_NONBLOCK);
/* get ip+error */
if (g_io_channel_read_block(pipe, rec, sizeof(*rec)) == -1) {
if (i_io_channel_read_block(pipe, rec, sizeof(*rec)) == -1) {
rec->errorstr = g_strdup_printf("Host name lookup: %s",
g_strerror(errno));
return -1;
@ -119,18 +92,7 @@ int net_gethostbyname_return(GIOChannel *pipe, RESOLVED_IP_REC *rec)
/* read error string, if we can't read everything for some
reason, just ignore it. */
rec->errorstr = g_malloc0(rec->errlen+1);
g_io_channel_read_block(pipe, rec->errorstr, rec->errlen);
} else {
if (rec->host4) {
g_io_channel_read_block(pipe, &len, sizeof(int));
rec->host4 = g_malloc0(len);
g_io_channel_read_block(pipe, rec->host4, len);
}
if (rec->host6) {
g_io_channel_read_block(pipe, &len, sizeof(int));
rec->host6 = g_malloc0(len);
g_io_channel_read_block(pipe, rec->host6, len);
}
i_io_channel_read_block(pipe, rec->errorstr, rec->errlen);
}
return 0;

View File

@ -9,12 +9,10 @@ typedef struct {
int errlen; /* error text length */
char *errorstr; /* error string - dynamically allocated, you'll
need to free() it yourself unless it's NULL */
char *host4, *host6; /* dito */
} RESOLVED_IP_REC;
/* nonblocking gethostbyname(), PID of the resolver child is returned. */
int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe,
int reverse_lookup);
int net_gethostbyname_nonblock(const char *addr, GIOChannel *pipe, int reverse_lookup);
/* get the resolved IP address. returns -1 if some error occurred with read() */
int net_gethostbyname_return(GIOChannel *pipe, RESOLVED_IP_REC *rec);

Some files were not shown because too many files have changed in this diff Show More