#!/bin/sh -efu

. shell-error

export verbose="${VERBOSE:+-v}"

export workdir="${WORKDIR:?Work directory required}"
export rootdir="${ROOTDIR:?Root directory required}"
export guessdir="${GUESSDIR:?Autodetect directory required}"
export reportdir="${REPORTDIR:?Bug report directory required}"
export datadir="${DATADIR:?Data directory required}"
export scriptdir="${SCRIPTDIR:?Scripts directory required}"
export kmoddepsdir="${KMODDEPSDIR:?Module deps directory required}"
export imagefile="${IMAGEFILE-}"
export modules_ignore=" ${MODULES_IGNORE-} "
export blacklist="${BLACKLIST_MODULES-}"

export compress_method="${COMPRESS-}"
export outfile="$workdir/initrd.img"
export kernel="${KERNEL:?}"

kernel_major="${kernel%%.*}"
kernel_minor="${kernel#*.}"
kernel_minor="${kernel_minor%%.*}"
kernel_patch="${kernel#*.*.}"
kernel_patch="${kernel_patch%%[!0-9]*}"

export kernel_major kernel_minor kernel_patch

if [ -z "${kernel_major##*[!0-9]*}" ] ||
   [ -z "${kernel_minor##*[!0-9]*}" ] ||
   [ -z "${kernel_patch##*[!0-9]*}" ]
then
	fatal "Invalid kernel version \"$kernel\""
fi

export kernel_modules_dir="/lib/modules/$kernel"
[ -d "$kernel_modules_dir" ] ||
	fatal "Directory \"$kernel_modules_dir\" doesn't exist or not accessible."

normalize_modname() {
	printf '%s' "$*" |tr '-' '_'
}

[ -z "$blacklist" ] ||
	blacklist="$(normalize_modname "$blacklist")"

get_majmin() {
	local v devnode

	devnode="$(readlink -ev "$1" 2>/dev/null)" ||
		return 1

	v="$(stat -c '%02t:%02T' "$devnode")" &&
		printf '%d:%d\n' "0x${v%:*}" "0x${v#*:}" ||
		return 1
}
