Tue Apr 10 15:55:42 CEST 2007 Jochen Eisinger <coffee@silcnet.org>
authorJochen Eisinger <coffee@silcnet.org>
Tue, 10 Apr 2007 13:59:43 +0000 (13:59 +0000)
committerJochen Eisinger <coffee@silcnet.org>
Tue, 10 Apr 2007 13:59:43 +0000 (13:59 +0000)
* 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

CHANGES
apps/irssi/configure.ad
apps/irssi/configure.in
apps/irssi/src/Makefile.am
apps/irssi/src/fe-common/Makefile.am
apps/irssi/src/fe-common/silc/Makefile.am
apps/irssi/src/fe-text/Makefile.am
apps/irssi/src/fe-text/silc.c
apps/irssi/src/silc/core/Makefile.am
apps/irssi/src/silc/core/clientutil.c
apps/irssi/src/silc/core/silc-core.c

diff --git a/CHANGES b/CHANGES
index 337bc818b26d12f047c9372119bb466fbeeb8b16..74492cea9781e4a5de2309c5e54aa2914c42fcb7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,18 @@
+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.
index 4b3b1b7ff8ff32bb1575cf9c69d8c881365a61d5..a25473e75ede08ac76381e712eb9e459d6b10afc 100644 (file)
@@ -52,6 +52,11 @@ AC_ARG_WITH(perl,
                                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
index 68c990a278b88edf185a6c71e2cd477b425e9a8c..c1b1aaf53f345b1100c87d72d8c1b905806a1685 100644 (file)
@@ -189,6 +189,17 @@ AC_ARG_WITH(perl,
        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)],
index d27958c7090d7f807ec2049616ec716a27ec5938..13de33af3ffc11bbc609ec74bb7064af7961a8c2 100644 (file)
@@ -10,10 +10,17 @@ if HAVE_PERL
 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)
index de959118e867d32d34acfcdaf4b28e5f947cf6cd..8c174946d7fe8b3b0c14293c5002b8ba2650b252 100644 (file)
@@ -1 +1,7 @@
-SUBDIRS = core silc
+if SILCPLUGIN
+SBDRS=
+else
+SBDRS=core
+endif
+
+SUBDIRS = $(SBDRS) silc
index 731e53569ebec2e9edf054ce9ef1e429f21a43f7..f79f98b4cdd372b7b93c139812ed67b0be87dfcb 100644 (file)
@@ -1,5 +1,19 @@
 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 = \
@@ -25,11 +39,16 @@ 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 \
index a03b15d79872900c50b9574bc1c7135eff1dfa7c..208929643351a40de09219e84feeda406f5caa25 100644 (file)
@@ -19,7 +19,7 @@ silc_DEPENDENCIES =           \
 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@ \
index c5f68a8d4dc65e94f1acb036bc59d062ac4be000..000d5f6884f8a4b893589573addd8e7e81af639e 100644 (file)
@@ -78,28 +78,11 @@ static int dirty, full_redraw, dummy;
 
 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;
 }
 
@@ -160,15 +143,11 @@ static void textui_init(void)
 
        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();
@@ -221,7 +200,6 @@ static void textui_deinit(void)
 
         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();
@@ -348,8 +326,6 @@ int main(int argc, char **argv)
 
        dummy = FALSE;
        quitting = FALSE;
-       quit_signalled = FALSE;
-       protocols_deinit = FALSE;
        core_init_paths(argc, argv);
 
        check_files();
index 3e7d43a6739cb89fab346efc827e60ebb24456d7..22320187b0e130ec5287d57f1582761f018f1cda 100644 (file)
@@ -2,6 +2,24 @@ include $(top_srcdir)/Makefile.defines.in
 
 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)"\" \
@@ -9,11 +27,13 @@ ADD_INCLUDES = \
        -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 \
@@ -27,6 +47,12 @@ libsilc_core_a_SOURCES = \
        silc-cmdqueue.c \
        client_ops.c
 
+libsilc_core_la_LIBADD = \
+       $(LBDD)
+
+libsilc_core_la_LDFLAGS = \
+       $(LBDFLGS)
+
 noinst_HEADERS = \
        module.h \
        client_ops.h \
@@ -40,3 +66,10 @@ noinst_HEADERS = \
        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 .
index 0be681a3246ce45f66ad8ee90e1123cdc947e043..7c8031aad1cc7113905ef7b9ac1b1ccb532528dd 100644 (file)
@@ -371,6 +371,8 @@ int silc_client_load_keys(SilcClient client)
 }
 
 #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];
@@ -406,7 +408,7 @@ void create_key_passphrase(const char *answer, CREATE_KEY_REC *rec)
 
   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
index 0ef483265ff7348e56d35ac264ad1829606225a2..3084f7407760da9fe1c0c73b154f7c109dd7d322 100644 (file)
@@ -244,7 +244,7 @@ static void silc_register_cipher(SilcClient client, const char *cipher)
       SILC_LOG_ERROR(("Unknown cipher `%s'", cipher));
 #ifdef SILC_PLUGIN
       init_failed = -1;
-      returnn;
+      return;
 #else
       exit(1);
 #endif
@@ -270,7 +270,7 @@ static void silc_register_hash(SilcClient client, const char *hash)
       SILC_LOG_ERROR(("Unknown hash function `%s'", hash));
 #ifdef SILC_PLUGIN
       init_failed = -1;
-      returnn;
+      return;
 #else
       exit(1);
 #endif
@@ -296,7 +296,7 @@ static void silc_register_hmac(SilcClient client, const char *hmac)
       SILC_LOG_ERROR(("Unknown HMAC `%s'", hmac));
 #ifdef SILC_PLUGIN
       init_failed = -1;
-      returnn;
+      return;
 #else
       exit(1);
 #endif
@@ -549,20 +549,11 @@ out:
 #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. */
@@ -708,7 +699,6 @@ void silc_core_init(void)
 #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)
@@ -801,19 +791,26 @@ void silc_core_deinit(void)
   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();