aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2013-04-11 17:08:54 -0500
committerRobby Workman <rworkman@slackbuilds.org>2013-04-15 17:20:34 -0500
commit1a31f01c20c1adb9c482f2fe7e32b6c5c10320d6 (patch)
tree9ee5bb867f012c1987f9c3da56be488b4955f2c0
parent328934f2d97c6345c998107022b10880b575a880 (diff)
network/irssi_otr: Fix build (use static libotr)
Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
-rw-r--r--network/irssi_otr/README13
-rw-r--r--network/irssi_otr/irssi_otr.SlackBuild108
-rw-r--r--network/irssi_otr/irssi_otr.info8
-rw-r--r--network/irssi_otr/slack-desc6
-rw-r--r--network/irssi_otr/xchat/README2
-rw-r--r--network/irssi_otr/xchat/xchat-plugin.h334
6 files changed, 448 insertions, 23 deletions
diff --git a/network/irssi_otr/README b/network/irssi_otr/README
index 62dd8c0664d29..c3a9b564591c9 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 087c05871bebd..dafdbcd565ee1 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 aed060c266a7e..a32bb3f440b22 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 8ddeda27cec6c..13438b2b38931 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 0000000000000..72a3cb8d50790
--- /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 0000000000000..30b19295c5da9
--- /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 <time.h>
+
+#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