Compare commits

..

199 Commits

Author SHA1 Message Date
Psychotic Ninja Build System
cf4ea85ae4 Add initial support for RPM 2022-11-10 02:31:34 -06:00
Ailin Nemui
684094aa85 Merge tag '1.4.3' into integrate/1.4.3 2022-10-29 12:22:58 +02:00
Ailin Nemui
c99c8b444d tag as 1.4.3 2022-10-29 12:13:46 +02:00
ailin-nemui
f9f6341c20 Merge pull request #1420 from ailin-nemui/starttls-config
enable saving of -disallow_starttls

(cherry picked from commit afba1480562bba77b127322eb55a3a768a1e98b4)
2022-10-29 12:07:34 +02:00
ailin-nemui
9a95edc69a Merge pull request #1419 from ailin-nemui/init-irc-funcs
move irc server functions to object creation time

(cherry picked from commit a661e2fb35d4683871a374805daf8a20935f313f)
2022-10-29 12:07:23 +02:00
ailin-nemui
93a94308bd Merge pull request #1417 from ailin-nemui/loop
do not freeze on alt+left/right

(cherry picked from commit 0c97433c7c41e50744da1c2ceaf19131e96fdf18)
2022-10-29 12:07:05 +02:00
ailin-nemui
afba148056
Merge pull request #1420 from ailin-nemui/starttls-config
enable saving of -disallow_starttls
2022-10-15 08:52:40 +02:00
ailin-nemui
a661e2fb35
Merge pull request #1419 from ailin-nemui/init-irc-funcs
move irc server functions to object creation time
2022-10-15 08:52:32 +02:00
ailin-nemui
0c97433c7c
Merge pull request #1417 from ailin-nemui/loop
do not freeze on alt+left/right
2022-10-15 08:52:20 +02:00
ailin-nemui
26f9750ad1 Merge pull request #1414 from irssi/vague666-patch-4
Add -nocap to /connect and /server connect syntax

(cherry picked from commit 55913ade1350a4c1087b0238ac863e0bab081fd7)
2022-10-14 22:41:21 +02:00
ailin-nemui
277923aaac Merge pull request #1413 from irssi/vague666-patch-3
Update /server syntax line

(cherry picked from commit 238d7cfd08d14115762d78b11c567c850133f72a)
2022-10-14 22:41:21 +02:00
ailin-nemui
23419e5866 Merge pull request #1415 from irssi/vague666-patch-5
/server: Add help for -cap/-nocap

(cherry picked from commit f76d41953f94bab519dec99c38d0b7fdb8bca1f4)
2022-10-14 22:41:21 +02:00
ailin-nemui
2c18da3cc6 Merge pull request #1411 from irssi/vague666-patch-1
/connect: Add help for -nocap

(cherry picked from commit 38b18bd84da03f127e0ed51154923576bf22ae6f)
2022-10-14 22:41:21 +02:00
ailin-nemui
c01b35b062 Merge pull request #1407 from madpilot78/Fix_libnv_detection
Fix libnv detection on recent FreeBSD

(cherry picked from commit f32d0ab51a5569ad908cefa3b033a7fb367240e7)
2022-10-14 22:41:21 +02:00
ailin-nemui
f51bc42429 Merge pull request #1380 from ailin-nemui/scriptassist
run syncscripts.sh

(cherry picked from commit 68823eb6af68d941e94327170d6f5261568b6899)
2022-10-14 21:46:50 +02:00
ailin-nemui
be5f917f07 Merge pull request #1393 from ailin-nemui/eval-help
minor rendering fix in eval help

(cherry picked from commit 0bf18beed75e0423c7848908ebc4ba6f39cc96c7)
2022-10-14 21:46:30 +02:00
Ailin Nemui
833f41179d enable saving of -disallow_starttls 2022-10-14 21:37:09 +02:00
Ailin Nemui
c2457c7d94 move irc server functions to object creation time 2022-10-14 21:06:51 +02:00
Ailin Nemui
093dcd423f no infinite loops please 2022-09-22 22:25:02 +02:00
ailin-nemui
55913ade13
Merge pull request #1414 from irssi/vague666-patch-4
Add -nocap to /connect and /server connect syntax
2022-09-14 09:24:35 +02:00
ailin-nemui
de2bf6707f fix clang-format 2022-09-14 09:19:18 +02:00
ailin-nemui
238d7cfd08
Merge pull request #1413 from irssi/vague666-patch-3
Update /server syntax line
2022-09-13 09:52:30 +02:00
ailin-nemui
f76d41953f
Merge pull request #1415 from irssi/vague666-patch-5
/server: Add help for -cap/-nocap
2022-09-13 09:51:57 +02:00
ailin-nemui
38b18bd84d
Merge pull request #1411 from irssi/vague666-patch-1
/connect: Add help for -nocap
2022-09-13 09:51:43 +02:00
Jari Matilainen
d448ca3341
/server: Add help for -cap/-nocap 2022-09-12 14:17:34 +02:00
Jari Matilainen
07041c37d4
Add -nocap to /connect and /server connect syntax 2022-09-12 14:15:11 +02:00
Jari Matilainen
fe77b7e06f
Update /server syntax line 2022-09-12 14:07:05 +02:00
Jari Matilainen
03edebd54c
/connect: Add help for -nocap 2022-09-12 14:03:21 +02:00
ailin-nemui
f32d0ab51a
Merge pull request #1407 from madpilot78/Fix_libnv_detection
Fix libnv detection on recent FreeBSD
2022-08-19 10:42:05 +02:00
Guido Falsi
7baefc3315 Fix libnv detection on recent FreeBSD
On recent FreeBSD systems it is required to include the sys/nv.h file, otherwise symbols are missing.

Reported here: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=265397

Patch suggested by: Kristof Provost <kp@freebsd.org>
2022-08-19 10:32:47 +02:00
ailin-nemui
58109aeeed
Merge pull request #1403 from lnde/fetext-sigterm
Re-write SIGTERM handling
2022-08-12 12:17:49 +02:00
Andreas Lundin
a237321b33 re-write SIGTERM handling
Exit safely on SIGTERM by emitting "gui exit" from the main loops of
fe-text and fe-none rather than from the signal handler itself.

Based on feedback from Nei and dwfreed.
2022-08-11 20:09:59 +00:00
ailin-nemui
555030a2ad
Merge pull request #1405 from ailin-nemui/no-chatnet-crash
fix crash when loading server without chatnet
2022-08-08 22:20:19 +02:00
Ailin Nemui
252656cad4 fix crash when loading server without chatnet 2022-07-24 19:32:47 +02:00
Ailin Nemui
722d3c4c3d Merge tag '1.4.2' into integrate/1.4.2 2022-07-13 20:33:59 +02:00
ailin-nemui
a57cc1c55e
Merge pull request #1398 from ailin-nemui/lastlog-crash
get line texts before printing lastlog
2022-07-13 19:10:50 +02:00
Ailin Nemui
7fe7de3c2e get line texts before printing lastlog 2022-07-12 20:50:01 +02:00
ailin-nemui
5b0f7f7899
Merge pull request #1394 from ailin-nemui/faster-termux-pkg
use less time on termux pkg
2022-07-02 16:09:05 +02:00
Ailin Nemui
3fec4d894f use less time on termux pkg
hard-code the values instead of building perl
2022-07-02 14:12:15 +02:00
ailin-nemui
0bf18beed7
Merge pull request #1393 from ailin-nemui/eval-help
minor rendering fix in eval help
2022-06-30 23:25:35 +02:00
Ailin Nemui
f135339e27 minor rendering fix in eval help 2022-06-30 23:13:48 +02:00
ailin-nemui
593afc2e40
Merge pull request #1384 from ailin-nemui/meson-system-includes
use -isystem instead of -I for include directories
2022-06-18 12:43:01 +02:00
ailin-nemui
783dd37533
Merge pull request #1387 from ailin-nemui/textbufferview
Textbufferview
2022-06-18 12:42:47 +02:00
Ailin Nemui
4dc3eb1048 update clang-format 2022-06-13 09:41:46 +02:00
Ailin Nemui
453e65bbfe misc cleanup 2022-06-13 09:41:46 +02:00
Ailin Nemui
b028b8e19d fix recount of lines after scroll 2022-06-13 09:41:46 +02:00
Ailin Nemui
48edd6f5fa fix recount of lines after window set 2022-06-13 08:22:18 +02:00
ailin-nemui
a5f5ea7d79
Merge pull request #1388 from ailin-nemui/default-hash-chan
default to hash channels
2022-06-13 07:39:29 +02:00
Ailin Nemui
891ef5df10 default to hash channels 2022-06-13 02:44:33 +02:00
Ailin Nemui
04b914dcb0 fix visible lines expiring from cache 2022-06-13 01:17:19 +02:00
Ailin Nemui
67aa2baf62 fix memory leak when updating single line 2022-06-13 01:17:19 +02:00
Ailin Nemui
ae8ec99d5c fix scrollback redraw not updating linecount 2022-06-13 01:17:19 +02:00
ailin-nemui
68823eb6af
Merge pull request #1380 from ailin-nemui/scriptassist
run syncscripts.sh
2022-06-12 18:11:05 +02:00
ailin-nemui
545d97f8d6
Merge pull request #1383 from ailin-nemui/pc-moduledir
add irssimoduledir to irssi-1.pc
2022-06-12 18:10:50 +02:00
Ailin Nemui
279fa4e5b8 remove relevant code from termux receipe 2022-06-12 17:18:53 +02:00
Ailin Nemui
528632bba2 use -isystem instead of -I for include directories
limits warnings to our own code
2022-06-12 17:13:28 +02:00
Ailin Nemui
34d45ac678 add irssimoduledir to irssi-1.pc
for module authors to know where to install to
2022-06-12 16:52:31 +02:00
Ailin Nemui
88745d2941 run syncscripts.sh 2022-06-12 12:34:33 +02:00
ailin-nemui
07aa061b6d
Merge pull request #1377 from ailin-nemui/meson
fix yet another meson regression
2022-06-12 05:33:41 +02:00
Ailin Nemui
ac35fe010e fix yet another meson regression
broken by meson 0.60.0
2022-06-11 22:58:56 +02:00
Ailin Nemui
de46fee864 update website 2022-06-11 18:10:29 +02:00
Ailin Nemui
f2c5e60766 revert branding 2022-06-07 15:47:49 +02:00
Ailin Nemui
531c68ed09 Merge tag '1.4.1' into integrate/1.4.1 2022-06-06 21:11:30 +02:00
ailin-nemui
47b0661e96
Merge pull request #88 from ailin-nemui/arraycopy
fix missing len in g_array_copy
2022-06-01 18:38:15 +02:00
Ailin Nemui
a39bc0601c fix missing len in g_array_copy 2022-05-31 21:09:39 +02:00
Ailin Nemui
c33d0c2384 Merge tag '1.4.0-an' into integrate/1.4.0-an 2022-05-31 12:34:27 +02:00
ailin-nemui
af5feb16be
Merge pull request #84 from ailin-nemui/ignore-leak
avoid memory leak in ignore cache
2022-05-26 00:20:13 +02:00
Ailin Nemui
66e3b0e578 avoid memory leak in ignore cache
#1373
2022-05-22 11:06:53 +02:00
ailin-nemui
7285da27e0
Merge pull request #87 from ailin-nemui/names
stop IRC names when using /names
2022-05-22 11:00:02 +02:00
Ailin Nemui
5b340d7d2b stop IRC names when using /names 2022-05-19 14:54:15 +02:00
Ailin Nemui
9f71a391c3 test OBS workflow 2022-05-19 14:37:59 +02:00
Ailin Nemui
fb5c99d27f Merge remote-tracking branch 'irssi/master' 2022-04-25 23:33:58 +02: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
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
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
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
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
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
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
6db881d8ef
Merge pull request #44 from ailin-nemui/lag
fix max_lag disconnect
2021-10-11 22:08:14 +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
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
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
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
152 changed files with 920 additions and 4488 deletions

