#/usr/bin/env sh
set -ex

DESTDIR=${DESTDIR:-}
PREFIX=${PREFIX:-/usr/local}
ETCDIR=${ETCDIR:-/etc}
LIBEXECDIR=${LIBEXECDIR:-/usr/libexec}
LIBEXEC_CRIO_DIR=${LIBEXEC_CRIO_DIR:-$LIBEXECDIR/crio}
ETC_CRIO_DIR=${ETC_CRIO_DIR:-$ETCDIR/crio}
CONTAINERS_DIR=${CONTAINERS_DIR:-$ETCDIR/containers}
CONTAINERS_REGISTRIES_CONFD_DIR=${CONTAINERS_REGISTRIES_CONFD_DIR:-$CONTAINERS_DIR/registries.conf.d}
CNIDIR=${CNIDIR:-$ETCDIR/cni/net.d}
BINDIR=${BINDIR:-$PREFIX/bin}
MANDIR=${MANDIR:-$PREFIX/share/man}
OCIDIR=${OCIDIR:-$PREFIX/share/oci-umount/oci-umount.d}
BASHINSTALLDIR=${BASHINSTALLDIR:-$PREFIX/share/bash-completion/completions}
FISHINSTALLDIR=${FISHINSTALLDIR:-$PREFIX/share/fish/completions}
ZSHINSTALLDIR=${ZSHINSTALLDIR:-$PREFIX/share/zsh/site-functions}
OPT_CNI_BIN_DIR=${OPT_CNI_BIN_DIR:-/opt/cni/bin}

# Adjust SYSCONFIGDIR if we're running on debian based distributions
if dpkg -l >/dev/null 2>&1; then
    SYSCONFIGDIR=${SYSCONFIGDIR:-$ETCDIR/default}
    sed -i "s;sysconfig/crio;default/crio;g" etc/crio
else
    SYSCONFIGDIR=${SYSCONFIGDIR:-$ETCDIR/sysconfig}
fi

# Update systemddir based on OS
source /etc/os-release
if { [[ "${ID}" == "fedora" ]] && [[ "${VARIANT_ID}" == "coreos" ]]; } ||
    [[ "${ID}" == "rhcos" ]]; then
    SYSTEMDDIR=${SYSTEMDDIR:-/etc/systemd/system}
else
    SYSTEMDDIR=${SYSTEMDDIR:-$PREFIX/lib/systemd/system}
fi

SELINUX=
if selinuxenabled 2>/dev/null; then
    SELINUX=-Z
fi
ARCH=${ARCH:-ppc64le}

