add a patch from cmus mailing list that allows building against media-libs/faad2...
authorChristian Faulhammer <fauli@gentoo.org>
Wed, 14 Feb 2007 14:04:53 +0000 (14:04 +0000)
committerChristian Faulhammer <fauli@gentoo.org>
Wed, 14 Feb 2007 14:04:53 +0000 (14:04 +0000)
Package-Manager: portage-2.1.2-r9

media-sound/cmus/ChangeLog
media-sound/cmus/Manifest
media-sound/cmus/cmus-2.1.0-r1.ebuild [new file with mode: 0644]
media-sound/cmus/files/cmus-2.1.0-faad-2.0.patch [new file with mode: 0644]
media-sound/cmus/files/digest-cmus-2.1.0-r1 [new file with mode: 0644]

index 4cc3e365fa66723914eab21a5ee973cfc4c1ebb9..73a85397a48314dc3459a9d8a353c94e0ff4b81c 100644 (file)
@@ -1,6 +1,13 @@
 # ChangeLog for media-sound/cmus
 # Copyright 1999-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/media-sound/cmus/ChangeLog,v 1.6 2007/01/29 09:09:52 opfer Exp $
+# $Header: /var/cvsroot/gentoo-x86/media-sound/cmus/ChangeLog,v 1.7 2007/02/14 14:04:53 opfer Exp $
+
+*cmus-2.1.0-r1 (14 Feb 2007)
+
+  14 Feb 2007; Christian Faulhammer <opfer@gentoo.org>
+  +files/cmus-2.1.0-faad-2.0.patch, +cmus-2.1.0-r1.ebuild:
+  add a patch from cmus mailing list that allows building against
+  media-libs/faad2 2.0, so now I can provide aac and mp4 USE flags
 
   29 Jan 2007; Christian Faulhammer <opfer@gentoo.org> -cmus-2.0.4.ebuild:
   clean up
index fdabd306bed62513030aea551d59a5f908d51370..9bcdfae28b4863f57f5f156adfd3c08b5ac721eb 100644 (file)
@@ -1,15 +1,23 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
+AUX cmus-2.1.0-faad-2.0.patch 9319 RMD160 04e836ec3ae74d7d233aa9bf96bd5313a67ad4fa SHA1 b4dbe49f1a300e38c68adcda397ab6afd28fb440 SHA256 74e70a7c6430f3d210a27a4ed272f70d4ab7be12b665d6b9eb30d4f9ae4d71be
+MD5 a4eb9a6a20e5d0a9ece11fd802e14cb3 files/cmus-2.1.0-faad-2.0.patch 9319
+RMD160 04e836ec3ae74d7d233aa9bf96bd5313a67ad4fa files/cmus-2.1.0-faad-2.0.patch 9319
+SHA256 74e70a7c6430f3d210a27a4ed272f70d4ab7be12b665d6b9eb30d4f9ae4d71be files/cmus-2.1.0-faad-2.0.patch 9319
 DIST cmus-2.1.0.tar.bz2 146956 RMD160 f359c8929dd616855aedbe2c4d1d2e252a8946ca SHA1 961d4bd1446c9499aeaac5a280761e5d98ca514f SHA256 fe47e258918526b9e1b2cd7081d73654af8c326f0f3b0fabe450b805b78423c0
+EBUILD cmus-2.1.0-r1.ebuild 2358 RMD160 2839fc5639b479aea32adeb1ba1b4bdedf369c5d SHA1 93ca05053429948ca344cee4ef4a0b064d6d75f4 SHA256 0deefb602aac5ed50993173fe3e8611c6be05247d876f4638974e9551c8a619b
+MD5 64e79215623ac22637a6359d739c0288 cmus-2.1.0-r1.ebuild 2358
+RMD160 2839fc5639b479aea32adeb1ba1b4bdedf369c5d cmus-2.1.0-r1.ebuild 2358
+SHA256 0deefb602aac5ed50993173fe3e8611c6be05247d876f4638974e9551c8a619b cmus-2.1.0-r1.ebuild 2358
 EBUILD cmus-2.1.0.ebuild 2296 RMD160 f9548391af2222c8f0b4f542812f11e9c0aee3b0 SHA1 7a5780b97801cdcf37992f9675060e2c52e0d98b SHA256 b14bf8b70c488aba1446b34875c826dc224d396e6e206125674b14ec2254f897
 MD5 7891a424e0ba704bbb0c8f847b83b1d1 cmus-2.1.0.ebuild 2296
 RMD160 f9548391af2222c8f0b4f542812f11e9c0aee3b0 cmus-2.1.0.ebuild 2296
 SHA256 b14bf8b70c488aba1446b34875c826dc224d396e6e206125674b14ec2254f897 cmus-2.1.0.ebuild 2296
