Переглянути джерело

+ wavopenal example to play a wav file by Dmitry Boyarintsev (mantis #16961)
* only compile madopenal.pas for platforms for which the "mad" package
gets compiled

git-svn-id: trunk@15610 -

Jonas Maebe 15 роки тому
батько
коміт
e56f5d9462

+ 1 - 0
.gitattributes

@@ -4629,6 +4629,7 @@ packages/openal/examples/Makefile svneol=native#text/plain
 packages/openal/examples/Makefile.fpc svneol=native#text/plain
 packages/openal/examples/captureplaybackopenal.pas svneol=native#text/plain
 packages/openal/examples/madopenal.pas svneol=native#text/plain
+packages/openal/examples/wavopenal.pas svneol=native#text/plain
 packages/openal/fpmake.pp svneol=native#text/plain
 packages/openal/src/alch.inc svneol=native#text/plain
 packages/openal/src/alexth.inc svneol=native#text/plain

+ 121 - 149
packages/openal/examples/Makefile

@@ -1,8 +1,8 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/12/11]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/07/18]
 #
 default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
 BSDs = freebsd netbsd openbsd darwin
 UNIXs = linux $(BSDs) solaris qnx haiku
 LIMIT83fs = go32v2 os2 emx watcom
@@ -265,184 +265,187 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_PROGRAMS+=madopenal captureplaybackopenal
+override TARGET_PROGRAMS+=captureplaybackopenal wavopenal  madopenal
 endif
 override INSTALL_FPCPACKAGE=y
 ifdef REQUIRE_UNITSDIR
@@ -787,6 +790,10 @@ ifeq ($(OS_TARGET),symbian)
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=symbian
 endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
 else
 ifeq ($(OS_TARGET),go32v1)
 PPUEXT=.pp1
@@ -1211,21 +1218,20 @@ else
 TAROPT=vz
 TAREXT=.tar.gz
 endif
