summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Wegener <swegener@gentoo.org>2005-06-21 12:07:00 +0000
committerSven Wegener <swegener@gentoo.org>2005-06-21 12:07:00 +0000
commit7c2d1784816a143f093cba47d30188ed0c3e512b (patch)
tree64e94522f94fbcf1253ed66778dda2d046bc3fe9 /net-irc
parent20050323 x86 stable for livecd (diff)
downloadhistorical-7c2d1784816a143f093cba47d30188ed0c3e512b.tar.gz
historical-7c2d1784816a143f093cba47d30188ed0c3e512b.tar.bz2
historical-7c2d1784816a143f093cba47d30188ed0c3e512b.zip
Version bump, bug #96687.
Package-Manager: portage-2.0.51.22-r1
Diffstat (limited to 'net-irc')
-rw-r--r--net-irc/xchat/ChangeLog8
-rw-r--r--net-irc/xchat/Manifest27
-rw-r--r--net-irc/xchat/files/digest-xchat-2.4.41
-rw-r--r--net-irc/xchat/files/xchat-dccserver-0.5.patch447
-rw-r--r--net-irc/xchat/xchat-2.4.4.ebuild86
5 files changed, 556 insertions, 13 deletions
diff --git a/net-irc/xchat/ChangeLog b/net-irc/xchat/ChangeLog
index 42920ad34679..ee26cd51a997 100644
--- a/net-irc/xchat/ChangeLog
+++ b/net-irc/xchat/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for net-irc/xchat
# Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-irc/xchat/ChangeLog,v 1.163 2005/06/13 17:47:37 ferdy Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-irc/xchat/ChangeLog,v 1.164 2005/06/21 12:07:00 swegener Exp $
+
+*xchat-2.4.4 (21 Jun 2005)
+
+ 21 Jun 2005; Sven Wegener <swegener@gentoo.org>
+ +files/xchat-dccserver-0.5.patch, +xchat-2.4.4.ebuild:
+ Version bump, bug #96687.
13 Jun 2005; Fernando J. Pereda <ferdy@gentoo.org> xchat-2.4.3.ebuild:
alpha stable
diff --git a/net-irc/xchat/Manifest b/net-irc/xchat/Manifest
index 165f64af52b7..af193acbdb5f 100644
--- a/net-irc/xchat/Manifest
+++ b/net-irc/xchat/Manifest
@@ -1,22 +1,25 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
-MD5 625d03b30e8f948c51ec974e2e384d2f xchat-2.4.3.ebuild 2243
-MD5 3bb8c4066c7d1aa003a24e9bccd5f2d5 xchat-2.4.1-r1.ebuild 2100
-MD5 8ebf40ee60968abaf73442bfb9873e93 xchat-1.8.11-r1.ebuild 2267
-MD5 5a9cf562767dec28e6b64a6d67819ef5 ChangeLog 24350
-MD5 fb5772136a872c08434566d4f0bcdc7f metadata.xml 179
-MD5 21bc6820aa6d0c8722509a74c7fccb3d files/digest-xchat-2.4.3 134
-MD5 a8f607d224408d4a27777d2ffce8beac files/xc1811fixststint.diff 422
+MD5 88af6fe96819e547faad972327e3dcea ChangeLog 24517
+MD5 9d213a58f6822d1958b6a5a4ad07ec14 files/2.4.1-close-fds-on-exec.patch 1041
MD5 e4f52004b3e7ca6598d403f2fa74dcd4 files/2.4.1-fe-text.patch 697
-MD5 31de685eff3d16d9466416434c9fd6c3 files/xc208-fixsocks5.diff 688
MD5 e2b99b2d2dfc54ba96e560c0ed8392df files/digest-xchat-1.8.11-r1 65
-MD5 9d213a58f6822d1958b6a5a4ad07ec14 files/2.4.1-close-fds-on-exec.patch 1041
MD5 4a066f82a7a8ab6fe970340332d70105 files/digest-xchat-2.4.1-r1 134
+MD5 21bc6820aa6d0c8722509a74c7fccb3d files/digest-xchat-2.4.3 134
+MD5 bbbd8d25d261dd3d115ca4fde8be8bce files/digest-xchat-2.4.4 65
+MD5 a8f607d224408d4a27777d2ffce8beac files/xc1811fixststint.diff 422
+MD5 31de685eff3d16d9466416434c9fd6c3 files/xc208-fixsocks5.diff 688
+MD5 ee98eba7f1061680d8d0582a10d72cb7 files/xchat-dccserver-0.5.patch 11776
+MD5 fb5772136a872c08434566d4f0bcdc7f metadata.xml 179
+MD5 8ebf40ee60968abaf73442bfb9873e93 xchat-1.8.11-r1.ebuild 2267
+MD5 3bb8c4066c7d1aa003a24e9bccd5f2d5 xchat-2.4.1-r1.ebuild 2100
+MD5 625d03b30e8f948c51ec974e2e384d2f xchat-2.4.3.ebuild 2243
+MD5 70aad23de8d464a8a07dd358f57af393 xchat-2.4.4.ebuild 2194
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
-iD8DBQFCrcbnViELBEf1JB0RAvJ4AJ4lo2T0ThSGOc9UXyspS9c2jrkoIACfeYw0
-rVC4uTZGFJzFyePl2t6NkJo=
-=R9uN
+iD8DBQFCuAL6I1lqEGTUzyQRAg0hAJ0fQbO/iPWFzCuSwRsm7bJatyrORwCfSOKq
+vq4t2vlFkMT1xjUcgZ5wtbw=
+=NBhn
-----END PGP SIGNATURE-----
diff --git a/net-irc/xchat/files/digest-xchat-2.4.4 b/net-irc/xchat/files/digest-xchat-2.4.4
new file mode 100644
index 000000000000..2edd631e72a6
--- /dev/null
+++ b/net-irc/xchat/files/digest-xchat-2.4.4
@@ -0,0 +1 @@
+MD5 c853dbc73c3ba5127388584381bd4dce xchat-2.4.4.tar.bz2 1285259
diff --git a/net-irc/xchat/files/xchat-dccserver-0.5.patch b/net-irc/xchat/files/xchat-dccserver-0.5.patch
new file mode 100644
index 000000000000..d88af2e77bc0
--- /dev/null
+++ b/net-irc/xchat/files/xchat-dccserver-0.5.patch
@@ -0,0 +1,447 @@
+diff -ur ../xchat-2.0.9-ori/src/common/cfgfiles.c ./src/common/cfgfiles.c
+--- ../xchat-2.0.9-ori/src/common/cfgfiles.c 2004-05-23 07:06:08.000000000 +0200
++++ ./src/common/cfgfiles.c 2004-06-06 17:01:20.000000000 +0200
+@@ -378,6 +378,7 @@
+ {"dcc_auto_send", P_OFFINT (autodccsend), TYPE_INT},
+ {"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT},
+ {"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR},
++ {"dcc_dccserver_port", P_OFFINT (dcc_dccserver_port), TYPE_INT},
+ {"dcc_dir", P_OFFSET (dccdir), TYPE_STR},
+ {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL},
+ {"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT},
+diff -ur ../xchat-2.0.9-ori/src/common/dcc.c ./src/common/dcc.c
+--- ../xchat-2.0.9-ori/src/common/dcc.c 2004-05-29 12:47:19.000000000 +0200
++++ ./src/common/dcc.c 2004-06-06 17:04:06.000000000 +0200
+@@ -66,6 +66,16 @@
+ {N_("Aborted"), 4 /*red */ },
+ };
+
++static struct
++{
++ int fd;
++ int iotag;
++}
++dccserver =
++{
++ fd: -1
++};
++
+ static int dcc_global_throttle; /* 0x1 = sends, 0x2 = gets */
+ static int dcc_sendcpssum, dcc_getcpssum;
+
+@@ -818,6 +828,18 @@
+ int ret;
+ char tbuf[400];
+
++ if (dcc->fromdccserver)
++ {
++ /* yet another special case, making cross calls to unrelated functions. fun. */
++ if (dcc->type == TYPE_CHATRECV)
++ snprintf(tbuf, sizeof(tbuf) - 1, "1%c1 %s\n", dcc->dccservchtype, dcc->serv->nick);
++ else /* TYPE_RECV */
++ snprintf(tbuf, sizeof(tbuf) - 1, "121 %s %i\n", dcc->serv->nick, dcc->resumable);
++ send(dcc->sok, tbuf, strlen(tbuf), 0);
++ dcc_connect_finished(NULL, 0, dcc);
++ return;
++ }
++
+ if (dcc->dccstat == STAT_CONNECTING)
+ return;
+ dcc->dccstat = STAT_CONNECTING;
+@@ -1563,6 +1585,12 @@
+ {
+ char tbuf[500];
+
++ if (dcc->fromdccserver)
++ {
++ dcc_connect(dcc);
++ return 1;
++ }
++
+ if (dcc->dccstat == STAT_QUEUED && dcc->resumable)
+ {
+ /* filename contains spaces? Quote them! */
+@@ -1876,3 +1904,240 @@
+ if (!i)
+ PrintText (sess, _("No active DCCs\n"));
+ }
++
++static gboolean
++dccserver_readcmd(GIOChannel *chan, GIOCondition cond, struct DCC *dcc)
++{
++ char line[1024];
++ int ret;
++ char *p, *nick, *filename;
++ int filesize;
++ int linelen;
++ struct stat st;
++
++ /* too lazy to do buffering */
++ ret = recv(dcc->sok, line, sizeof(line), MSG_PEEK);
++ if (ret <= 0)
++ {
++ if (errno != EWOULDBLOCK && errno != EAGAIN && errno != EINTR)
++ dcc_close(dcc, 0, 1);
++ return TRUE;
++ }
++
++ p = memchr(line, '\n', ret);
++ if (!p)
++ {
++ /* close if too long a line, otherwise continue to recv */
++ if (ret >= sizeof(line))
++ dcc_close(dcc, 0, 1);
++ return TRUE;
++ }
++
++ /* discard from recv-q */
++ recv(dcc->sok, line, (p - line) + 1, 0);
++
++ *p-- = '\0';
++ if (p >= line && *p == '\r')
++ *p = '\0';
++
++ linelen = strlen(line);
++ if (linelen < 5 || line[3] != ' ' || line[4] == ' ')
++ {
++ dcc_close(dcc, 0, 1);
++ return TRUE;
++ }
++
++ nick = &line[4];
++ p = strchr(nick, ' ');
++ if (p)
++ *p++ = '\0';
++
++ /* what follows is a lot of duplicate code from handle_dcc */
++ if (!memcmp(line, "100", 3) || !memcmp(line, "110", 3))
++ {
++ /* dcc chat request */
++ dcc->dccstat = STAT_QUEUED;
++ dcc->nick = strdup(nick);
++ dcc->serv = current_tab->server; /* ? */
++ time(&dcc->lasttime);
++ dcc->fromdccserver = 1;
++ dcc->dccservchtype = line[1];
++ dcc->type = TYPE_CHATRECV;
++
++ EMIT_SIGNAL(XP_TE_DCCCHATOFFER, current_tab, nick, NULL, NULL, NULL, 0);
++ if (prefs.autoopendccchatwindow)
++ fe_dcc_open_chat_win (TRUE);
++ if (prefs.autodccchat)
++ dcc_connect (dcc);
++ }
++ else if (!memcmp(line, "120", 3))
++ {
++ /* dcc send req */
++ if (!p)
++ {
++ dcc_close(dcc, 0, 1);
++ return TRUE;
++ }
++ filename = strchr(p, ' ');
++ if (!filename)
++ {
++ dcc_close(dcc, 0, 1);
++ return TRUE;
++ }
++ *filename++ = '\0';
++ filesize = atoi(p);
++
++ dcc->file = strdup(filename);
++ dcc->destfile = malloc(strlen (prefs.dccdir) + strlen (nick) + strlen (filename) + 4);
++ sprintf(dcc->destfile, "%s/%s%s%s",
++ prefs.dccdir, prefs.dccwithnick ? nick : "", prefs.dccwithnick ? "." : "",
++ filename);
++ dcc->destfile_fs = g_filename_from_utf8 (dcc->destfile, -1, 0, 0, 0);
++
++ dcc->resumable = 0;
++ if (stat (dcc->destfile, &st) != -1)
++ {
++ if (st.st_size < filesize)
++ dcc->resumable = st.st_size;
++ }
++
++ dcc->pos = dcc->resumable;
++ dcc->serv = current_tab->server;
++ dcc->type = TYPE_RECV;
++ dcc->dccstat = STAT_QUEUED;
++ dcc->size = filesize;
++ dcc->nick = strdup (nick);
++ dcc->maxcps = prefs.dcc_max_get_cps;
++ time(&dcc->lasttime);
++ dcc->fromdccserver = 1;
++ if (prefs.autodccsend)
++ {
++ if (prefs.autoresume && dcc->resumable)
++ {
++ /* don't resume the same file from two people! */
++ GSList *list = dcc_list;
++ struct DCC *d;
++ while (list)
++ {
++ d = list->data;
++ if (d->type == TYPE_RECV && d->dccstat != STAT_ABORTED &&
++ d->dccstat != STAT_DONE && d->dccstat != STAT_FAILED)
++ {
++ if (d != dcc && strcmp (d->destfile, dcc->destfile) == 0)
++ goto dontresume;
++ }
++ list = list->next;
++ }
++ dcc_resume (dcc);
++ } else
++ {
++dontresume:
++ dcc->resumable = 0;
++ dcc->pos = 0;
++ dcc_connect (dcc);
++ }
++ }
++ if (prefs.autoopendccrecvwindow)
++ fe_dcc_open_recv_win (TRUE);
++
++ /* abuse line var */
++ sprintf (line, "%d", filesize);
++ sprintf(line + 30, "%s:%i", net_ip(dcc->addr), dcc->port);
++ EMIT_SIGNAL (XP_TE_DCCSENDOFFER, current_tab->server->front_session, dcc->nick,
++ dcc->file, line, line + 30, 0);
++ }
++
++ return TRUE;
++}
++
++static gboolean
++dccserver_accept(GIOChannel *chan, GIOCondition cond, void *ptr)
++{
++ int fd;
++ char msg[1024];
++ struct DCC *dcc;
++ struct sockaddr_in sin;
++ int socklen;
++
++ socklen = sizeof(sin);
++ fd = accept(dccserver.fd, (struct sockaddr *) &sin, &socklen);
++ if (fd == -1)
++ {
++ if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR)
++ return TRUE;
++ if (!current_tab)
++ return TRUE;
++ snprintf(msg, sizeof(msg) - 1, "Error accept connection on dcc server socket: %s\n", strerror(errno));
++ PrintText(current_tab, msg);
++ return TRUE;
++ }
++
++ set_nonblocking(fd);
++
++ dcc = new_dcc();
++ if (!dcc)
++ return TRUE;
++
++ dcc->addr = ntohl(sin.sin_addr.s_addr);
++ dcc->port = ntohs(sin.sin_port);
++ dcc->type = TYPE_DCCSERVERCONN;
++ dcc->dccstat = STAT_ACTIVE;
++ dcc->sok = fd;
++ time(&dcc->starttime);
++ dcc->lasttime = dcc->starttime;
++ dcc->iotag = fe_input_add(fd, FIA_READ|FIA_EX, dccserver_readcmd, dcc);
++
++ return TRUE;
++}
++
++int
++dccserver_update(struct session *sess)
++{
++ int fd;
++ char msg[1024];
++ struct sockaddr_in sin;
++ int ret;
++
++ if (dccserver.fd != -1)
++ {
++ close(dccserver.fd);
++ fe_input_remove(dccserver.iotag);
++ dccserver.fd = -1;
++ }
++
++ if (prefs.dcc_dccserver_port <= 0)
++ return TRUE;
++
++ fd = socket(AF_INET, SOCK_STREAM, 0);
++ if (fd == -1)
++ {
++errout:
++ if (!sess)
++ return FALSE;
++ snprintf(msg, sizeof(msg) - 1, N_("Could not open dccserver listening port on port %u: %s\n"),
++ prefs.dcc_dccserver_port, strerror(errno));
++ PrintText(sess, msg);
++ return FALSE;
++ }
++
++ ret = 1;
++ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &ret, sizeof(ret));
++ set_nonblocking(fd);
++
++ memset(&sin, 0, sizeof(sin));
++ sin.sin_family = AF_INET;
++ sin.sin_port = htons(prefs.dcc_dccserver_port);
++ ret = bind(fd, (struct sockaddr *) &sin, sizeof(sin));
++ if (ret != 0)
++ {
++ close(fd);
++ goto errout; /* considered harmful! */
++ }
++
++ listen(fd, 5);
++
++ dccserver.fd = fd;
++ dccserver.iotag = fe_input_add(fd, FIA_READ|FIA_EX, dccserver_accept, NULL);
++
++ return TRUE;
++}
+diff -ur ../xchat-2.0.9-ori/src/common/dcc.h ./src/common/dcc.h
+--- ../xchat-2.0.9-ori/src/common/dcc.h 2004-02-01 10:55:34.000000000 +0100
++++ ./src/common/dcc.h 2004-06-06 17:01:20.000000000 +0200
+@@ -16,6 +16,7 @@
+ #define TYPE_RECV 1
+ #define TYPE_CHATRECV 2
+ #define TYPE_CHATSEND 3
++#define TYPE_DCCSERVERCONN 4
+
+ #define CPS_AVG_WINDOW 10
+
+@@ -51,6 +52,8 @@
+ char *nick;
+ unsigned char type; /* 0 = SEND 1 = RECV 2 = CHAT */
+ unsigned char dccstat; /* 0 = QUEUED 1 = ACTIVE 2 = FAILED 3 = DONE */
++ char dccservchtype; /* chat or fserve request? */
++ unsigned int fromdccserver:1; /* this dcc was opened from a dccserver connection */
+ unsigned int fastsend:1;
+ unsigned int ackoffset:1; /* is reciever sending acks as an offset from */
+ /* the resume point? */
+@@ -88,5 +91,6 @@
+ void open_dcc_recv_window (void);
+ void open_dcc_send_window (void);
+ void open_dcc_chat_window (void);
++int dccserver_update(struct session *);
+
+ #endif
+diff -ur ../xchat-2.0.9-ori/src/common/outbound.c ./src/common/outbound.c
+--- ../xchat-2.0.9-ori/src/common/outbound.c 2004-05-31 15:03:02.000000000 +0200
++++ ./src/common/outbound.c 2004-06-06 17:01:20.000000000 +0200
+@@ -762,6 +762,80 @@
+ return TRUE;
+ }
+
++int
++cmd_dccserver(struct session *sess, char *tbuf, char *word[], char *word_eol[])
++{
++ int i;
++ char buf[1024];
++ int action;
++ int port;
++
++ i = 2;
++ if (!*word[i])
++ {
++ if (prefs.dcc_dccserver_port == 0)
++ snprintf(buf, sizeof(buf) - 1, N_("DCC server inactive and no port configured\n"));
++ else if (prefs.dcc_dccserver_port < 0)
++ snprintf(buf, sizeof(buf) - 1, N_("DCC server inactive, configured to port %i\n"), -1 * prefs.dcc_dccserver_port);
++ else
++ snprintf(buf, sizeof(buf) - 1, N_("DCC server active and listening on port %i\n"), prefs.dcc_dccserver_port);
++ PrintText(sess, buf);
++ return TRUE;
++ }
++
++ action = 0;
++ if (*word[i] == '+' || !strcasecmp(word[i], "on"))
++ {
++ action = 1;
++ i++;
++ }
++ else if (*word[i] == '-' || !strcasecmp(word[i], "off"))
++ {
++ action = -1;
++ i++;
++ }
++
++ if (*word[i])
++ {
++ port = atoi(word[i]);
++ i++;
++ }
++ else
++ port = prefs.dcc_dccserver_port;
++
++ if (port > 65535 || port < -65535)
++ {
++ PrintText(sess, N_("Invalid port. Port must be in range 1-65535\n"));
++ return FALSE;
++ }
++ else if (port == 0 && action == 1)
++ {
++ PrintText(sess, N_("Cannot enable dcc server, no port configured. Please specify a valid listening port\n"));
++ return FALSE;
++ }
++ else if (port < 0 && action == 1)
++ port = -1 * port;
++ else if (port > 0 && action == -1)
++ port = -1 * port;
++
++ prefs.dcc_dccserver_port = port;
++ if (dccserver_update(sess))
++ {
++ if (port > 0)
++ snprintf(buf, sizeof(buf) - 1, N_("Enabled DCC server on port %i\n"), port);
++ else
++ snprintf(buf, sizeof(buf) - 1, N_("Disabled DCC server\n"));
++ PrintText(sess, buf);
++ }
++ else
++ {
++ if (prefs.dcc_dccserver_port > 0)
++ prefs.dcc_dccserver_port = -1 * prefs.dcc_dccserver_port;
++ }
++
++ return TRUE;
++}
++
+ static int
+ cmd_debug (struct session *sess, char *tbuf, char *word[], char *word_eol[])
+ {
+@@ -2623,6 +2697,8 @@
+ "DCC CHAT <nick> - offer DCC CHAT to someone\n"
+ "DCC CLOSE <type> <nick> <file> example:\n"
+ " /dcc close send johnsmith file.tar.gz")},
++ {"DCCSERVER", cmd_dccserver, 0, 0, 0,
++ N_("DCCSERVER [+|-|on|off] [port], Enable or disable dcc server on a certain port or reports its status")},
+ {"DEBUG", cmd_debug, 0, 0, 1, 0},
+
+ {"DEHOP", cmd_dehop, 1, 1, 1,
+diff -ur ../xchat-2.0.9-ori/src/common/xchat.c ./src/common/xchat.c
+--- ../xchat-2.0.9-ori/src/common/xchat.c 2004-05-02 07:00:37.000000000 +0200
++++ ./src/common/xchat.c 2004-06-06 17:01:20.000000000 +0200
+@@ -1039,6 +1039,8 @@
+ if (prefs.slist_skip)
+ new_ircwindow (NULL, NULL, SESS_SERVER);
+ }
++
++ dccserver_update(current_tab);
+ }
+
+ void
+diff -ur ../xchat-2.0.9-ori/src/common/xchat.h ./src/common/xchat.h
+--- ../xchat-2.0.9-ori/src/common/xchat.h 2004-05-12 06:57:19.000000000 +0200
++++ ./src/common/xchat.h 2004-06-06 17:01:20.000000000 +0200
+@@ -174,6 +174,7 @@
+ unsigned long local_ip;
+ unsigned long dcc_ip;
+ char dcc_ip_str[DOMAINLEN + 1];
++ int dcc_dccserver_port;
+
+ unsigned int tab_dnd;
+ unsigned int tab_sort;
diff --git a/net-irc/xchat/xchat-2.4.4.ebuild b/net-irc/xchat/xchat-2.4.4.ebuild
new file mode 100644
index 000000000000..5c749b4754f7
--- /dev/null
+++ b/net-irc/xchat/xchat-2.4.4.ebuild
@@ -0,0 +1,86 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-irc/xchat/xchat-2.4.4.ebuild,v 1.1 2005/06/21 12:07:00 swegener Exp $
+
+inherit flag-o-matic eutils versionator
+
+DESCRIPTION="Graphical IRC client"
+SRC_URI="http://www.xchat.org/files/source/$(get_version_component_range 1-2)/${P}.tar.bz2"
+HOMEPAGE="http://www.xchat.org/"
+
+LICENSE="GPL-2"
+SLOT="2"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86"
+IUSE="perl tcltk python ssl mmx ipv6 nls xchattext xchatnogtk xchatdccserver"
+
+# Added for to fix a sparc seg fault issue by Jason Wever <weeve@gentoo.org>
+if [ ${ARCH} = "sparc" ]
+then
+ replace-flags "-O[3-9]" "-O2"
+fi
+
+RDEPEND=">=dev-libs/glib-2.0.3
+ !xchatnogtk? ( >=x11-libs/gtk+-2.0.3 )
+ ssl? ( >=dev-libs/openssl-0.9.6d )
+ perl? ( >=dev-lang/perl-5.6.1 )
+ python? ( dev-lang/python )
+ tcltk? ( dev-lang/tcl )"
+
+DEPEND="${RDEPEND}
+ >=dev-util/pkgconfig-0.7
+ >=sys-apps/sed-4
+ nls? ( sys-devel/gettext )"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ use xchatdccserver && epatch "${FILESDIR}"/xchat-dccserver-0.5.patch
+
+ # use libdir/xchat/plugins as the plugin directory
+ if [ $(get_libdir) != "lib" ] ; then
+ sed -i -e 's:${prefix}/lib/xchat:${libdir}/xchat:' \
+ "${S}"/configure{,.in} || die
+ fi
+}
+
+src_compile() {
+
+ # xchat's configure script uses sys.path to find library path
+ # instead of python-config (#25943)
+ unset PYTHONPATH
+
+ econf \
+ $(use_enable ssl openssl) \
+ $(use_enable perl) \
+ $(use_enable python) \
+ $(use_enable tcltk tcl) \
+ $(use_enable mmx) \
+ $(use_enable ipv6) \
+ $(use_enable nls) \
+ $(use_enable xchattext textfe) \
+ $(use_enable !xchatnogtk gtkfe) \
+ --program-suffix=-2 \
+ || die "Configure failed"
+
+ emake || die "Compile failed"
+
+}
+
+src_install() {
+
+ # some magic to create a menu entry for xchat 2
+ sed -i \
+ -e "s:^Exec=xchat$:Exec=xchat-2:" \
+ -e "s:Name=XChat IRC:Name=XChat 2 IRC:" \
+ xchat.desktop
+
+ make DESTDIR="${D}" install || die "Install failed"
+
+ # install plugin development header
+ insinto /usr/include/xchat
+ doins src/common/xchat-plugin.h || die "doins failed"
+
+ dodoc ChangeLog README* || die "dodoc failed"
+
+}