summaryrefslogtreecommitdiffstats
path: root/media-sound/mpg123
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2019-09-01 00:00:32 +0200
committerSuren A. Chilingaryan <csa@suren.me>2019-09-01 00:00:32 +0200
commitca9627e70852f6b2e835660df870fe3ab405882d (patch)
tree0a008b1d5b16fa0679a195ed7b5662c7891f591c /media-sound/mpg123
downloaddarklin4-ca9627e70852f6b2e835660df870fe3ab405882d.tar.gz
darklin4-ca9627e70852f6b2e835660df870fe3ab405882d.tar.bz2
darklin4-ca9627e70852f6b2e835660df870fe3ab405882d.tar.xz
darklin4-ca9627e70852f6b2e835660df870fe3ab405882d.zip
Initial import
Diffstat (limited to 'media-sound/mpg123')
-rw-r--r--media-sound/mpg123/Manifest14
-rw-r--r--media-sound/mpg123/files/mpg123-ds-rcc.patch150
-rw-r--r--media-sound/mpg123/files/mpg123-ds-rcc1121.patch247
-rw-r--r--media-sound/mpg123/files/mpg123-ds-rcc173.patch271
-rw-r--r--media-sound/mpg123/files/mpg123-ds-rcc65.patch240
-rw-r--r--media-sound/mpg123/files/mpg123-osx.diff394
-rw-r--r--media-sound/mpg123/mpg123-0.59s-r11.ebuild143
-rw-r--r--media-sound/mpg123/mpg123-0.65-r1.ebuild89
-rw-r--r--media-sound/mpg123/mpg123-1.12.2-r2.ebuild85
-rw-r--r--media-sound/mpg123/mpg123-1.7.3-r1.ebuild87
10 files changed, 1720 insertions, 0 deletions
diff --git a/media-sound/mpg123/Manifest b/media-sound/mpg123/Manifest
new file mode 100644
index 0000000..396cf95
--- /dev/null
+++ b/media-sound/mpg123/Manifest
@@ -0,0 +1,14 @@
+AUX mpg123-ds-rcc.patch 4428 RMD160 ca864c06b5c154899a315f3425e00622af530113 SHA1 564ab8a296024c022eeaf8fd65d74124d2bc16aa SHA256 0eadb0941c3476a105df3a96bbfd772e3519e5036f5d52dc643f1b60cf225fc7
+AUX mpg123-ds-rcc1121.patch 7769 RMD160 60bbc6022aed1ba4f323b4c4e8eb4af0f78d2e12 SHA1 9cb83f78c78575edce5ccf4ac711cb6ccea7b98a SHA256 fe815c3943788d86c846e308bd774cbddba9ad87b2b8553d98a1572627027405
+AUX mpg123-ds-rcc173.patch 8774 RMD160 624a8f5affec6f2cdc2c64a60a4d881f92af4913 SHA1 37fc97eacfcfdba235b0515ef78d3b85f6dd4ec3 SHA256 61b9067ae997a7b165a102022d4e21c18f1b71b3ab8a8e257190fbcefe7d1632
+AUX mpg123-ds-rcc65.patch 7283 RMD160 bcaf3129939c5220a2cafcff1ad2fe6eb4ff44f5 SHA1 c0385e96d8d28546e16adef89c367e05db3c60b8 SHA256 c6b9dc95fba1edb33a9a772814877222da9587af8366f65312f6e7835152f5ed
+AUX mpg123-osx.diff 11227 RMD160 572614f922a288d68f56b66a20d3a9264c92c895 SHA1 11d7c7df1624f35bb17a7d044c21f4924eb316e7 SHA256 2941998aeb4c77d9c7633c6fcf01d37cb1b019f1b3d4dabadfceb152f97d11b8
+DIST mpg123-0.59s-gentoo-1.5.tar.bz2 7207 RMD160 75bc91d354e665c424afa1a3beab202f7a60441c SHA1 9631911b2a8c6331e494a1e26d03516b19634c62 SHA256 2c2495ce9bd029b01d94c4c4ca930653d174d4a3e6d11488e2e669692835b116
+DIST mpg123-0.65.tar.bz2 529154 RMD160 f28f79425a41cd71d9cca7e817fd3c010f71ab30 SHA1 984a1ce7f0705a15ce3afb9538615cc82cd1ea7c SHA256 091f0b29e630530b42c4a06671d14a7a9acc0b0cadad90edcf1983e798691e0b
+DIST mpg123-1.12.2.tar.bz2 809645 RMD160 cae7d4fe52026f671f402a46d7b8d778c78b6ac7 SHA1 7cb9bcb51366ea6f4b11d0e160c2d42a2c153212 SHA256 e05f1027ffa7879493c0959a1ad5936d31b06461c2f8ebed729f6aea5ed71ef7
+DIST mpg123-1.7.3.tar.bz2 1152707 RMD160 5ae91f57aa666336ed1b2c23d3b769e027a8e917 SHA1 9f0d288783da5539e67ca91ac12097ef088d5af3 SHA256 b8935a8f481d49b07d39fe0d3aa2eecbf7f631002b64d29e099de1b5be86e9da
+DIST mpg123-pre0.59s.tar.gz 244899 RMD160 fdc6ba57c67dc890ef5d2f3a05ff9c520ccf407f SHA1 7e521785dc3a9015f4228f0a118bf36856884b67 SHA256 ba0c1db18ffc7ed2250d6718a23a62e0e98d77bbeedb83ca3993f6421b31256a
+EBUILD mpg123-0.59s-r11.ebuild 3288 RMD160 a97e59422df5e42582a5eaa4e7f6910334104669 SHA1 585db0ec7d4492897ca470e4a9323482d5106ed7 SHA256 816ae3c155fc82cb1f24186f6358951abc50764e945badabe60b1ed5bb149daf
+EBUILD mpg123-0.65-r1.ebuild 2089 RMD160 742b952cb0ce59f00d86001f52611a77711ab65c SHA1 3b46c96c94dd379fd07a07153af539e3c5ff23b0 SHA256 bb7e656469f61bb0ad7335be0a0cc70d392f02023622549b5b7580304f4761dc
+EBUILD mpg123-1.12.2-r2.ebuild 1960 RMD160 c28c7209483567a5d6aa59f0668e03f80a5e4afb SHA1 53d04f5f9b1911bb5a60b34f4521622407147643 SHA256 da5e6f475a3b155678b7d710902dec64ee8ddee745c4ea07e4fcbfc9c02c9eb9
+EBUILD mpg123-1.7.3-r1.ebuild 2003 RMD160 ded77977950978acc6e4a5f9bda9c5444b9d02e6 SHA1 3640eaa98c7f04aeff43deefe2ac84a931f85c03 SHA256 b3166158eb9a1bd54619ac88399d434bce97efa5599981a2e02641e9d7416b61
diff --git a/media-sound/mpg123/files/mpg123-ds-rcc.patch b/media-sound/mpg123/files/mpg123-ds-rcc.patch
new file mode 100644
index 0000000..620457b
--- /dev/null
+++ b/media-sound/mpg123/files/mpg123-ds-rcc.patch
@@ -0,0 +1,150 @@
+diff -dPNur mpg123/Makefile mpg123-new/Makefile
+--- mpg123/Makefile 2005-07-26 05:50:35.000000000 +0000
++++ mpg123-new/Makefile 2005-07-26 05:52:38.000000000 +0000
+@@ -789,12 +789,12 @@
+ mpg123-make:
+ @ $(MAKE) CFLAGS='$(CFLAGS)' BINNAME=mpg123 mpg123
+
+-mpg123: mpg123.o common.o $(OBJECTS) decode_2to1.o decode_4to1.o \
++mpg123: mpg123.o common.o rccpatch.o $(OBJECTS) decode_2to1.o decode_4to1.o \
+ tabinit.o audio.o layer1.o layer2.o layer3.o buffer.o \
+ getlopt.o httpget.o xfermem.o equalizer.o \
+ decode_ntom.o Makefile wav.o readers.o \
+ control_generic.o vbrhead.o playlist.o getbits.o
+- $(CC) $(CFLAGS) $(LDFLAGS) mpg123.o tabinit.o common.o layer1.o \
++ $(CC) $(CFLAGS) $(LDFLAGS) -lrcc rccpatch.o mpg123.o tabinit.o common.o layer1.o \
+ layer2.o layer3.o audio.o buffer.o decode_2to1.o equalizer.o \
+ decode_4to1.o getlopt.o httpget.o xfermem.o decode_ntom.o \
+ wav.o readers.o control_generic.o vbrhead.o playlist.o getbits.o \
+diff -dPNur mpg123/common.c mpg123-new/common.c
+--- mpg123/common.c 2005-07-26 05:50:37.000000000 +0000
++++ mpg123-new/common.c 2005-07-26 05:54:32.000000000 +0000
+@@ -22,6 +22,7 @@
+ #endif
+ #endif
+
++#include "rccpatch.h"
+ #include "mpg123.h"
+ #include "genre.h"
+ #include "common.h"
+@@ -666,6 +667,8 @@
+ char comment[31]={0,};
+ char genre[31]={0,};
+
++ char *ctitle, *cartist, *calbum, *ccomment;
++
+ if(param.quiet)
+ return;
+
+@@ -675,15 +678,25 @@
+ strncpy(year,tag->year,4);
+ strncpy(comment,tag->comment,30);
+
++ ctitle = rccPatchRecode(title);
++ cartist = rccPatchRecode(artist);
++ calbum = rccPatchRecode(album);
++ ccomment = rccPatchRecode(comment);
++
+ if ( tag->genre < sizeof(genre_table)/sizeof(*genre_table) ) {
+ strncpy(genre, genre_table[tag->genre], 30);
+ } else {
+ strncpy(genre,"Unknown",30);
+ }
+-
+- fprintf(stderr,"Title : %-30s Artist: %s\n",title,artist);
+- fprintf(stderr,"Album : %-30s Year : %4s\n",album,year);
+- fprintf(stderr,"Comment: %-30s Genre : %s\n",comment,genre);
++
++ fprintf(stderr,"Title : %-30s Artist: %s\n",ctitle?ctitle:title,cartist?cartist:artist);
++ fprintf(stderr,"Album : %-30s Year : %4s\n",calbum?calbum:album,year);
++ fprintf(stderr,"Comment: %-30s Genre : %s\n",ccomment?ccomment:comment,genre);
++
++ if (ctitle) free(ctitle);
++ if (cartist) free(cartist);
++ if (calbum) free(calbum);
++ if (ccomment) free(ccomment);
+ }
+
+ #if 0
+diff -dPNur mpg123/mpg123.c mpg123-new/mpg123.c
+--- mpg123/mpg123.c 2001-01-18 14:00:35.000000000 +0000
++++ mpg123-new/mpg123.c 2005-07-26 05:51:08.000000000 +0000
+@@ -33,6 +33,8 @@
+ #include "term.h"
+ #include "playlist.h"
+
++#include "rccpatch.h"
++
+ #include "version.h"
+
+ static void usage(char *dummy);
+@@ -890,6 +892,8 @@
+ term_init();
+ }
+ #endif
++
++ rccPatchInit();
+
+ leftFrames = numframes;
+ for(frameNum=0;read_frame(rd,fr) && leftFrames && !intflag;frameNum++) {
+@@ -1006,6 +1010,8 @@
+ }
+ }
+ }
++ rccPatchFree();
++
+ #ifndef NOXFERMEM
+ if (buffermem && param.usebuffer) {
+ buffer_end();
+diff -dPNur mpg123/rccpatch.c mpg123-new/rccpatch.c
+--- mpg123/rccpatch.c 1970-01-01 00:00:00.000000000 +0000
++++ mpg123-new/rccpatch.c 2005-07-26 05:51:08.000000000 +0000
+@@ -0,0 +1,40 @@
++#include <librcc.h>
++
++#define ID3_CLASS 0
++#define OUT_CLASS 1
++static rcc_class classes[] = {
++ { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 },
++ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 },
++ { NULL }
++};
++
++static int rcc_initialized = 0;
++
++void rccPatchFree() {
++ if (rcc_initialized) {
++ rccFree();
++ rcc_initialized = 0;
++ }
++}
++
++void rccPatchInit() {
++ if (rcc_initialized) return;
++ rccInit();
++ rccInitDefaultContext(NULL, 0, 0, classes, 0);
++ rccLoad(NULL, "xmms");
++ rccInitDb4(NULL, NULL, 0);
++ rcc_initialized = 1;
++}
++
++static void rccPatchTryInit() {
++ if (!rcc_initialized) {
++ rccPatchInit();
++ if (rcc_initialized) atexit(rccPatchFree);
++ }
++}
++
++char *rccPatchRecode(const char *str) {
++ char *res;
++ rccPatchTryInit();
++ return rccRecode(NULL, ID3_CLASS, OUT_CLASS, str);
++}
+diff -dPNur mpg123/rccpatch.h mpg123-new/rccpatch.h
+--- mpg123/rccpatch.h 1970-01-01 00:00:00.000000000 +0000
++++ mpg123-new/rccpatch.h 2005-07-26 05:51:08.000000000 +0000
+@@ -0,0 +1,4 @@
++void rccPatchFree();
++void rccPatchInit();
++char *rccPatchRecode(const char *str);
++
diff --git a/media-sound/mpg123/files/mpg123-ds-rcc1121.patch b/media-sound/mpg123/files/mpg123-ds-rcc1121.patch
new file mode 100644
index 0000000..1335795
--- /dev/null
+++ b/media-sound/mpg123/files/mpg123-ds-rcc1121.patch
@@ -0,0 +1,247 @@
+diff -dPNur mpg123-1.12.1/configure.ac mpg123-1.12.1-new/configure.ac
+--- mpg123-1.12.1/configure.ac 2010-03-31 10:27:37.000000000 +0200
++++ mpg123-1.12.1-new/configure.ac 2010-07-07 23:44:57.000000000 +0200
+@@ -998,6 +998,21 @@
+ AC_CHECK_LIB([m], [sqrt])
+ AC_CHECK_LIB([mx], [powf])
+
++# LibRCC
++AC_CHECK_LIB(rcc, rccInit,[
++ AC_CHECK_HEADERS(librcc.h,[
++ LIBRCC_LIBS="-lrcc"
++ LIBRCC_INCLUDES="-DHAVE_LIBRCC"
++ ],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])
++AC_SUBST(LIBRCC_LIBS)
++AC_SUBST(LIBRCC_INCLUDES)
++
+ # attempt to make the signal stuff work... also with GENERIC - later
+ #if test x"$ac_cv_header_sys_signal_h" = xyes; then
+ # AC_CHECK_FUNCS( sigemptyset sigaddset sigprocmask sigaction )
+diff -dPNur mpg123-1.12.1/src/libmpg123/id3.c mpg123-1.12.1-new/src/libmpg123/id3.c
+--- mpg123-1.12.1/src/libmpg123/id3.c 2010-03-31 10:27:35.000000000 +0200
++++ mpg123-1.12.1-new/src/libmpg123/id3.c 2010-07-07 23:51:50.000000000 +0200
+@@ -9,6 +9,8 @@
+ #include "mpg123lib_intern.h"
+ #include "id3.h"
+ #include "debug.h"
++#include "rccpatch.h"
++
+
+ #ifndef NO_ID3V2 /* Only the main parsing routine will always be there. */
+
+@@ -829,6 +831,15 @@
+ size_t length = l;
+ size_t i;
+ unsigned char *p;
++ char *ctitle;
++
++ ctitle = mpg123_rcc_recode(s, l, &i);
++ if (ctitle) {
++ convert_utf8(sb, ctitle, i, 0);
++ free(ctitle);
++ return;
++ }
++
+ /* determine real length, a latin1 character can at most take 2 in UTF8 */
+ for(i=0; i<l; ++i)
+ if(s[i] >= 0x80) ++length;
+diff -dPNur mpg123-1.12.1/src/libmpg123/Makefile.am mpg123-1.12.1-new/src/libmpg123/Makefile.am
+--- mpg123-1.12.1/src/libmpg123/Makefile.am 2010-03-31 10:27:35.000000000 +0200
++++ mpg123-1.12.1-new/src/libmpg123/Makefile.am 2010-07-07 23:44:57.000000000 +0200
+@@ -29,6 +29,8 @@
+ libmpg123_la_DEPENDENCIES = @DECODER_LOBJ@ @LFS_LOBJ@
+
+ libmpg123_la_SOURCES = \
++ rccpatch.c \
++ rccpatch.h \
+ compat.c \
+ compat.h \
+ parse.c \
+diff -dPNur mpg123-1.12.1/src/libmpg123/rccpatch.c mpg123-1.12.1-new/src/libmpg123/rccpatch.c
+--- mpg123-1.12.1/src/libmpg123/rccpatch.c 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-1.12.1-new/src/libmpg123/rccpatch.c 2010-07-07 23:55:59.000000000 +0200
+@@ -0,0 +1,76 @@
++#include <string.h>
++#include <librcc.h>
++#include "mpg123.h"
++
++#define ID3_CLASS 0
++#define UTF_CLASS 1
++#define OUT_CLASS 2
++static rcc_class classes[] = {
++ { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 },
++ { "utf", RCC_CLASS_KNOWN, "UTF-8", NULL, "Unicode Encoding", 0 },
++ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 },
++ { NULL }
++};
++
++static int rcc_initialized = 0;
++
++void mpg123_rcc_free() {
++ if (rcc_initialized) {
++ rccFree();
++ rcc_initialized = 0;
++ }
++}
++
++void mpg123_rcc_init() {
++ if (rcc_initialized) return;
++ rccInit();
++ rccInitDefaultContext(NULL, 0, 0, classes, 0);
++ rccLoad(NULL, "xmms");
++ rccInitDb4(NULL, NULL, 0);
++ rcc_initialized = 1;
++}
++
++static void mpg123_rcc_try_init() {
++ if (!rcc_initialized) {
++ mpg123_rcc_init();
++ if (rcc_initialized) atexit(mpg123_rcc_free);
++ }
++}
++
++
++char *mpg123_rcc_recode(const char *str, size_t len, size_t *rlen) {
++ char *res;
++ mpg123_rcc_try_init();
++ return rccSizedRecode(NULL, ID3_CLASS, UTF_CLASS, str, len, rlen);
++}
++
++static void mpg123_rcc_recode_string(mpg123_string *str, rcc_class_id from, rcc_class_id to) {
++ size_t size;
++ char *res;
++
++ if ((!str)||(str->fill<2)) return;
++
++ mpg123_rcc_try_init();
++
++ res = rccSizedRecode(NULL, from, to, str->p, str->fill - 1, &size);
++ if (res) {
++ if (size+1>str->size) {
++ if (!mpg123_resize_string(str, size + 1)) {
++ // allocation failed
++ free(res);
++ return;
++ }
++ }
++ strncpy(str->p, res, size + 1);
++ str->fill = size + 1;
++ free(res);
++ }
++}
++
++void mpg123_rcc_recode_utf_string(mpg123_string *str) {
++ mpg123_rcc_recode_string(str, UTF_CLASS, OUT_CLASS);
++}
++
++void mpg123_rcc_recode_latin_string(mpg123_string *str) {
++ mpg123_rcc_recode_string(str, ID3_CLASS, OUT_CLASS);
++}
+diff -dPNur mpg123-1.12.1/src/libmpg123/rccpatch.h mpg123-1.12.1-new/src/libmpg123/rccpatch.h
+--- mpg123-1.12.1/src/libmpg123/rccpatch.h 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-1.12.1-new/src/libmpg123/rccpatch.h 2010-07-07 23:44:57.000000000 +0200
+@@ -0,0 +1,5 @@
++void mpg123_rcc_free();
++void mpg123_rcc_init();
++char *mpg123_rcc_recode(const char *str, size_t len, size_t *rlen);
++void mpg123_rcc_recode_utf_string(mpg123_string *str);
++void mpg123_rcc_recode_latin_string(mpg123_string *str);
+diff -dPNur mpg123-1.12.1/src/Makefile.am mpg123-1.12.1-new/src/Makefile.am
+--- mpg123-1.12.1/src/Makefile.am 2010-03-31 10:27:36.000000000 +0200
++++ mpg123-1.12.1-new/src/Makefile.am 2010-07-07 23:46:10.000000000 +0200
+@@ -5,10 +5,10 @@
+ ## initially written by Nicholas J. Humfrey
+
+ AM_CPPFLAGS = -DPKGLIBDIR="\"$(pkglibdir)\""
+-mpg123_LDADD = $(LIBLTDL) libmpg123/libmpg123.la @MODULE_OBJ@ @OUTPUT_OBJ@ @OUTPUT_LIBS@
++mpg123_LDADD = $(LIBLTDL) libmpg123/libmpg123.la @MODULE_OBJ@ @OUTPUT_OBJ@ @OUTPUT_LIBS@ @LIBRCC_LIBS@
+ mpg123_LDFLAGS = @EXEC_LT_LDFLAGS@ @OUTPUT_LDFLAGS@
+ # Just mpg123_INCLUDES has no effect on build! Trying that before reverting to AM_CPPFLAGS.
+-INCLUDES = $(LTDLINCL) -I$(top_builddir)/src/libmpg123 -I$(top_srcdir)/src/libmpg123
++INCLUDES = $(LTDLINCL) -I$(top_builddir)/src/libmpg123 -I$(top_srcdir)/src/libmpg123 @LIBRCC_INCLUDES@
+ # libltdl is not mentioned here... it's not that trivial
+ mpg123_DEPENDENCIES = @OUTPUT_OBJ@ @MODULE_OBJ@ libmpg123/libmpg123.la
+
+diff -dPNur mpg123-1.12.1/src/metaprint.c mpg123-1.12.1-new/src/metaprint.c
+--- mpg123-1.12.1/src/metaprint.c 2010-03-31 10:27:36.000000000 +0200
++++ mpg123-1.12.1-new/src/metaprint.c 2010-07-07 23:54:21.000000000 +0200
+@@ -17,7 +17,11 @@
+ if(source == NULL) return;
+
+ if(utf8env) mpg123_copy_string(source, dest);
+- else utf8_ascii(dest, source);
++ else {
++ mpg123_copy_string(source, dest);
++ mpg123_rcc_recode_utf_string(dest);
++// utf8_ascii(dest, source);
++ }
+ }
+
+ /* print tags... limiting the UTF-8 to ASCII */
+@@ -53,6 +57,7 @@
+ strncpy(tag[TITLE].p,v1->title,30);
+ tag[TITLE].p[30] = 0;
+ tag[TITLE].fill = strlen(tag[TITLE].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[TITLE]);
+ }
+ }
+ if(!tag[ARTIST].fill)
+@@ -62,6 +67,7 @@
+ strncpy(tag[ARTIST].p,v1->artist,30);
+ tag[ARTIST].p[30] = 0;
+ tag[ARTIST].fill = strlen(tag[ARTIST].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[ARTIST]);
+ }
+ }
+ if(!tag[ALBUM].fill)
+@@ -71,6 +77,7 @@
+ strncpy(tag[ALBUM].p,v1->album,30);
+ tag[ALBUM].p[30] = 0;
+ tag[ALBUM].fill = strlen(tag[ALBUM].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[ALBUM]);
+ }
+ }
+ if(!tag[COMMENT].fill)
+@@ -80,6 +87,7 @@
+ strncpy(tag[COMMENT].p,v1->comment,30);
+ tag[COMMENT].p[30] = 0;
+ tag[COMMENT].fill = strlen(tag[COMMENT].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[COMMENT]);
+ }
+ }
+ if(!tag[YEAR].fill)
+diff -dPNur mpg123-1.12.1/src/mpg123.c mpg123-1.12.1-new/src/mpg123.c
+--- mpg123-1.12.1/src/mpg123.c 2010-03-31 10:27:36.000000000 +0200
++++ mpg123-1.12.1-new/src/mpg123.c 2010-07-07 23:52:58.000000000 +0200
+@@ -10,6 +10,7 @@
+ #include "mpg123app.h"
+ #include "mpg123.h"
+ #include "local.h"
++#include "rccpatch.h"
+
+ #ifdef HAVE_SYS_WAIT_H
+ #include <sys/wait.h>
+@@ -973,6 +974,8 @@
+ if(param.term_ctrl)
+ term_init();
+ #endif
++
++ mpg123_rcc_init();
+ while ((fname = get_next_file()))
+ {
+ char *dirname, *filename;
+@@ -1132,6 +1135,8 @@
+ #endif
+ }
+ } /* end of loop over input files */
++ mpg123_rcc_free();
++
+ /* Ensure we played everything. */
+ if(param.smooth && param.usebuffer)
+ {
diff --git a/media-sound/mpg123/files/mpg123-ds-rcc173.patch b/media-sound/mpg123/files/mpg123-ds-rcc173.patch
new file mode 100644
index 0000000..ae814ff
--- /dev/null
+++ b/media-sound/mpg123/files/mpg123-ds-rcc173.patch
@@ -0,0 +1,271 @@
+diff -dPNur mpg123-1.7.3/configure.ac mpg123-1.7.3-rusxmms/configure.ac
+--- mpg123-1.7.3/configure.ac 2009-04-27 09:02:40.000000000 +0200
++++ mpg123-1.7.3-rusxmms/configure.ac 2009-06-13 23:22:17.000000000 +0200
+@@ -759,6 +759,21 @@
+ AC_CHECK_LIB([m], [sqrt])
+ AC_CHECK_LIB([mx], [powf])
+
++# LibRCC
++AC_CHECK_LIB(rcc, rccInit,[
++ AC_CHECK_HEADERS(librcc.h,[
++ LIBRCC_LIBS="-lrcc"
++ LIBRCC_INCLUDES="-DHAVE_LIBRCC"
++ ],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])
++AC_SUBST(LIBRCC_LIBS)
++AC_SUBST(LIBRCC_INCLUDES)
++
+ # attempt to make the signal stuff work... also with GENERIC - later
+ #if test x"$ac_cv_header_sys_signal_h" = xyes; then
+ # AC_CHECK_FUNCS( sigemptyset sigaddset sigprocmask sigaction )
+diff -dPNur mpg123-1.7.3/src/libmpg123/id3.c mpg123-1.7.3-rusxmms/src/libmpg123/id3.c
+--- mpg123-1.7.3/src/libmpg123/id3.c 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/libmpg123/id3.c 2009-06-14 00:34:23.000000000 +0200
+@@ -9,6 +9,8 @@
+ #include "mpg123lib_intern.h"
+ #include "id3.h"
+ #include "debug.h"
++#include "rccpatch.h"
++
+
+ #ifndef NO_ID3V2 /* Only the main parsing routine will always be there. */
+
+@@ -774,6 +776,15 @@
+ size_t length = l;
+ size_t i;
+ unsigned char *p;
++ char *ctitle;
++
++ ctitle = mpg123_rcc_recode(s, l, &i);
++ if (ctitle) {
++ convert_utf8(sb, ctitle, i);
++ free(ctitle);
++ return;
++ }
++
+ /* determine real length, a latin1 character can at most take 2 in UTF8 */
+ for(i=0; i<l; ++i)
+ if(s[i] >= 0x80) ++length;
+diff -dPNur mpg123-1.7.3/src/libmpg123/libmpg123.sym mpg123-1.7.3-rusxmms/src/libmpg123/libmpg123.sym
+--- mpg123-1.7.3/src/libmpg123/libmpg123.sym 2009-04-27 09:07:20.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/libmpg123/libmpg123.sym 2009-06-14 01:53:25.000000000 +0200
+@@ -74,3 +74,8 @@
+ mpg123_position
+ mpg123_length
+ mpg123_set_filesize
++mpg123_rcc_free
++mpg123_rcc_init
++mpg123_rcc_recode
++mpg123_rcc_recode_utf_string
++mpg123_rcc_recode_latin_string
+diff -dPNur mpg123-1.7.3/src/libmpg123/libmpg123.sym.in mpg123-1.7.3-rusxmms/src/libmpg123/libmpg123.sym.in
+--- mpg123-1.7.3/src/libmpg123/libmpg123.sym.in 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/libmpg123/libmpg123.sym.in 2009-06-14 01:51:45.000000000 +0200
+@@ -74,3 +74,8 @@
+ mpg123_position@LARGEFILE_SUFFIX@
+ mpg123_length@LARGEFILE_SUFFIX@
+ mpg123_set_filesize@LARGEFILE_SUFFIX@
++mpg123_rcc_free
++mpg123_rcc_init
++mpg123_rcc_recode
++mpg123_rcc_recode_utf_string
++mpg123_rcc_recode_latin_string
+diff -dPNur mpg123-1.7.3/src/libmpg123/Makefile.am mpg123-1.7.3-rusxmms/src/libmpg123/Makefile.am
+--- mpg123-1.7.3/src/libmpg123/Makefile.am 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/libmpg123/Makefile.am 2009-06-14 00:10:34.000000000 +0200
+@@ -31,6 +31,8 @@
+ libmpg123_la_DEPENDENCIES = @DECODER_LOBJ@ libmpg123.sym
+
+ libmpg123_la_SOURCES = \
++ rccpatch.c \
++ rccpatch.h \
+ compat.c \
+ compat.h \
+ parse.c \
+diff -dPNur mpg123-1.7.3/src/libmpg123/rccpatch.c mpg123-1.7.3-rusxmms/src/libmpg123/rccpatch.c
+--- mpg123-1.7.3/src/libmpg123/rccpatch.c 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-1.7.3-rusxmms/src/libmpg123/rccpatch.c 2009-06-14 01:54:37.000000000 +0200
+@@ -0,0 +1,76 @@
++#include <string.h>
++#include <librcc.h>
++#include "mpg123.h"
++
++#define ID3_CLASS 0
++#define UTF_CLASS 1
++#define OUT_CLASS 2
++static rcc_class classes[] = {
++ { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 },
++ { "utf", RCC_CLASS_KNOWN, "UTF-8", NULL, "Unicode Encoding", 0 },
++ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 },
++ { NULL }
++};
++
++static int rcc_initialized = 0;
++
++void mpg123_rcc_free() {
++ if (rcc_initialized) {
++ rccFree();
++ rcc_initialized = 0;
++ }
++}
++
++void mpg123_rcc_init() {
++ if (rcc_initialized) return;
++ rccInit();
++ rccInitDefaultContext(NULL, 0, 0, classes, 0);
++ rccLoad(NULL, "xmms");
++ rccInitDb4(NULL, NULL, 0);
++ rcc_initialized = 1;
++}
++
++static void mpg123_rcc_try_init() {
++ if (!rcc_initialized) {
++ mpg123_rcc_init();
++ if (rcc_initialized) atexit(mpg123_rcc_free);
++ }
++}
++
++
++char *mpg123_rcc_recode(const char *str, size_t len, size_t *rlen) {
++ char *res;
++ mpg123_rcc_try_init();
++ return rccSizedRecode(NULL, ID3_CLASS, UTF_CLASS, str, len, rlen);
++}
++
++static void mpg123_rcc_recode_string(mpg123_string *str, rcc_class_id from, rcc_class_id to) {
++ size_t size;
++ char *res;
++
++ if ((!str)||(str->fill<2)) return;
++
++ mpg123_rcc_try_init();
++
++ res = rccSizedRecode(NULL, from, to, str->p, str->fill - 1, &size);
++ if (res) {
++ if (size+1>str->size) {
++ if (!mpg123_resize_string(str, size + 1)) {
++ // allocation failed
++ free(res);
++ return;
++ }
++ }
++ strncpy(str->p, res, size + 1);
++ str->fill = size + 1;
++ free(res);
++ }
++}
++
++void mpg123_rcc_recode_utf_string(mpg123_string *str) {
++ mpg123_rcc_recode_string(str, UTF_CLASS, OUT_CLASS);
++}
++
++void mpg123_rcc_recode_latin_string(mpg123_string *str) {
++ mpg123_rcc_recode_string(str, ID3_CLASS, OUT_CLASS);
++}
+diff -dPNur mpg123-1.7.3/src/libmpg123/rccpatch.h mpg123-1.7.3-rusxmms/src/libmpg123/rccpatch.h
+--- mpg123-1.7.3/src/libmpg123/rccpatch.h 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-1.7.3-rusxmms/src/libmpg123/rccpatch.h 2009-06-14 01:51:21.000000000 +0200
+@@ -0,0 +1,5 @@
++void mpg123_rcc_free();
++void mpg123_rcc_init();
++char *mpg123_rcc_recode(const char *str, size_t len, size_t *rlen);
++void mpg123_rcc_recode_utf_string(mpg123_string *str);
++void mpg123_rcc_recode_latin_string(mpg123_string *str);
+diff -dPNur mpg123-1.7.3/src/Makefile.am mpg123-1.7.3-rusxmms/src/Makefile.am
+--- mpg123-1.7.3/src/Makefile.am 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/Makefile.am 2009-06-14 00:10:22.000000000 +0200
+@@ -5,10 +5,10 @@
+ ## initially written by Nicholas J. Humfrey
+
+ AM_CPPFLAGS = -DPKGLIBDIR="\"$(pkglibdir)\""
+-mpg123_LDADD = $(LIBLTDL) libmpg123/libmpg123.la @MODULE_OBJ@ @OUTPUT_OBJ@ @OUTPUT_LIBS@
++mpg123_LDADD = $(LIBLTDL) libmpg123/libmpg123.la @MODULE_OBJ@ @OUTPUT_OBJ@ @OUTPUT_LIBS@ @LIBRCC_LIBS@
+ mpg123_LDFLAGS = @LT_LDFLAGS@ @OUTPUT_LDFLAGS@
+ # Just mpg123_INCLUDES has no effect on build! Trying that before reverting to AM_CPPFLAGS.
+-INCLUDES = $(LTDLINCL) -I$(top_builddir)/src/libmpg123 -I$(top_srcdir)/src/libmpg123
++INCLUDES = $(LTDLINCL) -I$(top_builddir)/src/libmpg123 -I$(top_srcdir)/src/libmpg123 @LIBRCC_INCLUDES@
+ # libltdl is not mentioned here... it's not that trivial
+ mpg123_DEPENDENCIES = @OUTPUT_OBJ@ @MODULE_OBJ@ libmpg123/libmpg123.la
+
+diff -dPNur mpg123-1.7.3/src/metaprint.c mpg123-1.7.3-rusxmms/src/metaprint.c
+--- mpg123-1.7.3/src/metaprint.c 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/metaprint.c 2009-06-14 01:59:09.000000000 +0200
+@@ -17,7 +17,11 @@
+ if(source == NULL) return;
+
+ if(utf8env) mpg123_copy_string(source, dest);
+- else utf8_ascii(dest, source);
++ else {
++ mpg123_copy_string(source, dest);
++ mpg123_rcc_recode_utf_string(dest);
++// utf8_ascii(dest, source);
++ }
+ }
+
+ /* print tags... limiting the UTF-8 to ASCII */
+@@ -53,6 +57,7 @@
+ strncpy(tag[TITLE].p,v1->title,30);
+ tag[TITLE].p[30] = 0;
+ tag[TITLE].fill = strlen(tag[TITLE].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[TITLE]);
+ }
+ }
+ if(!tag[ARTIST].fill)
+@@ -62,6 +67,7 @@
+ strncpy(tag[ARTIST].p,v1->artist,30);
+ tag[ARTIST].p[30] = 0;
+ tag[ARTIST].fill = strlen(tag[ARTIST].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[ARTIST]);
+ }
+ }
+ if(!tag[ALBUM].fill)
+@@ -71,6 +77,7 @@
+ strncpy(tag[ALBUM].p,v1->album,30);
+ tag[ALBUM].p[30] = 0;
+ tag[ALBUM].fill = strlen(tag[ALBUM].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[ALBUM]);
+ }
+ }
+ if(!tag[COMMENT].fill)
+@@ -80,6 +87,7 @@
+ strncpy(tag[COMMENT].p,v1->comment,30);
+ tag[COMMENT].p[30] = 0;
+ tag[COMMENT].fill = strlen(tag[COMMENT].p) + 1;
++ mpg123_rcc_recode_latin_string(&tag[COMMENT]);
+ }
+ }
+ if(!tag[YEAR].fill)
+diff -dPNur mpg123-1.7.3/src/mpg123.c mpg123-1.7.3-rusxmms/src/mpg123.c
+--- mpg123-1.7.3/src/mpg123.c 2009-04-27 09:02:12.000000000 +0200
++++ mpg123-1.7.3-rusxmms/src/mpg123.c 2009-06-14 00:35:14.000000000 +0200
+@@ -10,6 +10,7 @@
+ #include "mpg123app.h"
+ #include "mpg123.h"
+ #include "local.h"
++#include "rccpatch.h"
+
+ #ifdef HAVE_SYS_WAIT_H
+ #include <sys/wait.h>
+@@ -893,6 +894,8 @@
+ if(param.term_ctrl)
+ term_init();
+ #endif
++
++ mpg123_rcc_init();
+ while ((fname = get_next_file()))
+ {
+ char *dirname, *filename;
+@@ -1038,6 +1041,8 @@
+ #endif
+ }
+ } /* end of loop over input files */
++ mpg123_rcc_free();
++
+ /* Ensure we played everything. */
+ if(param.smooth && param.usebuffer)
+ {
diff --git a/media-sound/mpg123/files/mpg123-ds-rcc65.patch b/media-sound/mpg123/files/mpg123-ds-rcc65.patch
new file mode 100644
index 0000000..41a4d33
--- /dev/null
+++ b/media-sound/mpg123/files/mpg123-ds-rcc65.patch
@@ -0,0 +1,240 @@
+diff -dPNur mpg123-0.65/configure.ac mpg123-0.65-new/configure.ac
+--- mpg123-0.65/configure.ac 2007-02-07 10:24:33.000000000 +0100
++++ mpg123-0.65-new/configure.ac 2007-04-15 13:36:52.000000000 +0200
+@@ -137,6 +137,21 @@
+ AC_CHECK_LIB([m], [sqrt])
+ AC_CHECK_LIB([mx], [powf])
+
++# LibRCC
++AC_CHECK_LIB(rcc, rccInit,[
++ AC_CHECK_HEADERS(librcc.h,[
++ LIBRCC_LIBS="-lrcc"
++ LIBRCC_INCLUDES="-DHAVE_LIBRCC"
++ ],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])],[
++ LIBRCC_LIBS=""
++ LIBRCC_INCLUDES=""
++])
++AC_SUBST(LIBRCC_LIBS)
++AC_SUBST(LIBRCC_INCLUDES)
++
+ # Check for JACK
+ PKG_CHECK_MODULES(JACK, jack, HAVE_JACK=yes, HAVE_JACK=no)
+
+diff -dPNur mpg123-0.65/src/id3.c mpg123-0.65-new/src/id3.c
+--- mpg123-0.65/src/id3.c 2007-02-07 10:24:33.000000000 +0100
++++ mpg123-0.65-new/src/id3.c 2007-04-15 13:26:06.000000000 +0200
+@@ -6,6 +6,7 @@
+ #include "stringbuf.h"
+ #include "genre.h"
+ #include "id3.h"
++#include "rccpatch.h"
+
+ struct taginfo
+ {
+@@ -499,6 +500,8 @@
+ void print_id3_tag(unsigned char *id3v1buf)
+ {
+ char genre_from_v1 = 0;
++ char *ctitle, *cartist, *calbum, *ccomment;
++
+ if(!(id3.version || id3v1buf)) return;
+ if(id3v1buf != NULL)
+ {
+@@ -688,17 +691,26 @@
+ free_stringbuf(&tmp);
+ }
+
++ if (id3.title.fill) ctitle = rccPatchRecode(id3.title.p);
++ else ctitle = NULL;
++ if (id3.artist.fill) cartist = rccPatchRecode(id3.artist.p);
++ else cartist = NULL;
++ if (id3.album.fill) calbum = rccPatchRecode(id3.album.p);
++ else calbum = NULL;
++ if (id3.comment.fill) ccomment = rccPatchRecode(id3.comment.p);
++ else ccomment = NULL;
++
+ if(param.long_id3)
+ {
+ fprintf(stderr,"\n");
+ /* print id3v2 */
+ /* dammed, I use pointers as bool again! It's so convenient... */
+- fprintf(stderr,"\tTitle: %s\n", id3.title.fill ? id3.title.p : "");
+- fprintf(stderr,"\tArtist: %s\n", id3.artist.fill ? id3.artist.p : "");
+- fprintf(stderr,"\tAlbum: %s\n", id3.album.fill ? id3.album.p : "");
++ fprintf(stderr,"\tTitle: %s\n", ctitle?ctitle:(id3.title.fill ? id3.title.p : ""));
++ fprintf(stderr,"\tArtist: %s\n", cartist?cartist:(id3.artist.fill ? id3.artist.p : ""));
++ fprintf(stderr,"\tAlbum: %s\n", calbum?calbum:(id3.album.fill ? id3.album.p : ""));
+ fprintf(stderr,"\tYear: %s\n", id3.year.fill ? id3.year.p : "");
+ fprintf(stderr,"\tGenre: %s\n", id3.genre.fill ? id3.genre.p : "");
+- fprintf(stderr,"\tComment: %s\n", id3.comment.fill ? id3.comment.p : "");
++ fprintf(stderr,"\tComment: %s\n", ccomment?ccomment:(id3.comment.fill ? id3.comment.p : ""));
+ fprintf(stderr,"\n");
+ }
+ else
+@@ -708,23 +720,23 @@
+ /* one _could_ circumvent the strlen calls... */
+ if(id3.title.fill && id3.artist.fill && strlen(id3.title.p) <= 30 && strlen(id3.title.p) <= 30)
+ {
+- fprintf(stderr,"Title: %-30s Artist: %s\n",id3.title.p,id3.artist.p);
++ fprintf(stderr,"Title: %-30s Artist: %s\n",ctitle?ctitle:id3.title.p,cartist?cartist:id3.artist.p);
+ }
+ else
+ {
+- if(id3.title.fill) fprintf(stderr,"Title: %s\n", id3.title.p);
+- if(id3.artist.fill) fprintf(stderr,"Artist: %s\n", id3.artist.p);
++ if(id3.title.fill) fprintf(stderr,"Title: %s\n", ctitle?ctitle:id3.title.p);
++ if(id3.artist.fill) fprintf(stderr,"Artist: %s\n", cartist?cartist:id3.artist.p);
+ }
+ if (id3.comment.fill && id3.album.fill && strlen(id3.comment.p) <= 30 && strlen(id3.album.p) <= 30)
+ {
+- fprintf(stderr,"Comment: %-30s Album: %s\n",id3.comment.p,id3.album.p);
++ fprintf(stderr,"Comment: %-30s Album: %s\n",ccomment?ccomment:id3.comment.p,calbum?calbum:id3.album.p);
+ }
+ else
+ {
+ if (id3.comment.fill)
+- fprintf(stderr,"Comment: %s\n", id3.comment.p);
++ fprintf(stderr,"Comment: %s\n", ccomment?ccomment:id3.comment.p);
+ if (id3.album.fill)
+- fprintf(stderr,"Album: %s\n", id3.album.p);
++ fprintf(stderr,"Album: %s\n", calbum?calbum:id3.album.p);
+ }
+ if (id3.year.fill && id3.genre.fill && strlen(id3.year.p) <= 30 && strlen(id3.genre.p) <= 30)
+ {
+@@ -738,6 +750,11 @@
+ fprintf(stderr,"Genre: %s\n", id3.genre.p);
+ }
+ }
++
++ if (ctitle) free(ctitle);
++ if (cartist) free(cartist);
++ if (calbum) free(calbum);
++ if (ccomment) free(ccomment);
+ }
+
+ /*
+diff -dPNur mpg123-0.65/src/Makefile.am mpg123-0.65-new/src/Makefile.am
+--- mpg123-0.65/src/Makefile.am 2007-02-07 10:24:33.000000000 +0100
++++ mpg123-0.65-new/src/Makefile.am 2007-04-15 13:38:44.000000000 +0200
+@@ -4,8 +4,8 @@
+ ## see COPYING and AUTHORS files in distribution or http://mpg123.de
+ ## initially written by Nicholas J. Humfrey
+
+-AM_CFLAGS = @AUDIO_CFLAGS@
+-AM_LDFLAGS = @AUDIO_LIBS@
++AM_CFLAGS = @AUDIO_CFLAGS@ @LIBRCC_INCLUDES@
++AM_LDFLAGS = @AUDIO_LIBS@ @LIBRCC_LIBS@
+ mpg123_LDADD = @AUDIO_OBJ@ @CPU_TYPE_LIB@
+ mpg123_DEPENDENCIES = @AUDIO_OBJ@ @CPU_TYPE_LIB@
+
+@@ -14,6 +14,8 @@
+
+ bin_PROGRAMS = mpg123
+ mpg123_SOURCES = \
++ rccpatch.c \
++ rccpatch.h \
+ audio.c \
+ audio.h \
+ buffer.c \
+diff -dPNur mpg123-0.65/src/mpg123.c mpg123-0.65-new/src/mpg123.c
+--- mpg123-0.65/src/mpg123.c 2007-02-07 10:24:33.000000000 +0100
++++ mpg123-0.65-new/src/mpg123.c 2007-04-15 13:30:42.000000000 +0200
+@@ -35,6 +35,7 @@
+ #include "layer3.h"
+ #endif
+ #include "playlist.h"
++#include "rccpatch.h"
+ #include "id3.h"
+ #include "icy.h"
+
+@@ -814,15 +815,18 @@
+
+ if(param.remote) {
+ int ret;
++ rccPatchInit();
+ init_id3();
+ init_icy();
+ ret = control_generic(&fr);
+ clear_icy();
+ exit_id3();
++ rccPatchFree();
+ safe_exit(ret);
+ }
+ #endif
+
++ rccPatchInit();
+ init_icy();
+ init_id3(); /* prepare id3 memory */
+ while ((fname = get_next_file())) {
+@@ -851,7 +855,7 @@
+ }
+ }
+ #endif
+-
++
+ }
+
+ #if !defined(WIN32) && !defined(GENERIC)
+@@ -1031,6 +1035,7 @@
+ } /* end of loop over input files */
+ clear_icy();
+ exit_id3(); /* free id3 memory */
++ rccPatchFree();
+ #ifndef NOXFERMEM
+ if (param.usebuffer) {
+ buffer_end();
+diff -dPNur mpg123-0.65/src/rccpatch.c mpg123-0.65-new/src/rccpatch.c
+--- mpg123-0.65/src/rccpatch.c 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-0.65-new/src/rccpatch.c 2007-04-15 13:13:09.000000000 +0200
+@@ -0,0 +1,40 @@
++#include <librcc.h>
++
++#define ID3_CLASS 0
++#define OUT_CLASS 1
++static rcc_class classes[] = {
++ { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 },
++ { "out", RCC_CLASS_STANDARD, NULL, NULL, "Output Encoding", 0 },
++ { NULL }
++};
++
++static int rcc_initialized = 0;
++
++void rccPatchFree() {
++ if (rcc_initialized) {
++ rccFree();
++ rcc_initialized = 0;
++ }
++}
++
++void rccPatchInit() {
++ if (rcc_initialized) return;
++ rccInit();
++ rccInitDefaultContext(NULL, 0, 0, classes, 0);
++ rccLoad(NULL, "xmms");
++ rccInitDb4(NULL, NULL, 0);
++ rcc_initialized = 1;
++}
++
++static void rccPatchTryInit() {
++ if (!rcc_initialized) {
++ rccPatchInit();
++ if (rcc_initialized) atexit(rccPatchFree);
++ }
++}
++
++char *rccPatchRecode(const char *str) {
++ char *res;
++ rccPatchTryInit();
++ return rccRecode(NULL, ID3_CLASS, OUT_CLASS, str);
++}
+diff -dPNur mpg123-0.65/src/rccpatch.h mpg123-0.65-new/src/rccpatch.h
+--- mpg123-0.65/src/rccpatch.h 1970-01-01 01:00:00.000000000 +0100
++++ mpg123-0.65-new/src/rccpatch.h 2007-04-15 13:13:09.000000000 +0200
+@@ -0,0 +1,4 @@
++void rccPatchFree();
++void rccPatchInit();
++char *rccPatchRecode(const char *str);
++
diff --git a/media-sound/mpg123/files/mpg123-osx.diff b/media-sound/mpg123/files/mpg123-osx.diff
new file mode 100644
index 0000000..a58fffd
--- /dev/null
+++ b/media-sound/mpg123/files/mpg123-osx.diff
@@ -0,0 +1,394 @@
+diff -Naur mpg123-orig/Makefile mpg123/Makefile
+--- mpg123-orig/Makefile Sun Apr 10 13:35:56 2005
++++ mpg123/Makefile Sun Apr 10 13:40:03 2005
+@@ -54,6 +54,7 @@
+ @echo "make netbsd NetBSD"
+ @echo "make openbsd OpenBSD"
+ @echo "make mint MiNT on Atari"
++ @echo "make macos MacOSX
+ @echo "make generic try this one if your system isn't listed above"
+ @echo ""
+ @echo "Please read the file INSTALL for additional information."
+@@ -149,6 +150,16 @@
+ @echo "Please read the file INSTALL for additional information."
+ @echo ""
+
++macos-help:
++ @echo ""
++ @echo "There are several Mac OS X flavours. Choose one:"
++ @echo ""
++ @echo "make macos"
++ @echo "make macos-esd"
++ @echo ""
++ @echo "Please read the file INSTALL for additional information."
++ @echo ""
++
+ linux-devel:
+ $(MAKE) OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
+ LDFLAGS= \
+@@ -759,6 +770,24 @@
+ -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
+ -DDONT_CATCH_SIGNALS -DNAS' \
+ mpg123-make
++
++macos:
++ $(MAKE) CC=cc LDFLAGS='$(LDFLAGS)' AUDIO_LIB='-framework CoreAudio' \
++ OBJECTS='decode.o dct64.o audio_macosx.o term.o' \
++ CFLAGS='$(CFLAGS) -DINET6 -DTERM_CONTROL -DMAC_OS_X -Wall -O2 -DPPC_ENDIAN' \
++ mpg123-make
++
++macos-generic:
++ $(MAKE) CC=cc LDFLAGS='$(LDFLAGS)' AUDIO_LIB='-framework CoreAudio' \
++ OBJECTS='decode.o dct64.o audio_macosx.o term.o' \
++ CFLAGS='$(CFLAGS) -DINET6 -DTERM_CONTROL -DMAC_OS_X -Wall -O2 -DPPC_ENDIAN' \
++ mpg123-make
++
++macos-esd:
++ $(MAKE) CC=cc LDFLAGS='$(LDFLAGS)' AUDIO_LIB='-lesd -laudiofile' \
++ OBJECTS='decode.o dct64.o audio_esd.o' \
++ CFLAGS='$(CFLAGS) -O -DDARWIN -Wall -O2 -DPPC_ENDIAN -DUSE_ESD' \
++ mpg123-make
+
+ mint:
+ $(MAKE) LDFLAGS= \
+diff -Naur mpg123-orig/audio_macosx.c mpg123/audio_macosx.c
+--- mpg123-orig/audio_macosx.c Wed Dec 31 19:00:00 1969
++++ mpg123/audio_macosx.c Sun Apr 10 13:47:14 2005
+@@ -0,0 +1,337 @@
++/*- This is a 80 chars line, to have pretty formatted comments ---------------*/
++
++/* audio_macosx.c, originally written by Guillaume Outters
++ * to contact the author, please mail to: guillaume.outters@free.fr
++ *
++ * This file is some quick pre-alpha patch to allow me to have some music for my
++ * long working days, and it does it well. But it surely isn't a final version;
++ * as Mac OS X requires at least a G3, I'm not sure it will be useful to
++ * implement downsampling.
++ *
++ * Mac OS X audio works by asking you to fill its buffer, and, to complicate a
++ * bit, you must provide it with floats. In order not to patch too much mpg123,
++ * we'll accept signed short (mpg123 "approved" format) and transform them into
++ * floats as soon as received. Let's say this way calculations are faster.
++ *
++ * As we don't have some /dev/audio device with blocking write, we'll have to
++ * stop mpg123 before it does too much work, while we are waiting our dump proc
++ * to be called. I wanted to use semaphores, but they still need an
++ * implementation from Apple before I can do anything. So we'll block using a
++ * sleep and wake up on SIGUSR2.
++ * Version 0.2: now I use named semaphores (which are implemented AND work).
++ * Preprocessor flag MOSX_USES_SEM (defined at the beginning of this file)
++ * enables this behaviour.
++ *
++ * In order always to have a ready buffer to be dumped when the routine gets
++ * called, we have a "buffer loop" of NUMBER_BUFFERS buffers. mpg123 fills it
++ * on one extremity ('to'), playProc reads it on another point ('from'). 'to'
++ * blocks when it arrives on 'from' (having filled the whole circle of buffers)
++ * and 'from' blocks when no data is available. As soon as it has emptied a
++ * buffer, if mpg123 is sleeping, it awakes it quite brutaly (SIGUSR2) to tell
++ * it to fill the buffer. */
++
++#ifndef MOSX_USES_SEM
++#define MOSX_USES_SEM 1 /* Semaphores or sleep()/kill()? I would say semaphores, but this is just my advice, after all */
++#endif
++#ifndef MOSX_SEM_V2
++#define MOSX_SEM_V2 1
++#endif
++
++#include "mpg123.h"
++#include <CoreAudio/AudioHardware.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <errno.h>
++#if MOSX_USES_SEM
++#include <semaphore.h>
++#endif
++
++struct aBuffer
++{
++ float * buffer;
++ long size;
++
++ float * ptr; /* Where in the buffer are we? */
++ long remaining;
++
++ struct aBuffer * next;
++};
++typedef struct aBuffer aBuffer;
++
++struct anEnv
++{
++ long size;
++ short * debut;
++ short * ptr;
++ AudioDeviceID device;
++ char play;
++
++ /* Intermediate buffers */
++
++ #if MOSX_USES_SEM
++ sem_t * semaphore;
++ #else
++ char wait; /* mpg123 is waiting (due to the semaphore) to show the world its power; let's free him! */
++ pid_t pid;
++ #endif
++ aBuffer * from; /* Current buffers */
++ aBuffer * to;
++};
++
++static struct anEnv env;
++
++#define ENV ((struct anEnv *)inClientData)
++#define NUMBER_BUFFERS 16 /* Tried with 3 buffers, but then any little window move is sufficient to stop the sound. Here we have 1.5 seconds music buffered */
++
++void destroyBuffers()
++{
++ aBuffer * ptr;
++ aBuffer * ptr2;
++
++ ptr = env.to->next;
++ env.to->next = NULL;
++ while(ptr)
++ {
++ ptr2 = ptr->next;
++ if(ptr->buffer) free(ptr->buffer);
++ free(ptr);
++ ptr = ptr2;
++ }
++}
++
++void initBuffers()
++{
++ long m;
++ aBuffer ** ptrptr;
++
++ ptrptr = &env.to;
++ for(m = 0; m < NUMBER_BUFFERS; m++)
++ {
++ *ptrptr = malloc(sizeof(aBuffer));
++ (*ptrptr)->size = 0;
++ (*ptrptr)->remaining = 0;
++ (*ptrptr)->buffer = NULL;
++ ptrptr = &(*ptrptr)->next;
++ #if MOSX_USES_SEM
++ sem_post(env.semaphore); /* This buffer is ready for filling (of course, it is empty!) */
++ #endif
++ }
++ *ptrptr = env.from = env.to;
++}
++
++int fillBuffer(aBuffer * b, short * source, long size)
++{
++ float * dest;
++
++ if(b->remaining) /* Non empty buffer, must still be playing */
++ return(-1);
++ if(b->size != size) /* Hey! What's that? Coudn't this buffer size be fixed once (well, perhaps we just didn't allocate it yet) */
++ {
++ if(b->buffer) free(b->buffer);
++ b->buffer = malloc(size * sizeof(float));
++ b->size = size;
++ }
++
++ dest = b->buffer;
++ while(size--)
++ //*dest++ = ((*source++) + 32768) / 65536.0;
++ *dest++ = (*source++) / 32768.0;
++
++ b->ptr = b->buffer;
++ b->remaining = b->size; /* Do this at last; we shouldn't show the buffer is full before it is effectively */
++
++ #ifdef DEBUG_MOSX
++ printf("."); fflush(stdout);
++ #endif
++
++ return(0);
++}
++
++OSStatus playProc(AudioDeviceID inDevice, const AudioTimeStamp * inNow, const AudioBufferList * inInputData, const AudioTimeStamp * inInputTime, AudioBufferList * outOutputData, const AudioTimeStamp * inOutputTime, void * inClientData)
++{
++ long m, n, o;
++ float * dest;
++
++ for(o = 0; o < outOutputData->mNumberBuffers; o++)
++ {
++ m = outOutputData->mBuffers[o].mDataByteSize / sizeof(float); /* What we have to fill */
++ dest = outOutputData->mBuffers[o].mData;
++
++ while(m > 0)
++ {
++ if( (n = ENV->from->remaining) <= 0 ) /* No more bytes in the current read buffer! */
++ {
++ while( (n = ENV->from->remaining) <= 0)
++ usleep(2000); /* Let's wait a bit for the results... */
++ }
++
++ /* We dump what we can */
++
++ if(n > m) n = m; /* In fact, just the necessary should be sufficient (I think) */
++
++ memcpy(dest, ENV->from->ptr, n * sizeof(float));
++
++ /* Let's remember all done work */
++
++ m -= n;
++ ENV->from->ptr += n;
++ if( (ENV->from->remaining -= n) <= 0) /* ... and tell mpg123 there's a buffer to fill */
++ {
++ #if MOSX_USES_SEM
++ sem_post(ENV->semaphore);
++ #else
++ if(ENV->wait)
++ {
++ kill(ENV->pid, SIGUSR2);
++ ENV->wait = 0;
++ }
++ #endif
++ ENV->from = ENV->from->next;
++ }
++ }
++ }
++
++ return (0);
++}
++
++#if ! MOSX_USES_SEM
++void start(int n)
++{
++ signal(SIGUSR2, start);
++}
++#endif
++
++int audio_open(struct audio_info_struct *ai)
++{
++ long size;
++ AudioStreamBasicDescription format;
++ #if MOSX_USES_SEM
++ char s[10];
++ long m;
++ #endif
++ /*float vol;
++ OSStatus e;*/
++
++ /* Where did that default audio output go? */
++
++ size = sizeof(env.device);
++ if(AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &env.device)) return(-1);
++
++ /* Hmmm, let's choose PCM format */
++
++ size = sizeof(format);
++ if(AudioDeviceGetProperty(env.device, 0, 0, kAudioDevicePropertyStreamFormat, &size, &format)) return(-1);
++ if(format.mFormatID != kAudioFormatLinearPCM) return(-1);
++
++ /* Let's test volume, which doesn't seem to work (but this is only an alpha, remember?) */
++
++ /*vol = 0.5;
++ size = sizeof(vol);
++ if(e = AudioDeviceSetProperty(env.device, NULL, 0, 0, 'volm', size, &vol)) { printf("Didn't your mother ever tell you not to hear music so loudly?\n"); return(-1); } */
++
++ /* Let's init our environment */
++
++ env.size = 0;
++ env.debut = NULL;
++ env.ptr = NULL;
++ env.play = 0;
++
++ #if MOSX_USES_SEM
++ strcpy(s, "/mpg123-0000");
++ do
++ {
++ for(m = 10;; m--)
++ if( (s[m]++) <= '9')
++ break;
++ else
++ s[m] = '0';
++ } while( (env.semaphore = sem_open(s, O_CREAT | O_EXCL, 0644, 0)) == (sem_t *)SEM_FAILED);
++ #else
++ env.pid = getpid();
++ env.wait = 0;
++ signal(SIGUSR2, start);
++ #endif
++
++ initBuffers();
++
++ /* And prepare audio launching */
++
++ if(AudioDeviceAddIOProc(env.device, playProc, &env)) return(-1);
++
++ return(0);
++}
++
++int audio_reset_parameters(struct audio_info_struct *ai)
++{
++ return 0;
++}
++
++int audio_rate_best_match(struct audio_info_struct *ai)
++{
++ return 0;
++}
++
++int audio_set_rate(struct audio_info_struct *ai)
++{
++ return 0;
++}
++
++int audio_set_channels(struct audio_info_struct *ai)
++{
++ return 0;
++}
++
++int audio_set_format(struct audio_info_struct *ai)
++{
++ return 0;
++}
++
++int audio_get_formats(struct audio_info_struct *ai)
++{
++ return AUDIO_FORMAT_SIGNED_16;
++}
++
++int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len)
++{
++ /* We have to calm down mpg123, else he wouldn't hesitate to drop us another buffer (which would be the same, in fact) */
++
++ #if MOSX_USES_SEM && MOSX_SEM_V2 /* Suddenly, I have some kind of doubt: HOW COULD IT WORK??? */
++ while(sem_wait(env.semaphore)){} /* We just have to wait a buffer fill request */
++ fillBuffer(env.to, (short *)buf, len / sizeof(short));
++ #else
++ while(fillBuffer(env.to, (short *)buf, len / sizeof(short)) < 0) /* While the next buffer to write is not empty, we wait a bit... */
++ {
++ #ifdef DEBUG_MOSX
++ printf("|"); fflush(stdout);
++ #endif
++ #if MOSX_USES_SEM
++ sem_wait(env.semaphore); /* This is a bug. I should wait for the semaphore once per empty buffer (and not each time fillBuffers() returns -1). See MOSX_SEM_V2; this was a too quickly modified part when I implemented MOSX_USES_SEM. */
++ #else
++ env.wait = 1;
++ sleep(3600); /* This should be sufficient, shouldn't it? */
++ #endif
++ }
++ #endif
++ env.to = env.to->next;
++
++ /* And we lauch action if not already done */
++
++ if(!env.play)
++ {
++ if(AudioDeviceStart(env.device, playProc)) return(-1);
++ env.play = 1;
++ }
++
++ return len;
++}
++
++int audio_close(struct audio_info_struct *ai)
++{
++ AudioDeviceStop(env.device, playProc); /* No matter the error code, we want to close it (by brute force if necessary) */
++ AudioDeviceRemoveIOProc(env.device, playProc);
++ destroyBuffers();
++ #if MOSX_USES_SEM
++ sem_close(env.semaphore);
++ #endif
++ return 0;
++}
diff --git a/media-sound/mpg123/mpg123-0.59s-r11.ebuild b/media-sound/mpg123/mpg123-0.59s-r11.ebuild
new file mode 100644
index 0000000..2f2297c
--- /dev/null
+++ b/media-sound/mpg123/mpg123-0.59s-r11.ebuild
@@ -0,0 +1,143 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mpg123/mpg123-0.59s-r9.ebuild,v 1.9 2005/06/27 03:27:55 j4rg0n Exp $
+
+inherit eutils
+
+PATCH_VER=1.5
+S="${WORKDIR}/${PN}"
+
+DESCRIPTION="Real Time mp3 player"
+HOMEPAGE="http://www.mpg123.de/"
+SRC_URI="http://www.mpg123.de/mpg123/${PN}-pre${PV}.tar.gz
+ http://dev.gentoo.org/~eradicator/${PN}/${P}-gentoo-${PATCH_VER}.tar.bz2"
+
+LICENSE="as-is"
+SLOT="0"
+KEYWORDS="alpha amd64 hppa ia64 mips ppc ppc-macos ppc64 sparc x86"
+IUSE="mmx 3dnow esd nas oss rcc"
+
+RDEPEND="virtual/libc
+ esd? ( media-sound/esound )
+ nas? ( media-libs/nas )
+ rcc? ( app-i18n/librcc )"
+
+# alsa-1 b0rks and it's not a simple fix
+# alsa? ( media-libs/alsa-lib )"
+
+DEPEND="${RDEPEND}
+ >=sys-apps/sed-4"
+
+PROVIDE="virtual/mpg123"
+
+PATCHDIR="${WORKDIR}/patches"
+
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+
+ EPATCH_SUFFIX="patch"
+ epatch ${PATCHDIR}
+
+ if use ppc-macos;
+ then
+ einfo "Patching for OSX build"
+ epatch ${FILESDIR}/${PN}-osx.diff
+ fi
+
+ use rcc && ( epatch ${FILESDIR}/${PN}-ds-rcc.patch || die )
+ aclocal
+ automake
+ autoconf
+
+ sed -i "s:${PV}-mh4:${PVR}:" version.h
+}
+
+src_compile() {
+ mkdir gentoo-bin
+
+ # The last one in $styles is the default
+ local styles
+
+ use nas && styles="${styles} -nas"
+ use oss && styles="${styles} -generic"
+ atype="linux"
+
+ case $ARCH in
+ ppc64)
+ use esd && styles="${styles} -ppc64-esd"
+ use oss && styles="${styles} -ppc64"
+
+ [ -z "${styles}" ] && styles="-ppc64"
+ ;;
+ ppc)
+ if use ppc-macos; then
+ [ -z "${styles}" ] && styles="macos"
+ atype=""
+ else
+ use esd && styles="${styles} -ppc-esd"
+ use oss && styles="${styles} -ppc"
+
+ [ -z "${styles}" ] && styles="-ppc"
+ fi
+ ;;
+ x86)
+ use esd && styles="${styles} -esd"
+ use esd && use 3dnow && styles="${styles} -3dnow-esd"
+ use oss && styles="${styles} -i486"
+ use oss && use mmx && styles="${styles} -mmx"
+ use oss && use 3dnow && styles="${styles} -3dnow"
+ # use alsa && styles="${styles} -alsa"
+ # use alsa && use 3dnow && styles="${styles} -3dnow-alsa"
+
+ [ -z "${styles}" ] && styles="-generic"
+ ;;
+ sparc*)
+ use esd && styles="${styles} -sparc-esd"
+ styles="${styles} -sparc -generic"
+ ;;
+ amd64)
+ use esd && styles="${styles} -x86_64-esd"
+ use oss && styles="${styles} -x86_64"
+ # use alsa && styles="${styles} -x86_64-alsa"
+
+ [ -z "${styles}" ] && styles="-x86_64"
+ ;;
+ alpha)
+ use esd && styles="${styles} -alpha-esd"
+ use oss && styles="${styles} -alpha"
+ # use alsa && styles="${styles} -alpha-alsa"
+
+ [ -z "${styles}" ] && styles="-generic"
+ ;;
+ mips|hppa|ia64)
+ # use alsa && styles="${styles} -mips-alsa"
+
+ [ -z "${styles}" ] && styles="-generic"
+ ;;
+ *)
+ eerror "No support has been added for your architecture."
+ exit 1
+ ;;
+ esac
+
+ for style in ${styles};
+ do
+ make clean ${atype}${style} CFLAGS="${CFLAGS}" || die
+ mv mpg123 gentoo-bin/mpg123${style}
+ [ -L "gentoo-bin/mpg123" ] && rm gentoo-bin/mpg123
+ ln -s mpg123${style} gentoo-bin/mpg123
+ done
+}
+
+src_install() {
+ dodir /usr
+ if use ppc-macos; then
+ cp -R gentoo-bin ${D}/usr/bin
+ else
+ cp -dR gentoo-bin ${D}/usr/bin
+ fi
+ doman mpg123.1
+ dodoc BENCHMARKING BUGS CHANGES COPYING JUKEBOX README* TODO
+}
diff --git a/media-sound/mpg123/mpg123-0.65-r1.ebuild b/media-sound/mpg123/mpg123-0.65-r1.ebuild
new file mode 100644
index 0000000..c19c1dd
--- /dev/null
+++ b/media-sound/mpg123/mpg123-0.65-r1.ebuild
@@ -0,0 +1,89 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mpg123/mpg123-0.65.ebuild,v 1.2 2007/03/02 12:47:10 genstef Exp $
+
+inherit eutils
+
+DESCRIPTION="Real Time mp3 player"
+HOMEPAGE="http://www.mpg123.de/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"
+
+LICENSE="LGPL-2.1"
+SLOT="0"
+
+KEYWORDS="~alpha amd64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc x86"
+#SDS
+IUSE="mmx 3dnow alsa oss sdl esd nas jack portaudio rcc"
+
+RDEPEND="alsa? ( media-libs/alsa-lib )
+ sdl? ( !alsa? ( !oss? ( media-libs/libsdl ) ) )
+ esd? ( !alsa? ( !oss? ( !sdl? ( media-sound/esound ) ) ) )
+ nas? ( !alsa? ( !oss? ( !sdl? ( !esd? ( media-libs/nas ) ) ) ) )
+ jack? ( !alsa? ( !oss? ( !sdl? ( !esd? ( !nas? ( media-sound/jack-audio-connection-kit ) ) ) ) ) )
+ portaudio? ( !alsa? ( !oss? ( !sdl? ( !esd? ( !nas? ( !jack? ( media-libs/portaudio ) ) ) ) ) ) )
+ rcc? ( app-i18n/librcc )
+"
+#EDS
+
+DEPEND="${RDEPEND}"
+
+PROVIDE="virtual/mpg123"
+
+#SDS
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+
+ use rcc && ( epatch ${FILESDIR}/${PN}-ds-rcc65.patch || die )
+ aclocal
+ automake
+ autoconf
+}
+#EDS
+
+src_compile() {
+ local audiodev
+ if use alsa; then
+ audiodev="alsa"
+ elif use oss; then
+ audiodev="oss"
+ elif use sdl; then
+ audiodev="sdl"
+ elif use esd; then
+ audiodev="esd"
+ elif use nas; then
+ audiodev="nas"
+ elif use jack; then
+ audiodev="jack"
+ elif use portaudio; then
+ audiodev="portaudio"
+ elif use ppc-macos; then
+ audiodev="macosx";
+ else audiodev="dummy"
+ fi
+
+ if use 3dnow; then
+ myconf="--with-cpu=3dnow"
+ elif use mmx; then
+ myconf="--with-cpu=mmx"
+ fi
+
+ einfo "Compiling with ${audiodev} audio output."
+ einfo "If that is not what you want, then select exactly ONE"
+ einfo "of the following USE flags:"
+ einfo "alsa oss sdl esd nas jack portaudio"
+ einfo "and recompile ${PN}."
+ epause 5
+
+ econf \
+ --with-optimization=0 \
+ --with-audio=$audiodev \
+ ${myconf} || die "econf failed"
+
+ emake || die "emake failed"
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "emake install failed"
+}
diff --git a/media-sound/mpg123/mpg123-1.12.2-r2.ebuild b/media-sound/mpg123/mpg123-1.12.2-r2.ebuild
new file mode 100644
index 0000000..284dcdc
--- /dev/null
+++ b/media-sound/mpg123/mpg123-1.12.2-r2.ebuild
@@ -0,0 +1,85 @@
+# Copyright 1999-2010 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mpg123/mpg123-1.12.2.ebuild,v 1.1 2010/06/21 11:25:41 chainsaw Exp $
+
+EAPI=2
+#SDS
+inherit toolchain-funcs eutils
+#EDS
+
+DESCRIPTION="a realtime MPEG 1.0/2.0/2.5 audio player for layers 1, 2 and 3"
+HOMEPAGE="http://www.mpg123.org/"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2
+ http://www.mpg123.org/download/${P}.tar.bz2"
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~alpha amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc x86 ~x86-fbsd"
+#SDS
+IUSE="3dnow 3dnowext alsa altivec ipv6 jack mmx nas oss portaudio pulseaudio sdl sse rcc"
+
+RDEPEND="alsa? ( media-libs/alsa-lib )
+ jack? ( media-sound/jack-audio-connection-kit )
+ nas? ( media-libs/nas )
+ portaudio? ( media-libs/portaudio )
+ pulseaudio? ( media-sound/pulseaudio )
+ sdl? ( media-libs/libsdl )
+ sys-devel/libtool
+ rcc? ( app-i18n/librcc )"
+#EDS
+
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+#SDS
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+
+ use rcc && ( epatch ${FILESDIR}/${PN}-ds-rcc1121.patch || die )
+ rm -f Makefile.in aclocal.m4
+ libtoolize --copy --force
+ aclocal
+ automake
+ autoconf
+}
+#EDS
+
+src_configure() {
+ local _audio=dummy
+ local _output=dummy
+ local _cpu=generic_fpu
+
+ for flag in nas portaudio sdl oss jack alsa pulseaudio; do
+ if use ${flag}; then
+ _audio="${_audio} ${flag/pulseaudio/pulse}"
+ _output=${flag/pulseaudio/pulse}
+ fi
+ done
+
+ use altivec && _cpu=altivec
+
+ if [[ $(tc-arch) == amd64 ]]; then
+ use sse && _cpu=x86-64
+ else
+ use mmx && _cpu=mmx
+ use 3dnow && _cpu=3dnow
+ use sse && _cpu=x86
+ use 3dnowext && _cpu=x86
+ fi
+
+ econf \
+ --disable-dependency-tracking \
+ --with-optimization=0 \
+ --with-audio="${_audio}" \
+ --with-default-audio=${_output} \
+ --with-cpu=${_cpu} \
+ --enable-network \
+ $(use_enable ipv6)
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die
+ dodoc AUTHORS ChangeLog NEWS* README
+}
diff --git a/media-sound/mpg123/mpg123-1.7.3-r1.ebuild b/media-sound/mpg123/mpg123-1.7.3-r1.ebuild
new file mode 100644
index 0000000..e85df9f
--- /dev/null
+++ b/media-sound/mpg123/mpg123-1.7.3-r1.ebuild
@@ -0,0 +1,87 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/mpg123/mpg123-1.7.3.ebuild,v 1.10 2009/06/09 18:53:40 armin76 Exp $
+
+EAPI=2
+
+#SDS
+inherit eutils
+#EDS
+
+DESCRIPTION="a realtime MPEG 1.0/2.0/2.5 audio player for layers 1, 2 and 3."
+HOMEPAGE="http://www.mpg123.org"
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="alpha amd64 ~arm hppa ia64 ~mips ppc ppc64 sparc x86 ~x86-fbsd"
+
+#SDS
+IUSE="3dnow 3dnowext alsa altivec ipv6 jack mmx nas +network oss portaudio pulseaudio sdl sse rcc"
+
+RDEPEND="alsa? ( media-libs/alsa-lib )
+ jack? ( media-sound/jack-audio-connection-kit )
+ nas? ( media-libs/nas )
+ portaudio? ( media-libs/portaudio )
+ pulseaudio? ( media-sound/pulseaudio )
+ sdl? ( media-libs/libsdl )
+ rcc? ( app-i18n/librcc )"
+#EDS
+
+DEPEND="${RDEPEND}
+ dev-util/pkgconfig"
+
+#SDS
+src_unpack() {
+ unpack ${A}
+
+ cd ${S}
+
+ use rcc && ( epatch ${FILESDIR}/${PN}-ds-rcc173.patch || die )
+ aclocal
+ automake
+ autoconf
+}
+#EDS
+
+src_prepare() {
+ sed -i -e 's:-faltivec::' configure || die "sed failed"
+}
+
+src_configure() {
+ local myaudio
+
+ use alsa && myaudio="${myaudio} alsa"
+ use jack && myaudio="${myaudio} jack"
+ use nas && myaudio="${myaudio} nas"
+ use oss && myaudio="${myaudio} oss"
+ use portaudio && myaudio="${myaudio} portaudio"
+ use pulseaudio && myaudio="${myaudio} pulse"
+ use sdl && myaudio="${myaudio} sdl"
+
+ local mycpu
+
+ if use altivec; then
+ mycpu="--with-cpu=altivec"
+ elif use 3dnowext; then
+ mycpu="--with-cpu=3dnowext"
+ elif use 3dnow; then
+ mycpu="--with-cpu=3dnow"
+ elif use sse; then
+ mycpu="--with-cpu=sse"
+ elif use mmx; then
+ mycpu="--with-cpu=mmx"
+ fi
+
+ econf \
+ --disable-dependency-tracking \
+ --with-optimization=0 ${mycpu} \
+ --with-audio="${myaudio}" \
+ $(use_enable network) \
+ $(use_enable ipv6)
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die "emake install failed"
+ dodoc AUTHORS ChangeLog NEWS* README
+}