# Copyright 2016 Julian Ospald <hasufell@posteo.de>
# Distributed under the terms of the GNU General Public License v2
#
# Based in part upon 'openrc-0.20.4.ebuild' from Gentoo, which is:
#     Copyright 1999-2015 Gentoo Foundation
#     Distributed under the terms of the GNU General Public License v2

require pam

HOMEPAGE="http://www.gentoo.org/proj/en/base/${PN}"
DOWNLOADS="http://dev.gentoo.org/~williamh/dist/${PNV}.tar.bz2"

SUMMARY="A dependency-based init system that works with the system-provided init program"
SLOT="0"
LICENCES="BSD-2"

MYOPTIONS="
    ( providers:
        runit
        sinit
        sysvinit
    ) [[
        *description = [ provider for the init daemon ]
    ]]
    ncurses
    newnet [[ description = [
            Enable the new network stack (experimental)
        ] ]]
    pam
    tools [[ description = [ Build optional tools ]  ]]
"

PLATFORMS="~amd64 ~x86"

DEPENDENCIES="
    build+run:
        ncurses? ( sys-libs/ncurses )
        pam? ( sys-libs/pam )
    suggestion:
        net-misc/netifrc [[ description = [
            Network Interface Management Scripts
        ] ]]
    providers:runit? ( sys-apps/runit )
    providers:sinit? ( sys-apps/sinit )
    providers:sysvinit? ( sys-apps/sysvinit )
"

DEFAULT_SRC_COMPILE_PARAMS=(
    LIBNAME=${LIBDIR}
    LIBEXECDIR=/usr/$(exhost --target)/libexec/rc
    OS=Linux
)

DEFAULT_SRC_INSTALL_PARAMS=(
    PREFIX=/usr/$(exhost --target)
    SBINDIR=/usr/$(exhost --target)/bin
    SYSCONFDIR=/etc
    UPREFIX=/usr
    INCDIR=/usr/$(exhost --target)/include
    INCMODE=0755
    LIBDIR=/usr/$(exhost --target)/lib
    SHLIBDIR=/usr/$(exhost --target)/lib
    LIBMODE=0755
)

pkg_setup() {
    exdirectory --allow /etc/sysctl.d
}

src_prepare() {
    edo sed -e 's#readelf #${READELF:-readelf} #g'  \
            -i src/test/runtests.sh

    edo sed -i 's:0444:0644:' mk/sys.mk
}

src_compile() {
    export BRANDING="Exherbo Linux"

    export DEBUG=
    export MKTERMCAP=$(optionv ncurses)

    export AR=$(exhost --tool-prefix)ar
    export RANLIB=$(exhost --tool-prefix)ranlib
    export CC=$(exhost --tool-prefix)cc

    MAKE_ARGS="
        ${DEFAULT_SRC_COMPILE_PARAMS[@]}
        MKNET=$(option newnet)
        MKSELINUX=no
        MKAUDIT=no
        MKPAM=$(optionv pam)
        MKSTATICLIBS=no
        MKTOOLS=$(option tools)
    "

    emake ${MAKE_ARGS}
}

src_test() {
    export READELF=$(exhost --tool-prefix)readelf
    default
}

src_install() {
    emake \
        ${DEFAULT_SRC_INSTALL_PARAMS[@]} \
        ${MAKE_ARGS} \
        DESTDIR="${IMAGE}" install

    keepdir /usr/$(exhost --target)/libexec/rc/init.d
    keepdir /usr/$(exhost --target)/libexec/rc/tmp

    dodir /usr/share/"${PN}"
    edo cp -PR "${IMAGE}"/etc/runlevels "${IMAGE}"/usr/share/${PN}
    rm -rf "${IMAGE}"/etc/runlevels

    insinto /etc/logrotate.d
    newins "${FILES}"/openrc.logrotate openrc

    newpamd "${FILES}"/start-stop-daemon.pam start-stop-daemon

    dodoc ChangeLog *.md
    if option newnet; then
        dodoc README.newnet
    fi
}

pkg_postinst() {
    # Make our runlevels if they don't exist
    if [[ ! -e "${ROOT}"etc/runlevels ]] ||
            [[ -e "${ROOT}"etc/runlevels/.add_boot_init.created ]] ; then
        einfo "Copying across default runlevels"
        cp -RPp "${ROOT}"usr/share/${PN}/runlevels "${ROOT}"etc
        rm -f "${ROOT}"etc/runlevels/.add_boot_init.created
    else
        if [[ ! -e "${ROOT}"etc/runlevels/sysinit/devfs ]] ; then
            mkdir -p "${ROOT}"etc/runlevels/sysinit
            cp -RPp "${ROOT}"usr/share/${PN}/runlevels/sysinit/* \
                "${ROOT}"etc/runlevels/sysinit
        fi
        if [[ ! -e "${ROOT}"etc/runlevels/shutdown/mount-ro ]] ; then
            mkdir -p "${ROOT}"etc/runlevels/shutdown
            cp -RPp "${ROOT}"usr/share/${PN}/runlevels/shutdown/* \
                "${ROOT}"etc/runlevels/shutdown
        fi
    fi

    if [[ "${ROOT}" = "/" ]]; then
        if ! /usr/$(exhost --target)/libexec/rc/sh/migrate-to-run.sh; then
            ewarn "The dependency data could not be migrated to /run/openrc."
            ewarn "This means you need to reboot your system."
        fi
    fi

    # update the dependency tree after touching all files #224171
    [[ "${ROOT}" = "/" ]] &&
        "${ROOT}usr/$(exhost --target)/libexec"/rc/bin/rc-depend -u
}