-MISC ChangeLog 1145 RMD160 859b2c9457576e7010e9cd87e14538eec3a60bb0 SHA1 3226944dfb55681576e999501f6cded1d70a2571 SHA256 7f890fc2e2d25fc06d6bc400867ace51635a45615b72a9f18c19e37134b49923
-MD5 d63ac17fa31e6ea2719f030591d71e5e ChangeLog 1145
-RMD160 859b2c9457576e7010e9cd87e14538eec3a60bb0 ChangeLog 1145
-SHA256 7f890fc2e2d25fc06d6bc400867ace51635a45615b72a9f18c19e37134b49923 ChangeLog 1145
+MISC ChangeLog 1423 RMD160 f8aa6aaa1c6cc00d23dd448e78f5ff25b81dcae8 SHA1 88e625c4dcc73fb3609d8871fcbe6083f8f56c56 SHA256 65b2c935ff9ab3520c4b0d1118dc42e61255b87ccb2e2eba6f2e96ee7ef9014f
+MD5 89a98e3cf9f9b3e4a767b820484e8bf2 ChangeLog 1423
+RMD160 f8aa6aaa1c6cc00d23dd448e78f5ff25b81dcae8 ChangeLog 1423
+SHA256 65b2c935ff9ab3520c4b0d1118dc42e61255b87ccb2e2eba6f2e96ee7ef9014f ChangeLog 1423
 MISC metadata.xml 266 RMD160 ec474d4b2edebeccd738705e8717ecdb4aaca347 SHA1 2eb26e89e18770b3cc373ab290938a2aea6bce97 SHA256 2d1e8e22e242d00cd34f662e4d04d2e7d488951bd1e84fe3132d2b1ebd1b71d2
 MD5 f2e99271e391d686f969c3d65ac24562 metadata.xml 266
 RMD160 ec474d4b2edebeccd738705e8717ecdb4aaca347 metadata.xml 266
@@ -17,10 +25,13 @@ SHA256 2d1e8e22e242d00cd34f662e4d04d2e7d488951bd1e84fe3132d2b1ebd1b71d2 metadata
 MD5 09c6a71861ec01bf051528e96b76651b files/digest-cmus-2.1.0 235
 RMD160 a55cde314c80603ebb98468fbd26542662ba5203 files/digest-cmus-2.1.0 235
 SHA256 c40feb869833f7706be4e6c528e121c6b18fddeb0d275c0ad9695d8714f8a3a2 files/digest-cmus-2.1.0 235
+MD5 09c6a71861ec01bf051528e96b76651b files/digest-cmus-2.1.0-r1 235
+RMD160 a55cde314c80603ebb98468fbd26542662ba5203 files/digest-cmus-2.1.0-r1 235
+SHA256 c40feb869833f7706be4e6c528e121c6b18fddeb0d275c0ad9695d8714f8a3a2 files/digest-cmus-2.1.0-r1 235
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFFvbnHNQqtfCuFneMRAovUAJ9tGEDhWeFHfWofUewkBqseaPTn/wCeORti
-+R8CNFCJnko5anLuK/Ynyso=
-=TiuT
+iD8DBQFF0xbzNQqtfCuFneMRAqcTAJ9gzHuiiOz2sZHAG2j8/6y5gIeUrgCfY29K
+bRn39/LT/ceYFsaMZAgIIWQ=
+=7hNG
 -----END PGP SIGNATURE-----