View File

@ -7,10 +7,8 @@ name: Check Irssi
env:
apt_build_deps: libutf8proc-dev libperl-dev libotr5-dev
apt_build_deps_meson: ninja-build
apt_build_deps_autotools: autoconf automake libtool
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
build_options_configure: --with-proxy=module --with-bot --with-perl=module --with-otr=module
prefix: ~/irssi-build
jobs:
dist:
@ -18,13 +16,11 @@ jobs:
steps:
- name: prepare required software
run: |
sudo apt update && sudo apt install $apt_build_deps $apt_build_deps_autotools
sudo apt update && sudo apt install $apt_build_deps
- uses: actions/checkout@main
- name: make dist
run: |
# make dist
./autogen.sh $build_options_configure
make dist
./utils/make-dist.sh
- uses: actions/upload-artifact@v2
with:
path: irssi-*.tar.gz
@ -39,17 +35,17 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-18.04, ubuntu-latest]
builder: [meson, configure]
builder: [meson]
compiler: [clang, gcc]
flags: [regular]
include:
- os: ubuntu-18.04
builder: meson
meson_ver: ==0.49.2
meson_ver: ==0.53.2
setuptools_ver: <51
- os: ubuntu-latest
builder: meson
meson_ver: <0.60.0
meson_ver: <0.63.0
- os: ubuntu-latest
builder: meson
flags: meson-latest FAILURE-OK
@ -77,23 +73,6 @@ jobs:
ninja -C Build
ninja -C Build install
if: ${{ matrix.builder == 'meson' }}
- name: build and install with Makefile
run: |
# make install
cd irssi-*/
mkdir Build
cd Build
../configure $build_options_configure --prefix=${prefix/\~/~} --enable-always-build-tests
make CFLAGS="-Wall -Werror -Werror=declaration-after-statement"
make install
if: ${{ matrix.builder == 'configure' }}
- name: run tests with Makefile
run: |
# make check
cd irssi-*/Build
make -C tests -sk check
find -name test-suite.log -exec cat {} +
if: ${{ matrix.builder == 'configure' }}
- name: run tests with Meson
run: |
# ninja test

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

