#!/bin/bash
#
# MOLMAKE-MODULES -- This program makes modules for Make One Linux
# Copyright (C) 2007 Keicho Kondo <dgel@users.sourceforge.jp>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#

## === Setup Environment === ##
CONFIG_ROOT="/etc/mol"

# load libmolmake
if which libmolmake >/dev/null; then
	. libmolmake
else
	echo "$(basename $0): Can't find libmolmake." >/dev/stderr
	exit 1
fi

# load config files
load_molmake_config $CONFIG_ROOT

# allow only root account
check_user_account

# check variables whether it is filled or not
check_variable BUILD_ROOT $BUILD_ROOT
check_variable MODULE_ROOTDIR $MODULE_ROOTDIR
check_variable EX_FILE_LIST $EX_FILE_LIST
check_variable MODULE_FS $MODULE_FS

# set cmd output option
NUM=0
case $* in *--line*) NUM=$(($NUM + 2));; esac
case $* in *--log*) NUM=$(($NUM + 1));; esac
CMD="cmd $NUM"

# check options
case "$*" in
	*--help*)
	echo "MOLMAKE-MODULES ${MOL_VERSION}"
	echo " (C)2007 Keicho Kondo <dgel@users.sourceforge.jp>"
	echo
	echo "This program makes modules for Make One Linux."
	echo "Usage: molmake-modules [option]"
	echo
	echo "   --clean         : Clean up files made by this script"
	echo "   --help          : Show this help"
	echo "   --version       : Show version and notice"
	echo
	echo "   --line          : Show running command line"
	echo "   --log           : Output log in $BUILD_ROOT/log"
	echo
	exit 0 ;;

	*--version*)
	echo "MOLMAKE-MODULES ${MOL_VERSION}"
	echo "Written by Keicho Kondo."
	echo
	echo "Copyright (C) 2007 Keicho Kondo."
	echo "This is free software; see the source for copying conditions.  There is NO"
	echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
	echo
	exit 0 ;;

	*--clean*)
	echo "Cleaning modules..."
	$CMD rm -rf ${MODULE_ROOTDIR}
	$CMD rm -rf ${BUILD_ROOT}/mol
	$CMD rm -f ${BUILD_ROOT}/molmake-modules.flag
	exit 0 ;;
esac

# check flag
[ -f "${BUILD_ROOT}/molmake-modules.flag" ] && die "<< First, please run this script with --clean option. >>"


## === Start === ##
echo "MOLMAKE-MODULES Starting"

# create compressed filesystem modules
echo "Creating compressed filesystem module data directory..."
$CMD mkdir -p ${BUILD_ROOT}/mol
$CMD mkdir -p ${BUILD_ROOT}/mol/base
$CMD mkdir -p ${BUILD_ROOT}/mol/module
$CMD mkdir -p ${BUILD_ROOT}/mol/optional
$CMD mkdir -p ${BUILD_ROOT}/mol/memory

EXCLUDE="$BUILD_ROOT $ISODIR $(make_list ${EX_FILE_LIST})"
if [ -d "$MODULE_LISTDIR" ]; then
	find $MODULE_LISTDIR | while read LIST; do
		# continue if LIST is directory
		[ -d "$LIST" ] && continue
	
		# probe list file information
		LIST_NAME="$(basename ${LIST})"
		TYPE="${LIST_NAME%%-*}"
		case $TYPE in base|modules|optional);; *) die "<< $TYPE is invaild type. check ${MODULE_LISTDIR}. >>";; esac
		MODULE_NAME="${LIST_NAME#*-}"
		MODULE_NAME="${MODULE_NAME%\.list}"
		[ "$MODULE_NAME" == "09_mol.mo" ] && die "<< Can't create 09_mol.mo module because it is reserved by mol system. >>"
		echo "Creating modules specified by ${LIST}..."
	
		# make module root directory
		$CMD mkdir -p "${MODULE_ROOTDIR}/${MODULE_NAME}"
		$CMD make_module_rootdir "${MODULE_ROOTDIR}/${MODULE_NAME}" "$LIST"
		EXCLUDE_LIST=${MODULE_ROOTDIR}/${MODULE_NAME}$(echo "$EXCLUDE" | sed -e "s|\ |\ ${MODULE_ROOTDIR}/${MODULE_NAME}|g")
	
		# make module
		$CMD mkdir -p "${BUILD_ROOT}/mol/${TYPE}"
		$CMD make_module "$MODULE_FS" "${MODULE_ROOTDIR}/${MODULE_NAME}" "${BUILD_ROOT}/mol/${TYPE}/${MODULE_NAME}.mo" $EXCLUDE_LIST 2>/dev/null
	done
	if [ "$?" -ne 0 ]; then die "<< Can't create compressed filesystem modules correctly >>"; fi
fi

# remaining files will be compressed into 09_mol.mo (base) module
echo "Creating modules for all remaining files and directories..."
[ -d "$MODULE_LISTDIR" ] && EXCLUDE_LIST="$EXCLUDE $(make_list ${MODULE_LISTDIR})" || EXCLUDE_LIST="$EXCLUDE"
$CMD make_module "${MODULE_FS}" / ${BUILD_ROOT}/mol/base/09_mol.mo $EXCLUDE_LIST


## === fin. === ##
$CMD touch ${BUILD_ROOT}/molmake-modules.flag
echo "MOLMAKE-MODULES Finished"
exit 0

