#!/bin/sh
# Test for linux distributions.
set -e

. /usr/share/os-prober/common.sh

partition="$1"
dir="$2"
type="$3"

# This test is inaccurate, but given separate / and /boot partitions and the
# fact that only some architectures have ld-linux.so, I can't see anything
# better. Make sure this test has a high number so that more accurate tests
# can come first.
# TODO: look for ld-linux.so on arches that have it
if ls $dir/lib/ld*.so* >/dev/null 2>/dev/null; then
	if [ -e "$dir/etc/debian_version" ]; then
		short="Debian"
		long=$(printf "Debian GNU/Linux (%s)\n" "$(cat $dir/etc/debian_version)")
	# RPM derived distributions may also have a redhat-release or
	# mandrake-release, so check their files first.
	elif [ -e "$dir/etc/altlinux-release" ]; then
		short="ALTLinux"
		long=$(cat "$dir/etc/altlinux-release")
	elif [ -e "$dir/etc/magic-release" ]; then
		short="Magic"
		long=$(cat "$dir/etc/magic-release")
	elif [ -e "$dir/etc/blackPanther-release" ]; then
		short="blackPanther"
		long=$(cat "$dir/etc/blackPanther-release")
	elif [ -e "$dir/etc/ark-release" ]; then
		short="Ark"
		long=$(cat "$dir/etc/ark-release")
	elif [ -e "$dir/etc/arch-release" ]; then
		short="Arch"
		long=$(cat "$dir/etc/arch-release")
	elif [ -e "$dir/etc/asplinux-release" ]; then
		short="ASPLinux"
		long=$(cat "$dir/etc/asplinux-release")
	elif [ -e "$dir/etc/lvr-release" ]; then
		short="LvR"
		long=$(cat "$dir/etc/lvr-release")
	elif [ -e "$dir/etc/caos-release" ]; then
		short="cAos"
		long=$(cat "$dir/etc/caos-release")
	elif [ -e "$dir/etc/aurox-release" ]; then
		short="Aurox"
		long=$(cat "$dir/etc/aurox-release")
	elif [ -e "$dir/etc/engarde-release" ]; then
		short="EnGarde"
		long=$(cat "$dir/etc/engarde-release")
	elif [ -e "$dir/etc/vine-release" ]; then
		short="Vine"
		long=$(cat "$dir/etc/vine-release")
	elif [ -e "$dir/etc/whitebox-release" ]; then
		short="WhiteBox"
		long=$(cat "$dir/etc/whitebox-release")
	elif [ -e "$dir/etc/pld-release" ]; then
		short="PLD"
		long=$(cat "$dir/etc/pld-release")
	elif [ -e "$dir/etc/startcom-release" ]; then
		short="StartCom"
		long=$(cat "$dir/etc/startcom-release")
	elif [ -e "$dir/etc/trustix-release" ]; then
		short="Trustix"
		long=$(cat "$dir/etc/trustix-release")
	elif [ -e "$dir/etc/openna-release" ]; then
		short="OpenNA"
		long=$(cat "$dir/etc/openna-release")
	elif [ -e "$dir/etc/conectiva-release" ]; then
		short="Conectiva"
		long=$(cat "$dir/etc/conectiva-release")
	elif [ -e "$dir/etc/mandrake-release" ]; then
		short="Mandrake"
		long=$(cat "$dir/etc/mandrake-release")
	elif [ -e "$dir/etc/fedora-release" ]; then
		short="Fedora"
		long=$(cat "$dir/etc/fedora-release")
	elif [ -e "$dir/etc/redhat-release" ]; then
		short="RedHat"
		long=$(cat "$dir/etc/redhat-release")
	elif [ -e "$dir/etc/SuSE-release" ]; then
		short="SuSE"
		long=$(head -n 1 "$dir/etc/SuSE-release")
	elif [ -e "$dir/etc/gentoo-release" ]; then
		short="Gentoo"
		long=$(cat "$dir/etc/gentoo-release")
	elif [ -e "$dir/etc/cobalt-release" ]; then
		short="Cobalt"
		long=$(cat "$dir/etc/cobalt-release")
	elif [ -e "$dir/etc/yellowdog-release" ]; then
		short="YellowDog"
		long=$(cat "$dir/etc/yellowdog-release")
	elif [ -e "$dir/etc/turbolinux-release" ]; then
		short="Turbolinux"
		long=$(cat "$dir/etc/turbolinux-release")
	elif [ -e "$dir/etc/pardus-release" ]; then
		short="Pardus"
		long=$(cat "$dir/etc/pardus-release")
	elif [ -e "$dir/etc/kanotix-version" ]; then
		short="Kanotix"
		long=$(cat "$dir/etc/kanotix-version")
	elif [ -e "$dir/etc/slackware-version" ]; then
		short="Slackware"
		long=$(printf "Slackware Linux (%s)\n" "$(cat $dir/etc/slackware-version)")
	elif [ -e "$dir/sbin/pkgtool" ]; then
		short="Slackware"
		long="Slackware Linux"
	elif grep -qs OpenLinux "$dir/etc/issue"; then
		short="Caldera"
		long="Caldera OpenLinux"
	elif [ -e "$dir/etc/frugalware-release" ]; then
		short="Frugalware Linux"
		long=$(cat "$dir/etc/frugalware-release")
	else
		short="Linux"
		long="unknown Linux distribution"
	fi
	
        label=$(count_next_label $short)
	result "$partition:$long:$label:linux"
	exit 0
else
	exit 1
fi