@ -0,0 +1,79 @@
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: create irssi build receipe
run: |
mkdir packages/irssi-an
cat << 'BUILD_SH' > packages/irssi-an/build.sh
TERMUX_PKG_HOMEPAGE=https://irssi.org/
TERMUX_PKG_DESCRIPTION="Terminal based IRC client"
TERMUX_PKG_LICENSE="GPL-2.0"
TERMUX_PKG_MAINTAINER="@irssi"
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-perl-cross-$TERMUX_ARCH.txt
TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
-Dfhs-prefix=$TERMUX_PREFIX
--cross-file $TERMUX_MESON_PERL_CROSS_FILE
"
termux_step_pre_configure() {
LDFLAGS+=" -landroid-glob"
# Make build log less noisy.
CFLAGS+=" -Wno-compound-token-split-by-macro"
local perl_version=$(. $TERMUX_SCRIPTDIR/packages/perl/build.sh; echo $TERMUX_PKG_VERSION)
cat << MESON_PERL_CROSS >$TERMUX_MESON_PERL_CROSS_FILE
[properties]
perl_version = '$perl_version'
perl_ccopts = ['-I$TERMUX_PREFIX/include', '-D_LARGEFILE_SOURCE', '-D_FILE_OFFSET_BITS=64', '-I$TERMUX_PREFIX/lib/perl5/$perl_version/${TERMUX_ARCH}-android/CORE']
perl_ldopts = ['-Wl,-E', '-I$TERMUX_PREFIX/include', '-L$TERMUX_PREFIX/lib/perl5/$perl_version/${TERMUX_ARCH}-android/CORE', '-lperl', '-lm', '-ldl']
perl_archname = '${TERMUX_ARCH}-android'
perl_installsitearch = '$TERMUX_PREFIX/lib/perl5/site_perl/$perl_version/${TERMUX_ARCH}-android'
perl_installvendorarch = ''
perl_inc = ['$TERMUX_PREFIX/lib/perl5/site_perl/$perl_version/${TERMUX_ARCH}-android', '$TERMUX_PREFIX/lib/perl5/site_perl/$perl_version', '$TERMUX_PREFIX/lib/perl5/$perl_version/${TERMUX_ARCH}-android', '$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: prepare output folder
run: |
install -m a+rwx -d output
- name: build irssi package
run: |
sudo ./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

20
.github/workflows/trigger-pages.yml vendored Normal file
View File

@ -0,0 +1,20 @@
on:
push:
branches:
- master
jobs:
rebuild-pages:
if: github.repository == 'irssi/irssi'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v6
with:
github-token: ${{ secrets.PAT_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: 'irssi.github.io',
workflow_id: 'pages.yml',
ref: 'main'
})

3
.gitignore vendored
View File

@ -86,3 +86,6 @@ src/fe-fuzz/oom-*
Build
subprojects/*
!subprojects/*.wrap
Irssi-Dist
setup.cfg
*.egg-info

13
.obs/workflows.yml Normal file
View File

@ -0,0 +1,13 @@
workflow:
steps:
- branch_package:
source_project: home:ailin_nemui:irssi-git-an
source_package: irssi-git-an
target_project: home:ailin_nemui:CI
- set_flags:
flags:
- type: publish
status: enable
project: home:ailin_nemui:CI
filters:
event: pull_request

60
INSTALL
View File

@ -4,7 +4,7 @@
To compile Irssi you need:
- meson-0.49 build system with ninja-1.5 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)
@ -17,21 +17,12 @@ 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
@ -39,33 +30,28 @@ configure options
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).
-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
@ -82,31 +68,18 @@ the -Dc_args and -Dc_link_args options 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
@ -134,13 +107,4 @@ would call:
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,35 +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 \
meson.build \
meson_options.txt

11
NEWS
View File

@ -1,3 +1,14 @@
v1.5-head 202x-xx-xx The Irssi team <staff@irssi.org>
v1.4.3 2022-10-31 The Irssi team <staff@irssi.org>
- Fix freeze on Alt+arrows (#1416, #1417)
- Fix crash on /upgrade (#1399, #1419)
- Fix saving of -disallow_starttls (#1401, #1420)
- Fix libnv detection on FreeBSD (freebsd#265397, #1407). By
Guido Falsi and Kristof Provost
- Minor help and script fixes (#1380, #1393, #1411, #1413,
#1414, #1415)
v1.4.2 2022-07-17 The Irssi team <staff@irssi.org>
* Add irssimoduledir to irssi-1.pc in the Meson build (#1383,
#1378)

View File

@ -17,7 +17,7 @@ available.
#### 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
@ -29,7 +29,7 @@ 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
* Verify signature
```
tar xJf irssi-*.tar.xz
cd irssi-*
@ -48,8 +48,8 @@ ninja -C Build && sudo ninja -C Build install
## [Documentation](https://irssi.org/documentation/)
* [Frequently Asked Questions](https://irssi.org/documentation/faq)
* [Startup How-To](https://irssi.org/documentation/startup)
* [New users guide](https://irssi.org/New-users/)
* [Questions and Answers](https://irssi.org/documentation/qna/)
* Check the built-in `/HELP`, it has all the details on command syntax
## [Themes](https://irssi-import.github.io/themes/)
@ -62,7 +62,7 @@ ninja -C Build && sudo ninja -C Build install
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).

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,821 +0,0 @@
AC_INIT(irssi, 1.4.2)
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 nostdinc])
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.32.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"
AC_CHECK_HEADER([term.h], [
AC_DEFINE(HAVE_TERM_H, [], [Define to 1 if you have the `term.h' header.])
])
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
AC_DEFINE([FHS_PREFIX], [""], [Alternate filesystem prefix for Termux])
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/*.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,21 +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) \
meson.build
SUBDIRS = help

View File

@ -1,13 +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) \
meson.build
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

@ -17,6 +17,7 @@
-tls_ciphers: TLS cipher suite preference lists.
-tls_pinned_cert: Pinned x509 certificate fingerprint.
-tls_pinned_pubkey: Pinned public key fingerprint.
-nocap: Disable CAPREQ during connect
-noproxy: Ignores the global proxy configuration.
-network: The network this connection belongs to.
-host: The hostname you would like to connect from.

View File

@ -10,18 +10,22 @@
%9Description:%9
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
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)
';' -> '\;'
`$' -> `$$'
`\' -> `\\' (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
to print `1;2$3\4':
/EVAL echo 1\;2$$3\\4
%9References:%9

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.

View File

@ -28,6 +28,8 @@
-tls_pinned_pubkey: Pinned public key fingerprint.
-auto: Automatically connects to the server on startup.
-noauto: Doesn't connect to the server on startup.
-cap: Enable CAPREQ for server.
-nocap: Disable CAPREQ for server.
-network: The network the server belongs to.
-host: The hostname you would like to connect from.
-cmdspeed: Specifies the minimum amount of time, expressed in

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

@ -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

@ -515,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>
@ -683,4 +683,4 @@ Ctrl-X - set the next server in list active
/STATUSBAR &lt;name&gt; REMOVE &lt;item&gt;
</code></pre></div></div>
<p>For statusbar scripts, the item name is usually equivalent to the script name. The documentation of the script ought to tell you if this is not the case. For example, to add mail.pl before the window activity item, use: <code>/STATUSBAR window ADD -before act mail</code>.</p>
<p>For statusbar scripts, the item name is usually equivalent to the script name. The documentation of the script ought to tell you if this is not the case. For example, to add mail.pl before the window activity item, use: <code>/STATUSBAR window ADD -before act mail</code>.</p>

View File

@ -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

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,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.4.2',
meson_version : '>=0.49',
version : '1.5-head',
meson_version : '>=0.53',
default_options : ['warning_level=1'])
############################
@ -32,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'
@ -55,15 +53,20 @@ 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
UNSET = '=INVALID='
UNSET_ARR = [UNSET]
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')) + '"'
@ -83,7 +86,7 @@ if meson.is_cross_build()
else
cross_perl = build_perl
endif
run_command(build_perl, files('utils/syntax.pl'))
run_command(build_perl, files('utils/syntax.pl'), check : true)
###################
# irssi-version.h #
@ -336,7 +339,7 @@ if want_perl
#### ccopts ####
perl_ccopts = meson.get_cross_property('perl_ccopts', UNSET_ARR)
if perl_ccopts == UNSET_ARR
res = run_command(cross_perl, '-MExtUtils::Embed', '-e', 'ccopts')
res = run_command(cross_perl, '-MExtUtils::Embed', '-e', 'ccopts', check : true)
perl_ccopts = res.stdout().strip().split()
endif
foreach fl : perl_ccopts
@ -353,7 +356,7 @@ if want_perl
#### ldopts ####
perl_ldopts = meson.get_cross_property('perl_ldopts', UNSET_ARR)
if perl_ldopts == UNSET_ARR
res = run_command(cross_perl, '-MExtUtils::Embed', '-e', 'ldopts')
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']
@ -370,7 +373,7 @@ if want_perl
perl_version = meson.get_cross_property('perl_version', UNSET)
if perl_version == UNSET
perl_version = run_command(cross_perl, '-V::version:').stdout().split('\'')[1]
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 : perl_version)
@ -394,7 +397,7 @@ int main()
else
xsubpp_file_c = meson.get_cross_property('perl_xsubpp', UNSET)
if xsubpp_file_c == UNSET
xsubpp_file_c = run_command(build_perl, '-MExtUtils::ParseXS', '-Eprint $INC{"ExtUtils/ParseXS.pm"} =~ s{ParseXS\\.pm$}{xsubpp}r').stdout()
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',
@ -404,7 +407,7 @@ int main()
xsubpp_file = files(xsubpp_file_c)
if with_perl_lib == 'module'
perl_install_base = run_command(build_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
@ -423,12 +426,12 @@ int main()
if with_perl_lib in ['site', 'vendor']
perlmoddir = meson.get_cross_property('perl_install' + with_perl_lib + 'arch', UNSET)
if perlmoddir == UNSET
perlmoddir = run_command(cross_perl, '-V::install' + with_perl_lib + 'arch:').stdout().split('\'')[1]
perlmoddir = run_command(cross_perl, '-V::install' + with_perl_lib + 'arch:', check : true).stdout().split('\'')[1]
endif
elif with_perl_lib == 'module'
perl_archname = meson.get_cross_property('perl_archname', UNSET)
if perl_archname == UNSET
perl_archname = run_command(cross_perl, '-V::archname:').stdout().split('\'')[1]
perl_archname = run_command(cross_perl, '-V::archname:', check : true).stdout().split('\'')[1]
endif
perlmoddir = perl_install_base / 'lib' / 'perl5' / perl_archname
endif
@ -449,7 +452,7 @@ int main()
if set_perl_use_lib
perl_inc = meson.get_cross_property('perl_inc', UNSET_ARR)
if perl_inc == UNSET_ARR
set_perl_use_lib = run_command(cross_perl, '-e', 'exit ! grep $_ eq $ARGV[0], grep /^\\//, @INC', perl_use_lib).returncode() != 0
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
@ -492,7 +495,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', dependencies : libnv)
nvlist_create_found = libnv.found() and cc.has_function('nvlist_create', dependencies : libnv, prefix : '#include <sys/nv.h>')
if nvlist_create_found
dep += libnv
have_capsicum = true
@ -526,9 +529,8 @@ 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'))
@ -634,8 +636,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,8 +7,6 @@ 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'])

16
redhat/.rpmmacros Normal file
View File

@ -0,0 +1,16 @@
%_topdir %(echo $HOME)/rpmbuild
%_smp_mflags -j3
#%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
%dist .psychotic
%_dist .psychotic
%releasetagsuffix psychotic
%_vendor psychotic
%vendor psychotic
%_host_vendor %{_vendor}
%_packager Psychotic Build System <builder@psychotic.ninja>
%packager Psychotic Build System <builder@psychotic.ninja>
%_signature gpg
%_gpg_name Psychotic Build System
%_binary_filedigest_algorithm 1
%_source_filedigest_algorithm 1
%_binary_payload w9.gzdio

160
redhat/irssi.spec Normal file
View File

@ -0,0 +1,160 @@
%define perl_vendorarch %(eval "`perl -V:installvendorarch`"; echo $installvendorarch)
Summary: Modular text mode IRC client with Perl scripting
Name: irssi
Version: 1.4.3
Release: 0%{?dist}
License: GPLv2+
Group: Applications/Communications
URL: http://irssi.org/
#Source0: http://irssi.org/files/irssi-%{version}.tar.gz
Source0: https://github.com/irssi/irssi/releases/download/%{version}/irssi-%{version}.tar.gz
Source1: irssi-config.h
#Patch0: 00-freenode-to-libera.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
BuildRequires: ncurses-devel openssl-devel zlib-devel
BuildRequires: pkgconfig glib2-devel perl-devel perl(ExtUtils::Embed)
BuildRequires: autoconf automake libtool
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
%package devel
Summary: Development package for irssi
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
%description
Irssi is a modular IRC client with Perl scripting. Only text-mode
frontend is currently supported. The GTK/GNOME frontend is no longer
being maintained.
%description devel
This package contains headers needed to develop irssi plugins.
Irssi is a modular IRC client with Perl scripting. Only text-mode
frontend is currently supported. The GTK/GNOME frontend is no longer
being maintained.
%prep
%setup -q
#%patch0 -p1
%build
autoreconf -i
# --with-bot \
%configure --enable-ipv6 --with-textui \
--with-proxy \
--with-perl=yes \
--with-perl-lib=vendor \
--enable-true-color
make %{_smp_mflags} CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
mv irssi-config.h irssi-config-$(getconf LONG_BIT).h
cp -p %{SOURCE1} irssi-config.h
%install
rm -rf $RPM_BUILD_ROOT
%makeinstall PERL_INSTALL_ROOT=$RPM_BUILD_ROOT INSTALL="%{__install} -p"
install -p irssi-config-$(getconf LONG_BIT).h $RPM_BUILD_ROOT%{_includedir}/%{name}/irssi-config-$(getconf LONG_BIT).h
rm -f $RPM_BUILD_ROOT%{_libdir}/%{name}/modules/lib*.*a
rm -Rf $RPM_BUILD_ROOT/%{_docdir}/%{name}
find $RPM_BUILD_ROOT%{perl_vendorarch} -type f -a -name '*.bs' -a -empty -exec rm -f {} ';'
find $RPM_BUILD_ROOT%{perl_vendorarch} -type f -a -name .packlist -exec rm {} ';'
chmod -R u+w $RPM_BUILD_ROOT%{perl_vendorarch}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc docs/*.txt docs/*.html AUTHORS COPYING NEWS README.md TODO
%config(noreplace) %{_sysconfdir}/%{name}.conf
%{_bindir}/%{name}
#%{_bindir}/botti
%{_datadir}/%{name}
%{_libdir}/%{name}
%{_libdir}/pkgconfig/irssi-1.pc
%{_mandir}/man1/%{name}.1*
%{perl_vendorarch}/Irssi*
%{perl_vendorarch}/auto/Irssi
%files devel
%defattr(-,root,root,-)
%{_includedir}/irssi/
%changelog
* Wed Nov 09 2022 Psychotic Build System <builder@psychotic.ninja> - 1.4.3-0
- Upgrade to upstream 1.4.3
* Wed Jul 13 2022 Psychotic Build System <builder@psychotic.ninja> - 1.4.2-0
- Update to upstreram 1.4.2
* Sat Jun 11 2022 Psychotic Build System <builder@psychotic.ninja> - 1.4.1-0
- Upgrade to upstream 1.4.1
* Tue Jun 15 2021 Psychotic Build System <builder@psychotic.ninja> - 1.2.3-2
- Change references of freenode to libera
* Fri Jun 04 2021 Psychotic Build System <builder@psychotic.ninja> - 1.2.3-1
- Updated to upstream 1.2.3
* Fri Nov 01 2019 Psychotic Build System <builder@psychotic.ninja> - 1.2.2-1
- Upgrade to upstream 1.2.2 which is stability and security update addressing
CVE-2019-15717 (Use after free when receiving duplicate CAP)
* Mon Jul 01 2019 Psychotic Build System <builder@psychotic.ninja> - 1.2.1-1
- Upgrade to upstream 1.2.1
* Mon Jul 01 2019 Psychotic Build System <builder@psychotic.ninja> - 1.1.3-1
- Upgrade to upstream 1.1.3 which is a stability and security update addressing
CVE-2019-13045 (use after free if SASL is enabled)
* Mon Jan 14 2019 Psychotic Build System <builder@psychotic.ninja> - 1.1.2-1
- Upgrade to upstream 1.1.2 which is a stability and security update addressing
CVE-2019-5882 (use-after-free).
* Fri Mar 09 2018 Psychotic Build System <builder@psychotic.ninja> - 1.1.1-2
- Bump to upstream 1.1.1
* Fri Jan 19 2018 Psychotic Build System <builder@psychotic.ninja> - 1.1.0-2
- Upgraded to upstream 1.1.0. Sourced from GhettoForge
* Tue Jan 16 2018 Bryan Seitz <seitz@ghettoforge.org> - 1.1.0-1
- New upstream version 1.1.0
* Sat Jan 06 2018 Bryan Seitz <seitz@ghettoforge.org> - 1.0.6-1
- New upstream version 1.0.6
* Mon Oct 23 2017 Bryan Seitz <seitz@ghettoforge.org> - 1.0.5-1
- New upstream version 1.0.5
* Sat Jul 08 2017 Bryan Seitz <seitz@ghettoforge.org> - 1.0.4-1
- New upstream version 1.0.4
* Sun Mar 19 2017 Psychotic Build System <builder@psychotic.ninja> - 1.0.2-1
- Updated to upstream 1.0.2
* Fri Mar 17 2017 Psychotic Build System <builder@psychotic.ninja> - 1.0.1-2
- Initial build for Psychotic Ninja; sourced from GhettoForge
* Mon Feb 06 2017 Bryan Seitz <seitz@ghettoforge.org> - 1.0.1-1
- New upstream version 1.0.1
* Tue Jan 10 2017 Bryan Seitz <seitz@ghettoforge.org> - 1.0.0-1
- New upstream version 1.0.0
* Fri Sep 23 2016 Bryan Seitz <seitz@ghettoforge.org> - 0.8.20-1
- New upstream version 0.8.20
* Fri May 06 2016 Bryan Seitz <seitz@ghettoforge.org> - 0.8.19-1
- New upstream version 0.8.19
* Mon May 11 2015 Bryan Seitz <seitz@ghettoforge.org> - 0.8.17-2
- Import into GhettoForge

View File

@ -1,18 +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) \
meson.build

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

@ -5,7 +5,7 @@
use strict;
our $VERSION = '2020042700';
our $VERSION = '2022053100';
our %IRSSI = (
authors => 'Stefan \'tommie\' Tomanek',
contact => 'stefan@pico.ruhr.de',
@ -30,7 +30,7 @@ $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);
my $irssi_version = qv('v'.Irssi::parse_special('$J') =~ s/[^.\d].*//r);
sub show_help {
my $help = "scriptassist $VERSION

View File

@ -1,27 +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)
EXTRA_DIST = meson.build

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 46
#define IRSSI_ABI_VERSION 50
#define DEFAULT_SERVER_ADD_PORT 6667
#define DEFAULT_SERVER_ADD_TLS_PORT 6697
@ -37,9 +37,7 @@
#include <fcntl.h>
#include <glib.h>
#ifdef HAVE_GMODULE
# include <gmodule.h>
#endif
#include <gmodule.h>
typedef guint64 uoff_t;
#define PRIuUOFF_T G_GUINT64_FORMAT

View File

@ -1,122 +0,0 @@
noinst_LIBRARIES = libcore.a
AM_CPPFLAGS = \
-I$(top_builddir) \
$(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)
EXTRA_DIST = meson.build

View File

@ -227,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)
@ -236,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

