#!/bin/bash
#
# --- T2-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
# 
# T2 SDE: scripts/Cleanup
# Copyright (C) 2004 - 2007 The T2 SDE Project
# Copyright (C) 1998 - 2003 ROCK Linux Project
# 
# More information can be found in the files COPYING and README.
# 
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- T2-COPYRIGHT-NOTE-END ---
#
# Cleanup the build environment 
#

nocheck=0
downclean=0
buildclean=0
cacheclean=0

while [ "$1" ] ; do
	case "$1" in
	    -build)
		buildclean=1 ;;
	    -cache)
		cacheclean=1 ;;
	    -full)
		buildclean=1 ; cacheclean=1 ;;
	    -nocheck)
		nocheck=1 ;;
	    -download)
		downclean=1 ;;
	    -*)
		echo "Usage: $0 [ -build ] [ -cache ] [ -full ] [ -nocheck ] [ -download ]"
		echo "       ${0//[a-zA-Z\/.]/ } [ dir(s) ]"
		exit 1 ;;
	    *)
		break ;;
	esac
	shift
done

# Cleanup download/* and quit
#
if [ $downclean -eq 1 ]; then
	echo "Searching for obsolete downloads (this may take some time) ..."
	./scripts/Download -list-unknown | cut -d ' ' -f 3 |
	while read fn; do
		[ "$fn" ] && rm -v "$fn"
	done
	exit
fi

# Remove src*
#
for x in src src.* build/*/TOOLCHAIN/src.*; do
    if [ -d "$x" -o -L "$x" ] ; then
	if [ "$#" != 0 ] ; then
		delme=0
		for y ; do [ "${y%/}" = "$x" ] && delme=1 ; done
		[ "$delme" = 0 ] && continue
	fi
	delme=1

	for y in build.pid; do
		if [ $delme = 1 -a -f "$x/$y" ] ; then
			if [ "`fuser "$x/$y"`" ] ; then
				echo "Found active $y in $x: Not removing!"
				delme=0
			fi
		fi
	done

	if [ $delme = 1 ] ; then
		echo "removing $x ..."
		rm -rf "$x"
	fi
    fi
done

# Remove build/*
#
fullhelp=0
for x in build/* ; do
    if [ -d "$x" ] ; then
	if [ "$#" != 0 ] ; then
		delme=0
		for y ; do [ "${y%/}" = "$x" ] && delme=1 ; done
		[ "$delme" = 0 ] && continue
	fi

	# handle (c)cache pools first
	if [ ${x/build\/ccache/} != $x ]; then
		if [ $cacheclean = 1 ]; then
			echo "removing $x ..."
			rm -rf "$x"
		else
			echo "Not removing $x (cache)."
			fullhelp=1
		fi
		continue
	fi

	if [ $buildclean = 1 ] ; then
		for y in proc TOOLCHAIN/loop TOOLCHAIN/config TOOLCHAIN/download; do
			umount -d -f    "$x/$y" > /dev/null 2>&1
			umount -d -f -l "$x/$y" > /dev/null 2>&1
			rmdir  "$x/$y" > /dev/null 2>&1
			if [ -d "$x/$y" ] ; then
				echo "Found $y in $x: Not removing!"
				delme=0
			fi
		done
		if [ "$delme" != 0 ] ; then
			echo "removing $x ..."
			rm -rf "$x"
		fi
	else
		echo "Not removing $x (build)."
		fullhelp=1
	fi
    fi
done
[ $fullhelp -eq 1 ] &&
	echo -e "\nUse '$0 -build' to remove builds and '$0 -cache'
to also flush the cache."

[ "$nocheck" = 1 ] && exit 0

echo -e "\nSearching for lingering temp/backup files (this may take some time) ..."

# Remove temp/backup files
#
bash scripts/xfind.sh doc/. architecture/. misc/. \
	package/. scripts/. target/. -type f \( -name '*~' -o \
	-name 'a.out' -o -name 'core.*' -o -name 'core' \) | xargs rm -vf

# Print warnings for 'lingering' files
#
bash scripts/xfind.sh doc/. architecture/. misc/. 		\
	package/. scripts/. 						\
  \(									\
	\( -name 'DEADJOE' -o -name '*-[xX]' -o -name '.[^.]*'		\
           -o -name '*.orig' -o -name '*.rej' -o -name '*#*'		\
           -o -name '*.mine' -o -name '*.r[1-9][0-9]*'			\
           -o -name TRANS.TBL -o -name '*.cksum-err' -o -name x		\
	   -o -name '*[.-]old' -o -name a.out -o -name '*~'		\
	   -o -name '*.incomplete' -o -name '*.ckext-err' \)		\
	-printf 'WARNING: Found %p\n'					\
  \) -o \(								\
	\( ! -type d ! -type f \)					\
	-printf 'WARNING: Neither a dir nor a regular file: %p\n'	\
  \)

bash scripts/xfind.sh target/.						\
  \(                                                                    \
        \( -name 'DEADJOE' -o -name '*-[xX]' 				\
           -o -name '*.orig' -o -name '*.rej' -o -name '*#*'            \
           -o -name '*.mine' -o -name '*.r[1-9][0-9]*'                  \
           -o -name TRANS.TBL -o -name '*.cksum-err' -o -name x         \
           -o -name '*[.-]old' -o -name a.out -o -name '*~'             \
           -o -name '*.incomplete' -o -name '*.ckext-err' \)            \
        -printf 'WARNING: Found %p\n'                                   \
  \) -o \(                                                              \
        \( ! -type d ! -type f \)                                       \
        -printf 'WARNING: Neither a dir nor a regular file: %p\n'       \
  \)

exit 0
