aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/sircbot/APKBUILD52
-rw-r--r--main/sircbot/disconnect-fix.patch194
2 files changed, 41 insertions, 205 deletions
diff --git a/main/sircbot/APKBUILD b/main/sircbot/APKBUILD
index 109a1ac44a..9e326da15f 100644
--- a/main/sircbot/APKBUILD
+++ b/main/sircbot/APKBUILD
@@ -1,7 +1,8 @@
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
+_luaversions="5.1 5.2 5.3"
pkgname=sircbot
-pkgver=0.3
-pkgrel=1
+pkgver=0.4
+pkgrel=0
pkgdesc="Minimalistic IRC bot"
url="http://git.alpinelinux.org/cgit/sircbot/"
arch="all"
@@ -9,10 +10,14 @@ license="GPL-2"
pkgusers="sircbot"
pkggroups="sircbot"
depends=
-makedepends="lua-dev"
-install="$pkgname.pre-install"
+makedepends=""
subpackages="lua-sircbot:luamod"
-source="http://dev.alpinelinux.org/archive/sircbot/sircbot-$pkgver.tar.bz2
+for _i in $_luaversions; do
+ makedepends="$makedepends lua$_i-dev"
+ subpackages="$subpackages lua$_i-sircbot:split_${_i/./_}"
+done
+install="$pkgname.pre-install"
+source="http://dev.alpinelinux.org/archive/sircbot/sircbot-$pkgver.tar.xz
disconnect-fix.patch
sircbot.initd
sircbot.confd
@@ -26,31 +31,56 @@ prepare() {
build() {
cd "$_builddir"
make || return 1
+ for i in $_luaversions; do
+ make LUA_VERSION=$i || return 1
+ done
}
package() {
cd "$_builddir"
make install DESTDIR="$pkgdir" prefix=/usr
+ for i in $_luaversions; do
+ make install-lua DESTDIR="$pkgdir" prefix=/usr LUA_VERSION=$i \
+ || return 1
+ done
install -o sircbot -g sircbot -d "$pkgdir"/var/run/sircbot
install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname
install -m644 -D "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname
}
luamod() {
- pkgdesc="Luamodule for sirbot client"
- mkdir -p "$subpkgdir"/usr/
- mv "$pkgdir"/usr/lib "$subpkgdir"/usr/
+ pkgdesc="sirbot client for Lua"
+ mkdir -p "$subpkgdir"
+}
+
+_split() {
+ local d= _ver=$1
+ pkgdesc="Sircbot client for Lua $_ver"
+ install_if="lua$_ver lua-sircbot=$pkgver-r$pkgrel"
+ depends=
+ cd "$pkgdir"
+ for d in usr/lib/lua usr/share/lua; do
+ if [ -d "$pkgdir"/$d/$_ver ]; then
+ mkdir -p "$subpkgdir"/$d
+ mv "$pkgdir"/$d/$_ver "$subpkgdir"/$d/ || return 1
+ fi
+ done
}
-md5sums="bad605639450640276341044f3d96190 sircbot-0.3.tar.bz2
+
+for _v in $_luaversions; do
+ eval "split_${_v/./_}() { _split $_v; }"
+done
+
+md5sums="e9b10d19ed30521e1950cab0b66c79a2 sircbot-0.4.tar.xz
4ba720163ca111f1cb7c9c369a370e05 disconnect-fix.patch
c89aa17a632d2338daefa1fd99b82f5d sircbot.initd
8443ac189030c7b8beb8e579dc16ebc7 sircbot.confd"
-sha256sums="0631a74260ebb6698a58ea68067387c29d533c0db9ba7147b834a77a8758202d sircbot-0.3.tar.bz2
+sha256sums="3f32fe97131402f827a6acba8507c372e53ce19690e732d226bb9a4d89313ce0 sircbot-0.4.tar.xz
61da3159e48426f04f1fb4df31420a3faa72b52b6fddb342709406f89025a554 disconnect-fix.patch
f49ebfc6717fd34f946b8afbe7df50ddde59f0347b4300610cc6d6997710d1e7 sircbot.initd
b0bf9767150e486815aada1761b6fca7b7838df3045082ff8083167dbce613e6 sircbot.confd"
-sha512sums="fe5a201fa92a25831e7107d8036f32e6b79d39814129f584e106484344e974037ddc016a5c3240a9c2a2540975b41356f80dba2507ee33750ce26ab751c201b8 sircbot-0.3.tar.bz2
+sha512sums="1f91581548dcc2d3f6d0da31591027792271994b86ffce73141de828eff27595a1df8a364988e0c5349996e36ae8879b166c84d6024a194626e61c9dc9e96816 sircbot-0.4.tar.xz
ab0102d04b42826102ee705dc2b4a3202391619b4df7365bda8cc47715a0537a1656bcc32869628e70aa3467837dd7a7ca6aac6843c3fd046aba7832fed91ed6 disconnect-fix.patch
501bcf92aed2819dd902eab31470282b5951916f3d52bab6d8eb3a14e01690f10b5a9b52488bfdcf1aa5ada44840e918dbe93ba23d891389e5d8dbe4b9a40efb sircbot.initd
315167ec664ce859908fcd230f6e0c604a0b02e56286156ba6ec76c32d6d514726acb493fe7a13b44d9255ec2e34fe4b2a6f02edf039b06e487cea6528d4d6a7 sircbot.confd"
diff --git a/main/sircbot/disconnect-fix.patch b/main/sircbot/disconnect-fix.patch
deleted file mode 100644
index 523264a632..0000000000
--- a/main/sircbot/disconnect-fix.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-From 93d007481e25c9db88e8b16117b0378d51951bb6 Mon Sep 17 00:00:00 2001
-From: Natanael Copa <ncopa@alpinelinux.org>
-Date: Thu, 07 Mar 2013 15:20:22 +0000
-Subject: fix segfault when IRC server does disconnect
-
-and fix lots of whitespace damage
----
-diff --git a/irc.c b/irc.c
-index 92a925e..5832421 100644
---- a/irc.c
-+++ b/irc.c
-@@ -14,11 +14,11 @@ static int tcp_connect(const char *host, int port)
- struct sockaddr_in addr;
- struct hostent *h;
- int sock = socket(AF_INET, SOCK_STREAM, 0);
-- if (sock < 0)
-+ if (sock < 0)
- return sock;
-
- h = gethostbyname(host);
-- if (h == NULL)
-+ if (h == NULL)
- return -1;
-
- memset(&addr, 0, sizeof(addr));
-@@ -38,17 +38,17 @@ struct irc_session *irc_connect(const char* server, int port, const char *nick,
- {
- char buf[256];
- struct irc_session *sess;
--
-+
- sess = malloc(sizeof(struct irc_session));
- if (sess == NULL)
- return NULL;
--
-+
- sess->nick = nick;
- sess->server = server;
- sess->fd = tcp_connect(server, port);
-- if (sess->fd < 0)
-+ if (sess->fd < 0)
- return NULL;
--
-+
- /* login */
- if (pass)
- irc_send(sess, "PASS", pass);
-@@ -79,7 +79,9 @@ int irc_send_ping(struct irc_session *s)
-
- int irc_close(struct irc_session *s, const char *msg)
- {
-- irc_send(s, "QUIT", msg ? msg : "");
-- close(s->fd);
-+ if (s->fd > 0) {
-+ irc_send(s, "QUIT", msg ? msg : "");
-+ close(s->fd);
-+ }
- free(s);
- }
-diff --git a/sircbot.c b/sircbot.c
-index b85d7d0..7d9c1a3 100644
---- a/sircbot.c
-+++ b/sircbot.c
-@@ -56,8 +56,8 @@ struct sircbot_socket_callback {
- int (*callback)(struct sircbot_session *sb, struct pollfd *fds,
- void *ctx);
- };
--
--
-+
-+
- static int foreground = 0;
- static int sigterm = 0;
- static int flush_rate = 2;
-@@ -90,7 +90,7 @@ int daemonize(const char *pidfile, const char *logfile)
- /* exit parent */
- if (pid > 0)
- exit(0);
--
-+
- /* detatch to controling terminal */
- setsid();
-
-@@ -220,10 +220,10 @@ int run_hooks(char *user, char *rcpt, char* data)
- /* exit parent */
- if (pid > 0)
- exit(0);
--
-+
- snprintf(dir, sizeof(dir), "/etc/" PROGNAME ".d/%s", rcpt);
- printf("DEBUG: running scripts in %s\n", dir);
-- execlp("/bin/run-parts", "/bin/run-parts", "-a", user,
-+ execlp("/bin/run-parts", "/bin/run-parts", "-a", user,
- "-a", data, "-a", rcpt, dir, NULL);
- log_err("run-parts");
- exit(1);
-@@ -302,17 +302,21 @@ int parse_irc_data(struct sircbot_session *sb, char *buf)
- }
-
- /* callback functions */
--static int irc_server_cb(struct sircbot_session *sb, struct pollfd *fds,
-+static int irc_server_cb(struct sircbot_session *sb, struct pollfd *fds,
- void *ctx)
- {
- char buf[4096];
- int r;
- struct irc_session *sess = (struct irc_session *) ctx;
-
-- if (fds->revents & POLLHUP)
-+ if (fds->revents & POLLHUP) {
- /* server hang up on us */
-+ printf("DEBUG: %s: connection closed\n", sess ? sess->server : "null");
-+ close(sess->fd);
-+ sess->fd = -1;
- return 0;
--
-+ }
-+
- if (fds->revents & POLLERR) {
- log_err(sess->server);
- return -1;
-@@ -340,7 +344,7 @@ int channel_extend_fd_array(struct sircbot_channel *chan)
- chan->fd_array[i] = -1;
- return 0;
- }
--
-+
-
- void channel_add_connection(struct sircbot_channel *chan, int fd)
- {
-@@ -428,7 +432,7 @@ static int irc_reset_pollfds(struct sircbot_session *sb, struct pollfd *fds,
- fds[n].fd = sb->sess->fd;
- fds[n].events = POLLIN;
- fds[n].revents = 0;
-- cb[n].context = NULL;
-+ cb[n].context = sb->sess;
- cb[n].callback = &irc_server_cb;
- n++;
-
-@@ -474,18 +478,24 @@ static int send_fifo_queue(struct irc_session *sess,
- return r;
- }
-
--static void join_channels(struct sircbot_session *sb)
-+static int join_channels(struct sircbot_session *sb)
- {
- time_t now = time(NULL);
- int i;
- /* wait atleast 5 secs before we join a channel */
- for (i = 0; i < sb->numchan; i++)
-- if ((now - sb->chan[i].last_closetime) > 5
-- && sb->chan[i].listen_fd < 0) {
-+ if ((now - sb->chan[i].last_closetime) > 5
-+ && sb->chan[i].listen_fd < 0 && sb->sess != NULL) {
-+ int r = 0;
- printf("DEBUG: joining %s\n", sb->chan[i].name);
- sb->chan[i].last_closetime = now;
-- irc_send(sb->sess, "JOIN", sb->chan[i].name);
-+ r = irc_send(sb->sess, "JOIN", sb->chan[i].name);
-+ if (r < 0) {
-+ printf("DEBUG: error %s: %s\n", sb->sess->server, strerror(r));
-+ return r;
-+ }
- }
-+ return 0;
- }
-
- static int irc_loop(struct sircbot_session *sb)
-@@ -504,7 +514,8 @@ static int irc_loop(struct sircbot_session *sb)
- tv.tv_sec = 1;
- tv.tv_nsec = 0;
- while (!sigterm) {
-- join_channels(sb);
-+ if (join_channels(sb) < 0)
-+ goto ret_err;
- n = irc_reset_pollfds(sb, fds, cbs, maxfds);
- r = ppoll(fds, n, &tv, &sigmask);
- if (r < 0) {
-@@ -633,11 +644,11 @@ int main(int argc, char *argv[])
- sleep(10);
- continue;
- }
--
-+
- irc_loop(&sb);
- irc_close(sb.sess, "bye");
- /* reset channel sockets */
-- for (i = 0; i < argc; i++)
-+ for (i = 0; i < argc; i++)
- close_channel_socket(&sb.chan[i], 0);
- if (sigterm)
- break;
---
-cgit v0.9.0.3