summaryrefslogtreecommitdiff
path: root/debian/create-ma-tree.sh
diff options
context:
space:
mode:
authorMichael Gilbert <mgilbert@debian.org>2012-12-16 01:04:52 +0000
committerIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:44 +0400
commit76c556de8989df3905e066f13cd91190093402ff (patch)
treef417353f49aa7ad35745c6cdd6148f1651b0a903 /debian/create-ma-tree.sh
parent1058def8e7827e56ce4a70afb4aeacb5dc44148f (diff)
downloadoss4-76c556de8989df3905e066f13cd91190093402ff.tar.gz
Imported Debian patch 4.2-build2006-2+deb7u1debian/4.2-build2006-2+deb7u1
Diffstat (limited to 'debian/create-ma-tree.sh')
-rw-r--r--debian/create-ma-tree.sh139
1 files changed, 139 insertions, 0 deletions
diff --git a/debian/create-ma-tree.sh b/debian/create-ma-tree.sh
new file mode 100644
index 0000000..ac9ff56
--- /dev/null
+++ b/debian/create-ma-tree.sh
@@ -0,0 +1,139 @@
+#!/bin/bash
+# Extract OSS4.2 core & drivers modules.
+# based on http://www.arklinux.org/~bero/oss2kconfig
+
+usage() {
+ [ -z "$1" ] || echo $1
+ echo "Usage:"
+ echo "$0 PATH_TO_NEWDIR PATH_TO_OSS"
+ exit 1
+}
+
+[ "$#" != 2 ] && usage
+#[ ! -f "$1"/Kbuild ] && usage "$1 does not appear to be a kernel source tree"
+[ ! -d "$2"/oss ] && usage "$2 does not appear to be a OSS source tree"
+
+NEWDIR=`pwd`"/$1"
+OSSDIR=`pwd`"/$2"
+
+mkdir -p $NEWDIR/core $NEWDIR/drivers $NEWDIR/include
+
+cd $OSSDIR
+
+# Remove sparc/solaris stuff
+rm -rf kernel/drv/osscore
+rm -rf kernel/drv/oss_audiocs
+rm -rf kernel/drv/oss_sadasupport
+
+# Move bits into the kernel tree...
+cp -L include/soundcard.h "$NEWDIR"/include
+cp -L include/oss_userdev_exports.h "$NEWDIR"/include
+
+cp -L kernel/OS/Linux/*.[ch] "$NEWDIR"/core/
+cp -L kernel/OS/Linux/wrapper/*.[ch] "$NEWDIR"/core/
+cp -L setup/Linux/oss/build/*.inc "$NEWDIR"/drivers/
+cp -L setup/Linux/oss/build/* "$NEWDIR"/core/
+rm "$NEWDIR"/core/*.inc
+rm "$NEWDIR"/core/install.sh
+cp -rL kernel/framework/include/* "$NEWDIR"/core/
+mv "$NEWDIR"/core/osscore.c "$NEWDIR"/core/oss_core.c
+
+SOURCES=""
+SRCCOUNT=0
+for i in ac97 audio midi midi_stubs mixer osscore remux sndstat uart401 vmix_core; do
+ i="kernel/framework/$i"
+ [ -d "$i" ] || continue
+ NAME="`basename $i`"
+ pushd "$i"
+ for j in `ls *.c`; do
+ SOURCES="$SOURCES $j"
+ SRCCOUNT=$((SRCCOUNT + 1))
+ done
+ popd
+ rm -f "$i"/*.man "$i"/Makefile
+ cp -L "$i"/* "$NEWDIR"/core/
+done
+OBJS="os_linux.o `echo $SOURCES |sed -e 's,\.c,.o,g'`"
+cat >"$NEWDIR"/core/Makefile <<EOF
+MULTIARCH_PATH = /usr/include/\$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+EXTRA_CFLAGS = -I\$(KBUILD_EXTMOD) -mhard-float -isystem /usr/include -isystem \$(MULTIARCH_PATH)
+obj-m += osscore.o
+osscore-objs := oss_core.o $OBJS
+EOF
+
+# This is somewhat ugly, but unavoidable -- parts of OSS need those defines and
+# access to system includes while osscore.c can't be compiled with them...
+for i in $OBJS; do
+ echo "CFLAGS_$i = -isystem /usr/include -isystem \$(MULTIARCH_PATH) -D_KERNEL" >>"$NEWDIR"/core/Makefile
+done
+
+
+cat >"$NEWDIR"/drivers/Makefile <<EOF
+osscore_symbols.inc:
+ echo "static const struct modversion_info ____versions[]" >> osscore_symbols.inc
+ echo " __attribute__((used))" >> osscore_symbols.inc
+ echo "__attribute__((section(\"__versions\"))) = {" >> osscore_symbols.inc
+ sed -e "s:^:{:" -e "s:\t:, \":" -e "s:\t\(.\)*:\"},:" < Module.symvers >> osscore_symbols.inc
+ echo "};" >> osscore_symbols.inc
+
+MULTIARCH_PATH = /usr/include/\$(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+EXTRA_CFLAGS=-D_KERNEL -I\$(KBUILD_EXTMOD)/../core -I\$(KBUILD_EXTMOD) -isystem /usr/include -isystem \$(MULTIARCH_PATH) -mhard-float
+EOF
+
+# Merge the drivers...
+for i in kernel/drv/*; do
+ [ -d "$i" ] || continue
+ NAME="`basename $i`"
+ DEV="`echo $NAME | tr a-z A-Z`"
+ pushd $i
+ SOURCES=""
+ SRCCOUNT=0
+ for j in `ls *.c`; do
+ if [ "$j" = "$NAME.c" ]; then
+ mv $j ${NAME}driver.c
+ SOURCES="$SOURCES ${NAME}driver.c"
+ else
+ SOURCES="$SOURCES $j"
+ fi
+ SRCCOUNT=$((SRCCOUNT + 1))
+ done
+ popd
+ if [ -e target/build/"$NAME".c ]; then
+ cp target/build/"$NAME".c "$NEWDIR"/drivers/${NAME}module.c
+ SOURCES="$SOURCES ${NAME}module.c"
+ SRCCOUNT=$((SRCCOUNT + 1))
+ fi
+
+ rm -f "$i"/*.man "$i"/Makefile
+ cp -L "$i"/* "$NEWDIR"/drivers/
+ if [ "$SRCCOUNT" = "1" ]; then
+ echo "obj-m += ${SOURCES/.c/.o}" >>"$NEWDIR"/drivers/Makefile
+ else
+ echo "obj-m += $NAME.o" >>"$NEWDIR"/drivers/Makefile
+ echo "$NAME-objs := `echo $SOURCES |sed -e 's,\.c,.o,g'`" >>"$NEWDIR"/drivers/Makefile
+ fi
+done
+rm -rf "$NEWDIR"/drivers/*.o
+
+
+# Main Makefile
+#echo 'obj-m += core/ drivers/ ' > "$NEWDIR"/Makefile
+
+# Adjust OSS files to some changed header file locations
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,"soundcard.h","../include/soundcard.h",g;s,../include/internals/,,g;s,"../include/sys/soundcard.h","../include/soundcard.h",g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,<oss_userdev_exports.h>,"../include/oss_userdev_exports.h",g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,"oss_exports.h",<ossddk/oss_exports.h>,g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,"ossddk.h",<ossddk/ossddk.h>,g'
+sed -i -e 's,kernel/OS/Linux/wrapper/wrap.h,wrap.h,g' "$NEWDIR"/core/os.h
+sed -i -e 's,#include "ubuntu_version_hack.inc",,g' "$NEWDIR"/core/oss_core.c
+
+# Don't trust OSS_LITTLE_ENDIAN & OSS_BIG_ENDIAN
+sed -i -e '/^#define AUDIO_CORE_H/a\#include <endian.h>' "$NEWDIR"/core/audio_core.h
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifdef OSS_BIG_ENDIAN,#if __BYTE_ORDER == __BIG_ENDIAN,g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifndef OSS_BIG_ENDIAN,#if __BYTE_ORDER != __BIG_ENDIAN,g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifdef OSS_LITTLE_ENDIAN,#if __BYTE_ORDER == __LITTLE_ENDIAN,g'
+find "$NEWDIR"/ -type f |xargs sed -i -e 's,#ifndef OSS_LITTLE_ENDIAN,#if __BYTE_ORDER != __LITTLE_ENDIAN,g'
+
+# OSS4 drivers need to depend on OSS4 core and not OSS3 from the kernel
+ln -sf ../core/Module.symvers "$NEWDIR"/drivers/Module.symvers
+