From 1a31f01c20c1adb9c482f2fe7e32b6c5c10320d6 Mon Sep 17 00:00:00 2001 From: B. Watson Date: Thu, 11 Apr 2013 17:08:54 -0500 Subject: network/irssi_otr: Fix build (use static libotr) Signed-off-by: Robby Workman --- network/irssi_otr/README | 13 +- network/irssi_otr/irssi_otr.SlackBuild | 108 +++++++++-- network/irssi_otr/irssi_otr.info | 8 +- network/irssi_otr/slack-desc | 6 +- network/irssi_otr/xchat/README | 2 + network/irssi_otr/xchat/xchat-plugin.h | 334 +++++++++++++++++++++++++++++++++ 6 files changed, 448 insertions(+), 23 deletions(-) create mode 100644 network/irssi_otr/xchat/README create mode 100644 network/irssi_otr/xchat/xchat-plugin.h (limited to 'network/irssi_otr') diff --git a/network/irssi_otr/README b/network/irssi_otr/README index 62dd8c0664..c3a9b56459 100644 --- a/network/irssi_otr/README +++ b/network/irssi_otr/README @@ -1,3 +1,12 @@ -irssi-otr (Off-the-Record Messaging (OTR) for the irssi IRC client) +irssi_otr (Off-the-Record Messaging (OTR) for IRC clients) + +Off-the-Record Messaging (OTR) plugin for xchat and irssi + To use OTR within irssi, install this package, then "/load libotr" -and "/otr help" for usage instructions. +and "/otr help" for usage instructions. Also see the README in +/usr/doc/irssi_otr-$VERSION. To use with xchat, see also README.xchat. + +Note: The xchat plugin is automatically loaded when xchat starts. + +Either irssi or xchat support can be disabled by setting one of IRSSI=no +or XCHAT=no in the script's environment. It's an error to disable both. diff --git a/network/irssi_otr/irssi_otr.SlackBuild b/network/irssi_otr/irssi_otr.SlackBuild index 087c05871b..dafdbcd565 100644 --- a/network/irssi_otr/irssi_otr.SlackBuild +++ b/network/irssi_otr/irssi_otr.SlackBuild @@ -6,17 +6,35 @@ # Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details. +# 20130326 bkw: +# - Use a private copy of libotr 3.x, statically built. +# Needed because SBo libotr has upgraded to 4.0, which this +# plugin won't build with. Removed libotr from REQUIRES in .info file. +# - Add xchat support (upstream already supported it, no patching needed) +# - Better template compliance (cmake in a build dir, actually use SLKCFLAGS) +# - Bumped BUILD to 2 + +# For anyone that gets tempted to try the latest git irssi-otr code, here's +# what I found when I messed with a git checkout from 20130326: + +# Pros: libotr 4.0 is supported +# weechat support has been added +# Cons: xchat support is totally broken +# irssi segfaults on plugin load, unless the plugin is built with -O0 +# the weechat support doesn't work without patching + +# In view of the above, I decided to stick with the irssi_otr 0.3 release. +# Sorry, weechat users. + PRGNAM=irssi_otr VERSION=${VERSION:-0.3} -BUILD=${BUILD:-1} +BUILD=${BUILD:-2} TAG=${TAG:-_SBo} -# Automatically determine the architecture we're building on: if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i486 ;; arm*) ARCH=arm ;; - # Unless $ARCH is already set, use uname -m for all other archs: *) ARCH=$( uname -m ) ;; esac fi @@ -41,36 +59,96 @@ else fi TARNAM=$( echo $PRGNAM | sed 's/_/-/g' ) -LIBNAM="libotr.so" -PKGLIBDIR=$PKG/usr/lib$LIBDIRSUFFIX/irssi/modules +LIBOTR_VERSION=3.2.1 + +IRSSI=${IRSSI:-yes} +IRSSI_PLUGIN="libotr.so" +IRSSI_PLUGIN_DIR=$PKG/usr/lib$LIBDIRSUFFIX/irssi/modules + +XCHAT=${XCHAT:-yes} +XCHAT_PLUGIN="libxchatotr.so" +XCHAT_PLUGIN_DIR=$PKG/usr/lib$LIBDIRSUFFIX/xchat/plugins + +if [ "$IRSSI" != "yes" -a "$XCHAT" != "yes" ]; then + echo "Can't build with both irssi and xchat disabled (nothing to build)" 2>&1 + exit 1 +fi set -e rm -rf $PKG mkdir -p $TMP $PKG $OUTPUT cd $TMP + +# First, build our static libotr3. It won't get installed as part of +# the package. +rm -rf libotr-$LIBOTR_VERSION +tar xvf $CWD/libotr-$LIBOTR_VERSION.tar.gz +cd libotr-$LIBOTR_VERSION + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +./configure --prefix=$( pwd )/installed \ + --enable-static \ + --disable-shared \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --build=$ARCH-slackware-linux + +make +make install + +# Now we can build irssi_otr. +cd $TMP rm -rf $TARNAM-$VERSION tar xvf $CWD/$TARNAM-$VERSION.tar.gz cd $TARNAM-$VERSION chown -R root:root . chmod -R a-s,u+w,go+r-w . -cmake -D CMAKE_C_FLAGS_RELEASE:STRING="-O2 -fPIC" \ - -D CMAKE_BUILD_TYPE:STRING="release" \ - . -make +mkdir build +cd build + +if [ "$IRSSI" = "yes" ]; then + CLIENTS=" irssi" + cmake -DCMAKE_C_FLAGS_RELEASE="$SLKCFLAGS" \ + -DCMAKE_BUILD_TYPE="release" \ + -DLIBOTR_INCLUDE_DIR=$TMP/libotr-$LIBOTR_VERSION/installed/include \ + -DLIBOTR_LIBRARY=$TMP/libotr-$LIBOTR_VERSION/installed/lib/libotr.a \ + .. + make + + # Easier to manually install than to coerce cmake's install + # target into using LIBDIRSUFFIX + mkdir -p $IRSSI_PLUGIN_DIR + install -s -o root -g root -m 0755 $IRSSI_PLUGIN $IRSSI_PLUGIN_DIR +fi + +if [ "$XCHAT" = "yes" ]; then + CLIENTS="$CLIENTS xchat" + rm -rf * + sed -i 's,irssi,xchat,' ../tarballdefs.cmake + cmake -DCMAKE_C_FLAGS_RELEASE="$SLKCFLAGS" \ + -DCMAKE_BUILD_TYPE="release" \ + -DLIBOTR_INCLUDE_DIR=$TMP/libotr-$LIBOTR_VERSION/installed/include \ + -DLIBOTR_LIBRARY=$TMP/libotr-$LIBOTR_VERSION/installed/lib/libotr.a \ + -DXCHAT_INCLUDE_DIR=$CWD \ + .. + + make + mkdir -p $XCHAT_PLUGIN_DIR + install -s -o root -g root -m 0755 $XCHAT_PLUGIN $XCHAT_PLUGIN_DIR +fi -# Easier to manually install than to coerce cmake's install -# target into using LIBDIRSUFFIX -mkdir -p $PKGLIBDIR -install -s -o root -g root -m 0755 $LIBNAM $PKGLIBDIR +cd .. mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION -cp LICENSE README ChangeLog $PKG/usr/doc/$PRGNAM-$VERSION +cp -a LICENSE README ChangeLog *.txt $PKG/usr/doc/$PRGNAM-$VERSION +[ "$XCHAT" = "yes" ] && cp -a README.xchat $PKG/usr/doc/$PRGNAM-$VERSION cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild mkdir -p $PKG/install -cat $CWD/slack-desc > $PKG/install/slack-desc +sed "s/@CLIENTS@/$CLIENTS/" $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/network/irssi_otr/irssi_otr.info b/network/irssi_otr/irssi_otr.info index aed060c266..a32bb3f440 100644 --- a/network/irssi_otr/irssi_otr.info +++ b/network/irssi_otr/irssi_otr.info @@ -1,10 +1,12 @@ PRGNAM="irssi_otr" VERSION="0.3" HOMEPAGE="http://irssi-otr.tuxfamily.org/" -DOWNLOAD="ftp://download.tuxfamily.org/irssiotr/irssi-otr-0.3.tar.gz" -MD5SUM="e3d46a31955470dd3fa0f6392c1dcfb4" +DOWNLOAD="ftp://download.tuxfamily.org/irssiotr/irssi-otr-0.3.tar.gz \ + http://www.cypherpunks.ca/otr/libotr-3.2.1.tar.gz" +MD5SUM="e3d46a31955470dd3fa0f6392c1dcfb4 \ + 974acf937d2ce0ee89b27a9815c17a3f" DOWNLOAD_x86_64="" MD5SUM_x86_64="" -REQUIRES="libotr" +REQUIRES="" MAINTAINER="B. Watson" EMAIL="yalhcru@gmail.com" diff --git a/network/irssi_otr/slack-desc b/network/irssi_otr/slack-desc index 8ddeda27ce..13438b2b38 100644 --- a/network/irssi_otr/slack-desc +++ b/network/irssi_otr/slack-desc @@ -6,11 +6,11 @@ # customary to leave one space after the ':'. |-----handy-ruler------------------------------------------------------| -irssi_otr: irssi-otr (OTR plugin for irssi) -irssi_otr: -irssi_otr: Off-the-Record Messaging (OTR) plugin for the irssi IRC client +irssi_otr: irssi_otr (OTR plugin for IRC clients) irssi_otr: +irssi_otr: Off-the-Record Messaging (OTR) plugin for xchat and irssi irssi_otr: +irssi_otr: This package was built with support for:@CLIENTS@ irssi_otr: irssi_otr: irssi_otr: diff --git a/network/irssi_otr/xchat/README b/network/irssi_otr/xchat/README new file mode 100644 index 0000000000..72a3cb8d50 --- /dev/null +++ b/network/irssi_otr/xchat/README @@ -0,0 +1,2 @@ +# Yes, this is used in the build script: +# -DXCHAT_INCLUDE_DIR=$CWD diff --git a/network/irssi_otr/xchat/xchat-plugin.h b/network/irssi_otr/xchat/xchat-plugin.h new file mode 100644 index 0000000000..30b19295c5 --- /dev/null +++ b/network/irssi_otr/xchat/xchat-plugin.h @@ -0,0 +1,334 @@ +/* You can distribute this header with your plugins for easy compilation */ +#ifndef XCHAT_PLUGIN_H +#define XCHAT_PLUGIN_H + +#include + +#define XCHAT_IFACE_MAJOR 1 +#define XCHAT_IFACE_MINOR 9 +#define XCHAT_IFACE_MICRO 11 +#define XCHAT_IFACE_VERSION ((XCHAT_IFACE_MAJOR * 10000) + \ + (XCHAT_IFACE_MINOR * 100) + \ + (XCHAT_IFACE_MICRO)) + +#define XCHAT_PRI_HIGHEST 127 +#define XCHAT_PRI_HIGH 64 +#define XCHAT_PRI_NORM 0 +#define XCHAT_PRI_LOW (-64) +#define XCHAT_PRI_LOWEST (-128) + +#define XCHAT_FD_READ 1 +#define XCHAT_FD_WRITE 2 +#define XCHAT_FD_EXCEPTION 4 +#define XCHAT_FD_NOTSOCKET 8 + +#define XCHAT_EAT_NONE 0 /* pass it on through! */ +#define XCHAT_EAT_XCHAT 1 /* don't let xchat see this event */ +#define XCHAT_EAT_PLUGIN 2 /* don't let other plugins see this event */ +#define XCHAT_EAT_ALL (XCHAT_EAT_XCHAT|XCHAT_EAT_PLUGIN) /* don't let anything see this event */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct _xchat_plugin xchat_plugin; +typedef struct _xchat_list xchat_list; +typedef struct _xchat_hook xchat_hook; +#ifndef PLUGIN_C +typedef struct _xchat_context xchat_context; +#endif + +#ifndef PLUGIN_C +struct _xchat_plugin +{ + /* these are only used on win32 */ + xchat_hook *(*xchat_hook_command) (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], char *word_eol[], void *user_data), + const char *help_text, + void *userdata); + xchat_hook *(*xchat_hook_server) (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], char *word_eol[], void *user_data), + void *userdata); + xchat_hook *(*xchat_hook_print) (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], void *user_data), + void *userdata); + xchat_hook *(*xchat_hook_timer) (xchat_plugin *ph, + int timeout, + int (*callback) (void *user_data), + void *userdata); + xchat_hook *(*xchat_hook_fd) (xchat_plugin *ph, + int fd, + int flags, + int (*callback) (int fd, int flags, void *user_data), + void *userdata); + void *(*xchat_unhook) (xchat_plugin *ph, + xchat_hook *hook); + void (*xchat_print) (xchat_plugin *ph, + const char *text); + void (*xchat_printf) (xchat_plugin *ph, + const char *format, ...); + void (*xchat_command) (xchat_plugin *ph, + const char *command); + void (*xchat_commandf) (xchat_plugin *ph, + const char *format, ...); + int (*xchat_nickcmp) (xchat_plugin *ph, + const char *s1, + const char *s2); + int (*xchat_set_context) (xchat_plugin *ph, + xchat_context *ctx); + xchat_context *(*xchat_find_context) (xchat_plugin *ph, + const char *servname, + const char *channel); + xchat_context *(*xchat_get_context) (xchat_plugin *ph); + const char *(*xchat_get_info) (xchat_plugin *ph, + const char *id); + int (*xchat_get_prefs) (xchat_plugin *ph, + const char *name, + const char **string, + int *integer); + xchat_list * (*xchat_list_get) (xchat_plugin *ph, + const char *name); + void (*xchat_list_free) (xchat_plugin *ph, + xchat_list *xlist); + const char * const * (*xchat_list_fields) (xchat_plugin *ph, + const char *name); + int (*xchat_list_next) (xchat_plugin *ph, + xchat_list *xlist); + const char * (*xchat_list_str) (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + int (*xchat_list_int) (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + void * (*xchat_plugingui_add) (xchat_plugin *ph, + const char *filename, + const char *name, + const char *desc, + const char *version, + char *reserved); + void (*xchat_plugingui_remove) (xchat_plugin *ph, + void *handle); + int (*xchat_emit_print) (xchat_plugin *ph, + const char *event_name, ...); + int (*xchat_read_fd) (xchat_plugin *ph, + void *src, + char *buf, + int *len); + time_t (*xchat_list_time) (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + char *(*xchat_gettext) (xchat_plugin *ph, + const char *msgid); + void (*xchat_send_modes) (xchat_plugin *ph, + const char **targets, + int ntargets, + int modes_per_line, + char sign, + char mode); + char *(*xchat_strip) (xchat_plugin *ph, + const char *str, + int len, + int flags); + void (*xchat_free) (xchat_plugin *ph, + void *ptr); +}; +#endif + + +xchat_hook * +xchat_hook_command (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], char *word_eol[], void *user_data), + const char *help_text, + void *userdata); + +xchat_hook * +xchat_hook_server (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], char *word_eol[], void *user_data), + void *userdata); + +xchat_hook * +xchat_hook_print (xchat_plugin *ph, + const char *name, + int pri, + int (*callback) (char *word[], void *user_data), + void *userdata); + +xchat_hook * +xchat_hook_timer (xchat_plugin *ph, + int timeout, + int (*callback) (void *user_data), + void *userdata); + +xchat_hook * +xchat_hook_fd (xchat_plugin *ph, + int fd, + int flags, + int (*callback) (int fd, int flags, void *user_data), + void *userdata); + +void * +xchat_unhook (xchat_plugin *ph, + xchat_hook *hook); + +void +xchat_print (xchat_plugin *ph, + const char *text); + +void +xchat_printf (xchat_plugin *ph, + const char *format, ...); + +void +xchat_command (xchat_plugin *ph, + const char *command); + +void +xchat_commandf (xchat_plugin *ph, + const char *format, ...); + +int +xchat_nickcmp (xchat_plugin *ph, + const char *s1, + const char *s2); + +int +xchat_set_context (xchat_plugin *ph, + xchat_context *ctx); + +xchat_context * +xchat_find_context (xchat_plugin *ph, + const char *servname, + const char *channel); + +xchat_context * +xchat_get_context (xchat_plugin *ph); + +const char * +xchat_get_info (xchat_plugin *ph, + const char *id); + +int +xchat_get_prefs (xchat_plugin *ph, + const char *name, + const char **string, + int *integer); + +xchat_list * +xchat_list_get (xchat_plugin *ph, + const char *name); + +void +xchat_list_free (xchat_plugin *ph, + xchat_list *xlist); + +const char * const * +xchat_list_fields (xchat_plugin *ph, + const char *name); + +int +xchat_list_next (xchat_plugin *ph, + xchat_list *xlist); + +const char * +xchat_list_str (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + +int +xchat_list_int (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + +time_t +xchat_list_time (xchat_plugin *ph, + xchat_list *xlist, + const char *name); + +void * +xchat_plugingui_add (xchat_plugin *ph, + const char *filename, + const char *name, + const char *desc, + const char *version, + char *reserved); + +void +xchat_plugingui_remove (xchat_plugin *ph, + void *handle); + +int +xchat_emit_print (xchat_plugin *ph, + const char *event_name, ...); + +char * +xchat_gettext (xchat_plugin *ph, + const char *msgid); + +void +xchat_send_modes (xchat_plugin *ph, + const char **targets, + int ntargets, + int modes_per_line, + char sign, + char mode); + +char * +xchat_strip (xchat_plugin *ph, + const char *str, + int len, + int flags); + +void +xchat_free (xchat_plugin *ph, + void *ptr); + +#if !defined(PLUGIN_C) && defined(WIN32) +#ifndef XCHAT_PLUGIN_HANDLE +#define XCHAT_PLUGIN_HANDLE (ph) +#endif +#define xchat_hook_command ((XCHAT_PLUGIN_HANDLE)->xchat_hook_command) +#define xchat_hook_server ((XCHAT_PLUGIN_HANDLE)->xchat_hook_server) +#define xchat_hook_print ((XCHAT_PLUGIN_HANDLE)->xchat_hook_print) +#define xchat_hook_timer ((XCHAT_PLUGIN_HANDLE)->xchat_hook_timer) +#define xchat_hook_fd ((XCHAT_PLUGIN_HANDLE)->xchat_hook_fd) +#define xchat_unhook ((XCHAT_PLUGIN_HANDLE)->xchat_unhook) +#define xchat_print ((XCHAT_PLUGIN_HANDLE)->xchat_print) +#define xchat_printf ((XCHAT_PLUGIN_HANDLE)->xchat_printf) +#define xchat_command ((XCHAT_PLUGIN_HANDLE)->xchat_command) +#define xchat_commandf ((XCHAT_PLUGIN_HANDLE)->xchat_commandf) +#define xchat_nickcmp ((XCHAT_PLUGIN_HANDLE)->xchat_nickcmp) +#define xchat_set_context ((XCHAT_PLUGIN_HANDLE)->xchat_set_context) +#define xchat_find_context ((XCHAT_PLUGIN_HANDLE)->xchat_find_context) +#define xchat_get_context ((XCHAT_PLUGIN_HANDLE)->xchat_get_context) +#define xchat_get_info ((XCHAT_PLUGIN_HANDLE)->xchat_get_info) +#define xchat_get_prefs ((XCHAT_PLUGIN_HANDLE)->xchat_get_prefs) +#define xchat_list_get ((XCHAT_PLUGIN_HANDLE)->xchat_list_get) +#define xchat_list_free ((XCHAT_PLUGIN_HANDLE)->xchat_list_free) +#define xchat_list_fields ((XCHAT_PLUGIN_HANDLE)->xchat_list_fields) +#define xchat_list_str ((XCHAT_PLUGIN_HANDLE)->xchat_list_str) +#define xchat_list_int ((XCHAT_PLUGIN_HANDLE)->xchat_list_int) +#define xchat_list_time ((XCHAT_PLUGIN_HANDLE)->xchat_list_time) +#define xchat_list_next ((XCHAT_PLUGIN_HANDLE)->xchat_list_next) +#define xchat_plugingui_add ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_add) +#define xchat_plugingui_remove ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_remove) +#define xchat_emit_print ((XCHAT_PLUGIN_HANDLE)->xchat_emit_print) +#define xchat_gettext ((XCHAT_PLUGIN_HANDLE)->xchat_gettext) +#define xchat_send_modes ((XCHAT_PLUGIN_HANDLE)->xchat_send_modes) +#define xchat_strip ((XCHAT_PLUGIN_HANDLE)->xchat_strip) +#define xchat_free ((XCHAT_PLUGIN_HANDLE)->xchat_free) +#endif + +#ifdef __cplusplus +} +#endif +#endif -- cgit v1.2.3