diff --git a/media-sound/cmus/cmus-2.1.0-r1.ebuild b/media-sound/cmus/cmus-2.1.0-r1.ebuild
new file mode 100644 (file)
index 0000000..7ddcb14
--- /dev/null
@@ -0,0 +1,86 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/media-sound/cmus/cmus-2.1.0-r1.ebuild,v 1.1 2007/02/14 14:04:53 opfer Exp $
+
+inherit eutils multilib
+
+DESCRIPTION="A ncurses based music player with plugin support for many formats"
+HOMEPAGE="http://onion.dynserv.net/~timo/cmus.html"
+SRC_URI="http://onion.dynserv.net/~timo/files/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="aac alsa ao arts debug flac mad mikmod modplug mp3 mp4 musepack oss vorbis"
+
+DEPEND="sys-libs/ncurses
+       alsa? ( >=media-libs/alsa-lib-1.0.11 )
+       ao? (  media-libs/libao )
+       arts? ( kde-base/arts )
+       flac? ( media-libs/flac )
+       mad? ( >=media-libs/libmad-0.14 )
+       mikmod? ( media-libs/libmikmod )
+       modplug? ( >=media-libs/libmodplug-0.7 )
+       mp3? ( >=media-libs/libmad-0.14 )
+       musepack? ( >=media-libs/libmpcdec-1.2 )
+       vorbis? ( >=media-libs/libvorbis-1.0 )
+       aac? ( media-libs/faad2 )
+       mp4? ( media-libs/libmp4v2
+               media-libs/faad2 )"
+RDEPEND="${DEPEND}"
+
+my_config() {
+       local value
+       use ${1} && value=y || value=n
+       myconf="${myconf} ${2}=${value}"
+}
+
+pkg_setup() {
+       if ! built_with_use sys-libs/ncurses unicode
+       then
+               ewarn
+               ewarn "\t sys-libs/ncurses compiled without the unicode USE flag."
+               ewarn "\t Please recompile sys-libs/ncurses with USE=unicode and emerge"
+               ewarn "\t cmus again if you experience any problems with UTF-8 or"
+               ewarn "\t wide characters."
+               ewarn
+               epause
+       fi
+}
+
+src_unpack(){
+       unpack ${A}
+       cd "${S}"
+       epatch "${FILESDIR}/${P}-faad-2.0.patch"
+}
+
+src_compile() {
+       local debuglevel myconf
+
+       use debug && debuglevel=2 || debuglevel=1
+
+       myconf="CONFIG_SUN=n"
+       my_config aac CONFIG_AAC
+       my_config ao CONFIG_AO
+       my_config alsa CONFIG_ALSA
+       my_config arts CONFIG_ARTS
+       my_config flac CONFIG_FLAC
+       my_config mad CONFIG_MAD
+       my_config mikmod CONFIG_MIKMOD
+       my_config mp3 CONFIG_MAD
+       my_config mp4 CONFIG_MP4
+       my_config modplug CONFIG_MODPLUG
+       my_config musepack CONFIG_MPC
+       my_config oss CONFIG_OSS
+       my_config vorbis CONFIG_VORBIS
+
+       # econf doesn't work, because configure wants "prefix" (and similar) without dashes
+       ./configure prefix=/usr ${myconf} libdir=/usr/$(get_libdir) DEBUG=$debuglevel || die "configure failed"
+
+       emake || die "emake failed"
+}
+
+src_install() {
+       emake DESTDIR="${D}" install || die "emake install failed"
+       dodoc AUTHORS README
+}
diff --git a/media-sound/cmus/files/cmus-2.1.0-faad-2.0.patch b/media-sound/cmus/files/cmus-2.1.0-faad-2.0.patch
new file mode 100644 (file)
index 0000000..d86fcc2
--- /dev/null
@@ -0,0 +1,301 @@
+diff --git a/aac.c b/aac.c
+index 727b705..4983ad4 100644
+--- a/aac.c
++++ b/aac.c
+@@ -24,7 +24,7 @@ #include "id3.h"
+ #include "comment.h"
+ #include "read_wrapper.h"
+-#include <neaacdec.h>
++#include <faad.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -41,12 +41,12 @@ struct aac_private {
+       int rbuf_pos;
+       unsigned char channels;
+-      unsigned long sample_rate;
++      uint32_t sample_rate;
+       char *overflow_buf;
+       int overflow_buf_len;
+-      NeAACDecHandle decoder; /* typedef void * */
++      faacDecHandle decoder;  /* typedef void * */
+ };
+ static inline int buffer_length(const struct input_plugin_data *ip_data)
+@@ -187,20 +187,20 @@ static int buffer_fill_frame(struct inpu
+ static int aac_open(struct input_plugin_data *ip_data)
+ {
+       struct aac_private *priv;
+-      NeAACDecConfigurationPtr neaac_cfg;
++      faacDecConfigurationPtr neaac_cfg;
+       int ret, n;
+       /* init private struct */
+       priv = xnew0(struct aac_private, 1);
+-      priv->decoder = NeAACDecOpen();
++      priv->decoder = faacDecOpen();
+       ip_data->private = priv;
+       /* set decoder config */
+-      neaac_cfg = NeAACDecGetCurrentConfiguration(priv->decoder);
++      neaac_cfg = faacDecGetCurrentConfiguration(priv->decoder);
+       neaac_cfg->outputFormat = FAAD_FMT_16BIT;       /* force 16 bit audio */
+       neaac_cfg->downMatrix = 1;                      /* 5.1 -> stereo */
+       neaac_cfg->dontUpSampleImplicitSBR = 0;         /* upsample, please! */
+-      NeAACDecSetConfiguration(priv->decoder, neaac_cfg);
++      faacDecSetConfiguration(priv->decoder, neaac_cfg);
+       /* find a frame */
+       if (buffer_fill_frame(ip_data) <= 0) {
+@@ -209,7 +209,7 @@ static int aac_open(struct input_plugin_
+       }
+       /* in case of a bug, make sure there is at least some data
+-       * in the buffer for NeAACDecInit() to work with.
++       * in the buffer for faacDecInit() to work with.
+        */
+       if (buffer_fill_min(ip_data, 256) <= 0) {
+               d_print("not enough data\n");
+@@ -218,10 +218,10 @@ static int aac_open(struct input_plugin_
+       }
+       /* init decoder, returns the length of the header (if any) */
+-      n = NeAACDecInit(priv->decoder, buffer_data(ip_data), buffer_length(ip_data),
++      n = faacDecInit(priv->decoder, buffer_data(ip_data), buffer_length(ip_data),
+               &priv->sample_rate, &priv->channels);
+       if (n < 0) {
+-              d_print("NeAACDecInit failed\n");
++              d_print("faacDecInit failed\n");
+               ret = -IP_ERROR_FILE_FORMAT;
+               goto out;
+       }
+@@ -233,7 +233,7 @@ static int aac_open(struct input_plugin_
+       d_print("sample rate %luhz, channels %u\n", priv->sample_rate, priv->channels);
+-      /*NeAACDecInitDRM(priv->decoder, priv->sample_rate, priv->channels);*/
++      /*faacDecInitDRM(priv->decoder, priv->sample_rate, priv->channels);*/
+       ip_data->sf = sf_rate(priv->sample_rate) | sf_channels(priv->channels) | sf_bits(16) | sf_signed(1);
+ #if defined(WORDS_BIGENDIAN)
+@@ -241,7 +241,7 @@ #if defined(WORDS_BIGENDIAN)
+ #endif
+       return 0;
+ out:
+-      NeAACDecClose(priv->decoder);
++      faacDecClose(priv->decoder);
+       free(priv);
+       return ret;
+ }
+@@ -250,7 +250,7 @@ static int aac_close(struct input_plugin
+ {
+       struct aac_private *priv = ip_data->private;
+-      NeAACDecClose(priv->decoder);
++      faacDecClose(priv->decoder);
+       free(priv);
+       ip_data->private = NULL;
+       return 0;
+@@ -265,7 +265,7 @@ static int decode_one_frame(struct input
+       struct aac_private *priv = ip_data->private;
+       unsigned char *aac_data;
+       unsigned int aac_data_size;
+-      NeAACDecFrameInfo frame_info;
++      faacDecFrameInfo frame_info;
+       char *sample_buf;
+       int bytes, rc;
+@@ -277,18 +277,18 @@ static int decode_one_frame(struct input
+       aac_data_size = buffer_length(ip_data);
+       /* aac data -> raw pcm */
+-      sample_buf = NeAACDecDecode(priv->decoder, &frame_info, aac_data, aac_data_size);
++      sample_buf = faacDecDecode(priv->decoder, &frame_info, aac_data, aac_data_size);
+       buffer_consume(ip_data, frame_info.bytesconsumed);
+       if (!sample_buf || frame_info.bytesconsumed <= 0) {
+-              d_print("fatal error: %s\n", NeAACDecGetErrorMessage(frame_info.error));
++              d_print("fatal error: %s\n", faacDecGetErrorMessage(frame_info.error));
+               errno = EINVAL;
+               return -1;
+       }
+       if (frame_info.error != 0) {
+-              d_print("frame error: %s\n", NeAACDecGetErrorMessage(frame_info.error));
++              d_print("frame error: %s\n", faacDecGetErrorMessage(frame_info.error));
+               return -2;
+       }
+@@ -395,7 +395,7 @@ out:
+ static int aac_duration(struct input_plugin_data *ip_data)
+ {
+       struct aac_private *priv = ip_data->private;
+-      NeAACDecFrameInfo frame_info;
++      faacDecFrameInfo frame_info;
+       int samples = 0, bytes = 0, frames = 0;
+       off_t file_size;
+       char *sample_buf;
+@@ -409,7 +409,7 @@ static int aac_duration(struct input_plu
+               if (buffer_fill_frame(ip_data) <= 0)
+                       break;
+-              sample_buf = NeAACDecDecode(priv->decoder, &frame_info,
++              sample_buf = faacDecDecode(priv->decoder, &frame_info,
+                       buffer_data(ip_data), buffer_length(ip_data));
+               if (frame_info.error == 0 && frame_info.samples > 0) {
+                       samples += frame_info.samples;
+diff --git a/configure b/configure
+index d1dce2d..a71d73d 100755
+--- a/configure
++++ b/configure
+@@ -174,14 +174,14 @@ check_waveout()
+ check_mp4()
+ {
+-      check_header neaacdec.h &&
++      check_header faad.h &&
+       check_library MP4 "" "-lmp4v2 -lfaad -lm"
+       return $?
+ }
+ check_aac()
+ {
+-      check_header neaacdec.h &&
++      check_header faad.h &&
+       check_library AAC "" "-lfaad -lm"
+       return $?
+ }
+diff --git a/mp4.c b/mp4.c
+index eb82ca7..ce1c542 100644
+--- a/mp4.c
++++ b/mp4.c
+@@ -23,7 +23,7 @@ #include "debug.h"
+ #include "file.h"
+ #include <mp4.h>
+-#include <neaacdec.h>
++#include <faad.h>
+ #include <errno.h>
+ #include <string.h>
+@@ -35,9 +35,9 @@ struct mp4_private {
+       int overflow_buf_len;
+       unsigned char channels;
+-      unsigned long sample_rate;
++      uint32_t sample_rate;
+-      NeAACDecHandle decoder;         /* typedef void * */
++      faacDecHandle decoder;          /* typedef void * */
+       struct {
+               MP4FileHandle handle;   /* typedef void * */
+@@ -88,7 +88,7 @@ static MP4TrackId mp4_get_track(MP4FileH
+ static int mp4_open(struct input_plugin_data *ip_data)
+ {
+       struct mp4_private *priv;
+-      NeAACDecConfigurationPtr neaac_cfg;
++      faacDecConfigurationPtr neaac_cfg;
+       unsigned char *buf;
+       unsigned int buf_size;
+@@ -101,13 +101,13 @@ static int mp4_open(struct input_plugin_
+       priv = xnew0(struct mp4_private, 1);
+       ip_data->private = priv;
+-      priv->decoder = NeAACDecOpen();
++      priv->decoder = faacDecOpen();
+       /* set decoder config */
+-      neaac_cfg = NeAACDecGetCurrentConfiguration(priv->decoder);
++      neaac_cfg = faacDecGetCurrentConfiguration(priv->decoder);
+       neaac_cfg->outputFormat = FAAD_FMT_16BIT;       /* force 16 bit audio */
+       neaac_cfg->downMatrix = 1;                      /* 5.1 -> stereo */
+-      NeAACDecSetConfiguration(priv->decoder, neaac_cfg);
++      faacDecSetConfiguration(priv->decoder, neaac_cfg);
+       /* open mpeg-4 file */
+       priv->mp4.handle = MP4Read(ip_data->filename, 0);
+@@ -131,15 +131,14 @@ static int mp4_open(struct input_plugin_
+       buf_size = 0;
+       if (!MP4GetTrackESConfiguration(priv->mp4.handle, priv->mp4.track, &buf, &buf_size)) {
+               /* failed to get mpeg-4 audio config... this is ok.
+-               * NeAACDecInit2() will simply use default values instead.
++               * faacDecInit2() will simply use default values instead.
+                */
+               buf = NULL;
+               buf_size = 0;
+       }
+-      /* init decoder according to mpeg-4 audio config
+-       * cast to signed char because char is unsigned by default on ppc */
+-      if ((signed char)NeAACDecInit2(priv->decoder, buf, buf_size, &priv->sample_rate, &priv->channels) < 0) {
++      /* init decoder according to mpeg-4 audio config */
++      if (faacDecInit2(priv->decoder, buf, buf_size, &priv->sample_rate, &priv->channels) < 0) {
+               free(buf);
+               goto out;
+       }
+@@ -159,7 +158,7 @@ out:
+       if (priv->mp4.handle)
+               MP4Close(priv->mp4.handle);
+       if (priv->decoder)
+-              NeAACDecClose(priv->decoder);
++              faacDecClose(priv->decoder);
+       free(priv);
+       return -IP_ERROR_FILE_FORMAT;
+ }
+@@ -174,7 +173,7 @@ static int mp4_close(struct input_plugin
+               MP4Close(priv->mp4.handle);
+       if (priv->decoder)
+-              NeAACDecClose(priv->decoder);
++              faacDecClose(priv->decoder);
+       free(priv);
+       ip_data->private = NULL;
+@@ -191,7 +190,7 @@ static int decode_one_frame(struct input
+       struct mp4_private *priv;
+       unsigned char *aac_data = NULL;
+       unsigned int aac_data_len = 0;
+-      NeAACDecFrameInfo frame_info;
++      faacDecFrameInfo frame_info;
+       char *sample_buf;
+       int bytes;
+@@ -217,18 +216,18 @@ static int decode_one_frame(struct input
+               return -1;
+       }
+-      sample_buf = NeAACDecDecode(priv->decoder, &frame_info, aac_data, aac_data_len);
++      sample_buf = faacDecDecode(priv->decoder, &frame_info, aac_data, aac_data_len);
+       free(aac_data);
+       if (!sample_buf || frame_info.bytesconsumed <= 0) {
+-              d_print("fatal error: %s\n", NeAACDecGetErrorMessage(frame_info.error));
++              d_print("fatal error: %s\n", faacDecGetErrorMessage(frame_info.error));
+               errno = EINVAL;
+               return -1;
+       }
+       if (frame_info.error != 0) {
+-              d_print("frame error: %s\n", NeAACDecGetErrorMessage(frame_info.error));
++              d_print("frame error: %s\n", faacDecGetErrorMessage(frame_info.error));
+               return -2;
+       }
+@@ -244,8 +243,7 @@ static int decode_one_frame(struct input
+       bytes = frame_info.samples * 2;
+       if (bytes > count) {
+-              /* decoded too much; keep overflow. this only happens
+-               * when we've called NeAACDecDecode_bugfree() */
++              /* decoded too much; keep overflow. */
+               priv->overflow_buf = sample_buf + count;
+               priv->overflow_buf_len = bytes - count;
+               memcpy(buffer, sample_buf, count);
diff --git a/media-sound/cmus/files/digest-cmus-2.1.0-r1 b/media-sound/cmus/files/digest-cmus-2.1.0-r1
new file mode 100644 (file)
index 0000000..98c2b51
--- /dev/null
@@ -0,0 +1,3 @@
+MD5 11ca53a05442ee073b6e790e957b1433 cmus-2.1.0.tar.bz2 146956
+RMD160 f359c8929dd616855aedbe2c4d1d2e252a8946ca cmus-2.1.0.tar.bz2 146956
+SHA256 fe47e258918526b9e1b2cd7081d73654af8c326f0f3b0fabe450b805b78423c0 cmus-2.1.0.tar.bz2 146956