ports/160579: [PATCH] audio/firefly: portlint(1) fixes and more

Takefu takefu at airport.fm
Fri Sep 9 07:50:08 UTC 2011


>Number:         160579
>Category:       ports
>Synopsis:       [PATCH] audio/firefly: portlint(1) fixes and more
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Sep 09 07:50:07 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Takefu
>Release:        
>Organization:
FOX Amateur Radio Club
>Environment:
>Description:
  Add LICENSE_FILE
  portlint(1) fix FATAL
  Japanese support
    Reference http://www.kzsoft.to/~kazu/mt-daapd/patch/
>How-To-Repeat:
>Fix:
--- firefly.patch begins here ---
diff -ruN /usr/ports/audio/firefly/Makefile audio/firefly/Makefile
--- /usr/ports/audio/firefly/Makefile	2011-06-24 08:18:27.000000000 +0900
+++ audio/firefly/Makefile	2011-09-09 16:27:41.000000000 +0900
@@ -15,6 +15,9 @@
 MAINTAINER=	mark at foster.cc
 COMMENT=	Open-source media server for the Roku SoundBridge and iTunes

+LICENSE=	GPLv2
+LICENSE_FILE=	${WRKSRC}/COPYING
+
 BUILD_DEPENDS=	${LOCALBASE}/include/vorbis/codec.h:${PORTSDIR}/audio/libvorbis \
 		${LOCALBASE}/include/FLAC/metadata.h:${PORTSDIR}/audio/flac
 RUN_DEPENDS=	oggdec:${PORTSDIR}/audio/vorbis-tools \
@@ -27,13 +30,20 @@

 GNU_CONFIGURE=	yes
 CONFIGURE_ENV=	CFLAGS+="${PTHREAD_CFLAGS}" \
-		CPPFLAGS="${CPPFLAGS} -I${LOCALBASE}/include" \
-		LDFLAGS="-L${LOCALBASE}/lib" \
-		LIBS="-L${LOCALBASE}/lib ${PTHREAD_LIBS}"
+		CPPFLAGS+="${CPPFLAGS} -I${LOCALBASE}/include" \
+		LDFLAGS+="-L${LOCALBASE}/lib" \
+		LIBS+="-L${LOCALBASE}/lib ${PTHREAD_LIBS}"
 CONFIGURE_TARGET=	--build=${MACHINE_ARCH}-portbld-freebsd${OSREL}
 CONFIGURE_ARGS=		--prefix=${PREFIX} --with-id3tag=${PREFIX} \
 			--enable-sqlite3 --enable-oggvorbis --enable-flac

+USE_ICONV=	yes
+CONFIGURE_ARGS+=	--enable-iconv
+
+#PATCH_SITES+=	http://www.kzsoft.to/~kazu/mt-daapd/patch/
+#PATCHFILES+=	mt-daapd-svn-1586-cp932.patch
+#PATCH_DIST_STRIP+=	-p1
+
 DAAPD_USER?=	daapd
 DAAPD_GROUP?=	daapd
 DAAPD_DBDIR?=	${PREFIX}/var/db/${PORTNAME}
@@ -46,7 +56,7 @@
 USE_LDCONFIG=	yes

 pre-everything::
-	@${ECHO_CMD} "Define vars bellow if you need:"
+	@${ECHO_CMD} "Define vars below if you need:"
 	@${ECHO_CMD} "DAAPD_USER=${DAAPD_USER} (default: daapd)"
 	@${ECHO_CMD} "DAAPD_GROUP=${DAAPD_GROUP} (default: daapd)"
 	@${ECHO_CMD} "DAAPD_DBDIR=${DAAPD_DBDIR} (default: ${PREFIX}/var/db/${PORTNAME})"
