#!/sbin/sh

. "$env"

[ -d "$tmp/modules" ] || {
	print "No kernel modules found, skipping"
	exit 0
}

print "Installing /lib/modules symlink"
mkdir -p lib
chmod 0755 lib
rm -rf lib/modules
ln -s /system/lib/modules lib/modules

print "Installing /sbin/modprobe symlink"
mkdir -p sbin
chmod 0755 sbin
rm -rf sbin/modprobe
ln -s /sbin/busybox_nh /sbin/modprobe

cd "$tmp"

print "Gathering original module layout..."
find /system/lib/modules -name "*.ko" -maxdepth 3 > modules.list
> modules.layout
while read -r kmod; do
	kmod_name=$(basename "$(readlink "$kmod")")
	echo "$kmod:$kmod_name" >> modules.layout
done < modules.list

print "Removing old kernel modules..."
rm -rf /system/lib/modules

print "Installing new kernel modules..."
cp -r modules /system/lib/

print "Creating module symlinks..."

# Create /system/lib/modules/*.ko symlinks for each module installed
find /system/lib/modules -type f -name "*.ko" > modules.installed
while read -r kmod_installed; do
	kmod_name=$(basename "$kmod_installed")
	kmod_link="/system/lib/modules/$kmod_name"
	ln -s "$kmod_installed" "$kmod_link"
	echo "Symlinked module (install): $kmod_link -> $kmod_installed"
done < modules.installed

# Create module symlinks at original module link locations
while read -r kmod; do
	kmod_name=$(echo "$kmod" | cut -f2 -d:)
	kmod_link=$(echo "$kmod" | cut -f1 -d:)
	if [ ! "$kmod_link" ] || [ ! "$kmod_name" ] || [ -e "$kmod_link" ]; then
		continue
	fi
	kmod_installed=$(grep -m1 "/$kmod_name$" modules.installed)
	if [ ! -f "$kmod_installed" ]; then
		echo "Warning: Module not installed: $kmod_link -> $kmod_installed"
		continue
	fi
	mkdir -p "$(dirname "$kmod_link")"
	ln -s "$kmod_installed" "$kmod_link"
	echo "Symlinked module (layout): $kmod_link -> $kmod_installed"
done < modules.layout

setperm 0755 0644 /system/lib/modules
chcon -R -h "u:object_r:system_file:s0" /system/lib/modules