@ -114,8 +114,8 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
[-tls_verify] [-tls_cafile <cafile>] [-tls_capath <capath>]
[-tls_ciphers <list>] [-tls_pinned_cert <fingerprint>]
[-tls_pinned_pubkey <fingerprint>] [-!] [-noautosendcmd] [-tls | -notls]
[-starttls | -disallow_starttls] [-noproxy] [-network <network>]
[-host <hostname>] [-rawlog <file>]
[-nocap] [-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)
@ -211,14 +211,14 @@ static void cmd_server(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
command_runsub("server", data, server, item);
}
/* SYNTAX: SERVER CONNECT [-4 | -6] [-tls] [-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>]
[+]<address>|<chatnet> [<port> [<password> [<nick>]]] */
/* SYNTAX: SERVER CONNECT [-4 | -6] [-tls] [-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] [-nocap]
[-noproxy] [-network <network>] [-host <hostname>]
[-rawlog <file>]
[+]<address>|<chatnet> [<port> [<password> [<nick>]]] */
/* NOTE: -network replaces the old -ircnet flag. */
static void cmd_server_connect(const char *data, SERVER_REC *server)
{

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,7 +124,11 @@ CHAT_PROTOCOL_REC *chat_protocol_register(CHAT_PROTOCOL_REC *rec)
g_return_val_if_fail(rec != NULL, NULL);
newrec = chat_protocol_find(rec->name);
created = newrec == NULL;
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);
chat_protocols = g_slist_append(chat_protocols, newrec);
@ -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,8 +61,9 @@ 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);
chatnet->type = module_get_uniq_id("CHATNET", 0);
if (g_slist_find(chatnets, chatnet) == NULL)
chatnets = g_slist_append(chatnets, chatnet);
@ -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

@ -68,6 +68,7 @@ void wcwidth_wrapper_deinit(void);
int irssi_gui;
int irssi_init_finished;
int sighup_received;
int sigterm_received;
time_t client_start_time;
static char *irssi_dir, *irssi_config_file;
@ -89,6 +90,11 @@ static void sig_hup(int signo)
sighup_received = TRUE;
}
static void sig_term(int signo)
{
sigterm_received = TRUE;
}
static void read_settings(void)
{
static int signals[] = {
@ -113,8 +119,15 @@ static void read_settings(void)
sigaction(SIGHUP, &act, NULL);
for (n = 0; n < sizeof(signals)/sizeof(signals[0]); n++) {
act.sa_handler = find_substr(ignores, signames[n]) ?
SIG_IGN : SIG_DFL;
if (find_substr(ignores, signames[n])) {
act.sa_handler = SIG_IGN;
} else {
/* set default handlers */
if (signals[n] == SIGTERM)
act.sa_handler = sig_term;
else
act.sa_handler = SIG_DFL;
}
sigaction(signals[n], &act, NULL);
}
@ -223,6 +236,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;
@ -269,13 +289,16 @@ void core_init(void)
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", "perl otr");
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();
@ -288,6 +311,9 @@ 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();

View File

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

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)

View File

@ -13,26 +13,27 @@ enum {
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 */

View File

@ -1,11 +1,5 @@
# 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('capsicum.c')
else
@ -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

@ -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

@ -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

@ -1,15 +1,11 @@
#ifndef IRSSI_CORE_NETWORK_H
#define IRSSI_CORE_NETWORK_H
#ifdef HAVE_SOCKS_H
#include <socks.h>
#endif
#include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
# include <netdb.h>
# include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#ifndef AF_INET6
# ifdef PF_INET6

View File

@ -305,6 +305,8 @@ static SERVER_CONNECT_REC *create_addr_conn(int chat_type, const char *address,
proto = chat_type >= 0 ? chat_protocol_find_id(chat_type) :
chat_protocol_get_default();
g_return_val_if_fail(proto != NULL, NULL);
conn = proto->create_server_connect();
server_connect_ref(conn);
@ -446,6 +448,7 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node)
{
SERVER_SETUP_REC *rec;
CHATNET_REC *chatnetrec;
CHAT_PROTOCOL_REC *proto;
char *server, *chatnet, *family;
int port;
char *value = NULL;
@ -466,23 +469,40 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node)
rec = NULL;
chatnetrec = chatnet == NULL ? NULL : chatnet_find(chatnet);
if (chatnetrec == NULL && chatnet != NULL) {
/* chat network not found, create it. */
chatnetrec = chat_protocol_get_default()->create_chatnet();
chatnetrec->chat_type = chat_protocol_get_default()->id;
chatnetrec->name = g_strdup(chatnet);
chatnet_create(chatnetrec);
if (chatnet != NULL) {
chatnetrec = chatnet_find(chatnet);
if (chatnetrec != NULL) {
proto = CHAT_PROTOCOL(chatnetrec);
} else {
/* chat network not found, create it. */
if (chatnet_find_unavailable(chatnet)) {
/* no protocols loaded, skip loading servers */
return NULL;
}
proto = chat_protocol_get_default();
chatnetrec = proto->create_chatnet();
chatnetrec->chat_type = chat_protocol_get_default()->id;
chatnetrec->name = g_strdup(chatnet);
chatnet_create(chatnetrec);
}
} else {
chatnetrec = NULL;
proto = chat_protocol_get_default();
if (proto == NULL) {
/* no protocols loaded, skip loading servers */
return NULL;
}
}
family = config_node_get_str(node, "family", "");
rec = CHAT_PROTOCOL(chatnetrec)->create_server_setup();
rec = proto->create_server_setup();
rec->type = module_get_uniq_id("SERVER SETUP", 0);
rec->chat_type = CHAT_PROTOCOL(chatnetrec)->id;
rec->chat_type = proto->id;
rec->chatnet = chatnetrec == NULL ? NULL : g_strdup(chatnetrec->name);
rec->family = g_ascii_strcasecmp(family, "inet6") == 0 ? AF_INET6 :
(g_ascii_strcasecmp(family, "inet") == 0 ? AF_INET : 0);
rec->family = g_ascii_strcasecmp(family, "inet6") == 0 ?
AF_INET6 :
(g_ascii_strcasecmp(family, "inet") == 0 ? AF_INET : 0);
rec->address = g_strdup(server);
rec->password = g_strdup(config_node_get_str(node, "password", NULL));
@ -759,8 +779,7 @@ void servers_setup_init(void)
read_settings();
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
signal_add("setup reread", (SIGNAL_FUNC) read_servers);
signal_add("irssi init read settings", (SIGNAL_FUNC) read_servers);
signal_add("setup reread servers", (SIGNAL_FUNC) read_servers);
}
void servers_setup_deinit(void)
@ -773,8 +792,7 @@ void servers_setup_deinit(void)
server_setup_destroy(setupservers->data);
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);
signal_remove("setup reread", (SIGNAL_FUNC) read_servers);
signal_remove("irssi init read settings", (SIGNAL_FUNC) read_servers);
signal_remove("setup reread servers", (SIGNAL_FUNC) read_servers);
module_uniq_destroy("SERVER SETUP");
}

View File

@ -673,18 +673,6 @@ GSList *settings_get_sorted(void)
return list;
}
void sig_term(int n)
{
/* if we get SIGTERM after this, just die instead of coming back here. */
signal(SIGTERM, SIG_DFL);
/* quit from all servers too.. */
signal_emit("command quit", 1, "");
/* and die */
raise(SIGTERM);
}
/* Yes, this is my own stupid checksum generator, some "real" algorithm
would be nice but would just take more space without much real benefit */
static unsigned int file_checksum(const char *fname)
@ -805,8 +793,6 @@ static void init_configfile(void)
signal_emit("gui dialog", 2, "error", str);
g_free(str);
}
signal(SIGTERM, sig_term);
}
int settings_reread(const char *fname)

View File

@ -1,3 +0,0 @@
SUBDIRS = core irc
EXTRA_DIST = meson.build

View File

@ -1,73 +0,0 @@
noinst_LIBRARIES = libfe_common_core.a
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS) \
-DHELPDIR=\""$(datadir)/irssi/help"\" \
-DTHEMESDIR=\""$(datadir)/irssi/themes"\"
libfe_common_core_a_SOURCES = \
chat-completion.c \
command-history.c \
completion.c \
fe-channels.c \
fe-common-core.c \
fe-core-commands.c \
fe-exec.c \
fe-expandos.c \
fe-help.c \
fe-ignore.c \
fe-ignore-messages.c \
fe-log.c \
fe-messages.c \
fe-modules.c \
fe-queries.c \
fe-server.c \
fe-settings.c \
fe-tls.c \
formats.c \
hilight-text.c \
keyboard.c \
module-formats.c \
printtext.c \
fe-recode.c \
themes.c \
window-activity.c \
window-commands.c \
window-items.c \
windows-layout.c \
fe-windows.c
if HAVE_CAPSICUM
libfe_common_core_a_SOURCES += \
fe-capsicum.c
endif
pkginc_fe_common_coredir=$(pkgincludedir)/src/fe-common/core
pkginc_fe_common_core_HEADERS = \
command-history.h \
chat-completion.h \
completion.h \
fe-capsicum.h \
fe-channels.h \
fe-common-core.h \
fe-core-commands.h \
fe-exec.h \
fe-messages.h \
fe-queries.h \
fe-settings.h \
fe-tls.h \
formats.h \
hilight-text.h \
keyboard.h \
module-formats.h \
module.h \
printtext.h \
fe-recode.h \
themes.h \
window-activity.h \
window-items.h \
windows-layout.h \
fe-windows.h
EXTRA_DIST = meson.build