-override REQUIRE_PACKAGES=rtl openal mad oggvorbis a52 dts modplug matroska
+override REQUIRE_PACKAGES=rtl openal oggvorbis a52 dts modplug matroska
 ifeq ($(FULL_TARGET),i386-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1235,17 +1241,16 @@ endif
 ifeq ($(FULL_TARGET),i386-win32)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1255,7 +1260,6 @@ endif
 ifeq ($(FULL_TARGET),i386-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1265,7 +1269,6 @@ endif
 ifeq ($(FULL_TARGET),i386-beos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1275,7 +1278,6 @@ endif
 ifeq ($(FULL_TARGET),i386-haiku)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1285,7 +1287,6 @@ endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1295,7 +1296,6 @@ endif
 ifeq ($(FULL_TARGET),i386-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1305,7 +1305,6 @@ endif
 ifeq ($(FULL_TARGET),i386-qnx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1315,7 +1314,6 @@ endif
 ifeq ($(FULL_TARGET),i386-netware)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1325,7 +1323,6 @@ endif
 ifeq ($(FULL_TARGET),i386-openbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1335,7 +1332,6 @@ endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1345,7 +1341,6 @@ endif
 ifeq ($(FULL_TARGET),i386-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1355,7 +1350,6 @@ endif
 ifeq ($(FULL_TARGET),i386-emx)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1365,7 +1359,6 @@ endif
 ifeq ($(FULL_TARGET),i386-watcom)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1375,7 +1368,6 @@ endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1385,7 +1377,6 @@ endif
 ifeq ($(FULL_TARGET),i386-wince)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1395,7 +1386,6 @@ endif
 ifeq ($(FULL_TARGET),i386-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1405,7 +1395,15 @@ endif
 ifeq ($(FULL_TARGET),i386-symbian)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
+REQUIRE_PACKAGES_OGGVORBIS=1
+REQUIRE_PACKAGES_A52=1
+REQUIRE_PACKAGES_DTS=1
+REQUIRE_PACKAGES_MODPLUG=1
+REQUIRE_PACKAGES_MATROSKA=1
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENAL=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1415,17 +1413,16 @@ endif
 ifeq ($(FULL_TARGET),m68k-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1435,7 +1432,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1445,7 +1441,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1455,7 +1450,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-atari)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1465,7 +1459,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1475,7 +1468,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1485,7 +1477,6 @@ endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1495,17 +1486,16 @@ endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1515,7 +1505,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1525,7 +1514,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1535,7 +1523,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1545,7 +1532,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1555,7 +1541,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1565,17 +1550,16 @@ endif
 ifeq ($(FULL_TARGET),sparc-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1585,7 +1569,6 @@ endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1595,7 +1578,6 @@ endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1605,17 +1587,16 @@ endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1625,7 +1606,6 @@ endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1635,7 +1615,6 @@ endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1645,7 +1624,6 @@ endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1655,7 +1633,6 @@ endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1665,17 +1642,16 @@ endif
 ifeq ($(FULL_TARGET),arm-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1685,7 +1661,6 @@ endif
 ifeq ($(FULL_TARGET),arm-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1695,7 +1670,6 @@ endif
 ifeq ($(FULL_TARGET),arm-wince)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1705,7 +1679,6 @@ endif
 ifeq ($(FULL_TARGET),arm-gba)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1715,7 +1688,6 @@ endif
 ifeq ($(FULL_TARGET),arm-nds)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1725,7 +1697,6 @@ endif
 ifeq ($(FULL_TARGET),arm-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1735,7 +1706,6 @@ endif
 ifeq ($(FULL_TARGET),arm-symbian)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1745,17 +1715,16 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1765,7 +1734,6 @@ endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1775,7 +1743,6 @@ endif
 ifeq ($(FULL_TARGET),avr-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1785,17 +1752,16 @@ endif
 ifeq ($(FULL_TARGET),armeb-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
@@ -1805,12 +1771,12 @@ endif
 ifeq ($(FULL_TARGET),mipsel-linux)
 REQUIRE_PACKAGES_RTL=1
 REQUIRE_PACKAGES_OPENAL=1
-REQUIRE_PACKAGES_MAD=1
 REQUIRE_PACKAGES_OGGVORBIS=1
 REQUIRE_PACKAGES_A52=1
 REQUIRE_PACKAGES_DTS=1
 REQUIRE_PACKAGES_MODPLUG=1
 REQUIRE_PACKAGES_MATROSKA=1
+REQUIRE_PACKAGES_MAD=1
 endif
 ifdef REQUIRE_PACKAGES_RTL
 PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
@@ -1864,32 +1830,6 @@ ifdef UNITDIR_OPENAL
 override COMPILER_UNITDIR+=$(UNITDIR_OPENAL)
 endif
 endif
-ifdef REQUIRE_PACKAGES_MAD
-PACKAGEDIR_MAD:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mad/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_MAD),)
-ifneq ($(wildcard $(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)),)
-UNITDIR_MAD=$(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)
-else
-UNITDIR_MAD=$(PACKAGEDIR_MAD)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_MAD)/$(FPCMADE):
-	$(MAKE) -C $(PACKAGEDIR_MAD) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_MAD)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_MAD=
-UNITDIR_MAD:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mad/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_MAD),)
-UNITDIR_MAD:=$(firstword $(UNITDIR_MAD))
-else
-UNITDIR_MAD=
-endif
-endif
-ifdef UNITDIR_MAD
-override COMPILER_UNITDIR+=$(UNITDIR_MAD)
-endif
-endif
 ifdef REQUIRE_PACKAGES_OGGVORBIS
 PACKAGEDIR_OGGVORBIS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /oggvorbis/Makefile.fpc,$(PACKAGESDIR))))))
 ifneq ($(PACKAGEDIR_OGGVORBIS),)
@@ -2020,6 +1960,32 @@ ifdef UNITDIR_MATROSKA
 override COMPILER_UNITDIR+=$(UNITDIR_MATROSKA)
 endif
 endif
+ifdef REQUIRE_PACKAGES_MAD
+PACKAGEDIR_MAD:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mad/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_MAD),)
+ifneq ($(wildcard $(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)),)
+UNITDIR_MAD=$(PACKAGEDIR_MAD)/units/$(TARGETSUFFIX)
+else
+UNITDIR_MAD=$(PACKAGEDIR_MAD)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_MAD)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_MAD) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_MAD)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_MAD=
+UNITDIR_MAD:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mad/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_MAD),)
+UNITDIR_MAD:=$(firstword $(UNITDIR_MAD))
+else
+UNITDIR_MAD=
+endif
+endif
+ifdef UNITDIR_MAD
+override COMPILER_UNITDIR+=$(UNITDIR_MAD)
+endif
+endif
 ifndef NOCPUDEF
 override FPCOPTDEF=$(ARCH)
 endif