diff -ruN /usr/ports/audio/firefly/files/patch-src_scan-mp3.c audio/firefly/files/patch-src_scan-mp3.c
--- /usr/ports/audio/firefly/files/patch-src_scan-mp3.c	1970-01-01 09:00:00.000000000 +0900
+++ audio/firefly/files/patch-src_scan-mp3.c	2011-09-05 13:53:04.000000000 +0900
@@ -0,0 +1,139 @@
+--- src/scan-mp3.c.orig	2007-09-25 16:55:23.000000000 +0900
++++ src/scan-mp3.c	2011-09-05 13:52:16.000000000 +0900
+@@ -18,6 +18,15 @@
+  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  */
+
++#define USE_CP932
++
++#ifdef USE_CP932
++    #define UNKNOWN_STR    "UNKNOWN"
++    #ifndef FILESYSTEM_CES
++        #define FILESYSTEM_CES "CP932"
++    #endif
++#endif
++
+ #ifdef HAVE_CONFIG_H
+ #  include "config.h"
+ #endif
+@@ -34,6 +43,10 @@
+ #include <string.h>
+ #include <time.h>
+
++#ifdef USE_CP932
++    #include <iconv.h>
++#endif
++
+ #include "daapd.h"
+ #include "conf.h"
+ #include "err.h"
+@@ -289,6 +302,96 @@
+     return 1;
+ }
+
++#ifdef USE_CP932
++#define MAX_ICONV_BUF 1024
++
++typedef enum {
++    ICONV_OK,
++    ICONV_TRYNEXT,
++    ICONV_FATAL
++}   iconv_result;
++
++static iconv_result do_convert(const char* to_ces, const char* from_ces,
++                   char *inbuf,  size_t inbytesleft,
++                   char *outbuf_orig, size_t outbytesleft_orig) {
++    size_t rc;
++    iconv_result ret = ICONV_OK;
++
++    size_t outbytesleft = outbytesleft_orig - 1;
++    char* outbuf = outbuf_orig;
++
++    iconv_t cd  = iconv_open(to_ces, from_ces);
++    if (cd == (iconv_t)-1) {
++        return ICONV_FATAL;
++    }
++    rc = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
++    if (rc == (size_t)-1) {
++        if (errno == E2BIG) {
++            ret = ICONV_FATAL;
++        } else {
++            ret = ICONV_TRYNEXT;
++            memset(outbuf_orig, '\0', outbytesleft_orig);
++        }
++    }
++    iconv_close(cd);
++
++    return ret;
++}
++
++static unsigned char* get_utf8_text(const id3_ucs4_t* native_text) {
++    unsigned char* utf8_text = NULL;
++    char * in, * in8, * iconv_buf;
++    iconv_result rc;
++
++    in = (char*)id3_ucs4_latin1duplicate(native_text);
++    if (!in) goto out;
++
++    in8 = (char*)id3_ucs4_utf8duplicate(native_text);
++    if (!in8) {
++      free(in);
++      goto out;
++    }
++
++    iconv_buf = (char*)calloc(MAX_ICONV_BUF, sizeof(char));
++    if (!iconv_buf) {
++      free(in); free(in8);
++      goto out;
++    }
++
++    /* (1) try utf8 -> cp932 */
++    rc = do_convert("CP932", "UTF-8", in8, strlen(in8), iconv_buf, MAX_ICONV_BUF);
++    if (rc == ICONV_OK) {
++        utf8_text = (unsigned char*)in8;
++        free(iconv_buf);
++    } else if (rc == ICONV_TRYNEXT) {
++        /* (2) try cp932 -> utf8 */
++        rc = do_convert("UTF-8", "CP932", in, strlen(in), iconv_buf, MAX_ICONV_BUF);
++        if (rc == ICONV_OK) {
++            utf8_text = (unsigned char*)iconv_buf;
++        } else if (rc == ICONV_TRYNEXT) {
++            /* (3) try euc-jp -> utf8 */
++            rc = do_convert("UTF-8", "EUC-JP", in, strlen(in), iconv_buf, MAX_ICONV_BUF);
++            if (rc == ICONV_OK) {
++                utf8_text = (unsigned char*)iconv_buf;
++            } else if (rc == ICONV_TRYNEXT) {
++                /* utf-8 including non-japanese char? fallback. */
++                utf8_text = (unsigned char*)id3_ucs4_utf8duplicate(native_text);
++                free(iconv_buf);
++            }
++        }
++        free(in8);
++    }
++    free(in);
++
++  out:
++    if (!utf8_text) {
++        utf8_text = (unsigned char*)strdup(UNKNOWN_STR);
++    }
++
++    return utf8_text;
++}
++#endif
++
+ int scan_mp3_get_mp3tags(char *file, MP3FILE *pmp3) {
+     struct id3_file *pid3file;
+     struct id3_tag *pid3tag;
+@@ -352,8 +455,11 @@
+             if(native_text) {
+                 have_utf8=1;
+
+-
++#ifdef USE_CP932
++		utf8_text = (char *)get_utf8_text(native_text);
++#else
+                 utf8_text = (char*)id3_ucs4_utf8duplicate(native_text);
++#endif
+                 if(utf8_text)
+                     mem_register(utf8_text,0);
+
--- firefly.patch ends here ---

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



More information about the freebsd-ports-bugs mailing list