View File

@ -646,7 +646,7 @@ void fe_channels_init(void)
command_bind("channel modify", NULL, (SIGNAL_FUNC) cmd_channel_modify);
command_bind("channel remove", NULL, (SIGNAL_FUNC) cmd_channel_remove);
command_bind("channel list", NULL, (SIGNAL_FUNC) cmd_channel_list);
command_bind("names", NULL, (SIGNAL_FUNC) cmd_names);
command_bind_first("names", NULL, (SIGNAL_FUNC) cmd_names);
command_bind("cycle", NULL, (SIGNAL_FUNC) cmd_cycle);
command_set_options("channel add", "auto noauto -bots -botcmd");

View File

@ -29,8 +29,6 @@
#include <irssi/src/fe-common/core/printtext.h>
#ifdef HAVE_GMODULE
static void sig_module_error(void *number, const char *data,
const char *rootmodule, const char *submodule)
{
@ -273,22 +271,3 @@ void fe_modules_deinit(void)
command_unbind("load", (SIGNAL_FUNC) cmd_load);
command_unbind("unload", (SIGNAL_FUNC) cmd_unload);
}
#else /* !HAVE_GMODULE */
static void cmd_load(const char *data)
{
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR,
"Dynamic modules loading not supported");
}
void fe_modules_init(void)
{
command_bind("load", NULL, (SIGNAL_FUNC) cmd_load);
}
void fe_modules_deinit(void)
{
command_unbind("load", (SIGNAL_FUNC) cmd_load);
}
#endif

View File