@@ -2342,6 +2308,9 @@ endif
 ifdef EXEFILES
 override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
 endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+endif
 ifdef CLEAN_UNITS
 override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
 endif
@@ -2388,6 +2357,9 @@ endif
 ifdef CLEANRSTFILES
 	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
 endif
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
 endif
 	-$(DELTREE) units
 	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)

+ 6 - 2
packages/openal/examples/Makefile.fpc

@@ -3,10 +3,14 @@
 #
 
 [target]
-programs=madopenal captureplaybackopenal
+programs=captureplaybackopenal wavopenal
+programs_linux=madopenal
+programs_win32=madopenal
 
 [require]
-packages=openal mad oggvorbis a52 dts modplug matroska
+packages=openal oggvorbis a52 dts modplug matroska
+packages_linux=mad
+packages_win32=mad
 
 [install]
 fpcpackage=y

+ 330 - 0
packages/openal/examples/wavopenal.pas

@@ -0,0 +1,330 @@
+(* WavOpenAL - OpenAL wave playing example
+
+ Copyright (c) 2010 Dmitry Boyarintsev
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+    1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+
+    2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+
+    3. This notice may not be removed or altered from any source
+    distribution.
+
+  WaveOpenAL is based on MadOpenAL playing sample.
+  Yhe wavopenal program accepts a single .wav file name as a parameter and
+  plays it using openal until the end.
+
+*)
+program wavopenal;
+
+{$mode objfpc}
+
+uses
+  classes, sysutils, openal;
+
+// WAVE UTILS   
+  
+type
+  TRiffHeader = packed record
+    ID      : array [0..3] of char;
+    Size    : LongWord;
+    Format  : array [0..3] of char;
+  end;
+
+  TWaveFormat = packed record
+    ID            : array [0..3] of char;
+    Size          : LongWord;
+    Format        : Word;
+    Channels      : Word;
+    SampleRate    : LongWord;
+    ByteRate      : LongWord;
+    BlockAlign    : Word;
+    BitsPerSample : Word;
+  end;
+
+  TDataChunk = packed record
+    Id      : array [0..3] of char;
+    Size    : LongWord;
+  end;
+
+type
+
+  { TWaveReader }
+
+  TWaveReader = class(TObject)
+  private
+    loaded    : Boolean;
+    chunkdata : TDataChunk;
+    chunkpos  : Int64;
+    pos       : Int64;
+    eof       : Boolean;
+    fStream   : TStream;
+
+  public
+    fmt   : TWaveFormat;
+    function LoadFromStream(AStream: TStream): Boolean;
+    function ReadBuf(var Buffer; BufferSize: Integer): Integer;
+  end;
+
+const
+  ID_RIFF = 'RIFF';
+  ID_WAVE = 'WAVE';
+  ID_fmt  = 'fmt ';
+  ID_data = 'data';
+
+{ TWaveReader }
+
+function TWaveReader.LoadFromStream(AStream:TStream):Boolean;
+var
+  riff  : TRiffHeader;
+begin
+  fStream:=AStream;
+  loaded:=True;
+  try
+    Result:=fStream.Read(riff, sizeof(riff))=sizeof(riff);
+    riff.Size:=LEtoN(riff.Size);
+    Result:=Result and (riff.ID=ID_RIFF) and (riff.Format=ID_WAVE);
+    if not Result then Exit;
+
+    Result:=fStream.Read(fmt, sizeof(fmt))=sizeof(fmt);
+    fmt.Size:=LEtoN(fmt.Size);
+    fmt.Format:=LEtoN(fmt.Format);
+    fmt.Channels:=LEtoN(fmt.Channels);
+    fmt.SampleRate:=LEtoN(fmt.SampleRate);
+    fmt.ByteRate:=LEtoN(fmt.ByteRate);
+    fmt.BlockAlign:=LEtoN(fmt.BlockAlign);
+    fmt.BitsPerSample:=LEtoN(fmt.BitsPerSample);
+    
+    Result:=fmt.ID=ID_fmt;
+    pos:=-1;
+  except
+    Result:=False;
+    Exit;
+  end;
+end;
+
+function Min(a,b: Integer): Integer;
+begin
+  if a<b then Result:=a
+  else Result:=b;
+end;
+
+function TWaveReader.ReadBuf(var Buffer;BufferSize:Integer):Integer;
+var
+  sz  : Integer;
+  p   : PByteArray;
+  i   : Integer;
+begin
+  FillChar(Buffer, BufferSize, 0);
+  Result:=0;
+  // all data read
+  if eof then Exit; 
+
+  p:=@Buffer;
+  i:=0;
+  while (not eof) and (i<bufferSize) do begin
+    if chunkpos>=chunkdata.Size then begin
+      if pos<0 then
+        fstream.Position:=sizeof(TRiffHeader)+Int64(fmt.Size)+sizeof(TDataChunk)
+     else
+        fstream.Position:=pos+chunkdata.size+SizeOf(chunkdata);
+
+      eof:=pos>=fStream.Size;
+      if not eof then begin
+        pos:=fStream.Position;
+        sz:=fstream.Read(chunkdata, sizeof(chunkdata));
+        chunkdata.Size:=LEtoN(chunkdata.Size);
+        if (sz<>sizeof(chunkdata)) or (chunkdata.Id<>ID_data) then
+          chunkpos:=chunkdata.Size
+        else
+          chunkpos:=0;
+      end;
+    end else begin
+      sz:=Min(BufferSize, chunkdata.Size-chunkpos);
+      fStream.Position:=pos+sizeof(chunkdata)+chunkpos;
+      sz:=fStream.Read(p[i], sz);
+      if sz<0 then Exit;
+      inc(chunkpos, sz);
+      inc(i, sz);
+    end;
+  end;
+  Result:=i;
+end;
+  
+// ------------------------ OPEN AL ----------------------
+
+var
+  source     : TStream;
+  codec_bs   : Longword;
+
+// openal
+const
+  // Note: if you lower the al_bufcount, then you have to modify the al_polltime also!
+  al_bufcount           = 4;
+  al_polltime           = 100;
+
+var
+  al_device   : PALCdevice;
+  al_context  : PALCcontext;
+  al_source   : ALuint;
+  al_format   : Integer;
+  al_buffers  : array[0..al_bufcount-1] of ALuint;
+  al_bufsize  : Longword;
+  al_readbuf  : Pointer;
+  al_rate     : Longword;
+  
+  wave       : TWaveReader;
+
+procedure alPlay;
+var
+  i: Integer;
+begin
+  alSourceStop(al_source);
+  alSourceRewind(al_source);
+  alSourcei(al_source, AL_BUFFER, 0);
+
+  for i := 0 to al_bufcount - 1 do
+  begin
+    if wave.ReadBuf(al_readbuf^, al_bufsize) = 0 then
+      Break;
+
+    alBufferData(al_buffers[i], al_format, al_readbuf, al_bufsize, al_rate);
+    alSourceQueueBuffers(al_source, 1, @al_buffers[i]);
+  end;
+
+  // Under windows, AL_LOOPING = AL_TRUE breaks queueing, no idea why
+  alSourcei(al_source, AL_LOOPING, AL_FALSE);
+  alSourcePlay(al_source);
+end;
+
+procedure alStop;
+begin
+  alSourceStop(al_source);
+  alSourceRewind(al_source);
+  alSourcei(al_source, AL_BUFFER, 0);
+end;
+
+function alProcess: Boolean;
+var
+  processed : ALint;
+  buffer    : ALuint;
+  sz        : Integer;
+begin
+  alGetSourcei(al_source, AL_BUFFERS_PROCESSED, processed);
+  while (processed > 0) and (processed <= al_bufcount) do
+  begin
+    Write('.');
+
+    alSourceUnqueueBuffers(al_source, 1, @buffer);
+
+    sz:=wave.ReadBuf(al_readbuf^, al_bufsize);
+    if sz <= 0 then
+    begin
+      Exit(False);
+    end;
+
+    alBufferData(buffer, al_format, al_readbuf, sz, al_rate);
+    alSourceQueueBuffers(al_source, 1, @buffer);
+
+    Dec(processed);
+  end;
+
+  Result := True;
+end;
+
+
+var
+  Filename: String;
+  queued  : Integer;
+  done    : Boolean;
+begin
+  // define codec
+  if (ParamCount<=0) or not FileExists(ParamStr(1)) then begin
+    writeln('please specify .wav file name');
+    Exit;
+  end;
+  FileName:=ParamStr(1);
+
+  source := TFileStream.Create(Filename, fmOpenRead);
+
+  // inittialize codec
+  wave:=TWaveReader.Create;
+  if not wave.LoadFromStream(source) then begin
+    writeln('unable to read WAVE format');
+    Exit;
+  end;
+  if wave.fmt.Format<>1 then begin
+    writeln('WAVE file is using compression. Cannot play sorry. Please provide uncompressed .wav');
+    Exit;
+  end;
+  if wave.fmt.Channels=2 then begin
+    if wave.fmt.BitsPerSample=8 then al_format:=AL_FORMAT_STEREO8
+    else al_format:=AL_FORMAT_STEREO16
+  end else begin
+    if wave.fmt.BitsPerSample=8 then al_format:=AL_FORMAT_MONO8
+    else al_format:=AL_FORMAT_MONO16
+  end;
+  
+  codec_bs:=2*wave.fmt.Channels;
+
+  //al_bufsize := 20000 - (20000 mod codec_bs);
+  al_bufsize := 20000 - (20000 mod codec_bs);
+  al_rate:=wave.fmt.SampleRate;
+  WriteLn('Blocksize    : ', codec_bs);
+  WriteLn('Rate         : ', wave.fmt.SampleRate);
+  WriteLn('Channels     : ', wave.fmt.Channels);
+  WriteLn('OpenAL Buffers     : ', al_bufcount);
+  WriteLn('OpenAL Buffer Size : ', al_bufsize);
+
+  // init openal
+  al_device := alcOpenDevice(nil);
+  al_context := alcCreateContext(al_device, nil);
+  alcMakeContextCurrent(al_context);
+
+  alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED);
+  alGenSources(1, @al_source);
+  alGenBuffers(al_bufcount, @al_buffers);
+
+  GetMem(al_readbuf, al_bufsize);
+
+
+  // play loop
+  alPlay;
+
+  done:=False;
+  queued:=0;
+  repeat
+    if alProcess then begin
+      alGetSourcei(al_source, AL_BUFFERS_QUEUED, queued);
+      done:=queued=0;
+    end;
+    Sleep(al_polltime);
+  until done;
+
+  alStop;
+
+  // finalize openal
+  alDeleteSources(1, @al_source);
+  alDeleteBuffers(al_bufcount, @al_buffers);
+  alcDestroyContext(al_context);
+  alcCloseDevice(al_device);
+  FreeMem(al_readbuf);
+
+
+  // finalize codec
+  wave.Free;
+  
+  // close file
+  source.Free;
+end.