Accepting request 161264 from home:Zaitor:branches:multimedia:libs

Resub post review. Marcus came to the rescue and fixed the SR for me :-) Baselib also updated

OBS-URL: https://build.opensuse.org/request/show/161264
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/libmikmod?expand=0&rev=18
This commit is contained in:
Ismail Dönmez 2013-03-26 18:29:37 +00:00 committed by Git OBS Bridge
parent d48b1315d1
commit 20656fee72
15 changed files with 107 additions and 304 deletions

View File

@ -1,19 +1,17 @@
This patch fixes "buffer overflow due to md_numchn - ID: 1630158" Index: libmikmod-3.2.0/playercode/mplayer.c
Index: libmikmod-3.1.12/playercode/mplayer.c
=================================================================== ===================================================================
--- libmikmod-3.1.12.orig/playercode/mplayer.c --- libmikmod-3.2.0.orig/playercode/mplayer.c
+++ libmikmod-3.1.12/playercode/mplayer.c +++ libmikmod-3.2.0/playercode/mplayer.c
@@ -52,6 +52,8 @@ extern long int random(void); @@ -50,6 +50,8 @@ extern long int random(void);
will wait */ /* The currently playing module */
/*static*/ MODULE *pf = NULL; MODULE *pf = NULL;
+#define NUMVOICES(mod) (md_sngchn < (mod)->numvoices ? md_sngchn : (mod)->numvoices) +#define NUMVOICES(mod) (md_sngchn < (mod)->numvoices ? md_sngchn : (mod)->numvoices)
+ +
#define HIGH_OCTAVE 2 /* number of above-range octaves */ #define HIGH_OCTAVE 2 /* number of above-range octaves */
static UWORD oldperiods[OCTAVE*2]={ static UWORD oldperiods[OCTAVE*2]={
@@ -248,14 +250,14 @@ static int MP_FindEmptyChannel(MODULE *m @@ -246,14 +248,14 @@ static int MP_FindEmptyChannel(MODULE *m
MP_VOICE *a; MP_VOICE *a;
ULONG t,k,tvol,pp; ULONG t,k,tvol,pp;
@ -30,7 +28,7 @@ Index: libmikmod-3.1.12/playercode/mplayer.c
/* allow us to take over a nonexisting sample */ /* allow us to take over a nonexisting sample */
if (!a->main.s) if (!a->main.s)
return k; return k;
@@ -2249,12 +2251,12 @@ static void DoNNAEffects(MODULE *mod, MP @@ -2247,12 +2249,12 @@ static void DoNNAEffects(MODULE *mod, MP
switch (dat) { switch (dat) {
case 0x0: /* past note cut */ case 0x0: /* past note cut */
@ -45,7 +43,7 @@ Index: libmikmod-3.1.12/playercode/mplayer.c
if (mod->voice[t].master==a) { if (mod->voice[t].master==a) {
mod->voice[t].main.keyoff|=KEY_OFF; mod->voice[t].main.keyoff|=KEY_OFF;
if ((!(mod->voice[t].venv.flg & EF_ON))|| if ((!(mod->voice[t].venv.flg & EF_ON))||
@@ -2263,7 +2265,7 @@ static void DoNNAEffects(MODULE *mod, MP @@ -2261,7 +2263,7 @@ static void DoNNAEffects(MODULE *mod, MP
} }
break; break;
case 0x2: /* past note fade */ case 0x2: /* past note fade */
@ -54,16 +52,7 @@ Index: libmikmod-3.1.12/playercode/mplayer.c
if (mod->voice[t].master==a) if (mod->voice[t].master==a)
mod->voice[t].main.keyoff|=KEY_FADE; mod->voice[t].main.keyoff|=KEY_FADE;
break; break;
@@ -2318,7 +2320,7 @@ void pt_UpdateVoices(MODULE *mod, int ma @@ -2737,7 +2739,7 @@ void pt_NNA(MODULE *mod)
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 @@ void pt_NNA(MODULE *mod)
if (a->dct!=DCT_OFF) { if (a->dct!=DCT_OFF) {
int t; int t;
@ -72,8 +61,8 @@ Index: libmikmod-3.1.12/playercode/mplayer.c
if ((!Voice_Stopped_internal(t))&& if ((!Voice_Stopped_internal(t))&&
(mod->voice[t].masterchn==channel)&& (mod->voice[t].masterchn==channel)&&
(a->main.sample==mod->voice[t].main.sample)) { (a->main.sample==mod->voice[t].main.sample)) {
@@ -2978,6 +2980,11 @@ BOOL Player_Init(MODULE* mod) @@ -2979,6 +2981,11 @@ BOOL Player_Init(MODULE* mod)
if (!(mod->voice=(MP_VOICE*)_mm_calloc(md_sngchn,sizeof(MP_VOICE)))) if (!(mod->voice=(MP_VOICE*)MikMod_calloc(md_sngchn,sizeof(MP_VOICE))))
return 1; return 1;
+ /* mod->numvoices was used during loading to clamp md_sngchn. + /* mod->numvoices was used during loading to clamp md_sngchn.
@ -84,30 +73,12 @@ Index: libmikmod-3.1.12/playercode/mplayer.c
Player_Init_internal(mod); Player_Init_internal(mod);
return 0; return 0;
} }
@@ -3086,7 +3093,7 @@ MIKMODAPI void Player_NextPosition(void) @@ -3370,7 +3377,7 @@ MIKMODAPI int Player_QueryVoices(UWORD n
pf->patbrk=0;
pf->vbtick=pf->sngspd;
- for (t=0;t<md_sngchn;t++) { MUTEX_LOCK(vars);
+ for (t=0;t<NUMVOICES(pf);t++) { if (pf)
Voice_Stop_internal(t); - for (i = 0; i < md_sngchn; i++) {
pf->voice[t].main.i=NULL; + for (i = 0; i < numvoices; i++) {
pf->voice[t].main.s=NULL; vinfo [i].i = pf->voice[i].main.i;
@@ -3111,7 +3118,7 @@ MIKMODAPI void Player_PrevPosition(void) vinfo [i].s = pf->voice[i].main.s;
pf->patbrk=0; vinfo [i].panning = pf->voice [i].main.panning;
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 @@ MIKMODAPI void Player_SetPosition(UWORD
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

@ -1 +1 @@
libmikmod2 libmikmod3

View File

@ -1,49 +0,0 @@
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?
Index: libmikmod-3.1.12/include/mikmod.h.in
===================================================================
--- libmikmod-3.1.12.orig/include/mikmod.h.in
+++ libmikmod-3.1.12/include/mikmod.h.in
@@ -85,7 +85,7 @@ typedef char CHAR;
@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 */
Index: libmikmod-3.1.12/include/mikmod_internals.h
===================================================================
--- libmikmod-3.1.12.orig/include/mikmod_internals.h
+++ libmikmod-3.1.12/include/mikmod_internals.h
@@ -50,7 +50,7 @@ extern "C" {
/*========== 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

@ -1,35 +0,0 @@
Index: loaders/load_xm.c
===================================================================
--- loaders/load_xm.c.orig
+++ loaders/load_xm.c
@@ -636,7 +636,8 @@ static BOOL LoadInstruments(void)
_mm_fseek(modreader,ck,SEEK_SET);
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;
Index: playercode/mloader.c
===================================================================
--- playercode/mloader.c.orig
+++ playercode/mloader.c
@@ -450,10 +450,12 @@ MODULE* Player_LoadGeneric_internal(MREA
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

@ -1,37 +0,0 @@
Index: loaders/load_it.c
===================================================================
--- loaders/load_it.c.orig
+++ loaders/load_it.c
@@ -747,6 +747,8 @@ BOOL IT_Load(BOOL curious)
ih. name##end =_mm_read_UBYTE(modreader); \
ih. name##susbeg=_mm_read_UBYTE(modreader); \
ih. name##susend=_mm_read_UBYTE(modreader); \
+ if (ih. name##pts>= ITENVCNT) \
+ ih. name##pts = ITENVCNT-1; \
for(lp=0;lp<ITENVCNT;lp++) { \
ih. name##node[lp]=_mm_read_##type (modreader); \
ih. name##tick[lp]=_mm_read_I_UWORD(modreader); \
@@ -760,6 +762,8 @@ BOOL IT_Load(BOOL curious)
ih. name/**/end =_mm_read_UBYTE(modreader); \
ih. name/**/susbeg=_mm_read_UBYTE(modreader); \
ih. name/**/susend=_mm_read_UBYTE(modreader); \
+ if (ih. name/**/pts>= ITENVCNT) \
+ ih. name/**/pts = ITENVCNT-1; \
for(lp=0;lp<ITENVCNT;lp++) { \
ih. name/**/node[lp]=_mm_read_/**/type (modreader); \
ih. name/**/tick[lp]=_mm_read_I_UWORD(modreader); \
Index: loaders/load_ult.c
===================================================================
--- loaders/load_ult.c.orig
+++ loaders/load_ult.c
@@ -225,6 +225,10 @@ BOOL ULT_Load(BOOL curious)
for(t=0;t<of.numpat;t++)
of.patterns[(t*of.numchn)+u]=tracks++;
+ // SA37775
+ if (of.numchn>=UF_MAXCHAN)
+ of.numchn=UF_MAXCHAN - 1;
+
/* read pan position table for v1.5 and higher */
if(mh.id[14]>='3') {
for(t=0;t<of.numchn;t++) of.panning[t]=_mm_read_UBYTE(modreader)<<4;

View File

@ -1,34 +0,0 @@
Index: configure.in
===================================================================
--- configure.in.orig
+++ configure.in
@@ -134,9 +134,8 @@ AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
-AM_PROG_LIBTOOL
AC_PROG_MAKE_SET
-AC_PROG_RANLIB
+AC_PROG_LIBTOOL
# Check if makeinfo support html output. If it doesn't, pretend it's missing
# rather than failing rebuilding the documentation.
@@ -377,7 +376,7 @@ fi
AC_CHECK_FUNCS(setenv snprintf srandom)
AC_REPLACE_FUNCS(strcasecmp strdup strstr)
# Change extension, as we use libtool
-LIBOBJS="`echo $LIBOBJS|sed -e 's/\.o/\.lo/g'`"
+# LIBOBJS="`echo $LIBOBJS|sed -e 's/\.o/\.lo/g'`"
AC_HEADER_EGREP(srandom,math.h,AC_DEFINE(SRANDOM_IN_MATH_H))
Index: include/Makefile.am
===================================================================
--- include/Makefile.am.orig
+++ include/Makefile.am
@@ -1,3 +1,4 @@
### This @#!&*%$@ autoconf wants to have a mikmod_build.h.in file !!!
EXTRA_DIST = mikmod_internals.h mikmod_build.h.in
-include_HEADERS = mikmod.h
+include_HEADERS = mikmod.h mikmod_internals.h mikmod_build.h
+

View File

@ -1,22 +0,0 @@
Index: libmikmod-config.in
===================================================================
--- libmikmod-config.in.orig
+++ libmikmod-config.in
@@ -3,6 +3,7 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
exec_prefix_set=no
+libdir=@libdir@
usage="\
Usage: libmikmod-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--libs] [--cflags] [--ldadd]"
@@ -49,8 +50,7 @@ while test $# -gt 0 ; do
echo @LIB_LDADD@
;;
--libs)
- libdir=-L${exec_prefix}/lib
- echo $libdir -lmikmod @LIBRARY_LIB@
+ echo -L$libdir -lmikmod @LIBRARY_LIB@
;;
*)
echo "${usage}" 1>&2

View File

@ -1,30 +0,0 @@
Index: libmikmod.m4
===================================================================
--- libmikmod.m4.orig
+++ libmikmod.m4
@@ -64,6 +64,7 @@ dnl
#include <mikmod.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
char* my_strdup (char *str)
{
@@ -78,7 +79,7 @@ char* my_strdup (char *str)
return new_str;
}
-int main()
+int main(void)
{
int major,minor,micro;
int libmikmod_major_version,libmikmod_minor_version,libmikmod_micro_version;
@@ -118,7 +119,7 @@ int main()
(libmikmod_micro_version != LIBMIKMOD_REVISION))
{
printf("*** libmikmod header files (version %d.%d.%d) do not match\n",
- LIBMIKMOD_VERSION_MAJOR, LIBMIKMOD_VERSION_MINOR, LIBMIKMOD_REVISION);
+ (int)LIBMIKMOD_VERSION_MAJOR, (int)LIBMIKMOD_VERSION_MINOR, (int)LIBMIKMOD_REVISION);
printf("*** library (version %d.%d.%d)\n",
libmikmod_major_version, libmikmod_minor_version, libmikmod_micro_version);
}

View File

@ -1,22 +0,0 @@
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.
Index: libmikmod-3.1.12/playercode/virtch_common.c
===================================================================
--- libmikmod-3.1.12.orig/playercode/virtch_common.c
+++ libmikmod-3.1.12/playercode/virtch_common.c
@@ -347,7 +347,7 @@ void VC1_VoiceSetPanning(UBYTE voice,ULO
void VC1_SampleUnload(SWORD handle)
{
- if (handle<MAXSAMPLEHANDLES) {
+ if (Samples && handle<MAXSAMPLEHANDLES) {
if (Samples[handle])
free(Samples[handle]);
Samples[handle]=NULL;

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3ae3a28201ed314e8fecdfa3ab3ff6768d4c1e71ea9eda33d02c3164022e8492
size 495167

3
libmikmod-3.2.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:734c8490bbf9b0c587920b92414dcfa3c2267838a0cdf698d5f1fb6bba8f661e
size 873258

13
libmikmod-lp64.patch Normal file
View File

@ -0,0 +1,13 @@
Index: libmikmod-3.2.0/include/mikmod.h.in
===================================================================
--- libmikmod-3.2.0.orig/include/mikmod.h.in
+++ libmikmod-3.2.0/include/mikmod.h.in
@@ -85,7 +85,7 @@ typedef char CHAR;
@DOES_NOT_HAVE_SIGNED@
-#if defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__)
+#if defined(__arch64__) || defined(__alpha) || defined(__x86_64) || defined(__powerpc64__) || defined(_LP64)
/* 64 bit architectures */
typedef signed char SBYTE; /* 1 byte, signed */

View File

@ -1,3 +1,64 @@
-------------------------------------------------------------------
Tue Mar 26 16:49:21 UTC 2013 - meissner@suse.com
- merged / ported missing patches:
- libmikmod-lp64.patch: generic 64bit patch for 64LP architectures
- CVE-2007-6720.diff: perhaps missing upstream boundary checks (?)
- libmikmod-3.2.0-loopingvolume-fix.diff: seems missing upstream still
-------------------------------------------------------------------
Tue Nov 20 16:26:37 UTC 2012 - zaitor@opensuse.org
- Update to version 3.2.0:
+ MacOS X CoreAudio driver
+ Carbon support
+ Loader for ASYLUM Music Format v1.0 (.amf) modules, as used in
crusader games.
+ New function 'Player_QueryVoices' added, which is used to
return dynamic channel information about the module player.
+ Mixing with floating point output.
+ AIFF disk writer driver.
+ RPM support. To build a rpm, download the tar.gz, and run this:
% rpmbuild -tb libmikmod-3.2.0-beta2.tar.gz
+ New NAS driver (Network Audio System). Tested with nasd and
NCD X terminals.
+ MREADERs now have an iobase member (previously was a static
variable in mmio.c).
+ Created an example/ subdirectory, to hold programming examples.
+ Added functions to read from memory.
+ Renamed internal _mm_malloc function to MikMod_malloc, which
is now part of the API.
+ Raw samples can now be loaded using the new Sample_LoadRaw*
family of functions for sound effects.
+ PowerPC 64 support
+ ALSA driver is now working with "recent" ALSAs.
+ Change MDRIVER "char *" fields to "const char *".
+ Implement a fix to the ALSA driver in MIKMOD_DYNAMIC mode so
it will allow linking against libmikmod when "-Wl,--no-undefined"
is passed.
- Bugfixes:
+ The sun driver now compiles on solaris.
+ The wav output driver had problems on big endian systems.
+ A warning in libmikmod.m4 with autoconf 1.8 was fixed.
+ The 'card' argument, supported by the OSS driver was not
documented via the MDRIVER->CmdLineHelp string.
+ libmikmod-3.1.11-CVE-2010-2546,2971.diff
+ libmikmod-3.1.11-CVE-2009-3995,3996.diff
+ Now checking for linking against -lm.
+ Modified patch of libmikmod-CVE-2009-0179.patch.
+ Apply the libmikmod-CVE-2007-6720.patch.
+ Implement a fix for sprintf-of-list
+ Apply a patch for non-blocking opening of the OSS driver.
+ Fixed the prototypes of vc_callback.
+ Cast a vc_callback parameter to "unsigned char *" instead of "char *",
becuase the former is what it accepts.
+ Check for Samples' validatity in virtch_common.c.
+ Fix compilation on MSVC.
- Drop all patches, fixed upstream.
- Stop passing autoreconf, not needed anymore since we do not carry
any patches.
- Bump so name, following upstream changes.
------------------------------------------------------------------- -------------------------------------------------------------------
Fri Sep 7 13:18:34 UTC 2012 - coolo@suse.com Fri Sep 7 13:18:34 UTC 2012 - coolo@suse.com

View File

@ -1,7 +1,7 @@
# #
# spec file for package libmikmod # spec file for package libmikmod
# #
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@ -17,7 +17,7 @@
Name: libmikmod Name: libmikmod
%define lname libmikmod2 %define lname libmikmod3
BuildRequires: esound-devel BuildRequires: esound-devel
BuildRequires: libtool BuildRequires: libtool
%if 0%{suse_version} > 1220 %if 0%{suse_version} > 1220
@ -27,20 +27,14 @@ Url: http://mikmod.raphnet.net/
Summary: MikMod Sound Library Summary: MikMod Sound Library
License: LGPL-2.1+ License: LGPL-2.1+
Group: Development/Libraries/C and C++ Group: Development/Libraries/C and C++
Version: 3.1.12 Version: 3.2.0
Release: 0 Release: 0
Source: %{name}-%{version}.tar.bz2 Source: http://mikmod.shlomifish.org/files/%{name}-%{version}.tar.gz
Source1: %{name}-rpmlintrc Source1: %{name}-rpmlintrc
Source2: baselibs.conf Source2: baselibs.conf
Patch0: %{name}-3.1.12-CVE-2007-6720.diff Patch0: libmikmod-lp64.patch
Patch1: %{name}-3.1.12-CVE-2009-0179.diff Patch1: CVE-2007-6720.diff
Patch2: %{name}-3.1.12-64bit-fix.diff Patch2: libmikmod-3.2.0-loopingvolume-fix.diff
Patch3: %{name}-3.1.12-autotools.diff
Patch4: %{name}-3.1.12-config-fix.diff
Patch5: %{name}-3.1.12-conftest_fix.diff
Patch6: %{name}-3.1.12-exitcrash-fix.diff
Patch7: %{name}-3.1.12-loopingvolume-fix.diff
Patch8: %{name}-3.1.12-CVE-2009-3995,3996.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description %description
@ -97,17 +91,10 @@ mtm, xm, and it.
%prep %prep
%setup -q %setup -q
%patch0 -p1 %patch0 -p1
%patch1 %patch1 -p1
%patch2 -p1 %patch2 -p1
%patch3
%patch4
%patch5
%patch6 -p1
%patch7 -p1
%patch8
%build %build
autoreconf -f -i
%configure --disable-static --with-pic %configure --disable-static --with-pic
make %{?_smp_mflags} make %{?_smp_mflags}
@ -130,7 +117,7 @@ ln -f $RPM_BUILD_ROOT%{_includedir}/mikmod{,_build}.h
%files -n %lname %files -n %lname
%defattr(-,root,root) %defattr(-,root,root)
%doc COPYING.LIB COPYING.LESSER %doc COPYING.LIB COPYING.LESSER
%{_libdir}/libmikmod.so.2* %{_libdir}/libmikmod.so.3*
%files devel %files devel
%defattr(-,root,root) %defattr(-,root,root)