@ -355,7 +355,7 @@ static void read_settings(void)
void fe_queries_init(void)
{
settings_add_level("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS");
settings_add_level("lookandfeel", "autocreate_query_level", "MSGS DCCMSGS NOTICES");
settings_add_bool("lookandfeel", "autocreate_own_query", TRUE);
settings_add_time("lookandfeel", "autoclose_query", "0");

View File

@ -142,7 +142,6 @@ static void format_ext_color_unexpand(GString *out, gboolean bg, int base, char
g_string_append_c(out, ext_color_al[value % 36]);
}
#ifdef TERM_TRUECOLOR
void unformat_24bit_color(char **ptr, int off, int *fgcolor, int *bgcolor, int *flags)
{
unsigned int color;
@ -191,12 +190,10 @@ static void format_24bit_color_unexpand(GString *out, int off, const char **ptr)
g_string_append_c(out, rgbx[3] & 0x1 ? 'z' : 'Z');
g_string_append_printf(out, "%06X", color);
}
#endif
void format_24bit_color(GString *out, int bg, unsigned int color)
{
unsigned char rgb[] = { color >> 16, color >> 8, color };
#ifdef TERM_TRUECOLOR
unsigned char x = bg ? 0x1 : 0;
unsigned int i;
g_string_append_c(out, 4);
@ -210,9 +207,6 @@ void format_24bit_color(GString *out, int bg, unsigned int color)
}
}
g_string_append_c(out, 0x20 + x);
#else /* !TERM_TRUECOLOR */
format_ext_color(out, bg, color_24bit_256(rgb));
#endif /* TERM_TRUECOLOR */
}
int format_expand_styles(GString *out, const char **format, int *flags)
@ -668,11 +662,9 @@ char *format_string_unexpand(const char *text, int flags)
case FORMAT_COLOR_EXT3_BG:
format_ext_color_unexpand(out, TRUE, 0xb0, *++text);
break;
#ifdef TERM_TRUECOLOR
case FORMAT_COLOR_24:
format_24bit_color_unexpand(out, 1, &text);
break;
#endif
case FORMAT_STYLE_BLINK:
format_flag_unexpand(out, 'F');
break;
@ -929,10 +921,10 @@ char *format_add_lineend(const char *text, const char *linestart)
#define LINE_START_IRSSI_LEVEL \
(MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
#define NOT_LINE_START_LEVEL \
(MSGLEVEL_NEVER | MSGLEVEL_LASTLOG | MSGLEVEL_CLIENTCRAP | \
MSGLEVEL_MSGS | MSGLEVEL_PUBLIC | MSGLEVEL_DCC | MSGLEVEL_DCCMSGS | \
MSGLEVEL_ACTIONS | MSGLEVEL_NOTICES | MSGLEVEL_SNOTES | MSGLEVEL_CTCPS)
#define NOT_LINE_START_LEVEL \
(MSGLEVEL_NEVER | MSGLEVEL_LASTLOG | MSGLEVEL_CLIENTCRAP | MSGLEVEL_MSGS | \
MSGLEVEL_PUBLIC | MSGLEVEL_DCC | MSGLEVEL_DCCMSGS | MSGLEVEL_ACTIONS | MSGLEVEL_NOTICES | \
MSGLEVEL_PUBNOTICES | MSGLEVEL_SNOTES | MSGLEVEL_CTCPS)
/* return the "-!- " text at the start of the line */
char *format_get_level_tag(THEME_REC *theme, TEXT_DEST_REC *dest)
@ -1057,13 +1049,6 @@ void format_newline(TEXT_DEST_REC *dest)
GINT_TO_POINTER(-1), GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest);
}
#ifndef TERM_TRUECOLOR
inline static int color_24bit_256_int(unsigned int color)
{
unsigned char rgb[] = { color >> 16, color >> 8, color };
return color_24bit_256(rgb);
}
#endif /* !TERM_TRUECOLOR */
/* parse ANSI color string */
static const char *get_ansi_color(THEME_REC *theme, const char *str,
@ -1191,7 +1176,7 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
}
if (i == -1) break;
#ifdef TERM_TRUECOLOR
if (num == 38) {
flags |= GUI_PRINT_FLAG_COLOR_24_FG;
fg = num2;
@ -1199,15 +1184,6 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
flags |= GUI_PRINT_FLAG_COLOR_24_BG;
bg = num2;
}
#else /* !TERM_TRUECOLOR */
if (num == 38) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fg = color_24bit_256_int(num2);
} else if (num == 48) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bg = color_24bit_256_int(num2);
}
#endif
break;
case 5:
@ -1332,7 +1308,6 @@ int strip_real_length(const char *str, int len,
/* We expect 4 to indicate an internal Irssi color code. However 4
* also means hex color, an alternative to mIRC color codes. We
* don't support those. */
#ifdef TERM_TRUECOLOR
if (str[1] == FORMAT_COLOR_24 && str[2] != '\0') {
if (str[3] == '\0') str++;
else if (str[4] == '\0') str += 2;
@ -1344,9 +1319,7 @@ int strip_real_length(const char *str, int len,
*last_color_len = 6;
str+=4;
}
} else
#endif
if (str[1] < FORMAT_STYLE_SPECIAL && str[2] != '\0') {
} else if (str[1] < FORMAT_STYLE_SPECIAL && str[2] != '\0') {
if (last_color_pos != NULL)
*last_color_pos = (int) (str-start);
if (last_color_len != NULL)
@ -1395,14 +1368,12 @@ char *strip_codes(const char *input)
/* irssi color */
if (p[2] != '\0') {
#ifdef TERM_TRUECOLOR
if (p[1] == FORMAT_COLOR_24) {
if (p[3] == '\0') p += 2;
else if (p[4] == '\0') p += 3;
else if (p[5] == '\0') p += 4;
else p += 5;
} else
#endif /* TERM_TRUECOLOR */
p += 2;
continue;
}
@ -1550,11 +1521,9 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
bgcolor = 0xb0 + *++ptr - FORMAT_COLOR_NOCHANGE;
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
break;
#ifdef TERM_TRUECOLOR
case FORMAT_COLOR_24:
unformat_24bit_color(&ptr, 1, &fgcolor, &bgcolor, &flags);
break;
#endif
default:
if (*ptr != FORMAT_COLOR_NOCHANGE) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
@ -1637,13 +1606,11 @@ void format_gui_flags(GString *out, int *last_fg, int *last_bg, int *last_flags,
(flags & GUI_PRINT_FLAG_COLOR_24_FG) != (*last_flags & GUI_PRINT_FLAG_COLOR_24_FG)) {
*last_fg = fg;
#ifdef TERM_TRUECOLOR
if (flags & GUI_PRINT_FLAG_COLOR_24_FG) {
*last_flags |= GUI_PRINT_FLAG_COLOR_24_FG;
format_24bit_color(out, 0, fg);
} else {
*last_flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
#endif
if (fg < 0) {
g_string_append_c(out, 4);
g_string_append_c(out, (char) -1);
@ -1651,20 +1618,16 @@ void format_gui_flags(GString *out, int *last_fg, int *last_bg, int *last_flags,
} else {
format_ext_color(out, 0, fg);
}
#ifdef TERM_TRUECOLOR
}
#endif
}
if (bg != *last_bg ||
(flags & GUI_PRINT_FLAG_COLOR_24_BG) != (*last_flags & GUI_PRINT_FLAG_COLOR_24_BG)) {
*last_bg = bg;
#ifdef TERM_TRUECOLOR
if (flags & GUI_PRINT_FLAG_COLOR_24_BG) {
*last_flags |= GUI_PRINT_FLAG_COLOR_24_BG;
format_24bit_color(out, 1, bg);
} else {
*last_flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
#endif
if (bg < 0) {
g_string_append_c(out, 4);
g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
@ -1672,9 +1635,7 @@ void format_gui_flags(GString *out, int *last_fg, int *last_bg, int *last_flags,
} else {
format_ext_color(out, 1, bg);
}
#ifdef TERM_TRUECOLOR
}
#endif
}
if ((flags & GUI_PRINT_FLAG_UNDERLINE) != (*last_flags & GUI_PRINT_FLAG_UNDERLINE)) {

View File

@ -158,9 +158,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
#define FORMAT_COLOR_EXT1_BG ('0'-5)
#define FORMAT_COLOR_EXT2_BG ('0'-9)
#define FORMAT_COLOR_EXT3_BG ('0'-10)
#ifdef TERM_TRUECOLOR
#define FORMAT_COLOR_24 ('0'-13)
#endif
#define FORMAT_STYLE_SPECIAL 0x60
#define FORMAT_STYLE_BLINK (0x01 + FORMAT_STYLE_SPECIAL)

View File

@ -143,7 +143,7 @@ void window_activity_init(void)
{
settings_add_str("lookandfeel", "activity_hide_targets", "");
settings_add_level("lookandfeel", "activity_hide_level", "");
settings_add_level("lookandfeel", "activity_msg_level", "PUBLIC");
settings_add_level("lookandfeel", "activity_msg_level", "PUBLIC NOTICES");
settings_add_level("lookandfeel", "activity_hilight_level", "MSGS DCCMSGS");
signal_window_hilight_check = signal_get_uniq_id("window hilight check");

View File

@ -1,42 +0,0 @@
SUBDIRS = dcc notifylist
noinst_LIBRARIES = libfe_common_irc.a
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS) \
-DHELPDIR=\""$(datadir)/irssi/help"\" \
-DSYSCONFDIR=\""$(sysconfdir)"\"
real_sources = \
fe-irc-channels.c \
fe-irc-commands.c \
fe-irc-messages.c \
fe-irc-queries.c \
fe-irc-server.c \
fe-ircnet.c \
fe-ctcp.c \
fe-events.c \
fe-events-numeric.c \
fe-modes.c \
fe-netjoin.c \
fe-netsplit.c \
fe-common-irc.c \
fe-whois.c \
fe-sasl.c \
fe-cap.c \
irc-completion.c \
module-formats.c
libfe_common_irc_a_SOURCES = \
$(real_sources) \
irc-modules.c
pkginc_fe_common_ircdir=$(pkgincludedir)/src/fe-common/irc
pkginc_fe_common_irc_HEADERS = \
fe-irc-server.h \
fe-irc-channels.h \
module.h \
module-formats.h
EXTRA_DIST = meson.build

View File

@ -1,24 +0,0 @@
noinst_LIBRARIES = libfe_irc_dcc.a
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS) \
-DHELPDIR=\""$(datadir)/irssi/help"\" \
-DSYSCONFDIR=\""$(sysconfdir)"\"
libfe_irc_dcc_a_SOURCES = \
fe-dcc.c \
fe-dcc-chat.c \
fe-dcc-chat-messages.c \
fe-dcc-get.c \
fe-dcc-send.c \
module-formats.c \
fe-dcc-server.c
pkginc_fe_common_irc_dccdir=$(pkgincludedir)/src/fe-common/irc/dcc
pkginc_fe_common_irc_dcc_HEADERS = \
module.h \
module-formats.h \
fe-dcc.h
EXTRA_DIST = meson.build

View File

@ -17,6 +17,11 @@ libfe_irc_dcc_a = static_library('fe_irc_dcc',
def_sysconfdir,
],
dependencies : dep)
shared_module('fe_irc_dcc',
install : true,
install_dir : moduledir,
link_with : dl_cross_irc_dcc,
link_whole : libfe_irc_dcc_a)
install_headers(
files(

View File

@ -30,9 +30,6 @@
#include <irssi/src/fe-common/irc/fe-irc-server.h>
#include <irssi/src/fe-common/irc/fe-irc-channels.h>
void fe_irc_modules_init(void);
void fe_irc_modules_deinit(void);
void fe_irc_queries_init(void);
void fe_irc_queries_deinit(void);
@ -103,14 +100,10 @@ void fe_common_irc_init(void)
settings_check();
module_register("irc", "fe-common");
fe_irc_modules_init();
}
void fe_common_irc_deinit(void)
{
fe_irc_modules_deinit();
fe_irc_channels_deinit();
fe_irc_queries_deinit();
fe_irc_messages_deinit();

View File

@ -269,13 +269,22 @@ static char *notice_channel_context(SERVER_REC *server, const char *msg)
static void sig_message_own_notice(IRC_SERVER_REC *server, const char *msg, const char *target)
{
char *channel;
gboolean is_public;
const char *cleantarget;
char *context_channel;
cleantarget = fe_channel_skip_prefix(server, target);
is_public = server_ischannel(SERVER(server), cleantarget);
/* check if this is a cnotice */
channel = notice_channel_context((SERVER_REC *) server, msg);
printformat(server, channel != NULL ? channel : fe_channel_skip_prefix(server, target),
MSGLEVEL_NOTICES | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT, IRCTXT_OWN_NOTICE,
target, msg);
g_free(channel);
context_channel = is_public ? NULL : notice_channel_context((SERVER_REC *) server, msg);
printformat(
server, context_channel != NULL ? context_channel : cleantarget,
(is_public || context_channel != NULL ? MSGLEVEL_PUBNOTICES : MSGLEVEL_NOTICES) |
MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
IRCTXT_OWN_NOTICE, target, msg);
g_free(context_channel);
}
static void sig_message_irc_notice(SERVER_REC *server, const char *msg,
@ -283,7 +292,9 @@ static void sig_message_irc_notice(SERVER_REC *server, const char *msg,
const char *target)
{
const char *oldtarget;
int level = MSGLEVEL_NOTICES;
char *context_channel;
int level;
gboolean is_public;
oldtarget = target;
target = fe_channel_skip_prefix(IRC_SERVER(server), target);
@ -299,29 +310,32 @@ static void sig_message_irc_notice(SERVER_REC *server, const char *msg,
return;
}
if (ignore_check_plus(server, nick, address,
server_ischannel(SERVER(server), target) ? target : NULL,
msg, &level, TRUE))
is_public = server_ischannel(SERVER(server), target);
/* check if this is a cnotice */
context_channel = is_public ? NULL : notice_channel_context(server, msg);
level = (is_public || context_channel != NULL) ? MSGLEVEL_PUBNOTICES : MSGLEVEL_NOTICES;
if (ignore_check_plus(server, nick, address, is_public ? target : context_channel, msg,
&level, TRUE)) {
g_free(context_channel);
return;
}
if (server_ischannel(SERVER(server), target)) {
if (is_public) {
/* notice in some channel */
printformat(server, target, level,
IRCTXT_NOTICE_PUBLIC, nick, oldtarget, msg);
char *nickmode;
nickmode = channel_get_nickmode(channel_find(server, target), nick);
printformat(server, target, level, IRCTXT_NOTICE_PUBLIC, nick, oldtarget, msg,
nickmode);
} else {
char *channel;
/* check if this is a cnotice */
channel = notice_channel_context(server, msg);
if (channel == NULL) {
if (context_channel == NULL) {
/* private notice */
privmsg_get_query(SERVER(server), nick, FALSE, MSGLEVEL_NOTICES);
}
printformat(server, channel == NULL ? nick : channel, level, IRCTXT_NOTICE_PRIVATE,
nick, address, msg);
g_free(channel);
printformat(server, context_channel == NULL ? nick : context_channel, level,
IRCTXT_NOTICE_PRIVATE, nick, address, msg);
}
g_free(context_channel);
}
static void sig_message_own_ctcp(IRC_SERVER_REC *server, const char *cmd,

View File

@ -24,6 +24,11 @@
#include <irssi/src/core/servers.h>
#include <irssi/src/core/queries.h>
#include <irssi/src/core/nicklist.h>
#include <irssi/src/irc/core/irc-servers.h>
#include <irssi/src/irc/core/irc-queries.h>
#include <irssi/src/fe-common/core/fe-windows.h>
int query_type;
static QUERY_REC *query_find_address(SERVER_REC *server, const char *address)
{
@ -88,14 +93,42 @@ static void event_privmsg(SERVER_REC *server, const char *data,
}
}
static void sig_window_bound_query(SERVER_REC *server)
{
GSList *wtmp, *btmp, *bounds;
if (!IS_IRC_SERVER(server))
return;
for (wtmp = windows; wtmp != NULL; wtmp = wtmp->next) {
WINDOW_REC *win = wtmp->data;
bounds = g_slist_copy(win->bound_items);
for (btmp = bounds; btmp != NULL; btmp = btmp->next) {
WINDOW_BIND_REC *bound = btmp->data;
if (bound->type == query_type &&
g_strcmp0(server->tag, bound->servertag) == 0) {
irc_query_create(bound->servertag, bound->name, TRUE);
}
}
g_slist_free(bounds);
}
}
void fe_irc_queries_init(void)
{
settings_add_bool("lookandfeel", "query_track_nick_changes", TRUE);
query_type = module_get_uniq_id_str("WINDOW ITEM TYPE", "QUERY");
settings_add_bool("lookandfeel", "query_track_nick_changes", TRUE);
signal_add("server connected", sig_window_bound_query);
signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
}
void fe_irc_queries_deinit(void)
{
signal_remove("server connected", sig_window_bound_query);
signal_remove("event privmsg", (SIGNAL_FUNC) event_privmsg);
}

View File

@ -51,7 +51,7 @@ const char *get_visible_target(IRC_SERVER_REC *server, const char *target)
return target;
}
/* SYNTAX: SERVER ADD|MODIFY [-4 | -6] [-tls_cert <cert>] [-tls_pkey <pkey>]
/* SYNTAX: SERVER ADD|MODIFY [-4 | -6] [-cap | -nocap] [-tls_cert <cert>] [-tls_pkey <pkey>]
[-tls_pass <password>] [-tls_verify] [-tls_cafile <cafile>]
[-tls_capath <capath>] [-tls_ciphers <list>] [-tls | -notls]
[-starttls | -nostarttls | -disallow_starttls | -nodisallow_starttls]

View File

@ -1,4 +0,0 @@
void fe_irc_dcc_init(void);void fe_irc_notifylist_init(void);
void fe_irc_notifylist_deinit(void);void fe_irc_dcc_deinit(void);
void fe_irc_modules_init(void) { fe_irc_dcc_init(); fe_irc_notifylist_init(); }
void fe_irc_modules_deinit(void) { fe_irc_notifylist_deinit(); fe_irc_dcc_deinit(); }

View File

@ -20,8 +20,6 @@ libfe_common_irc_a = static_library('fe_common_irc',
'fe-whois.c',
'irc-completion.c',
'module-formats.c',
'irc-modules.c',
),
include_directories : rootinc,
implicit_include_directories : false,
@ -30,6 +28,11 @@ libfe_common_irc_a = static_library('fe_common_irc',
def_themesdir,
],
dependencies : dep)
shared_module('fe_common_irc',
install : true,
install_dir : moduledir,
link_with : dl_cross_irc_core,
link_whole : libfe_common_irc_a)
install_headers(
files(

View File

@ -140,8 +140,8 @@ FORMAT_REC fecommon_irc_formats[] = {
{ NULL, "Received messages", 0 },
{ "notice_server", "{servernotice $0}$1", 2, { 0, 0 } },
{ "notice_public", "{notice $0{pubnotice_channel $1}}$2", 3, { 0, 0, 0 } },
{ "notice_private", "{notice $0{pvtnotice_host $1}}$2", 3, { 0, 0, 0 } },
{ "notice_public", "{pubnotice $3 $0}$2", 4, { 0, 0, 0, 0 } },
{ "notice_private", "{notice $0}$2", 3, { 0, 0, 0 } },
{ "action_private", "{pvtaction $0}$2", 3, { 0, 0, 0 } },
{ "action_private_query", "{pvtaction_query $0}$2", 3, { 0, 0, 0 } },
{ "action_public", "{pubaction $0}$1", 2, { 0, 0 } },

View File

@ -1,18 +0,0 @@
noinst_LIBRARIES = libfe_irc_notifylist.a
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS) \
-DHELPDIR=\""$(datadir)/irssi/help"\" \
-DSYSCONFDIR=\""$(sysconfdir)"\"
libfe_irc_notifylist_a_SOURCES = \
fe-notifylist.c \
module-formats.c
pkginc_fe_common_irc_notifylistdir=$(pkgincludedir)/src/fe-common/irc/notifylist
pkginc_fe_common_irc_notifylist_HEADERS = \
module.h \
module-formats.h
EXTRA_DIST = meson.build

View File

@ -12,6 +12,11 @@ libfe_irc_notifylist_a = static_library('fe_irc_notifylist',
def_sysconfdir,
],
dependencies : dep)
shared_module('fe_irc_notifylist',
install : true,
install_dir : moduledir,
link_with : dl_cross_irc_notifylist,
link_whole : libfe_irc_notifylist_a)
install_headers(
files(

View File

@ -1,40 +0,0 @@
SUBDIRS = irc fe-common
bin_PROGRAMS = irssi-fuzz server-fuzz
# Force link with CXX for libfuzzer support
CCLD=$(CXX) $(CXXFLAGS)
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS)
irssi_fuzz_DEPENDENCIES = @COMMON_LIBS@
irssi_fuzz_LDADD = \
@COMMON_LIBS@ \
@PROG_LIBS@ \
$(FUZZER_LIBS)
irssi_fuzz_SOURCES = \
irssi.c \
null-logger.c \
../fe-text/module-formats.c
server_fuzz_DEPENDENCIES = @COMMON_LIBS@
server_fuzz_LDADD = \
@COMMON_LIBS@ \
@PROG_LIBS@ \
$(FUZZER_LIBS)
server_fuzz_SOURCES = \
server.c \
null-logger.c \
../fe-text/module-formats.c
noinst_HEADERS = \
null-logger.h \
../fe-text/module-formats.h
EXTRA_DIST = meson.build

View File

@ -1,3 +0,0 @@
SUBDIRS = core
EXTRA_DIST = meson.build

View File

@ -1,33 +0,0 @@
bin_PROGRAMS = theme-load-fuzz
# Force link with CXX for libfuzzer support
CCLD=$(CXX) $(CXXFLAGS)
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS)
LDADD = \
../../../irc/libirc.a \
../../../irc/core/libirc_core.a \
../../../irc/dcc/libirc_dcc.a \
../../../irc/flood/libirc_flood.a \
../../../irc/notifylist/libirc_notifylist.a \
../../../fe-common/core/libfe_common_core.a \
../../../fe-common/irc/libfe_common_irc.a \
../../../fe-common/irc/dcc/libfe_irc_dcc.a \
../../../fe-common/irc/notifylist/libfe_irc_notifylist.a \
../../../core/libcore.a \
../../../lib-config/libirssi_config.a \
@PROG_LIBS@ \
$(FUZZER_LIBS)
theme_load_fuzz_SOURCES = \
../../null-logger.c \
theme-load.c \
$(top_srcdir)/src/fe-text/module-formats.c
noinst_HEADERS = \
$(top_srcdir)/src/fe-text/module-formats.h
EXTRA_DIST = meson.build

View File

@ -1,3 +0,0 @@
SUBDIRS = core
EXTRA_DIST = meson.build

View File

@ -1,33 +0,0 @@
bin_PROGRAMS = event-get-params-fuzz
# Force link with CXX for libfuzzer support
CCLD=$(CXX) $(CXXFLAGS)
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS)
LDADD = \
../../../irc/libirc.a \
../../../irc/core/libirc_core.a \
../../../irc/dcc/libirc_dcc.a \
../../../irc/flood/libirc_flood.a \
../../../irc/notifylist/libirc_notifylist.a \
../../../fe-common/core/libfe_common_core.a \
../../../fe-common/irc/libfe_common_irc.a \
../../../fe-common/irc/dcc/libfe_irc_dcc.a \
../../../fe-common/irc/notifylist/libfe_irc_notifylist.a \
../../../core/libcore.a \
../../../lib-config/libirssi_config.a \
@PROG_LIBS@ \
$(FUZZER_LIBS)
event_get_params_fuzz_SOURCES = \
../../null-logger.c \
event-get-params.c \
$(top_srcdir)/src/fe-text/module-formats.c
noinst_HEADERS = \
$(top_srcdir)/src/fe-text/module-formats.h
EXTRA_DIST = meson.build

View File

@ -9,7 +9,7 @@ executable('event-get-params-fuzz',
link_with : [
libconfig_a,
libcore_a,
libirc_a,
libirc_core_a,
libfuzzer_fe_common_core_a,
],
link_args : [fuzzer_lib],

View File

@ -32,7 +32,7 @@ executable('server-fuzz',
libconfig_a,
libcore_a,
libfuzzer_fe_common_core_a,
libirc_a,
libirc_core_a,
libfe_common_irc_a,
libfe_irc_dcc_a,
libfe_irc_notifylist_a,

View File

@ -43,9 +43,9 @@
#include <irssi/src/irc/core/irc-channels.h>
#include <irssi/src/fe-fuzz/null-logger.h>
/* irc.c */
void irc_init(void);
void irc_deinit(void);
/* irc-core.c */
void irc_core_init(void);
void irc_core_deinit(void);
/* irc-session.c */
void irc_session_init(void);
@ -153,7 +153,7 @@ int LLVMFuzzerInitialize(int *argc, char ***argv) {
core_preinit((*argv)[0]);
core_init();
irssi_ssl_init();
irc_init();
irc_core_init();
fe_common_core_init();
fe_common_irc_init();
signal_add("event 001", (SIGNAL_FUNC) event_connected);

View File

@ -1,21 +0,0 @@
bin_PROGRAMS = botti
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS)
botti_DEPENDENCIES = @COMMON_NOUI_LIBS@
botti_LDADD = \
@COMMON_NOUI_LIBS@ \
@PERL_LINK_LIBS@ \
@PERL_LINK_FLAGS@ \
@PROG_LIBS@
botti_SOURCES = \
irssi.c
noinst_HEADERS = \
module.h
EXTRA_DIST = meson.build

View File

@ -23,23 +23,17 @@
#include <irssi/src/core/modules-load.h>
#include <irssi/src/core/args.h>
#include <irssi/src/core/signals.h>
#include <irssi/src/core/settings.h>
#include <irssi/src/core/core.h>
#ifdef HAVE_STATIC_PERL
void perl_core_init(void);
void perl_core_deinit(void);
#endif
void irc_init(void);
void irc_deinit(void);
static GMainLoop *main_loop;
static char *autoload_module;
static int reload;
static int quitting;
static void sig_exit(void)
{
g_main_loop_quit(main_loop);
quitting = TRUE;
}
static void sig_reload(void)
@ -47,35 +41,44 @@ static void sig_reload(void)
reload = TRUE;
}
static void autoload_modules(void)
{
char **list, **module;
list = g_strsplit_set(settings_get_str("autoload_modules"), " ,", -1);
for (module = list; *module != NULL; module++) {
char *tmp;
if ((tmp = strchr(*module, ':')) != NULL) {
*tmp = '\0';
tmp++;
module_load_sub(*module, tmp, NULL);
} else {
module_load(*module, NULL);
}
}
g_strfreev(list);
}
void noui_init(void)
{
srand(time(NULL));
irssi_gui = IRSSI_GUI_NONE;
core_init();
irc_init();
module_register("core", "fe-none");
signal_add("reload", (SIGNAL_FUNC) sig_reload);
signal_add("gui exit", (SIGNAL_FUNC) sig_exit);
#ifdef HAVE_STATIC_PERL
perl_core_init();
#endif
autoload_modules();
signal_emit("irssi init finished", 0);
}
void noui_deinit(void)
{
#ifdef HAVE_STATIC_PERL
perl_core_deinit();
#endif
signal_remove("reload", (SIGNAL_FUNC) sig_reload);
signal_remove("gui exit", (SIGNAL_FUNC) sig_exit);
irc_deinit();
core_deinit();
}
@ -92,9 +95,6 @@ int main(int argc, char **argv)
args_execute(argc, argv);
core_preinit(argv[0]);
#ifdef HAVE_SOCKS
SOCKSinit(argv[0]);
#endif
noui_init();
if (autoload_module == NULL)
@ -104,7 +104,14 @@ int main(int argc, char **argv)
reload = FALSE;
module_load(autoload_module, NULL);
main_loop = g_main_loop_new(NULL, TRUE);
g_main_loop_run(main_loop);
while (!quitting && !reload) {
if (sigterm_received) {
sigterm_received = FALSE;
signal_emit("gui exit", 0);
}
g_main_context_iteration(NULL, TRUE);
}
g_main_loop_unref(main_loop);
}
while (reload);

View File

@ -10,7 +10,6 @@ executable('botti',
link_with : [
libconfig_a,
libcore_a,
libirc_a,
],
install : true,
dependencies : dep

View File

@ -1,75 +0,0 @@
bin_PROGRAMS = irssi
AM_CPPFLAGS = \
-I$(top_builddir) \
$(GLIB_CFLAGS)
irssi_DEPENDENCIES = \
@COMMON_LIBS@ \
@PERL_LINK_LIBS@ \
@PERL_FE_LINK_LIBS@ \
@OTR_LINK_LIBS@
irssi_LDFLAGS = -export-dynamic
irssi_LDADD = \
@COMMON_LIBS@ \
@PERL_LINK_LIBS@ \
@PERL_FE_LINK_LIBS@ \
@OTR_LINK_LIBS@ \
@OTR_LINK_FLAGS@ \
@PERL_LINK_FLAGS@ \
@PROG_LIBS@ \
@TEXTUI_LIBS@
terminfo_sources = \
term-terminfo.c \
terminfo-core.c
use_term_sources = $(terminfo_sources)
irssi_SOURCES = \
gui-entry.c \
gui-expandos.c \
gui-printtext.c \
gui-readline.c \
gui-windows.c \
lastlog.c \
mainwindows.c \
mainwindow-activity.c \
mainwindows-layout.c \
statusbar.c \
statusbar-config.c \
statusbar-items.c \
term.c \
$(use_term_sources) \
textbuffer.c \
textbuffer-commands.c \
textbuffer-view.c \
textbuffer-formats.c \
irssi.c \
module-formats.c
pkginc_fe_textdir=$(pkgincludedir)/src/fe-text
pkginc_fe_text_HEADERS = \
gui-printtext.h \
gui-windows.h \
mainwindows.h \
statusbar.h \
statusbar-item.h \
term.h \
textbuffer.h \
textbuffer-view.h \
textbuffer-formats.h
noinst_HEADERS = \
gui-entry.h \
gui-readline.h \
statusbar-config.h \
terminfo-core.h \
module.h \
module-formats.h
EXTRA_DIST = \
$(terminfo_sources) \
meson.build

View File

@ -300,7 +300,6 @@ static char *text_effects_only(const char *p)
/* irssi color */
if (p[2] != '\0') {
#ifdef TERM_TRUECOLOR
if (p[1] == FORMAT_COLOR_24) {
if (p[3] == '\0') p += 2;
else if (p[4] == '\0') p += 3;
@ -310,12 +309,9 @@ static char *text_effects_only(const char *p)
p += 5;
}
} else {
#endif /* TERM_TRUECOLOR */
g_string_append_len(str, p, 3);
p += 2;
#ifdef TERM_TRUECOLOR
}
#endif /* TERM_TRUECOLOR */
continue;
}
}

View File

@ -245,9 +245,7 @@ void gui_printtext_get_colors(int *flags, int *fg, int *bg, int *attr)
if (*flags & GUI_PRINT_FLAG_MIRC_COLOR) {
/* mirc colors - extended colours proposal */
gboolean use_24_map = FALSE;
#ifdef TERM_TRUECOLOR
use_24_map = settings_get_bool("colors_ansi_24bit");
#endif
if (*bg >= 0) {
if (use_24_map && mirc_colors24[*bg % 100] != -1) {
*bg = mirc_colors24[*bg % 100];

View File

@ -46,25 +46,6 @@
#include <signal.h>
#include <locale.h>
#ifdef HAVE_STATIC_PERL
void perl_core_init(void);
void perl_core_deinit(void);
void fe_perl_init(void);
void fe_perl_deinit(void);
#endif
#ifdef HAVE_STATIC_OTR
void otr_core_init(void);
void otr_core_deinit(void);
#endif
void irc_init(void);
void irc_deinit(void);
void fe_common_irc_init(void);
void fe_common_irc_deinit(void);
void gui_expandos_init(void);
void gui_expandos_deinit(void);
@ -168,9 +149,7 @@ static void textui_init(void)
irssi_gui = IRSSI_GUI_TEXT;
core_init();
irc_init();
fe_common_core_init();
fe_common_irc_init();
theme_register(gui_text_formats);
signal_add("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed);
@ -216,15 +195,6 @@ static void textui_finish_init(void)
module_register("core", "fe-text");
#ifdef HAVE_STATIC_PERL
perl_core_init();
fe_perl_init();
#endif
#ifdef HAVE_STATIC_OTR
otr_core_init();
#endif
dirty_check();
/* Temporarily raise the fatal level to abort on config errors. */
@ -267,15 +237,6 @@ static void textui_deinit(void)
while (modules != NULL)
module_unload(modules->data);
#ifdef HAVE_STATIC_PERL
perl_core_deinit();
fe_perl_deinit();
#endif
#ifdef HAVE_STATIC_OTR
otr_core_deinit();
#endif
dirty_check(); /* one last time to print any quit messages */
signal_remove("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed);
signal_remove("module autoload", (SIGNAL_FUNC) sig_autoload_modules);
@ -301,9 +262,7 @@ static void textui_deinit(void)
theme_unregister();
fe_common_irc_deinit();
fe_common_core_deinit();
irc_deinit();
core_deinit();
}
@ -344,10 +303,6 @@ int main(int argc, char **argv)
check_files();
#ifdef HAVE_SOCKS
SOCKSinit(argv[0]);
#endif
/* setlocale() must be called at the beginning before any calls that
affect it, especially regexps seem to break if they're generated
before this call.
@ -376,6 +331,11 @@ int main(int argc, char **argv)
/* Does the same as g_main_run(main_loop), except we
can call our dirty-checker after each iteration */
while (!quitting) {
if (sigterm_received) {
sigterm_received = FALSE;
signal_emit("gui exit", 0);
}
if (sighup_received) {
sighup_received = FALSE;

View File

@ -1629,6 +1629,7 @@ static int window_refnum_left(int refnum, int wrap)
{
MAIN_WINDOW_REC *find_sticky;
WINDOW_REC *window;
int start_refnum = refnum;
window = window_find_refnum(refnum);
g_return_val_if_fail(window != NULL, -1);
@ -1638,7 +1639,7 @@ static int window_refnum_left(int refnum, int wrap)
do {
refnum = window_refnum_prev(refnum, wrap);
if (refnum < 0)
if (refnum < 0 || refnum == start_refnum)
break;
window = window_find_refnum(refnum);
@ -1651,6 +1652,7 @@ static int window_refnum_right(int refnum, int wrap)
{
MAIN_WINDOW_REC *find_sticky;
WINDOW_REC *window;
int start_refnum = refnum;
window = window_find_refnum(refnum);
g_return_val_if_fail(window != NULL, -1);
@ -1660,7 +1662,7 @@ static int window_refnum_right(int refnum, int wrap)
do {
refnum = window_refnum_next(refnum, wrap);
if (refnum < 0)
if (refnum < 0 || refnum == start_refnum)
break;
window = window_find_refnum(refnum);

View File

@ -27,7 +27,11 @@ executable('irssi',
'textbuffer-view.c',
'textbuffer.c',
)
+ [ irssi_version_h ],
+ [
irssi_version_h,
default_config_h,
default_theme_h,
],
include_directories : rootinc,
implicit_include_directories : false,
export_dynamic : true,
@ -35,10 +39,6 @@ executable('irssi',
libconfig_a,
libcore_a,
libfe_common_core_a,
libirc_a,
libfe_common_irc_a,
libfe_irc_dcc_a,
libfe_irc_notifylist_a,
],
install : true,
dependencies : dep

View File

@ -339,33 +339,25 @@ static int termctl_set_color_24bit(int bg, unsigned int lc)
#define COLOR_BLACK24 COLOR_RESET - 1
/* Change active color */
#ifdef TERM_TRUECOLOR
void term_set_color2(TERM_WINDOW *window, int col, unsigned int fgcol24, unsigned int bgcol24)
#else
void term_set_color(TERM_WINDOW *window, int col)
#endif
{
int set_normal;
unsigned int fg, bg;
#ifdef TERM_TRUECOLOR
if (col & ATTR_FGCOLOR24) {
if (fgcol24)
fg = fgcol24 << 8;
else
fg = COLOR_BLACK24;
} else
#endif
fg = (col & FG_MASK);
#ifdef TERM_TRUECOLOR
if (col & ATTR_BGCOLOR24) {
if (bgcol24)
bg = bgcol24 << 8;
else
bg = COLOR_BLACK24;
} else
#endif
bg = ((col & BG_MASK) >> BG_SHIFT);
if (!term_use_colors && bg > 0)

View File

@ -150,12 +150,8 @@ static void read_settings(void)
term_use_colors = settings_get_bool("colors") &&
(force_colors || term_has_colors());
#ifdef TERM_TRUECOLOR
term_use_colors24 = settings_get_bool("colors_ansi_24bit") &&
(force_colors || term_has_colors());
#else
term_use_colors24 = FALSE;
#endif
if (term_use_colors != old_colors || term_use_colors24 != old_colors24)
irssi_redraw();
@ -173,12 +169,8 @@ void term_common_init(void)
force_colors = FALSE;
term_use_colors = term_has_colors() && settings_get_bool("colors");
#ifdef TERM_TRUECOLOR
settings_add_bool("lookandfeel", "colors_ansi_24bit", FALSE);
term_use_colors24 = term_has_colors() && settings_get_bool("colors_ansi_24bit");
#else
term_use_colors24 = FALSE;
#endif
read_settings();
if (g_get_charset(&dummy)) {

View File

@ -72,13 +72,8 @@ void term_window_clear(TERM_WINDOW *window);
/* Scroll window up/down */
void term_window_scroll(TERM_WINDOW *window, int count);
#ifdef TERM_TRUECOLOR
#define term_set_color(window, col) term_set_color2(window, (col) &~(ATTR_FGCOLOR24|ATTR_BGCOLOR24), UINT_MAX, UINT_MAX)
void term_set_color2(TERM_WINDOW *window, int col, unsigned int fgcol24, unsigned int bgcol24);
#else
#define term_set_color2(window, col, unused1, unused2) term_set_color(window, col)
void term_set_color(TERM_WINDOW *window, int col);
#endif
void term_move(TERM_WINDOW *window, int x, int y);
void term_addch(TERM_WINDOW *window, char chr);

View File

@ -118,7 +118,6 @@ static void textbuffer_cache_unref(TEXT_BUFFER_CACHE_REC *cache)
#define FGATTR (ATTR_NOCOLORS | ATTR_RESETFG | FG_MASK | ATTR_FGCOLOR24)
#define BGATTR (ATTR_NOCOLORS | ATTR_RESETBG | BG_MASK | ATTR_BGCOLOR24)
#ifdef TERM_TRUECOLOR
static void unformat_24bit_line_color(const unsigned char **ptr, int off, int *flags, unsigned int *fg, unsigned int *bg)
{
unsigned int color;
@ -145,7 +144,6 @@ static void unformat_24bit_line_color(const unsigned char **ptr, int off, int *f
*fg = color;
}
}
#endif
static inline unichar read_unichar(const unsigned char *data, const unsigned char **next, int *width)
{
@ -215,11 +213,9 @@ static inline void unformat(const unsigned char **ptr, int *color, unsigned int
break;
#undef SET_COLOR_EXT_BG_BITS
#undef SET_COLOR_EXT_FG_BITS
#ifdef TERM_TRUECOLOR
case FORMAT_COLOR_24:
unformat_24bit_line_color(ptr, 1, color, fg24, bg24);
break;
#endif
default:
if (**ptr != FORMAT_COLOR_NOCHANGE) {
if (**ptr == (unsigned char) 0xff) {
@ -289,10 +285,8 @@ view_update_line_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
sub->start = ++ptr;
sub->color = color;
#ifdef TERM_TRUECOLOR
sub->fg24 = fg24;
sub->bg24 = bg24;
#endif
lines = g_slist_append(lines, sub);
linecount++;
@ -360,10 +354,8 @@ view_update_line_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
sub->indent = xpos;
sub->indent_func = indent_func;
sub->color = color;
#ifdef TERM_TRUECOLOR
sub->fg24 = fg24;
sub->bg24 = bg24;
#endif
lines = g_slist_append(lines, sub);
linecount++;
@ -502,10 +494,8 @@ static int view_line_draw(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
if (indent_func == NULL || cache->lines[subline-1].continues)
xpos = cache->lines[subline-1].indent;
color = cache->lines[subline-1].color;
#ifdef TERM_TRUECOLOR
fg24 = cache->lines[subline-1].fg24;
bg24 = cache->lines[subline-1].bg24;
#endif
} else {
indent_func = NULL;
}

View File

@ -15,9 +15,7 @@ typedef struct {
int indent;
INDENT_FUNC indent_func;
int color;
#ifdef TERM_TRUECOLOR
unsigned int fg24, bg24;
#endif
/* first word in line belong to the end of the last word in
previous line */

View File

@ -1,11 +0,0 @@
if BUILD_IRSSIPROXY
PROXY=proxy
endif
SUBDIRS = core dcc flood notifylist $(PROXY)
noinst_LIBRARIES = libirc.a
libirc_a_SOURCES = irc.c
EXTRA_DIST = meson.build

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