Added libmikmod-3.1.12 build template.

--HG--
extra : convert_revision : c0cdc89d245897ebfcc77d7a56f76bc1214b19e6
This commit is contained in:
Juan RP 2009-12-25 22:39:34 +01:00
parent 61cb3dadb2
commit 33965b51bc
9 changed files with 270 additions and 0 deletions

1
srcpkgs/libmikmod-devel Symbolic link
View file

@ -0,0 +1 @@
libmikmod

View file

@ -0,0 +1,2 @@
abi_depends=">=3.1.12"
api_depends="${abi_depends}"

View file

@ -0,0 +1,18 @@
# Template file for 'libmikmod-devel'.
#
short_desc="${short_desc} (development files)"
long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
Add_dependency run glibc-devel
do_install()
{
mkdir -p ${DESTDIR}/usr/lib
mv ${SRCPKGDESTDIR}/usr/bin ${DESTDIR}/usr
mv ${SRCPKGDESTDIR}/usr/include ${DESTDIR}/usr
mv ${SRCPKGDESTDIR}/usr/lib/*.*a ${DESTDIR}/usr/lib
mv ${SRCPKGDESTDIR}/usr/lib/*.so ${DESTDIR}/usr/lib
mv ${SRCPKGDESTDIR}/usr/share ${DESTDIR}/usr
}

View file

@ -0,0 +1,45 @@
Date: Sun, 04 Jul 2004 11:53:23 +0200
From: Josselin Mouette
Subject: Re: sdl 64bit problem [PATCH]
Le sam, 03/07/2004 <20> 18:20 +0200, Hans-Frieder Vogt a <20>crit :
> Hi list,
>
> I found the problem that lead to the distorted sound in tuxracer on AMD64. It
> may have also been the cause for the other reported sound problems with SDL.
> The problem is not in SDL, but in SDL-mixer.
> There, music files (*.it, and probably others as well) are incorrectly read on
> all 64 bit architectures but Alpha, due to an incorrect data type definition.
> The attached patch should solve the problem for all 64 bit architectures on
> Linux, since at least cpp defines _LP64 and __LP64__ for them.
> _LP64 indicates that long ints and pointers are 64 bits, but integers are 32
> bits.
> I am not sure whether the usage of _LP64 is also standard for the commercial
> compilers, and for other Unixes, but at least Solaris 9 defines _LP64 in the
> 64 bit environment as well.
>
> Josselin,
> could you include this patch into your next debian packages?
--- include/mikmod.h.in 2007-12-15 01:24:19.000000000 -0800
+++ include/mikmod.h.in 2009-10-05 00:18:56.000000000 -0700
@@ -85,7 +85,7 @@
@DOES_NOT_HAVE_SIGNED@
-#if defined(__arch64__) || defined(__alpha) || defined(__x86_64)
+#if defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(_LP64)
/* 64 bit architectures */
typedef signed char SBYTE; /* 1 byte, signed */
--- include/mikmod_internals.h 2007-12-15 04:24:51.000000000 -0800
+++ include/mikmod_internals.h 2009-10-05 00:19:15.000000000 -0700
@@ -50,7 +50,7 @@
/*========== More type definitions */
/* SLONGLONG: 64bit, signed */
-#if defined (__arch64__) || defined(__alpha)
+#if defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(_LP64)
typedef long SLONGLONG;
#define NATIVE_64BIT_INT
#elif defined(__WATCOMC__)

View file

@ -0,0 +1,20 @@
Date: 15 Apr 2002 11:01:19 +0200
From: Guillaume Cottenceau <gc@mandrakesoft.com>
Unfortunately, I should have double checked that the following
fix (authored by Dave Goehrig <dave@cthulhu-burger.org>, not me),
was really in the CVS... it's not, as of stable 1.2.3 at least.
Please include it, it fixes a segfault on exiting a program which
disabled MOD music during its execution.
--- playercode/virtch_common.c 2007-12-15 01:26:53.000000000 -0800
+++ playercode/virtch_common.c 2009-10-05 00:37:12.000000000 -0700
@@ -347,7 +347,7 @@
void VC1_SampleUnload(SWORD handle)
{
- if (handle<MAXSAMPLEHANDLES) {
+ if (Samples && handle<MAXSAMPLEHANDLES) {
if (Samples[handle])
free(Samples[handle]);
Samples[handle]=NULL;

View file

@ -0,0 +1,14 @@
Yi-Huang Han - Wed Oct 24 21:55:47 PDT 2001
* Fixed MOD music volume when looping
--- playercode/mplayer.c 2009-10-05 00:19:59.000000000 -0700
+++ playercode/mplayer.c 2009-10-05 00:44:35.000000000 -0700
@@ -3019,7 +3019,7 @@
{
MUTEX_LOCK(vars);
if (pf)
- pf->volume=(volume<0)?0:(volume>128)?128:volume;
+ pf->volume=pf->initvolume=(volume<0)?0:(volume>128)?128:volume;
MUTEX_UNLOCK(vars);
}

View file

@ -0,0 +1,111 @@
This patch fixes "buffer overflow due to md_numchn - ID: 1630158"
--- playercode/mplayer.c 2007-12-15 01:26:28.000000000 -0800
+++ playercode/mplayer.c 2009-10-04 23:48:36.000000000 -0700
@@ -52,6 +52,8 @@
will wait */
/*static*/ MODULE *pf = NULL;
+#define NUMVOICES(mod) (md_sngchn < (mod)->numvoices ? md_sngchn : (mod)->numvoices)
+
#define HIGH_OCTAVE 2 /* number of above-range octaves */
static UWORD oldperiods[OCTAVE*2]={
@@ -248,14 +250,14 @@
MP_VOICE *a;
ULONG t,k,tvol,pp;
- for (t=0;t<md_sngchn;t++)
+ for (t=0;t<NUMVOICES(mod);t++)
if (((mod->voice[t].main.kick==KICK_ABSENT)||
(mod->voice[t].main.kick==KICK_ENV))&&
Voice_Stopped_internal(t))
return t;
tvol=0xffffffUL;t=-1;a=mod->voice;
- for (k=0;k<md_sngchn;k++,a++) {
+ for (k=0;k<NUMVOICES(mod);k++,a++) {
/* allow us to take over a nonexisting sample */
if (!a->main.s)
return k;
@@ -2249,12 +2251,12 @@
switch (dat) {
case 0x0: /* past note cut */
- for (t=0;t<md_sngchn;t++)
+ for (t=0;t<NUMVOICES(mod);t++)
if (mod->voice[t].master==a)
mod->voice[t].main.fadevol=0;
break;
case 0x1: /* past note off */
- for (t=0;t<md_sngchn;t++)
+ for (t=0;t<NUMVOICES(mod);t++)
if (mod->voice[t].master==a) {
mod->voice[t].main.keyoff|=KEY_OFF;
if ((!(mod->voice[t].venv.flg & EF_ON))||
@@ -2263,7 +2265,7 @@
}
break;
case 0x2: /* past note fade */
- for (t=0;t<md_sngchn;t++)
+ for (t=0;t<NUMVOICES(mod);t++)
if (mod->voice[t].master==a)
mod->voice[t].main.keyoff|=KEY_FADE;
break;
@@ -2318,7 +2320,7 @@
SAMPLE *s;
mod->totalchn=mod->realchn=0;
- for (channel=0;channel<md_sngchn;channel++) {
+ for (channel=0;channel<NUMVOICES(mod);channel++) {
aout=&mod->voice[channel];
i=aout->main.i;
s=aout->main.s;
@@ -2736,7 +2738,7 @@
if (a->dct!=DCT_OFF) {
int t;
- for (t=0;t<md_sngchn;t++)
+ for (t=0;t<NUMVOICES(mod);t++)
if ((!Voice_Stopped_internal(t))&&
(mod->voice[t].masterchn==channel)&&
(a->main.sample==mod->voice[t].main.sample)) {
@@ -2978,6 +2980,11 @@
if (!(mod->voice=(MP_VOICE*)_mm_calloc(md_sngchn,sizeof(MP_VOICE))))
return 1;
+ /* mod->numvoices was used during loading to clamp md_sngchn.
+ After loading it's used to remember how big mod->voice is.
+ */
+ mod->numvoices = md_sngchn;
+
Player_Init_internal(mod);
return 0;
}
@@ -3086,7 +3093,7 @@
pf->patbrk=0;
pf->vbtick=pf->sngspd;
- for (t=0;t<md_sngchn;t++) {
+ for (t=0;t<NUMVOICES(pf);t++) {
Voice_Stop_internal(t);
pf->voice[t].main.i=NULL;
pf->voice[t].main.s=NULL;
@@ -3111,7 +3118,7 @@
pf->patbrk=0;
pf->vbtick=pf->sngspd;
- for (t=0;t<md_sngchn;t++) {
+ for (t=0;t<NUMVOICES(pf);t++) {
Voice_Stop_internal(t);
pf->voice[t].main.i=NULL;
pf->voice[t].main.s=NULL;
@@ -3138,7 +3145,7 @@
pf->sngpos=pos;
pf->vbtick=pf->sngspd;
- for (t=0;t<md_sngchn;t++) {
+ for (t=0;t<NUMVOICES(pf);t++) {
Voice_Stop_internal(t);
pf->voice[t].main.i=NULL;
pf->voice[t].main.s=NULL;

View file

@ -0,0 +1,31 @@
--- loaders/load_xm.c 2004-01-21 18:43:53.000000000 +0100
+++ loaders/load_xm.c 2008-04-16 04:30:45.000000000 +0200
@@ -622,7 +622,8 @@
/* read the remainder of the header */
for(u=headend-_mm_ftell(modreader);u;u--) _mm_read_UBYTE(modreader);
- if(_mm_eof(modreader)) {
+ /* last instrument is at the end of file in version 0x0104 */
+ if(_mm_eof(modreader) && (mh->version<0x0104 || t<of.numins-1)) {
free(nextwav);free(wh);
nextwav=NULL;wh=NULL;
_mm_errno = MMERR_LOADING_SAMPLEINFO;
--- playercode/mloader.c 2004-01-21 18:43:53.000000000 +0100
+++ playercode/mloader.c 2008-04-16 04:30:45.000000000 +0200
@@ -450,10 +450,12 @@
if (!l->Init || l->Init()) {
_mm_rewind(modreader);
ok = l->Load(curious);
- /* propagate inflags=flags for in-module samples */
- for (t = 0; t < of.numsmp; t++)
- if (of.samples[t].inflags == 0)
- of.samples[t].inflags = of.samples[t].flags;
+ if (ok) {
+ /* propagate inflags=flags for in-module samples */
+ for (t = 0; t < of.numsmp; t++)
+ if (of.samples[t].inflags == 0)
+ of.samples[t].inflags = of.samples[t].flags;
+ }
} else
ok = 0;

View file

@ -0,0 +1,28 @@
# Template file for 'libmikmod'
pkgname=libmikmod
version=3.1.12
distfiles="${SOURCEFORGE_SITE}/mikmod/$pkgname-$version.tar.gz"
build_style=gnu_configure
configure_args="--disable-esd"
short_desc="MikMod Sound Library"
maintainer="Juan RP <xtraeme@gmail.com>"
checksum=891a2b780306e6ef86e381f459e71a085d4e7f56c970a879d3bf341c01bdfc32
long_desc="
The MikMod sound library is an excellent way for a programmer to
add music and sound effects to an application. It is a powerful
and flexible library, with a simple and easy-to-learn API.
Besides, the library is very portable and runs under a lot of
Unices, as well as under OS/2, MacOS and Windows. Third party
individuals also maintain ports on other systems, including MS-DOS,
and BeOS.
MikMod is able to play a wide range of module formats, as well as
digital sound files. It can take advantage of particular features
of your system, such as sound redirection over the network. And
due to its modular nature, the library can be extended to support
more sound or module formats, as well as new hardware or other
sound output capabilities, as they appear."
subpackages="$pkgname-devel"
Add_dependency run glibc