install $SELINUX -d -m 755 "$DESTDIR$CNIDIR"
install $SELINUX -D -m 755 -t "$DESTDIR$OPT_CNI_BIN_DIR" cni-plugins/*
install $SELINUX -D -m 644 -t "$DESTDIR$CNIDIR" contrib/10-crio-bridge.conflist.disabled
install $SELINUX -d -m 755 "$DESTDIR$LIBEXEC_CRIO_DIR"
install $SELINUX -D -m 755 -t "$DESTDIR$LIBEXEC_CRIO_DIR" bin/conmon
install $SELINUX -D -m 755 -t "$DESTDIR$LIBEXEC_CRIO_DIR" bin/conmonrs
install $SELINUX -D -m 755 -t "$DESTDIR$LIBEXEC_CRIO_DIR" bin/crun
install $SELINUX -D -m 755 -t "$DESTDIR$LIBEXEC_CRIO_DIR" bin/runc
install $SELINUX -D -m 755 -t "$DESTDIR$LIBEXEC_CRIO_DIR" bin/crio-credential-provider
install $SELINUX -d -m 755 "$DESTDIR$BASHINSTALLDIR"
install $SELINUX -d -m 755 "$DESTDIR$FISHINSTALLDIR"
install $SELINUX -d -m 755 "$DESTDIR$ZSHINSTALLDIR"
install $SELINUX -d -m 755 "$DESTDIR$CONTAINERS_REGISTRIES_CONFD_DIR"
install $SELINUX -D -m 755 -t "$DESTDIR$BINDIR" bin/crio
install $SELINUX -D -m 755 -t "$DESTDIR$BINDIR" bin/pinns
install $SELINUX -D -m 755 -t "$DESTDIR$BINDIR" bin/crictl
install $SELINUX -D -m 644 -t "$DESTDIR$ETCDIR" etc/crictl.yaml
install $SELINUX -D -m 644 -t "$DESTDIR$OCIDIR" etc/crio-umount.conf
install $SELINUX -D -m 644 -t "$DESTDIR$SYSCONFIGDIR" etc/crio
install $SELINUX -D -m 644 -t "$DESTDIR$ETC_CRIO_DIR" contrib/policy.json
install $SELINUX -D -m 644 -t "$DESTDIR$ETC_CRIO_DIR/crio.conf.d" etc/10-crio.conf
install $SELINUX -D -m 644 -t "$DESTDIR$MANDIR/man5" man/crio.conf.5
install $SELINUX -D -m 644 -t "$DESTDIR$MANDIR/man5" man/crio.conf.d.5
install $SELINUX -D -m 644 -t "$DESTDIR$MANDIR/man8" man/crio.8
install $SELINUX -D -m 644 -t "$DESTDIR$BASHINSTALLDIR" completions/bash/crio
install $SELINUX -D -m 644 -t "$DESTDIR$FISHINSTALLDIR" completions/fish/crio.fish
install $SELINUX -D -m 644 -t "$DESTDIR$ZSHINSTALLDIR" completions/zsh/_crio
install $SELINUX -D -m 644 -t "$DESTDIR$SYSTEMDDIR" contrib/crio.service
install $SELINUX -D -m 644 -t "$DESTDIR$CONTAINERS_REGISTRIES_CONFD_DIR" contrib/registries.conf

# Update the DESTDIR in the CRI-O configuration
sed -i 's;/usr/bin;'"$DESTDIR$BINDIR"';g' "$DESTDIR$ETC_CRIO_DIR/crio.conf.d/10-crio.conf"
sed -i 's;/usr/libexec;'"$DESTDIR$LIBEXECDIR"';g' "$DESTDIR$ETC_CRIO_DIR/crio.conf.d/10-crio.conf"
sed -i 's;/etc/crio;'"$DESTDIR$ETC_CRIO_DIR"';g' "$DESTDIR$ETC_CRIO_DIR/crio.conf.d/10-crio.conf"

touch ~/.crio-install
cat <<EOF | tee ~/.crio-install
$DESTDIR$OPT_CNI_BIN_DIR/*
$DESTDIR$CNIDIR/10-crio-bridge.conflist.disabled
$DESTDIR$LIBEXEC_CRIO_DIR/conmon
$DESTDIR$LIBEXEC_CRIO_DIR/conmonrs
$DESTDIR$LIBEXEC_CRIO_DIR/crun
$DESTDIR$LIBEXEC_CRIO_DIR/runc
$DESTDIR$LIBEXEC_CRIO_DIR/crio-credential-provider
$DESTDIR$BINDIR/crio
$DESTDIR$BINDIR/pinns
$DESTDIR$BINDIR/crictl
$DESTDIR$ETCDIR/crictl.yaml
$DESTDIR$OCIDIR/crio-umount.conf
$DESTDIR$SYSCONFIGDIR/crio
$DESTDIR$ETC_CRIO_DIR/policy.json
$DESTDIR$ETC_CRIO_DIR/crio.conf.d/10-crio.conf
$DESTDIR$MANDIR/man5/crio.conf.5
$DESTDIR$MANDIR/man5/crio.conf.d.5
$DESTDIR$MANDIR/man8/crio.8
$DESTDIR$BASHINSTALLDIR/crio
$DESTDIR$FISHINSTALLDIR/crio.fish
$DESTDIR$ZSHINSTALLDIR/_crio
$DESTDIR$SYSTEMDDIR/crio.service
$DESTDIR$CONTAINERS_REGISTRIES_CONFD_DIR/registries.conf
EOF

if [ -n "$SELINUX" ]; then
    if command -v chcon >/dev/null; then
        chcon -u system_u -r object_r -t container_runtime_exec_t \
            "$DESTDIR$BINDIR/crio" \
            "$DESTDIR$LIBEXEC_CRIO_DIR/crun" \
            "$DESTDIR$LIBEXEC_CRIO_DIR/runc"

        chcon -u system_u -r object_r -t bin_t \
            "$DESTDIR$LIBEXEC_CRIO_DIR/conmon" \
            "$DESTDIR$LIBEXEC_CRIO_DIR/conmonrs" \
            "$DESTDIR$LIBEXEC_CRIO_DIR/crio-credential-provider" \
            "$DESTDIR$BINDIR/crictl" \
            "$DESTDIR$BINDIR/pinns"

        chcon -R -u system_u -r object_r -t bin_t \
            "$DESTDIR$OPT_CNI_BIN_DIR" \
            "$DESTDIR$LIBEXEC_CRIO_DIR"

        chcon -R -u system_u -r object_r -t container_config_t \
            "$DESTDIR$ETC_CRIO_DIR" \
            "$DESTDIR$OCIDIR/crio-umount.conf"

        chcon -R -u system_u -r object_r -t systemd_unit_file_t \
            "$DESTDIR$SYSTEMDDIR/crio.service"
    fi
fi
