#!/bin/bash

mergefile() {
	BASE=${1%.?}
	EXT=${1#${BASE}}
	git mv ${TARGET}/$1 ${TARGET}/${BASE}_mm${EXT}
	git mv ${SOURCE}/$1 ${TARGET}/${BASE}_no${EXT}
	cat <<-EOF > ${TARGET}/$1
	#ifdef CONFIG_MMU
	#include "${BASE}_mm${EXT}"
	#else
	#include "${BASE}_no${EXT}"
	#endif
	EOF
	git add ${TARGET}/$1
}

mergedir() {
	TARGET=arch/m68k/$1
	SOURCE=arch/m68knommu/$1
	files=${1}_MERGE_FILES
	MERGE_FILES=${!files}

	echo "merging files in $1"
	for F in $MERGE_FILES ; do
		mergefile $F
	done

	files=${1}_NOMERGE_FILES
	NOMERGE_FILES=${!files}

	echo "moving files in $1"
	for F in $NOMERGE_FILES ; do
		git mv ${SOURCE}/$F ${TARGET}/$F
	done

	files=${1}_REMOVE_FILES
	REMOVE_FILES=${!files}

	echo "removing common files in $1"
	for F in $REMOVE_FILES ; do
		git rm ${SOURCE}/$F
	done

	if [ -e ${SOURCE}/Makefile ]; then
		git mv ${TARGET}/Makefile ${TARGET}/Makefile_mm
		git mv ${SOURCE}/Makefile ${TARGET}/Makefile_no
		cat <<-EOF > ${TARGET}/Makefile
		ifdef CONFIG_MMU
		include ${TARGET}/Makefile_mm
		else
		include ${TARGET}/Makefile_no
		endif
		EOF
		git add ${TARGET}/Makefile
	fi
}

configs_MERGE_FILES=""
configs_NOMERGE_FILES="m5208evb_defconfig \
			m5272c3_defconfig \
			m5307c3_defconfig \
			m5249evb_defconfig \
			m5275evb_defconfig \
			m5407c3_defconfig"
configs_REMOVE_FILES=""
kernel_MERGE_FILES="asm-offsets.c \
			dma.c entry.S \
			m68k_ksyms.c \
			module.c \
			process.c \
			ptrace.c \
			setup.c \
			signal.c \
			sys_m68k.c \
			time.c \
			traps.c \
			vmlinux.lds.S"
kernel_NOMERGE_FILES="init_task.c \
			irq.c \
			syscalltable.S"
kernel_REMOVE_FILES=""
lib_MERGE_FILES="checksum.c \
			muldi3.c"
lib_NOMERGE_FILES="delay.c \
			divsi3.S \
			memcpy.c \
			memmove.c \
			memset.c \
			modsi3.S \
			mulsi3.S \
			udivsi3.S \
			umodsi3.S"
lib_REMOVE_FILES="ashldi3.c \
			ashrdi3.c \
			lshrdi3.c"
mm_MERGE_FILES="init.c kmap.c"
mm_NOMERGE_FILES=""
mm_REMOVE_FILES=""

DIRS="configs kernel lib mm"

echo "STARTing merge"
for dir in $DIRS ; do
	echo "merging $dir..."
	mergedir $dir
done
echo "moving platform"
git mv arch/m68knommu/platform arch/m68k/
git rm arch/m68knommu/defconfig

echo "merging master Makefile"
git mv arch/m68k/Makefile arch/m68k/Makefile_mm
git mv arch/m68knommu/Makefile arch/m68k/Makefile_no
cat <<-EOF > arch/m68k/Makefile
ifdef CONFIG_MMU
include arch/m68k/Makefile_mm
else
include arch/m68k/Makefile_no
endif
EOF
git add arch/m68k/Makefile

echo "removing remaining m68knommu dirs"
git rm -r arch/m68knommu
rm -r arch/m68knommu
exit 0
