#!/usr/local/bin/bash

autoconf_cp()
{
	sed -i '/CONFIG_AUTOCFG_CP = /c\CONFIG_AUTOCFG_CP = n' Makefile
}

intf_usb()
{
	sed -i '/CONFIG_USB_HCI = /c\CONFIG_USB_HCI = y' Makefile
	sed -i '/CONFIG_PCI_HCI = /c\CONFIG_PCI_HCI = n' Makefile
	sed -i '/CONFIG_SDIO_HCI = /c\CONFIG_SDIO_HCI = n' Makefile
}
intf_pcie()
{
	sed -i '/CONFIG_USB_HCI = /c\CONFIG_USB_HCI = n' Makefile
	sed -i '/CONFIG_PCI_HCI = /c\CONFIG_PCI_HCI = y' Makefile
	sed -i '/CONFIG_SDIO_HCI = /c\CONFIG_SDIO_HCI = n' Makefile
}
intf_sdio()
{
	sed -i '/CONFIG_USB_HCI = /c\CONFIG_USB_HCI = n' Makefile
	sed -i '/CONFIG_PCI_HCI = /c\CONFIG_PCI_HCI = n' Makefile
	sed -i '/CONFIG_SDIO_HCI = /c\CONFIG_SDIO_HCI = y' Makefile
}

nic_8192c()
{
	sed -i '/CONFIG_RTL8192C = /c\CONFIG_RTL8192C = y' Makefile
	sed -i '/CONFIG_RTL8192D = /c\CONFIG_RTL8192D = n' Makefile
}
nic_8192d()
{
	sed -i '/CONFIG_RTL8192C = /c\CONFIG_RTL8192C = n' Makefile
	sed -i '/CONFIG_RTL8192D = /c\CONFIG_RTL8192D = y' Makefile
}

release_92cu()
{
	HCI="usb"
	CHIP="rtl8192c"

	autoconf_cp
	nic_8192c
	intf_usb

	make_common_dir
	copy_common_file
}

release_92ce()
{
	HCI="pci"
	CHIP="rtl8192c"

	autoconf_cp
	nic_8192c
	intf_pcie

	make_common_dir
	copy_common_file
}

release_92du()
{
	HCI="usb"
	CHIP="rtl8192d"

	autoconf_cp
	nic_8192d
	intf_usb

	make_common_dir
	copy_common_file
}

release_92de()
{
	HCI="pci"
	CHIP="rtl8192d"

	autoconf_cp
	nic_8192d
	intf_pcie

	make_common_dir
	copy_common_file
}

make_common_dir()
{
	mkdir $folder
	mkdir $folder/core
	mkdir $folder/core/efuse
	mkdir $folder/hal
	mkdir $folder/hal/$CHIP/
	mkdir $folder/hal/$CHIP/$HCI
	mkdir $folder/include
	mkdir $folder/include/byteorder
	mkdir $folder/os_dep
	mkdir $folder/os_dep/bsd
}

add_version_file()
{
	defversion="#define DRIVERVERSION\t\"$postfix\""
	echo -e $defversion > $folder/include/rtw_version.h
}

copy_common_file()
{
	cp Makefile_freebsd $folder/Makefile

	cp script/wlan0dhcp $folder/.
	cp script/ifcfg-wlan0 $folder/.
	cp script/wpa1.conf $folder/.
	cp script/runwpa $folder/.
#	cp script/clean $folder/.
#	cp $IA Kconfig_$CHIP"_"$HCI"_"linux $folder/Kconfig

	add_version_file
	cp -fr include $folder/.
	find $folder/ -type f | xargs dos2unix -k -o
	
	cp core/*.c $folder/core
	find $folder/core -type f | xargs dos2unix -k -o
	cp core/efuse/rtw_efuse.c $folder/core/efuse/.
	find $folder/core/efuse -type f | xargs dos2unix -k -o

	cp hal/hal_init.c $folder/hal/.
	find $folder/hal -type f | xargs dos2unix -k -o

	cp hal/$CHIP/*.c $folder/hal/$CHIP
	find $folder/hal/$CHIP -type f | xargs dos2unix -k -o
	cp hal/$CHIP/$HCI/*.c $folder/hal/$CHIP/$HCI
	find $folder/hal/$CHIP/$HCI -type f | xargs dos2unix -k -o

	cp os_dep/osdep_service.c $folder/os_dep/.
	find $folder/os_dep -type f | xargs dos2unix -k -o
	cp os_dep/bsd/*.c $folder/os_dep/bsd
	find $folder/os_dep/bsd -type f | xargs dos2unix -k -o

	cp $IA autoconf_$CHIP"_"$HCI"_"freebsd.h $folder/include/autoconf.h
	find $folder/include -type f | xargs dos2unix -k -o
	cp $IA autoconf_$CHIP"_"$HCI"_"freebsd.h $folder/.
	find $folder/ -type f | xargs dos2unix -k -o
}

clean_old()
{
	rm -fr $folder
	rm -fr $folder.tar.gz
}

clean_folder()
{
	rm -rf $folder/.svn
	rm -rf $folder/include/.svn
	rm -rf $folder/include/byteorder/.svn	

	rm -rf $folder/core/.svn
	rm -rf $folder/core/efuse/.svn
	
	rm -rf $folder/hal/.svn
	rm -rf $folder/hal/$CHIP/.svn
	rm -rf $folder/hal/$CHIP/$HCI/.svn

	rm -rf $folder/os_dep/.svn
	rm -rf $folder/os_dep/linux/.svn	
}

zip_folder()
{
	tar -zcvf $folder.tar.gz $folder/
	#tar -zcvf $folder.tar.gz $folder/  > /dev/null 2>&1
	#rm -fr $folder
}

package()
{
	clean_folder
	zip_folder
}

get_svn_revision()
{
	if [ -z "$svn_rev" ] && [ -f .svn/entries ]; then
		svn_rev=`sed -n '11 s/^\([0-9][0-9]*\)$/\1/p' .svn/entries`
	fi
	if [ -z "$svn_rev" ]; then
		svn_rev="xxxx"
	fi
}


#==========================
# Script Start From Here

# set variables
# interactive
IA=""
# target folder
folder92cu="rtl8192_8188CU_linux"
folder92ce="rtl8192_8188CE_linux"
folder92du="rtl8192DU_FreeBSD"
folder92de="rtl8192DE_linux"

# Select NIC type
if [ -z "$1" ]; then
	echo "Please select interface type(1/2/3/4):"
	select card in RTL8192cu RTL8192ce RTL8192du RTL8192de;
	do
		echo "You have selected $card"
		break
	done
else
	card=$1;
fi

# Make Version string
if [ -z "$2" ]; then
	get_svn_revision
	version="v0.1."$svn_rev
	datestr=$(date +%Y%m%d)
	postfix=$version.$datestr
else
	postfix=$2
fi

# Make
case "$card" in
	[Rr][Tt][Ll][8][1][9][2][Cc][Uu])
		folder=$folder92cu"_"$postfix
		clean_old
		release_92cu
		package
		;;
	[Rr][Tt][Ll][8][1][9][2][Cc][Ee])
		folder=$folder92ce"_"$postfix
		clean_old
		release_92ce
		package
		;;
	[Rr][Tt][Ll][8][1][9][2][Dd][Uu])
		folder=$folder92du"_"$postfix
		clean_old
		release_92du
		package
		;;
	[Rr][Tt][Ll][8][1][9][2][Dd][Ee])
		folder=$folder92de"_"$postfix
		clean_old
		release_92de
		package
		;;
	*)
		echo "Unknown NIC type"
		;;
esac
