Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jul 2003 04:10:45 +0200 (CEST)
From:      Emiel Kollof <coolvibe@hackerheaven.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/54685: ipv6 support for port multimedia/xmms
Message-ID:  <200307210210.h6L2AjpJ037638@azazel.ipv6.hackerheaven.org>
Resent-Message-ID: <200307210220.h6L2KH8R013417@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         54685
>Category:       ports
>Synopsis:       ipv6 support for port multimedia/xmms
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jul 20 19:20:16 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Emiel Kollof
>Release:        FreeBSD 4.8-STABLE i386
>Organization:
>Environment:
System: FreeBSD azazel.ipv6.hackerheaven.org 4.8-STABLE FreeBSD 4.8-STABLE #3: Tue Jun 24 06:49:56 CEST 2003 root@azazel.ipv6.hackerheaven.org:/usr/obj/usr/src/sys/AZAZEL i386


	
>Description:
	I made a diff from the xmms implementation with ipv6 support on http://www.icecast6.remcom.org/, the
	relevant patch is in patch-aa in files. shar archive below. I don't exactly know who the author is though.
	I made the ipv6 support available as a WITH_IPV6 knob. Default, ipv6 is off.

>How-To-Repeat:
	
>Fix:


# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	multimedia/xmms
#	multimedia/xmms/files
#	multimedia/xmms/files/patch-ad
#	multimedia/xmms/files/patch-libxmms::util.c
#	multimedia/xmms/files/patch-ltmain.sh
#	multimedia/xmms/files/patch-aa
#	multimedia/xmms/Makefile
#	multimedia/xmms/distinfo
#	multimedia/xmms/pkg-descr
#	multimedia/xmms/pkg-message
#	multimedia/xmms/pkg-plist
#
echo c - multimedia/xmms
mkdir -p multimedia/xmms > /dev/null 2>&1
echo c - multimedia/xmms/files
mkdir -p multimedia/xmms/files > /dev/null 2>&1
echo x - multimedia/xmms/files/patch-ad
sed 's/^X//' >multimedia/xmms/files/patch-ad << 'END-of-multimedia/xmms/files/patch-ad'
X
X$FreeBSD: ports/multimedia/xmms/files/patch-ad,v 1.12 2002/05/14 06:21:23 sobomax Exp $
X
X--- configure.orig	Mon Mar  4 23:57:01 2002
X+++ configure	Tue May 14 09:06:50 2002
X@@ -10576,7 +10576,7 @@
X GMSGFMT="OLD_PO_FILE_INPUT=yes $GMSGFMT"
X MSGFMT="OLD_PO_FILE_INPUT=yes $MSGFMT"
X 
X-localedir=${datadir}/locale
X+localedir=${prefix}/share/locale
X 
X 
X 
X@@ -12673,10 +12673,6 @@
X       *) # Relative path.
X         ac_sub_cache_file="$ac_dots$cache_file" ;;
X       esac
X-  case "$ac_given_INSTALL" in
X-        [/$]*) INSTALL="$ac_given_INSTALL" ;;
X-        *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
X-        esac
X 
X       echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
X       # The eval makes quoting arguments work.
END-of-multimedia/xmms/files/patch-ad
echo x - multimedia/xmms/files/patch-libxmms::util.c
sed 's/^X//' >multimedia/xmms/files/patch-libxmms::util.c << 'END-of-multimedia/xmms/files/patch-libxmms::util.c'
X--- libxmms/util.c.orig	Fri Jun  1 15:07:49 2001
X+++ libxmms/util.c	Sun Oct  6 18:40:25 2002
X@@ -11,6 +11,7 @@
X #endif
X 
X #ifdef __FreeBSD__
X+#include <sys/types.h>
X #include <sys/sysctl.h>
X #endif
X 
END-of-multimedia/xmms/files/patch-libxmms::util.c
echo x - multimedia/xmms/files/patch-ltmain.sh
sed 's/^X//' >multimedia/xmms/files/patch-ltmain.sh << 'END-of-multimedia/xmms/files/patch-ltmain.sh'
X
X$FreeBSD: ports/multimedia/xmms/files/patch-ltmain.sh,v 1.2 2002/03/05 21:09:09 pat Exp $
X
X--- ltmain.sh.orig	Mon Sep 24 14:12:50 2001
X+++ ltmain.sh	Tue Mar  5 11:16:25 2002
X@@ -2444,6 +2444,9 @@
X 	  *-*-openbsd*)
X 	    # Do not include libc due to us having libc/libc_r.
X 	    ;;
X+	  *-*-freebsd*)
X+	    # FreeBSD doesn't need this...
X+	    ;;
X 	  *)
X 	    # Add libc to deplibs on all other systems if necessary.
X 	    if test $build_libtool_need_lc = "yes"; then
X@@ -4210,10 +4213,12 @@
X 	fi
X 
X 	# Install the pseudo-library for information purposes.
X+	if /usr/bin/false; then
X 	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
X 	instname="$dir/$name"i
X 	$show "$install_prog $instname $destdir/$name"
X 	$run eval "$install_prog $instname $destdir/$name" || exit $?
X+	fi
X 
X 	# Maybe install the static library, too.
X 	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
END-of-multimedia/xmms/files/patch-ltmain.sh
echo x - multimedia/xmms/files/patch-aa
sed 's/^X//' >multimedia/xmms/files/patch-aa << 'END-of-multimedia/xmms/files/patch-aa'
Xdiff -ur ../xmms-1.2.7/Input/mpg123/common.c ./Input/mpg123/common.c
X--- ../xmms-1.2.7/Input/mpg123/common.c	Wed Feb 20 15:17:30 2002
X+++ ./Input/mpg123/common.c	Tue Aug  6 09:24:16 2002
X@@ -654,6 +654,7 @@
X void mpg123_open_stream(char *bs_filenam, int fd)
X {
X 	filept_opened = 1;
X+	
X 	if (!strncasecmp(bs_filenam, "http://", 7))
X 	{
X 		filept = NULL;
Xdiff -ur ../xmms-1.2.7/Input/mpg123/http.c ./Input/mpg123/http.c
X--- ../xmms-1.2.7/Input/mpg123/http.c	Mon Jan  7 15:08:04 2002
X+++ ./Input/mpg123/http.c	Tue Aug  6 09:23:52 2002
X@@ -45,6 +45,10 @@
X /* Static udp channel functions */
X static int udp_establish_listener (gint *sock);
X static int udp_check_for_data(gint sock);
X+#ifdef IPV6
X+static int udp6_establish_listener (gint *sock);
X+static int udp6_check_for_data(gint sock);
X+#endif
X 
X extern gint mpg123_bitrate, mpg123_frequency, mpg123_stereo;
X extern gboolean mpg123_stereo;
X@@ -58,6 +62,12 @@
X 
X static FILE *output_file = NULL;
X 
X+#ifdef IPV6
X+#define ADDR_IS_INVALID	0
X+#define ADDR_IS_IPV4	1
X+#define ADDR_IS_IPV6	2
X+#endif
X+
X #define BASE64_LENGTH(len) (4 * (((len) + 2) / 3))
X 
X /* Encode the string S of length LENGTH to base64 format and place it
X@@ -120,9 +130,17 @@
X {
X 	gchar *h, *p, *pt, *f, *temp, *ptr;
X 
X+	/*
X+	 * http://user:pass@host:port/filename
X+	 */
X+
X 	temp = g_strdup(url);
X 	ptr = temp;
X 
X+#ifdef IPV6
X+	printf("url %s\n", ptr);
X+#endif
X+
X 	if (!strncasecmp("http://", ptr, 7))
X 		ptr += 7;
X 	h = strchr(ptr, '@');
X@@ -149,7 +167,17 @@
X 		*pass = NULL;
X 		h = ptr;
X 	}
X+
X+#ifdef IPV6
X+	/*
X+	 * xxxx:xxxx:xxxx:xxxx::xxxx:port/filename
X+	 * wwww.ipv6-site.com:port/filename
X+	 */
X+
X+	pt = rindex(ptr, ':');
X+#else	
X 	pt = strchr(ptr, ':');
X+#endif
X 	if (pt != NULL && (f == NULL || pt < f))
X 	{
X 		*pt = '\0';
X@@ -167,6 +195,15 @@
X 		*filename = g_strdup(f + 1);
X 	else
X 		*filename = NULL;
X+
X+#ifdef IPV6
X+	printf("user : %s\n", *user);
X+	printf("pass : %s\n", *pass);
X+	printf("host : %s\n", *host);
X+	printf("port : %d\n", *port);
X+	printf("file : %s\n", *filename);
X+#endif
X+
X 	g_free(temp);
X }
X 
X@@ -323,6 +360,71 @@
X 	return i;
X }
X 
X+#ifdef IPV6
X+char *sock_ntop(struct sockaddr *sa)
X+{
X+	int len;
X+	char *buf;
X+	if (sa==NULL)
X+		return "<null>";
X+
X+	switch(sa->sa_family) {
X+		case AF_INET:
X+			len = INET_ADDRSTRLEN;
X+			break;
X+		case AF_INET6:
X+			len = INET6_ADDRSTRLEN;
X+			break;
X+		default:
X+			return "<unknown>";
X+	}
X+			
X+	buf = (char *)malloc(len);
X+	if ((inet_ntop(sa->sa_family, &sa->sa_data[2], buf, (size_t)len))!=NULL)
X+		return buf;
X+	else return "<null>";
X+}
X+
X+
X+int check_hostport(char *hostname, int port)
X+{
X+	struct hostent *h;
X+	char buf[INET6_ADDRSTRLEN];
X+	int retcode;
X+
X+	h = gethostbyname2(hostname, AF_INET6);
X+
X+	if (h == NULL) {
X+		h = gethostbyname2(hostname, AF_INET);
X+		if (h == NULL)
X+			return ADDR_IS_INVALID;
X+	}
X+
X+	if (h->h_name)
X+		printf("%-30s\t", h->h_name);
X+
X+	switch (h->h_addrtype) {
X+		case AF_INET:
X+			printf("%-10s\t", "AF_INET");
X+			retcode = ADDR_IS_IPV4;
X+			break;
X+		case AF_INET6:
X+			printf("%-10s\t", "AF_INET6");
X+			retcode = ADDR_IS_IPV6;
X+			break;
X+		default:
X+			printf("%-10s\t", "unknown");
X+			retcode = ADDR_IS_INVALID;
X+			break;
X+	}
X+	inet_ntop(h->h_addrtype, h->h_addr, buf, INET6_ADDRSTRLEN);
X+	printf("%s\n", buf);
X+
X+	return retcode;
X+}
X+
X+#endif
X+
X static void *http_buffer_loop(void *arg)
X {
X 	gchar line[1024], *user, *pass, *host, *filename,
X@@ -332,7 +434,11 @@
X 	gboolean redirect;
X 	int udp_sock = 0;
X 	fd_set set;
X-	struct hostent *hp;
X+	struct hostent *hp = NULL;
X+#ifdef IPV6	
X+	struct sockaddr_in6 address6;
X+	int use_ipv6 = 0;
X+#endif	
X 	struct sockaddr_in address;
X 	struct timeval tv;
X 
X@@ -355,14 +461,52 @@
X 		chost = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_host : host;
X 		cport = mpg123_cfg.use_proxy ? mpg123_cfg.proxy_port : port;
X 
X+#ifdef IPV6
X+		if ((check_hostport(host, port)) == ADDR_IS_IPV6)
X+			use_ipv6 = 1;
X+		else use_ipv6 = 0;	
X+		
X+		if (use_ipv6) {
X+			sock = socket(AF_INET6, SOCK_STREAM, 0);
X+			fcntl(sock, F_SETFL, O_NONBLOCK);
X+			address6.sin6_family = AF_INET6;
X+		} else { 
X+			sock = socket(AF_INET, SOCK_STREAM, 0);
X+			fcntl(sock, F_SETFL, O_NONBLOCK);
X+			address.sin_family = AF_INET;
X+		}
X+#else
X 		sock = socket(AF_INET, SOCK_STREAM, 0);
X 		fcntl(sock, F_SETFL, O_NONBLOCK);
X 		address.sin_family = AF_INET;
X+#endif
X 
X 		status = g_strdup_printf(_("LOOKING UP %s"), chost);
X 		mpg123_ip.set_info_text(status);
X 		g_free(status);
X 
X+#ifdef IPV6		
X+		if (use_ipv6) {
X+			if ((hp = gethostbyname2(chost, AF_INET6)) == NULL) {
X+				status = g_strdup_printf(_("Couldn't look up host %s"), chost);
X+				show_error_message(status);
X+				g_free(status);
X+
X+				mpg123_ip.set_info_text(NULL);
X+				eof = TRUE;
X+			}
X+		} else {
X+			if (!(hp = gethostbyname(chost)))
X+			{
X+				status = g_strdup_printf(_("Couldn't look up host %s"), chost);
X+				show_error_message(status);
X+				g_free(status);
X+
X+				mpg123_ip.set_info_text(NULL);
X+				eof = TRUE;
X+			}
X+		}
X+#else
X 		if (!(hp = gethostbyname(chost)))
X 		{
X 			status = g_strdup_printf(_("Couldn't look up host %s"), chost);
X@@ -372,20 +516,54 @@
X 			mpg123_ip.set_info_text(NULL);
X 			eof = TRUE;
X 		}
X+#endif
X 
X 		if (!eof)
X 		{
X-			memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr));
X+#ifdef IPV6			
X+			int retcode;
X+
X+			if (use_ipv6) {
X+				memcpy(&address6.sin6_addr, hp->h_addr, sizeof(struct in6_addr));
X+				address6.sin6_port = g_htons(cport);
X+			} else {
X+				memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof (address.sin_addr.s_addr));
X+				address.sin_port = g_htons(cport);
X+			}
X+
X+			status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport);
X+			mpg123_ip.set_info_text(status);
X+			g_free(status);
X+
X+			if (use_ipv6) 
X+				retcode = connect(sock, (struct sockaddr *) &address6, sizeof(struct sockaddr_in6));
X+			 else 
X+				retcode = connect(sock, (struct sockaddr *) &address, sizeof(struct sockaddr_in));
X+
X+			if (retcode == -1) {
X+				if (errno != EINPROGRESS) {
X+					status = g_strdup_printf(_("Couldn't connect to host %s"), chost);
X+					show_error_message(status);
X+					g_free(status);
X+
X+					mpg123_ip.set_info_text(NULL);
X+					eof = TRUE;
X+				}
X+			}
X+#else				
X+			memcpy(&address.sin_addr.s_addr, *(hp->h_addr_list), sizeof(address.sin_addr.s_addr));
X 			address.sin_port = g_htons(cport);
X 
X 			status = g_strdup_printf(_("CONNECTING TO %s:%d"), chost, cport);
X 			mpg123_ip.set_info_text(status);
X 			g_free(status);
X-			if (connect(sock, (struct sockaddr *) &address, sizeof (struct sockaddr_in)) == -1)
X+
X+			if (connect(sock, (struct sockaddr *) &address, sizeof(struct sockaddr_in)) == -1)
X 			{
X 				if (errno != EINPROGRESS)
X 				{
X 					status = g_strdup_printf(_("Couldn't connect to host %s"), chost);
X+					printf("4. error\n");
X 					show_error_message(status);
X 					g_free(status);
X 
X@@ -393,6 +571,7 @@
X 					eof = TRUE;
X 				}
X 			}
X+#endif			
X 			while (going)
X 			{
X 				tv.tv_sec = 0;
X@@ -425,7 +604,14 @@
X 
X 				if (mpg123_cfg.use_udp_channel)
X 				{
X-					udp_port = udp_establish_listener (&udp_sock);
X+#ifdef IPV6					
X+					if (use_ipv6)
X+						udp_port = udp6_establish_listener(&udp_sock);
X+					else
X+						udp_port = udp_establish_listener(&udp_sock);
X+#else
X+					udp_port = udp_establish_listener(&udp_sock, &udp_socklen);
X+#endif					
X 					if (udp_port > 0) 
X 						sprintf (udpspace, "x-audiocast-udpport: %d\r\n", udp_port);
X 					else
X@@ -505,6 +691,7 @@
X 								else
X 								{
X 									status = g_strdup_printf(_("Couldn't connect to host %s\nServer reported: %s"), chost, status);
X+									printf("6. error\n");
X 									show_error_message(status);
X 									g_free(status);
X 									break;
X@@ -635,12 +822,27 @@
X 		else
X 			xmms_usleep(10000);
X 
X-		if (mpg123_cfg.use_udp_channel && udp_sock != 0)
X+		if (mpg123_cfg.use_udp_channel && udp_sock != 0){
X+#ifdef IPV6			
X+			if (use_ipv6){
X+				if (udp6_check_for_data(udp_sock) < 0){
X+					close(udp_sock);
X+					udp_sock = 0;
X+				}
X+			} else {
X+				if (udp_check_for_data(udp_sock) < 0){
X+					close(udp_sock);
X+					udp_sock = 0;
X+				}
X+			}
X+#else
X 			if (udp_check_for_data(udp_sock) < 0)
X 			{
X 				close(udp_sock);
X 				udp_sock = 0;
X 			}
X+#endif			
X+		}
X 	}
X 	if (output_file)
X 	{
X@@ -664,7 +866,6 @@
X int mpg123_http_open(gchar * _url)
X {
X 	gchar *url;
X-
X 	url = g_strdup(_url);
X 
X 	rd_index = 0;
X@@ -692,18 +893,143 @@
X 	return g_strdup(url);
X }
X 
X-/* Start UDP Channel specific stuff */
X+#ifdef IPV6
X+
X+static int udp6_establish_listener(int *sock)
X+{
X+	struct sockaddr_in6 sin;
X+	socklen_t sinlen = sizeof(struct sockaddr_in6);
X+	
X+#ifdef DEBUG_UDP
X+	fprintf (stderr,"Establishing udp6 listener\n");
X+#endif
X+
X+	if ((*sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
X+		g_log(NULL, G_LOG_LEVEL_CRITICAL,
X+		      "udp_establish_listener(): unable to create socket");
X+		return -1;
X+	}
X+
X+	memset(&sin, 0, sinlen);
X+	sin.sin6_family = AF_INET;
X+	sin.sin6_addr = in6addr_any;
X+			
X+	if ((bind(*sock, (struct sockaddr *)&sin, sinlen)) < 0) {
X+		g_log(NULL, G_LOG_LEVEL_CRITICAL,
X+		      "udp_establish_listener():  Failed to bind socket to localhost: %s", strerror(errno));
X+		close(*sock);
X+		return -1;
X+	}
X+
X+	if (fcntl(*sock, F_SETFL, O_NONBLOCK) < 0) {
X+		g_log(NULL, G_LOG_LEVEL_CRITICAL,
X+		      "udp_establish_listener():  Failed to set flags: %s", strerror(errno));
X+		close(*sock);
X+		return -1;
X+	}
X+
X+	memset(&sin, 0, sinlen);
X+	if (getsockname(*sock, (struct sockaddr *)&sin, &sinlen) < 0) {
X+		g_log(NULL, G_LOG_LEVEL_CRITICAL,
X+		      "udp_establish_listener():  Failed to retrieve socket info: %s", strerror(errno));
X+		close(*sock);
X+		return -1;
X+	}
X+
X+#ifdef DEBUG_UDP
X+	fprintf (stderr,"Listening on local %s:%d\n", sock_ntop((struct sockaddr *)&sin), g_ntohs(sin.sin6_port));
X+#endif
X+	
X+	return g_ntohs(sin.sin6_port);
X+}
X+
X+static int udp6_check_for_data(int sock)
X+{
X+	char buf[1025], **lines;
X+	char *valptr;
X+	gchar *title;
X+	gint len, i;
X+	struct sockaddr_in6 from;
X+	socklen_t fromlen;
X+	
X+	fromlen = sizeof(struct sockaddr_in6);
X+	
X+	if ((len = recvfrom(sock, buf, 1024, 0, (struct sockaddr *)&from, &fromlen)) < 0) {
X+		if (errno != EAGAIN) {
X+			g_log(NULL, G_LOG_LEVEL_CRITICAL,
X+			      "udp_read_data(): Error reading from socket: %s", strerror(errno));
X+			return -1;
X+		}
X+		return 0;
X+	}
X+
X+	buf[len] = '\0';
X+
X+#ifdef DEBUG_UDP
X+	fprintf (stderr,"Received: [%s]\n", buf);
X+#endif
X+
X+	lines = g_strsplit(buf, "\n", 0);
X+
X+	if (!lines)
X+		return 0;
X+	
X+	for (i = 0; lines[i]; i++){
X+		while ((lines[i][strlen(lines[i]) - 1] == '\n') ||
X+		       (lines[i][strlen(lines[i]) - 1] == '\r'))
X+			lines[i][strlen(lines[i]) - 1] = '\0';
X+		
X+		valptr = strchr(lines[i], ':');
X+		
X+		if (!valptr)
X+			continue;
X+		else
X+			valptr++;
X+		
X+		g_strstrip(valptr);
X+		if (!strlen(valptr))
X+			continue;
X+		
X+		if (strstr(lines[i], "x-audiocast-streamtitle") != NULL){
X+			title = g_strdup_printf ("%s (%s)", valptr, icy_name);
X+			if (going)
X+				mpg123_ip.set_info(title, -1, mpg123_bitrate * 1000, mpg123_frequency, mpg123_stereo);
X+			g_free (title);
X+		} else if (strstr(lines[i], "x-audiocast-streammsg") != NULL){
X+			g_message("Stream_message: %s", valptr);
X+		} else if (strstr(lines[i], "x-audiocast-udpseqnr:") != NULL){
X+			gchar obuf[60];
X+			sprintf(obuf, "x-audiocast-ack: %ld \r\n", atol(valptr));
X+			if (sendto(sock, obuf, strlen(obuf), 0, (struct sockaddr *) &from, fromlen) < 0){
X+				g_log(NULL, G_LOG_LEVEL_WARNING,
X+				      "udp_check_for_data(): Unable to send ack to server: %s", strerror(errno));
X+			}
X+#ifdef DEBUG_UDP
X+			else
X+				fprintf(stderr,"Sent ack: %s", obuf);
X+			fprintf (stderr,"Remote: %s:%d\n", sock_ntop((struct sockaddr *)&from), g_ntohs(from.sin6_port));
X+#endif
X+		}
X+	}
X+	g_strfreev(lines);
X+	return 0;
X+}
X+#endif
X+
X+/* 
X+ * Start UDP Channel specific stuff 
X+ * Find a good local udp port and bind udp_sock to it, return the port 
X+ */
X 
X-/* Find a good local udp port and bind udp_sock to it, return the port */
X static int udp_establish_listener(int *sock)
X {
X 	struct sockaddr_in sin;
X-	socklen_t sinlen = sizeof (struct sockaddr_in);
X+	socklen_t sinlen = sizeof(struct sockaddr_in);
X 	
X #ifdef DEBUG_UDP
X 	fprintf (stderr,"Establishing udp listener\n");
X #endif
X-	
X+
X 	if ((*sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
X 	{
X 		g_log(NULL, G_LOG_LEVEL_CRITICAL,
Xdiff -ur ../xmms-1.2.7/config.h.in ./config.h.in
X--- ../xmms-1.2.7/config.h.in	Mon Mar  4 22:56:50 2002
X+++ ./config.h.in	Tue Aug  6 09:02:15 2002
X@@ -314,3 +314,5 @@
X /*  Define to disable per user plugin directory */
X #undef DISABLE_USER_PLUGIN_DIR
X 
X+/* Define if you want to use IPv6 streaming for mpg123 */
X+#undef IPV6
Xdiff -ur ../xmms-1.2.7/configure ./configure
X--- ../xmms-1.2.7/configure	Mon Mar  4 22:57:01 2002
X+++ ./configure	Tue Aug  6 09:09:40 2002
X@@ -256,6 +256,8 @@
X   --with-catgets          use catgets functions if available"
X ac_help="$ac_help
X   --enable-3dnow	  build with 3DNow! instructions support"
X+ac_help="$ac_help
X+  --enable-ipv6           enable IPv6 streaming support for mpg123"
X 
X # Initialize some variables set by options.
X # The variables have the same names as the options, with
X@@ -10592,11 +10594,6 @@
X 
X 
X 
X-
X-
X-
X-
X-
X # Check whether --enable-3dnow or --disable-3dnow was given.
X if test "${enable_3dnow+set}" = set; then
X   enableval="$enable_3dnow"
X@@ -10619,6 +10616,22 @@
X else
X   USE_3DNOW_TRUE='#'
X   USE_3DNOW_FALSE=
X+fi
X+
X+
X+# Check whether --enable-ipv6 or --disable-ipv6 was given.
X+if test "${enable_ipv6+set}" = set; then
X+  enableval="$enable_ipv6"
X+  IPV6=$enableval
X+else
X+  IPV6=no
X+fi
X+
X+if test "x$IPV6" = xyes; then
X+  cat >> confdefs.h <<\EOF
X+#define IPV6 1
X+EOF
X+
X fi
X 
X 
Xdiff -ur ../xmms-1.2.7/po/xmms.pot ./po/xmms.pot
X--- ../xmms-1.2.7/po/xmms.pot	Mon Mar  4 22:59:08 2002
X+++ ./po/xmms.pot	Tue Aug  6 05:44:41 2002
X@@ -6,13 +6,13 @@
X msgid ""
X msgstr ""
X "Project-Id-Version: PACKAGE VERSION\n"
X-"POT-Creation-Date: 2002-03-04 15:59-0600\n"
X+"POT-Creation-Date: 2002-08-05 23:44-0400\n"
X "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
X "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
X "Language-Team: LANGUAGE <LL@li.org>\n"
X "MIME-Version: 1.0\n"
X "Content-Type: text/plain; charset=CHARSET\n"
X-"Content-Transfer-Encoding: ENCODING\n"
X+"Content-Transfer-Encoding: 8bit\n"
X 
X #: Effect/echo_plugin/echo.c:43
X #, c-format
X@@ -41,7 +41,7 @@
X #: Input/mpg123/configure.c:633 Input/mpg123/fileinfo.c:118
X #: Input/mpg123/fileinfo.c:123 Input/mpg123/fileinfo.c:157
X #: Input/mpg123/fileinfo.c:161 Input/mpg123/fileinfo.c:167
X-#: Input/mpg123/http.c:208 Input/mpg123/mpg123.c:1100
X+#: Input/mpg123/http.c:216 Input/mpg123/mpg123.c:1100
X #: Input/tonegen/tonegen.c:54 Input/vorbis/configure.c:347
X #: Input/vorbis/fileinfo.c:202 Input/vorbis/http.c:208
X #: Input/vorbis/vorbis.c:601 Output/OSS/about.c:45 Output/OSS/configure.c:308
X@@ -431,6 +431,7 @@
X msgstr ""
X 
X #: General/song_change/song_change.c:154
X+#, c-format
X msgid ""
X "Shell-command to run when xmms changes song.  It can optionally include the "
X "string %%s which will be replaced by the new song title."
X@@ -944,44 +945,44 @@
X "Filesize: %lu B"
X msgstr ""
X 
X-#: Input/mpg123/http.c:208 Input/vorbis/http.c:208
X+#: Input/mpg123/http.c:216 Input/vorbis/http.c:208
X #: Output/disk_writer/disk_writer.c:127
X msgid "Error"
X msgstr ""
X 
X-#: Input/mpg123/http.c:362 Input/vorbis/http.c:317
X+#: Input/mpg123/http.c:375 Input/vorbis/http.c:317
X #, c-format
X msgid "LOOKING UP %s"
X msgstr ""
X 
X-#: Input/mpg123/http.c:368 Input/vorbis/http.c:323
X+#: Input/mpg123/http.c:381 Input/vorbis/http.c:323
X #, c-format
X msgid "Couldn't look up host %s"
X msgstr ""
X 
X-#: Input/mpg123/http.c:381 Input/vorbis/http.c:336
X+#: Input/mpg123/http.c:394 Input/vorbis/http.c:336
X #, c-format
X msgid "CONNECTING TO %s:%d"
X msgstr ""
X 
X-#: Input/mpg123/http.c:388 Input/mpg123/http.c:408 Input/vorbis/http.c:343
X+#: Input/mpg123/http.c:401 Input/mpg123/http.c:421 Input/vorbis/http.c:343
X #: Input/vorbis/http.c:363
X #, c-format
X msgid "Couldn't connect to host %s"
X msgstr ""
X 
X-#: Input/mpg123/http.c:466 Input/vorbis/http.c:407
X+#: Input/mpg123/http.c:479 Input/vorbis/http.c:407
X msgid "CONNECTED: WAITING FOR REPLY"
X msgstr ""
X 
X-#: Input/mpg123/http.c:507 Input/vorbis/http.c:448
X+#: Input/mpg123/http.c:520 Input/vorbis/http.c:448
X #, c-format
X msgid ""
X "Couldn't connect to host %s\n"
X "Server reported: %s"
X msgstr ""
X 
X-#: Input/mpg123/http.c:628 Input/vorbis/http.c:559
X+#: Input/mpg123/http.c:641 Input/vorbis/http.c:559
X #, c-format
X msgid "PRE-BUFFERING: %dKB/%dKB"
X msgstr ""
X@@ -3375,14 +3376,17 @@
X msgstr ""
X 
X #: xmms/main.c:2022
X+#, c-format
X msgid "SEEK TO: %d:%-2.2d/%d:%-2.2d (%d%%)"
X msgstr ""
X 
X #: xmms/main.c:2047 xmms/main.c:2590
X+#, c-format
X msgid "VOLUME: %d%%"
X msgstr ""
X 
X #: xmms/main.c:2076 xmms/main.c:2595
X+#, c-format
X msgid "BALANCE: %d%% LEFT"
X msgstr ""
X 
X@@ -3391,6 +3395,7 @@
X msgstr ""
X 
X #: xmms/main.c:2086 xmms/main.c:2601
X+#, c-format
X msgid "BALANCE: %d%% RIGHT"
X msgstr ""
X 
Xdiff -ur ../xmms-1.2.7/xmms/urldecode.c ./xmms/urldecode.c
X--- ../xmms-1.2.7/xmms/urldecode.c	Fri Jun  1 15:07:49 2001
X+++ ./xmms/urldecode.c	Tue Aug  6 09:30:30 2002
X@@ -27,7 +27,6 @@
X {
X 	char *tmp = NULL, *cur = NULL, *ext = NULL;
X 	int realchar;
X-
X 	if (!encoded_path || *encoded_path == '\0' ||
X 	    strncasecmp(encoded_path, "file:", 5))
X 		return(NULL);
END-of-multimedia/xmms/files/patch-aa
echo x - multimedia/xmms/Makefile
sed 's/^X//' >multimedia/xmms/Makefile << 'END-of-multimedia/xmms/Makefile'
X# New ports collection makefile for:	xmms
X# Date created:			3 July 1999
X# Whom:				Espen Skoglund <esk@ira.uka.de>
X#
X# $FreeBSD: ports/multimedia/xmms/Makefile,v 1.50 2003/04/20 19:35:01 marcus Exp $
X#
X
XPORTNAME=	xmms
XPORTVERSION=	1.2.7
XPORTREVISION=	3
XCATEGORIES+=	multimedia audio
XMASTER_SITES=	ftp://ftp.xmms.org/xmms/1.2.x/ \
X		http://www.xmms.org/files/1.2.x/ \
X		ftp://ftp.sunet.se/pub/multimedia/xmms/1.2.x/
X
XMAINTAINER?=	esk@ira.uka.de
XCOMMENT?=	X Multimedia System --- An audio player with a Winamp GUI
X
XUSE_BZIP2=	yes
XUSE_X_PREFIX=	yes
XUSE_GNOME=	gtk12 gnomehack libxml
XUSE_REINPLACE=	yes
XWANT_GNOME=	yes
XUSE_GMAKE=	yes
XINSTALLS_SHLIB=	yes
XGNU_CONFIGURE=	yes
XCONFIGURE_ENV=	CPPFLAGS="-I${LOCALBASE}/include" \
X		LIBS="-L${LOCALBASE}/lib" \
X		INPUT_PLUGINS="${INPUT_PLUGINS}" \
X		OUTPUT_PLUGINS="${OUTPUT_PLUGINS}" \
X		VISUALIZATION_PLUGINS="${VISUALIZATION_PLUGINS}"
XMAN1=		gnomexmms.1 wmxmms.1 xmms.1
X
XINPUT_PLUGINS=	cdaudio,idcin,mpg123,tonegen,wav
XOUTPUT_PLUGINS=	OSS,disk_writer
XVISUALIZATION_PLUGINS=	blur_scope,sanalyzer
X
X.include <bsd.port.pre.mk>
X
X.if !defined(WITHOUT_MIKMOD)
XLIB_DEPENDS+=	mikmod.2:${PORTSDIR}/audio/libmikmod
XINPUT_PLUGINS+=	mikmod
XPLIST_SUB+=	MIKMODPLUGIN:=""
X.else
XCONFIGURE_ARGS+=	--disable-mikmod
XPLIST_SUB+=	MIKMODPLUGIN:="@comment "
X.endif
X
X.if !defined(WITHOUT_VORBIS)
XLIB_DEPENDS+=	vorbis.2:${PORTSDIR}/audio/libvorbis
XINPUT_PLUGINS+=	vorbis
XPLIST_SUB+=	VORBISPLUGIN:=""
X.else
XCONFIGURE_ARGS+=	--disable-vorbis
XPLIST_SUB+=	VORBISPLUGIN:="@comment "
X.endif
X
X.if defined(WITH_IPV6)
XCONFIGURE_ARGS+=	--enable-ipv6
XPKGNAMESUFFIX=	-ipv6
X.endif
X
X.if ${HAVE_GNOME:Mesound}!=""
XUSE_GNOME+=	esound
XOUTPUT_PLUGINS+=	esd
XPLIST_SUB+=	ESDPLUGIN:=""
X.if defined(PKGNAMESUFFIX)
XPKGNAMESUFFIX:=	${PKGNAMESUFFIX}-esound
X.else
XPKGNAMESUFFIX=	-esound
X.endif
X.else
XCONFIGURE_ARGS+=	--disable-esd
XPLIST_SUB+=	ESDPLUGIN:="@comment "
X.endif
X
X.if ${HAVE_GNOME:Mlibpanel}!=""
XUSE_GNOME+=	libpanel gnomeprefix
X.if defined(PKGNAMESUFFIX)
XPKGNAMESUFFIX:=	${PKGNAMESUFFIX}-gnome
X.else
XPKGNAMESUFFIX=	-gnome
X.endif
XPLIST_SUB+=	DATADIR="share/gnome" PANEL:=""
X.else
XCONFIGURE_ARGS+=	--without-gnome
XPLIST_SUB+=	DATADIR="share" PANEL:="@comment "
X.endif
X
X.if ${MACHINE_ARCH} != "i386"
XWITHOUT_3DNOW=	yes
X.endif
X
X.if !defined(WITHOUT_3DNOW) && ${OSVERSION} >= 400021
XCONFIGURE_ARGS+=	--enable-3dnow
X.endif
X
X.if defined(WITHOUT_3DNOW) || ${OSVERSION} < 400021
Xpost-extract:
X	(cd ${WRKSRC}/Input/mpg123 && ${MV} decode_i586.s decode_i586.S && \
X	  cd ${WRKSRC}/Visualization/blur_scope && ${MV} blur_8.s blur_8.S);
X	${REINPLACE_CMD} -e 's:\.s :\.S :g' ${WRKSRC}/Input/mpg123/Makefile.in
X	${REINPLACE_CMD} -e 's:blur_8.s:blur_8.S:g' \
X	  ${WRKSRC}/Visualization/blur_scope/Makefile.in
X.endif
X
Xpre-extract:
X.if !defined(WITHOUT_MIKMOD) || !defined(WITHOUT_VORBIS) || ( !defined(WITHOUT_3DNOW) && ${OSVERSION} >= 400021 ) || ${HAVE_GNOME:Mesound}!=""
X	@${ECHO_MSG}
X.if !defined(WITHOUT_MIKMOD)
X	@${ECHO_MSG} "You can disable support for mikmod by defining WITHOUT_MIKMOD."
X.endif
X.if !defined(WITHOUT_VORBIS)
X	@${ECHO_MSG} "You can disable support for vorbis by defining WITHOUT_VORBIS."
X.endif
X.if !defined(WITHOUT_3DNOW) && ${OSVERSION} >= 400021
X	@${ECHO_MSG} "You can disable 3DNow! optimized decoding routines by defining WITHOUT_3DNOW."
X.endif
X.if !defined(WITH_IPV6)
X	@$(ECHO_MSG) "You can enable ipv6 streaming support by defining WITH_IPV6."
X.endif
X.if ${HAVE_GNOME:Mesound}!=""
X	@${ECHO_MSG} "You can disable support for esound by defining WITHOUT_GNOME=esound."
X.endif
X	@${ECHO_MSG}
X.endif
X
Xpost-patch:
X	@find ${WRKSRC} -name "Makefile.in*" | xargs ${REINPLACE_CMD} -e \
X		 's|\(datadir\)/aclocal|(prefix)/share/aclocal|g'
X
Xpost-install:
X	@${MKDIR} ${PREFIX}/share/xmms/Skins
X	@${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.post.mk>
END-of-multimedia/xmms/Makefile
echo x - multimedia/xmms/distinfo
sed 's/^X//' >multimedia/xmms/distinfo << 'END-of-multimedia/xmms/distinfo'
XMD5 (xmms-1.2.7.tar.bz2) = 9bec488842920df359516b7d062d15dc
END-of-multimedia/xmms/distinfo
echo x - multimedia/xmms/pkg-descr
sed 's/^X//' >multimedia/xmms/pkg-descr << 'END-of-multimedia/xmms/pkg-descr'
XXMMS --- X Multimedia System. XMMS is a multimedia player based on the look of
XWinamp. Currently it plays mpeg layer 1/2/3, wav, au, CD audio, etc.
X
XWWW: http://www.xmms.org/
X
X    eSk
END-of-multimedia/xmms/pkg-descr
echo x - multimedia/xmms/pkg-message
sed 's/^X//' >multimedia/xmms/pkg-message << 'END-of-multimedia/xmms/pkg-message'
XXmms supports Gzipped and uncompressed skins.  If you would like to use
XZip format skins you will need to ensure archivers/unzip is installed.
END-of-multimedia/xmms/pkg-message
echo x - multimedia/xmms/pkg-plist
sed 's/^X//' >multimedia/xmms/pkg-plist << 'END-of-multimedia/xmms/pkg-plist'
Xbin/wmxmms
Xbin/xmms
Xbin/xmms-config
X%%PANEL:%%bin/gnomexmms
X%%PANEL:%%etc/CORBA/servers/gnomexmms.gnorba
X%%PANEL:%%share/gnome/applets/Multimedia/gnomexmms.desktop
Xinclude/xmms/configfile.h
Xinclude/xmms/dirbrowser.h
Xinclude/xmms/formatter.h
Xinclude/xmms/fullscreen.h
Xinclude/xmms/plugin.h
Xinclude/xmms/titlestring.h
Xinclude/xmms/util.h
Xinclude/xmms/xmmsctrl.h
Xlib/libxmms.a
Xlib/libxmms.so
Xlib/libxmms.so.3
Xlib/xmms/Effect/libecho.so
Xlib/xmms/Effect/libstereo.so
Xlib/xmms/Effect/libvoice.so
Xlib/xmms/General/libir.so
Xlib/xmms/General/libsong_change.so
Xlib/xmms/Input/libcdaudio.so
Xlib/xmms/Input/libidcin.so
Xlib/xmms/Input/libmpg123.so
Xlib/xmms/Input/libtonegen.so
Xlib/xmms/Input/libwav.so
X%%MIKMODPLUGIN:%%lib/xmms/Input/libmikmod.so
X%%VORBISPLUGIN:%%lib/xmms/Input/libvorbis.so
Xlib/xmms/Output/libOSS.so
Xlib/xmms/Output/libdisk_writer.so
X%%ESDPLUGIN:%%lib/xmms/Output/libesdout.so
Xlib/xmms/Visualization/libbscope.so
Xlib/xmms/Visualization/libsanalyzer.so
Xshare/aclocal/xmms.m4
X%%DATADIR%%/xmms/wmxmms.xpm
Xshare/locale/af/LC_MESSAGES/xmms.mo
Xshare/locale/az/LC_MESSAGES/xmms.mo
Xshare/locale/bg/LC_MESSAGES/xmms.mo
Xshare/locale/ca/LC_MESSAGES/xmms.mo
Xshare/locale/cs/LC_MESSAGES/xmms.mo
Xshare/locale/da/LC_MESSAGES/xmms.mo
Xshare/locale/de/LC_MESSAGES/xmms.mo
Xshare/locale/el/LC_MESSAGES/xmms.mo
Xshare/locale/eo/LC_MESSAGES/xmms.mo
Xshare/locale/es/LC_MESSAGES/xmms.mo
Xshare/locale/eu/LC_MESSAGES/xmms.mo
Xshare/locale/fr/LC_MESSAGES/xmms.mo
Xshare/locale/ga/LC_MESSAGES/xmms.mo
Xshare/locale/gl/LC_MESSAGES/xmms.mo
Xshare/locale/hr/LC_MESSAGES/xmms.mo
Xshare/locale/hu/LC_MESSAGES/xmms.mo
Xshare/locale/id/LC_MESSAGES/xmms.mo
Xshare/locale/it/LC_MESSAGES/xmms.mo
Xshare/locale/ja/LC_MESSAGES/xmms.mo
Xshare/locale/ko/LC_MESSAGES/xmms.mo
Xshare/locale/lt/LC_MESSAGES/xmms.mo
Xshare/locale/lv/LC_MESSAGES/xmms.mo
Xshare/locale/nl/LC_MESSAGES/xmms.mo
Xshare/locale/nn/LC_MESSAGES/xmms.mo
Xshare/locale/no/LC_MESSAGES/xmms.mo
Xshare/locale/pl/LC_MESSAGES/xmms.mo
Xshare/locale/pt/LC_MESSAGES/xmms.mo
Xshare/locale/pt_BR/LC_MESSAGES/xmms.mo
Xshare/locale/ro/LC_MESSAGES/xmms.mo
Xshare/locale/ru/LC_MESSAGES/xmms.mo
Xshare/locale/sk/LC_MESSAGES/xmms.mo
Xshare/locale/sr/LC_MESSAGES/xmms.mo
Xshare/locale/sv/LC_MESSAGES/xmms.mo
Xshare/locale/tg/LC_MESSAGES/xmms.mo
Xshare/locale/th/LC_MESSAGES/xmms.mo
Xshare/locale/tr/LC_MESSAGES/xmms.mo
Xshare/locale/uk/LC_MESSAGES/xmms.mo
Xshare/locale/vi/LC_MESSAGES/xmms.mo
Xshare/locale/wa/LC_MESSAGES/xmms.mo
Xshare/locale/zh_CN.GB2312/LC_MESSAGES/xmms.mo
Xshare/locale/zh_TW/LC_MESSAGES/xmms.mo
X@dirrm %%DATADIR%%/xmms
X@dirrm lib/xmms/Visualization
X@dirrm lib/xmms/Output
X@dirrm lib/xmms/Input
X@dirrm lib/xmms/General
X@dirrm lib/xmms/Effect
X@dirrm lib/xmms
X@dirrm include/xmms
X@exec mkdir -p %D/share/xmms/Skins
X@unexec rmdir %D/share/xmms/Skins %D/share/xmms 2>/dev/null || echo "If you are permanently removing xmms, do not forget to remove skin files left under %D/share/xmms/Skins. Use \`\`rm -Rf %D/share/xmms/Skins; rmdir %D/share/xmms''" | fmt
END-of-multimedia/xmms/pkg-plist
exit

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200307210210.h6L2AjpJ037638>