#!/bin/sh
#
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
# Copyright 2017, Philippe Gregoire <pg@pgregoire.xyz>
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist 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 cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# All os variables are lower case.  Keep this file in alphabetical
# order by os variable except in cases where order otherwise matters,
# in which case keep the primary os and its derivatives together in
# a block (see Debian and Redhat examples below).
#

if grep -q ^Amazon /etc/system-release 2>/dev/null; then
   echo amazon
   exit 0
fi

if [ -f /etc/arch-release ]; then
   echo archlinux
   exit 0
fi

if [ -f /etc/cdist-preos ]; then
   echo cdist-preos
   exit 0
fi

if [ -d /gnu/store ]; then
   echo guixsd
   exit 0
fi

### Debian and derivatives
if grep -q ^DISTRIB_ID=Ubuntu /etc/lsb-release 2>/dev/null; then
   echo ubuntu
   exit 0
fi

# devuan ascii has both devuan_version and debian_version, so we need to check devuan_version first!
if [ -f /etc/devuan_version ]; then
   echo devuan
   exit 0
fi

if [ -f /etc/debian_version ]; then
   echo debian
   exit 0
fi

###

if [ -f /etc/gentoo-release ]; then
   echo gentoo
   exit 0
fi

if [ -f /etc/openwrt_version ]; then
    echo openwrt
    exit 0
fi

if [ -f /etc/owl-release ]; then
   echo owl
   exit 0
fi

### Redhat and derivatives
if grep -q ^Scientific /etc/redhat-release 2>/dev/null; then
    echo scientific
    exit 0
fi

if grep -q ^CentOS /etc/redhat-release 2>/dev/null; then
    echo centos
    exit 0
fi

if grep -q ^Fedora /etc/redhat-release 2>/dev/null; then
   echo fedora
   exit 0
fi

if grep -q ^Mitel /etc/redhat-release 2>/dev/null; then
   echo mitel
   exit 0
fi

if [ -f /etc/redhat-release ]; then
   echo redhat
   exit 0
fi
###

if [ -f /etc/SuSE-release ]; then
   echo suse
   exit 0
fi

if [ -f /etc/slackware-version ]; then
   echo slackware
   exit 0
fi

# Appliances

if grep -q '^Check Point Gaia' /etc/cp-release 2>/dev/null; then
    echo checkpoint
    exit 0
fi

uname_s="$(uname -s)"

# Assume there is no tr on the client -> do lower case ourselves
case "$uname_s" in
   Darwin)
      echo macosx
      exit 0
   ;;
   NetBSD)
      echo netbsd
      exit 0
   ;;
   FreeBSD)
      echo freebsd
      exit 0
   ;;
   OpenBSD)
      echo openbsd
      exit 0
   ;;
   SunOS)
      echo solaris
      exit 0
   ;;
esac

if [ -f /etc/os-release ]; then
   # after sles15, suse don't provide an /etc/SuSE-release anymore, but there is almost no difference between sles and opensuse leap, so call it suse
   # shellcheck disable=SC1091
   if (. /etc/os-release && echo "${ID_LIKE}" | grep -q '\(^\|\ \)suse\($\|\ \)')
   then
      echo suse
      exit 0
   fi
   # already lowercase, according to:
   # https://www.freedesktop.org/software/systemd/man/os-release.html
   awk -F= '/^ID=/ { if ($2 ~ /^'"'"'(.*)'"'"'$/ || $2 ~ /^"(.*)"$/) { print substr($2, 2, length($2) - 2) } else { print $2 } }' /etc/os-release
   exit 0
fi

echo "Unknown OS" >&2
exit 1
