+Tue Apr 10 15:55:42 CEST 2007 Jochen Eisinger <coffee@silcnet.org>
+
+ * Add option --enable-silc-plugin. Affected files are
+ apps/irssi/configure.{ad,in}
+ * Only compile the SILC Plugin if required. Affected files are
+ apps/irssi/src/Makefile.am, apps/irssi/src/fe-common/Makefile.am
+ * Conditionally build the SILC Plugin. Affected files are
+ apps/irssi/src/silc/core/Makefile.am,
+ apps/irssi/src/fe-common/silc/Makefile.am
+ * Backout delayed protocol exit and replace with a lame busy
+ wait. Affected files are apps/irssi/src/fe-text/silc.c,
+ apps/irssi/src/silc/core/silc-core.c
+ * Fix key generation for SILC Plugin. Affected file
+ apps/irssi/src/silc/core/clientutil.c
+
Tue Apr 10 12:40:19 CEST 2007 Jochen Eisinger <coffee@silcnet.org>
* Only pass -rpath to libtool when building shared libraries.
if it should be built into main silc binary
(static, default) or as a module]])
+# Irssi SILC Plugin support
+#
+AC_ARG_ENABLE(silc-plugin,
+[ --enable-silc-plugin Compile the SILC Plugin instead of the SILC Client])
+
AC_CONFIG_SUBDIRS(apps/irssi)
AC_CONFIG_FILES(
apps/irssi/Makefile.defines
fi,
want_perl=static)
+# Irssi SILC Plugin support
+#
+AC_ARG_ENABLE(silc-plugin,
+[ --enable-silc-plugin Compile the SILC Plugin instead of the SILC Client],
+[case "${enableval}" in
+ yes) silc_plugin=true ;;
+ no) silc_plugin=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-silc-plugin) ;;
+esac],[silc_plugin=false])
+AM_CONDITIONAL(SILCPLUGIN, test x$silc_plugin = xtrue)
+
AC_ARG_WITH(file-offset-size,
[ --with-file-offset-size=BITS Set size of file offsets. Usually 32 or 64.
(default: 64 if available)],
PERLDIR=perl
endif
+if SILCPLUGIN
+SBDRS=
+TEXTUI=
+else
+SBDRS=lib-popt lib-config core
+endif
+
pkginc_srcdir=$(pkgincludedir)/src
pkginc_src_HEADERS = \
common.h
noinst_HEADERS = \
common.h
-SUBDIRS = lib-popt lib-config core silc fe-common $(PERLDIR) $(TEXTUI) $(BOTUI)
+SUBDIRS = $(SBDRS) silc fe-common $(PERLDIR) $(TEXTUI) $(BOTUI)
-SUBDIRS = core silc
+if SILCPLUGIN
+SBDRS=
+else
+SBDRS=core
+endif
+
+SUBDIRS = $(SBDRS) silc
IRSSI_INCLUDE=../../..
+if SILCPLUGIN
+EXTRA_CFLAGS=-DSILC_PLUGIN
+NILB=
+LTLB= libfe_common_silc.la
+LDFLGS= \
+ -avoid-version \
+ -rpath $(moduledir)
+else
+EXTRA_CFLAGS=
+NILB= libfe_common_silc.la
+LTLB=
+LDFLGS=
+endif
+
include $(top_srcdir)/Makefile.defines.in
ADD_INCLUDES = \
-I$(SILC_INCLUDE)/lib/silchttp \
-I$(SILC_INCLUDE)/lib/silcclient \
-I$(SILC_INCLUDE)/lib/silcmath/gmp \
- -I$(SILC_INCLUDE)/lib/trq
+ -I$(SILC_INCLUDE)/lib/trq \
+ $(EXTRA_CFLAGS)
+
+noinst_LTLIBRARIES = $(NILB)
+module_LTLIBRARIES = $(LTLB)
-noinst_LIBRARIES = libfe_common_silc.a
+libfe_common_silc_la_LDFLAGS = \
+ $(LDFGS)
-libfe_common_silc_a_SOURCES = \
+libfe_common_silc_la_SOURCES = \
fe-silc-channels.c \
fe-common-silc.c \
module-formats.c \
LIBS = $(SILC_COMMON_LIBS)
silc_LDADD = \
@COMMON_LIBS@ \
- -L$(silc_top_srcdir)/lib -lsilcclient \
+ -lsilcclient \
@PERL_LINK_LIBS@ \
@PERL_FE_LINK_LIBS@ \
@PERL_LINK_FLAGS@ \
static GMainLoop *main_loop;
int quitting;
-int quit_signalled;
-int protocols_deinit;
static int display_firsttimer = FALSE;
-/* Protocol exit signal to tell protocol has gone away. Safe to quit. */
-
-static void sig_protocol_exit(void)
-{
- protocols_deinit = TRUE;
- if (!quitting && quit_signalled)
- quitting = TRUE;
-}
-
static void sig_exit(void)
{
- quit_signalled = TRUE;
-
- /* If protocol hasn't finished yet, wait untill it sends "chat protocol
- deinit" signal. */
- if (!protocols_deinit)
- return;
quitting = TRUE;
}
theme_register(gui_text_formats);
signal_add_last("gui exit", (SIGNAL_FUNC) sig_exit);
- signal_add_last("chat protocol deinit",
- (SIGNAL_FUNC) sig_protocol_exit);
}
static void textui_finish_init(void)
{
quitting = FALSE;
- quit_signalled = FALSE;
- protocols_deinit = FALSE;
if (dummy)
term_dummy_init();
dirty_check(); /* one last time to print any quit messages */
signal_remove("gui exit", (SIGNAL_FUNC) sig_exit);
- signal_remove("chat protocol deinit", (SIGNAL_FUNC) sig_protocol_exit);
if (dummy)
term_dummy_deinit();
dummy = FALSE;
quitting = FALSE;
- quit_signalled = FALSE;
- protocols_deinit = FALSE;
core_init_paths(argc, argv);
check_files();
IRSSI_INCLUDE=../../..
+if SILCPLUGIN
+EXTRA_CFLAGS=-DSILC_PLUGIN
+LBDD= \
+ $(top_srcdir)/../../lib/libsilc.la \
+ $(top_srcdir)/../../lib/libsilcclient.la
+LTLB= libsilc_core.la
+NILB=
+LBLDFLGS= \
+ -avoid-version \
+ -rpath $(moduledir)
+else
+EXTRA_CFLAGS=
+LBDD=
+NILB= libsilc_core.la
+LTLB=
+LBLDFLGS=
+endif
+
ADD_INCLUDES = \
$(GLIB_CFLAGS) -I$(IRSSI_INCLUDE) -I$(IRSSI_INCLUDE)/src \
-DSYSCONFDIR=\""$(silc_etcdir)"\" \
-I$(IRSSI_INCLUDE)/src \
-I$(IRSSI_INCLUDE)/src/core \
-I$(IRSSI_INCLUDE)/src/fe-common/core \
- -I$(IRSSI_INCLUDE)/src/fe-common/silc
+ -I$(IRSSI_INCLUDE)/src/fe-common/silc \
+ $(EXTRA_CFLAGS)
-noinst_LIBRARIES=libsilc_core.a
+noinst_LTLIBRARIES= $(NILB)
+module_LTLIBRARIES = $(LTLB)
-libsilc_core_a_SOURCES = \
+libsilc_core_la_SOURCES = \
clientutil.c \
silc-channels.c \
silc-core.c \
silc-cmdqueue.c \
client_ops.c
+libsilc_core_la_LIBADD = \
+ $(LBDD)
+
+libsilc_core_la_LDFLAGS = \
+ $(LBDFLGS)
+
noinst_HEADERS = \
module.h \
client_ops.h \
silc-chatnets.h \
silc-cmdqueue.h
+all-local: libsilc_core.a
+
+clean-local:
+ -rm -f libsilc_core.a
+
+libsilc_core.a: libsilc_core.la
+ cp .libs/libsilc_core.a .
}
#ifdef SILC_PLUGIN
+extern void irssi_redraw(void); /* dirty, I know */
+
void create_key_passphrase(const char *answer, CREATE_KEY_REC *rec)
{
char priv_key_file[128], pub_key_file[128];
if (silc_create_key_pair(rec->pkcs, rec->bits, pub_key_file, priv_key_file,
NULL, (rec->passphrase == NULL ? "" : rec->passphrase),
- NULL, NULL, NULL, FALSE) == TRUE)
+ NULL, NULL, FALSE) == TRUE)
printformat_module("fe-common/silc", NULL, NULL,
MSGLEVEL_CRAP, SILCTXT_CONFIG_CREATE);
else
SILC_LOG_ERROR(("Unknown cipher `%s'", cipher));
#ifdef SILC_PLUGIN
init_failed = -1;
- returnn;
+ return;
#else
exit(1);
#endif
SILC_LOG_ERROR(("Unknown hash function `%s'", hash));
#ifdef SILC_PLUGIN
init_failed = -1;
- returnn;
+ return;
#else
exit(1);
#endif
SILC_LOG_ERROR(("Unknown HMAC `%s'", hmac));
#ifdef SILC_PLUGIN
init_failed = -1;
- returnn;
+ return;
#else
exit(1);
#endif
#undef FUNCTION_EXIT
/* Called to indicate the client library has stopped. */
-
static void
silc_stopped(SilcClient client, void *context)
{
SILC_LOG_DEBUG(("Client library has stopped"));
- if (idletag != -1)
- g_source_remove(idletag);
- signal_emit("chat protocol deinit", 1,
- chat_protocol_find("SILC"));
-}
-
-static void sig_gui_quit(SILC_SERVER_REC *server, const char *msg)
-{
- silc_client_stop(silc_client, silc_stopped, NULL);
+ *(int*)context = -1;
}
/* Called to indicate the client library is running. */
#ifndef SILC_PLUGIN
signal_add("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
#endif
- signal_add("gui exit", (SIGNAL_FUNC) sig_gui_quit);
#if defined (SILC_PLUGIN) && defined (SILC_DEBUG)
if (settings_get_bool("debug") == TRUE)
if (idletag != -1)
g_source_remove(idletag);
+ int stopped = 0;
+ silc_client_stop(silc_client, silc_stopped, &stopped);
+
+ while (!stopped)
+ silc_client_run_one(silc_client);
+
if (opt_hostname)
silc_free(opt_hostname);
if (opt_nickname)
g_free(opt_nickname);
signal_remove("setup changed", (SIGNAL_FUNC) sig_setup_changed);
- signal_remove("gui exit", (SIGNAL_FUNC) sig_gui_quit);
#ifdef SILC_PLUGIN
command_unbind("silc", (SIGNAL_FUNC) silc_opt_callback);
#else
signal_remove("irssi init finished", (SIGNAL_FUNC) sig_init_finished);
#endif
+ signal_emit("chat protocol deinit", 1, chat_protocol_find("SILC"));
+
silc_hash_free(sha1hash);
silc_queue_deinit();