# 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 github

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
"

PLATFORMS="~amd64 ~x86"

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

REMOTE_IDS="github:OpenRC/${PN}"

DEFAULT_SRC_COMPILE_PARAMS=(
    LIBNAME=lib
    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() {
    default

    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[@]}
        MKAUDIT=no
        MKNET=$(option newnet yes no)
        MKPAM=$(optionv pam)
        MKSELINUX=no
        MKSTATICLIBS=no
        MKSYSVINIT=no
    "

    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

    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
        if [[ ! -e "${ROOT}"etc/runlevels/nonetwork/local ]]; then
            cp -RPp "${ROOT}"usr/share/${PN}/runlevels/nonetwork \
                "${ROOT}"etc/runlevels
        fi
    fi

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