From 82f8ee57c317017d74950884f8264ae47f58361a Mon Sep 17 00:00:00 2001 From: Ailin Nemui Date: Sat, 27 Mar 2021 11:05:54 +0100 Subject: [PATCH] autoload the IRC module --- src/core/core.c | 2 +- src/fe-common/irc/dcc/meson.build | 4 +++- src/fe-common/irc/fe-common-irc.c | 6 ++++++ src/fe-common/irc/irc-modules.c | 2 ++ src/fe-common/irc/meson.build | 4 +++- src/fe-common/irc/notifylist/meson.build | 4 +++- src/fe-none/irssi.c | 26 ++++++++++++++++++++++++ src/fe-none/meson.build | 1 - src/fe-text/irssi.c | 10 +++++++++ src/fe-text/meson.build | 4 ---- src/irc/core/meson.build | 4 +++- src/irc/dcc/meson.build | 4 +++- src/irc/flood/meson.build | 4 +++- src/irc/irc.c | 2 ++ src/irc/meson.build | 14 ------------- src/irc/notifylist/meson.build | 4 +++- tests/irc/flood/meson.build | 3 ++- 17 files changed, 70 insertions(+), 28 deletions(-) diff --git a/src/core/core.c b/src/core/core.c index cbe3eb7c..7953654b 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -269,7 +269,7 @@ 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); diff --git a/src/fe-common/irc/dcc/meson.build b/src/fe-common/irc/dcc/meson.build index 296b1d61..013299a0 100644 --- a/src/fe-common/irc/dcc/meson.build +++ b/src/fe-common/irc/dcc/meson.build @@ -1,6 +1,6 @@ # this file is part of irssi -libfe_irc_dcc_a = static_library('fe_irc_dcc', +libfe_irc_dcc_a = shared_module('fe_irc_dcc', files( 'fe-dcc-chat-messages.c', 'fe-dcc-chat.c', @@ -12,6 +12,8 @@ libfe_irc_dcc_a = static_library('fe_irc_dcc', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, c_args : [ def_helpdir, def_sysconfdir, diff --git a/src/fe-common/irc/fe-common-irc.c b/src/fe-common/irc/fe-common-irc.c index a36d3caa..4658970b 100644 --- a/src/fe-common/irc/fe-common-irc.c +++ b/src/fe-common/irc/fe-common-irc.c @@ -30,8 +30,10 @@ #include #include +#ifdef HAVE_STATIC_IRC void fe_irc_modules_init(void); void fe_irc_modules_deinit(void); +#endif void fe_irc_queries_init(void); void fe_irc_queries_deinit(void); @@ -104,12 +106,16 @@ void fe_common_irc_init(void) settings_check(); module_register("irc", "fe-common"); +#ifdef HAVE_STATIC_IRC fe_irc_modules_init(); +#endif } void fe_common_irc_deinit(void) { +#ifdef HAVE_STATIC_IRC fe_irc_modules_deinit(); +#endif fe_irc_channels_deinit(); fe_irc_queries_deinit(); diff --git a/src/fe-common/irc/irc-modules.c b/src/fe-common/irc/irc-modules.c index 3bf1f327..b8c17d3b 100644 --- a/src/fe-common/irc/irc-modules.c +++ b/src/fe-common/irc/irc-modules.c @@ -1,4 +1,6 @@ +#ifdef HAVE_STATIC_IRC 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(); } +#endif diff --git a/src/fe-common/irc/meson.build b/src/fe-common/irc/meson.build index 1789133c..38903043 100644 --- a/src/fe-common/irc/meson.build +++ b/src/fe-common/irc/meson.build @@ -1,6 +1,6 @@ # this file is part of irssi -libfe_common_irc_a = static_library('fe_common_irc', +libfe_common_irc_a = shared_module('fe_common_irc', files( 'fe-cap.c', 'fe-common-irc.c', @@ -25,6 +25,8 @@ libfe_common_irc_a = static_library('fe_common_irc', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, c_args : [ def_helpdir, def_themesdir, diff --git a/src/fe-common/irc/notifylist/meson.build b/src/fe-common/irc/notifylist/meson.build index 2e66c786..76e63b82 100644 --- a/src/fe-common/irc/notifylist/meson.build +++ b/src/fe-common/irc/notifylist/meson.build @@ -1,12 +1,14 @@ # this file is part of irssi -libfe_irc_notifylist_a = static_library('fe_irc_notifylist', +libfe_irc_notifylist_a = shared_module('fe_irc_notifylist', files( 'fe-notifylist.c', 'module-formats.c', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, c_args : [ def_helpdir, def_sysconfdir, diff --git a/src/fe-none/irssi.c b/src/fe-none/irssi.c index 6a02ff6a..b33a4c5c 100644 --- a/src/fe-none/irssi.c +++ b/src/fe-none/irssi.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #ifdef HAVE_STATIC_PERL @@ -30,8 +31,10 @@ void perl_core_init(void); void perl_core_deinit(void); #endif +#ifdef HAVE_STATIC_IRC void irc_init(void); void irc_deinit(void); +#endif static GMainLoop *main_loop; static char *autoload_module; @@ -47,13 +50,32 @@ 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(); +#ifdef HAVE_STATIC_IRC irc_init(); +#endif module_register("core", "fe-none"); @@ -64,6 +86,8 @@ void noui_init(void) perl_core_init(); #endif + autoload_modules(); + signal_emit("irssi init finished", 0); } @@ -75,7 +99,9 @@ void noui_deinit(void) signal_remove("reload", (SIGNAL_FUNC) sig_reload); signal_remove("gui exit", (SIGNAL_FUNC) sig_exit); +#ifdef HAVE_STATIC_IRC irc_deinit(); +#endif core_deinit(); } diff --git a/src/fe-none/meson.build b/src/fe-none/meson.build index 58df15f6..8f6b797d 100644 --- a/src/fe-none/meson.build +++ b/src/fe-none/meson.build @@ -10,7 +10,6 @@ executable('botti', link_with : [ libconfig_a, libcore_a, - libirc_a, ], install : true, dependencies : dep diff --git a/src/fe-text/irssi.c b/src/fe-text/irssi.c index fbaa303a..34341c9b 100644 --- a/src/fe-text/irssi.c +++ b/src/fe-text/irssi.c @@ -59,11 +59,13 @@ void otr_core_init(void); void otr_core_deinit(void); #endif +#ifdef HAVE_STATIC_IRC void irc_init(void); void irc_deinit(void); void fe_common_irc_init(void); void fe_common_irc_deinit(void); +#endif void gui_expandos_init(void); void gui_expandos_deinit(void); @@ -168,9 +170,13 @@ static void textui_init(void) irssi_gui = IRSSI_GUI_TEXT; core_init(); +#ifdef HAVE_STATIC_IRC irc_init(); +#endif fe_common_core_init(); +#ifdef HAVE_STATIC_IRC fe_common_irc_init(); +#endif theme_register(gui_text_formats); signal_add("settings userinfo changed", (SIGNAL_FUNC) sig_settings_userinfo_changed); @@ -301,9 +307,13 @@ static void textui_deinit(void) theme_unregister(); +#ifdef HAVE_STATIC_IRC fe_common_irc_deinit(); +#endif fe_common_core_deinit(); +#ifdef HAVE_STATIC_IRC irc_deinit(); +#endif core_deinit(); } diff --git a/src/fe-text/meson.build b/src/fe-text/meson.build index 4da98809..24a86ca3 100644 --- a/src/fe-text/meson.build +++ b/src/fe-text/meson.build @@ -35,10 +35,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, install_rpath : get_option('prefix') / get_option('libdir'), diff --git a/src/irc/core/meson.build b/src/irc/core/meson.build index e6cc89c7..b409e0f6 100644 --- a/src/irc/core/meson.build +++ b/src/irc/core/meson.build @@ -1,6 +1,6 @@ # this file is part of irssi -libirc_core_a = static_library('irc_core', +libirc_core_a = shared_module('irc_core', files( 'bans.c', 'channel-events.c', @@ -33,6 +33,8 @@ libirc_core_a = static_library('irc_core', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, c_args : [ def_moduledir, def_sysconfdir, diff --git a/src/irc/dcc/meson.build b/src/irc/dcc/meson.build index 0c3d706a..a2a9b92d 100644 --- a/src/irc/dcc/meson.build +++ b/src/irc/dcc/meson.build @@ -1,6 +1,6 @@ # this file is part of irssi -libirc_dcc_a = static_library('irc_dcc', +libirc_dcc_a = shared_module('irc_dcc', files( 'dcc-autoget.c', 'dcc-chat.c', @@ -13,6 +13,8 @@ libirc_dcc_a = static_library('irc_dcc', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, dependencies : dep) install_headers( diff --git a/src/irc/flood/meson.build b/src/irc/flood/meson.build index 75107db1..fe4d8a6d 100644 --- a/src/irc/flood/meson.build +++ b/src/irc/flood/meson.build @@ -1,12 +1,14 @@ # this file is part of irssi -libirc_flood_a = static_library('irc_flood', +libirc_flood_a = shared_module('irc_flood', files( 'autoignore.c', 'flood.c', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, dependencies : dep) install_headers( diff --git a/src/irc/irc.c b/src/irc/irc.c index 250a6fb4..5780a965 100644 --- a/src/irc/irc.c +++ b/src/irc/irc.c @@ -1,5 +1,7 @@ +#ifdef HAVE_STATIC_IRC void irc_core_init(void); void irc_core_deinit(void); void irc_dcc_init(void);void irc_flood_init(void);void irc_notifylist_init(void); void irc_notifylist_deinit(void);void irc_flood_deinit(void);void irc_dcc_deinit(void); void irc_init(void) { irc_core_init(); irc_dcc_init(); irc_flood_init(); irc_notifylist_init(); } void irc_deinit(void) { irc_notifylist_deinit(); irc_flood_deinit(); irc_dcc_deinit(); irc_core_deinit(); } +#endif diff --git a/src/irc/meson.build b/src/irc/meson.build index 72abc3ce..13bfc493 100644 --- a/src/irc/meson.build +++ b/src/irc/meson.build @@ -5,20 +5,6 @@ subdir('dcc') subdir('flood') subdir('notifylist') -libirc_a = static_library('irc', - files( - 'irc.c', - ), - link_with : [ - libirc_core_a, - libirc_dcc_a, - libirc_flood_a, - libirc_notifylist_a, - ], - include_directories : rootinc, - implicit_include_directories : false, -) - if want_proxy subdir('proxy') endif diff --git a/src/irc/notifylist/meson.build b/src/irc/notifylist/meson.build index f00ea321..87190ce7 100644 --- a/src/irc/notifylist/meson.build +++ b/src/irc/notifylist/meson.build @@ -1,6 +1,6 @@ # this file is part of irssi -libirc_notifylist_a = static_library('irc_notifylist', +libirc_notifylist_a = shared_module('irc_notifylist', files( 'notify-commands.c', 'notify-ison.c', @@ -10,6 +10,8 @@ libirc_notifylist_a = static_library('irc_notifylist', ), include_directories : rootinc, implicit_include_directories : false, + install : true, + install_dir : moduledir, dependencies : dep) install_headers( diff --git a/tests/irc/flood/meson.build b/tests/irc/flood/meson.build index e9d0a2bc..78556331 100644 --- a/tests/irc/flood/meson.build +++ b/tests/irc/flood/meson.build @@ -6,7 +6,8 @@ test_test_796 = executable('test-796', libconfig_a, libcore_a, libfe_common_core_a, - libirc_a, + libirc_core_a, + libirc_flood_a, libfe_common_irc_a, libfe_irc_dcc_a, libfe_irc_notifylist_a,