#!/bin/sh -e

usage()
{
	echo "Usage: ${0} --prefix=DIR --destdir=DIR [option ...]"
	echo "Possible options are:"
	echo "  --help"
	echo "  --prefix=LIBRARY_TOP_DIRECTORY"
	echo "  --destdir=DESTINATION_DIRECTORY"
	echo "  --libraries=SUBSET_LIBRARIES (default: all libraries)"
}


prefix=''
destdir=''
libraries=''

while [ ${#} -gt 0 ]
do
	case "${1}" in

	--help)
		usage 1>&2
		exit 0
		;;

	--prefix=*)
		prefix=`echo ${1} | sed 's/^--prefix=//'`
		;;

	--destdir=*)
		destdir=`echo ${1} | sed 's/^--destdir=//'`
		;;

	--libraries=*)
		libraries="${libraries} "`echo ${1} | sed 's/^--libraries=//'`
		;;

	*)
		usage 1>&2
		exit 1
		;;
	esac

	shift 1
done

# strip whitespaces
libraries=`echo ${libraries} | sed 's/^[ 	]*//' \
			     | sed 's/[ 	]*$//' \
			     | sed 's/[ 	][ 	]*/ /g'`

# check prefix specified
if [ -z "${prefix}" ]; then
	echo "${0}: prefix must be specified." 1>&2
	usage 1>&2
	exit 1
fi

# check destdir specified
if [ -z "${destdir}" ]; then
	echo "${0}: destdir must be specified." 1>&2
	usage 1>&2
	exit 1
fi

# overwrite libraries variable if it is empty
if [ -z "${libraries}" ]; then
	for lib in `(cd "${prefix}/src" && echo *)`
	do
		if [ -d "${prefix}/src/${lib}" ]; then
			libraries="${libraries} ${lib}"
		fi
	done
fi

# check valid subset
for lib in ${libraries}
do
	if [ ! -d "${prefix}/src/${lib}" ]; then
		echo "${0}: No such library: \`${lib}'" 1>&2
		usage 1>&2
		exit 1
	fi
done


# check destdir is not exist
if [ -e "${destdir}" ]; then
	echo "${0}: ${destdir} already exist." 1>&2
	exit 1
fi

# create destdir
mkdir "${destdir}"

# replace to absolute path
prefix=`(cd "${prefix}" && pwd)`
destdir=`(cd "${destdir}" && pwd)`


# copy except src/
(cd "${prefix}" \
 && for i in *
    do
	if [ "${i}" != "src" ]; then
		cp -p -R "${prefix}/${i}" "${destdir}/${i}"
	fi
    done)


# copy non-library files in src/
mkdir "${destdir}/src"
(cd "${prefix}"/src \
 && for i in *
    do
	if [ ! -d "${i}" ]; then
		cp -p "${prefix}/src/${i}" "${destdir}/src/${i}"
	fi
    done)

# copy each library in src/
copyed_library=''
copy_library()
{
	module="${1}"

	for copyed in $copyed_library
	do
		if [ X"${module}" = X"${copyed}" ]; then
			return
		fi
	done
	copyed_library="${copyed_library} ${module}"

	if [ ! -d "${destdir}/src/${module}" ]; then
		cp -p -R "${prefix}/src/${module}" "${destdir}/src/${module}"
	fi

	for dep in `grep '^#%DEPENDS[ 	]*=' ${prefix}/src/${module}/Makefile \
			| sed 's/^#%DEPENDS[ 	]*=[ 	]*//'`
	do
		copy_library "${dep}"
	done
}

for lib in ${libraries}
do
	printf '%s' "copying ${lib} ..."

	copy_library "${lib}"

	echo ' done'
done
