#!/usr/bin/zsh -f

TOP=/home/chmou/work/kernel

flags="-malign-jumps=1 -malign-loops=1 -malign-functions=1 -mpreferred-stack-boundary=2 -fshort-double -O -fomit-frame-pointer -pipe -s -m386"
dir_gen=$TOP/gen
dir_so=$TOP/source
dir_arch=$TOP/archive
dir_patch=$TOP/patch
dir_pcmcia=$(echo $dir_so/pcmcia*)

[[ -z $dir_pcmcia ]] && {    echo "Can't find a PCMCIA dir"; exit 1; }

while [[ $1 = (|-*|--*) && $1 != (|-|--) ]];do
	case $1 in
	    (|-R|--reverse)
	    REVERSE=yes;shift
	    ;;
	    (|-p|--patch)
	    PATCH="yes"; shift;
	    ;;
	    (|-s|--short)
	    SHORT="yes"; shift;
	esac
done

if [[ -n $PATCH || -n $REVERSE ]];then
    opt=""
    if [[ -n $REVERSE ]];then
	opt="-R"
    fi

    cd $dir_so
    cp -f ../config/kernel-BOOT.config .config
    for i in $dir_patch/[0-9]*;do
		patch $opt -p1 < $i
    done
    cd $dir_pcmcia
    patch -p1 $opt < $dir_patch/pcmcia-cs-3.1.2
    exit
fi

cd $dir_so
make include/linux/version.h
version=$(perl -an -e 'print if s|.*"(.*)"|\1|' <include/linux/version.h)

function build () {
cd $dir_so
make oldconfig && \
make dep && \
make clean && \
make bzImage && \
make modules 

cd i810
make

cd $dir_pcmcia
make config <<EOF
$dir_so
$dir_gen
y
y
n
2
/lib/modules/$version
y
/etc/rc.d
EOF
make all
cd cardmgr
make clean
make CFLAGS="-O -Wall -Wstrict-prototypes -pipe -D INSTALL_INCLUDE_CARDMGR" \
		cardmgr.o lex_config.o yacc_config.o ||true
}

[[ -z $SHORT ]] && build

cd $dir_so
rm -rf $dir_gen && mkdir -p $dir_gen/boot/
make modules_install INSTALL_MOD_PATH=$dir_gen/
install -m644 arch/i386/boot/bzImage $dir_gen/boot/vmlinuz-$version
install -m644 System.map $dir_gen/boot/System.map-$version

cd i810
install -m644 agpgart.o $dir_gen/lib/modules/$version/misc/

cd $dir_pcmcia
make install

cd $dir_pcmcia/cardmgr
mkdir -p $dir_gen/cardmgr/
install -m644 cardmgr.o lex_config.o yacc_config.o $dir_gen/cardmgr/

#Open source man.
mkdir -p $dir_gen/build/{patch,config,script}
install -m 755 $0 $dir_gen/build/script/
install -m 644 $dir_so/.config $dir_gen/build/config/kernel-$version.config
install -m 644 $dir_patch/patch-pcmcia-cs-3.1.2 $dir_gen/build/patch/patch-pcmcia
install -m 644 $dir_patch/[0-9]* $dir_gen/build/patch/

cd $dir_gen
rm -rf {usr,var/,etc/}
[ -f /usr/share/spec-helper/spec-helper ] && \
    RPM_BUILD_ROOT=. /usr/share/spec-helper/spec-helper

tar cvyf $dir_arch/kernel-$version.tar.bz2 *