# Maintainer: David P. <megver83@parabola.nu>
# Maintainer (Artix): artoo <artoo@artixlinux.org>
# Maintainer (Artix): Chris Cromer <cromer@artixlinux.org>
# Contributor (Artix): williamh <williamh@gentoo.org>

_url=https://gitea.artixlinux.org/artix
_extra=1.3
_alpm=2.4.4

pkgbase=openrc
pkgname=('openrc' 'libeinfo')
pkgver=0.63.1
pkgrel=2
pkgdesc="OpenRC is a dependency-based init system that works with the system-provided init program"
arch=('x86_64')
arch+=('i686' 'armv7h')
url="https://github.com/OpenRC/openrc"
license=('BSD-2-Clause')
makedepends=('git' 'meson')
source=(
    "git+${url}.git#tag=${pkgver}"
    'openrc.logrotate'
    'sysctl.conf'
    'openrc-user.pam'
    "openrc-rc-conf-artix.patch"
    "openrc-artix-meson.patch"
    "git+${_url}/openrc-extra.git#tag=${_extra}"
    "git+${_url}/alpm-hooks.git#tag=${_alpm}"
    "0001-install-agetty-conf.patch"
)
sha256sums=('4e85a85371a603cc7a1c61eebd5ca6ff85a8f0e03483ba93cbfb33577d3d4901'
            '0b44210db9770588bd491cd6c0ac9412d99124c6be4c9d3f7d31ec8746072f5c'
            '874e50bd217fef3a2e3d0a18eb316b9b3ddb109b93f3cbf45407170c5bec1d6d'
            '5b6a7ceb46f057581dcdce76794c045b711ff2a8f063ced0dba682697da9ef06'
            '1f6f7a11e6937a1c9d23959e4bf4a6b04937f955a21e4e0e5be9e9e480835bcd'
            '0cb9b79b2e044c3641b20ec701a396dd5575bb5b1c48586ab57de9c2b7d24308'
            'e83f678c3e3d03067d0e5602bad82382cf74c8dc4fd7a1c18f3a3ceb3a21f0be'
            'e33444dba1b0a185eead8460a77f763bc99bca8cb072dbb90e90a29393d4f865'
            '3ad4a809807312c4489c744ce4ad9b5d18bc37caea09f52e90580c1ae457997d')

prepare() {
    cd "${pkgbase}"
    # apply patch from the source array (should be a pacman feature)
    local src
    for src in "${source[@]}"; do
        src="${src%%::*}"
        src="${src##*/}"
        [[ $src = *.patch ]] || continue
        echo "Applying patch $src..."
        patch -Np1 < "../$src"
    done
}

check(){
    meson test -C build --print-errorlogs
}

build(){
    local _meson_options=()
    _meson_options+=(
        -Dbranding="\"Parabola GNU/Linux-libre\""
        --sbindir=/usr/bin
        --bindir=/usr/bin
        -Dshell=/bin/bash
        -Dpam=true
        -Dsysvinit=true
        -Dpkgconfig=true
        -Dbash-completions=true
        -Dzsh-completions=true
        -Dnewnet=false
        -Daudit=enabled
        -Dselinux=disabled
        -Dlibrcdir=openrc
    )

    arch-meson "${pkgbase}" build "${_meson_options[@]}"

    meson compile -C build
}

package_openrc() {
    pkgdesc="Universal init system"
    depends=(
        'audit' #'libaudit.so'
        'bash'
        'glibc'
        'inetutils'
        'libcap' 'libcap.so'
        'netifrc'
        'pam' 'libpam.so'
        'psmisc'
        'perl'
        'libeinfo' 'libeinfo.so'
    )
    optdepends=(
        'networkmanager-openrc: networkmanager init script'
        'elogind-openrc: elogind init script'
    )
    provides=(
        'init-rc'
        'svc-manager'
        'librc.so'
    )
    conflicts=('init-rc' 'svc-manager')
    replaces=(openrc-{deptree2dot,{bash,zsh}-completions})
    backup=(
        'etc/rc.conf'
        'etc/conf.d/consolefont'
        'etc/conf.d/keymaps'
        'etc/conf.d/hostname'
        'etc/conf.d/modules'
        'etc/conf.d/hwclock'
        'etc/conf.d/etmpfiles-dev'
        'etc/conf.d/etmpfiles-setup'
        'etc/conf.d/udev'
        'etc/conf.d/udev-trigger'
        'etc/conf.d/udev-settle'
        'etc/conf.d/localmount'
        'etc/conf.d/netmount'
        'etc/conf.d/bootmisc'
        'etc/conf.d/dmesg'
        'etc/conf.d/devfs'
        'etc/conf.d/killprocs'
        'etc/conf.d/swap'
        'etc/conf.d/agetty.tty'{1,2,3,4,5,6}
    )

    meson install -C build --destdir "${pkgdir}"

    # user pam
    install -m755 "${srcdir}"/openrc-user.pam "${pkgdir}"/etc/pam.d/openrc-user

    install -Dm644 "${srcdir}/${pkgbase}".logrotate "${pkgdir}"/etc/logrotate.d/"${pkgname}"

    install -d "${pkgdir}"/usr/lib/{openrc/cache,binfmt.d,sysctl.d}

    # sysctl defaults
    install -m755 "${srcdir}"/sysctl.conf "${pkgdir}"/usr/lib/sysctl.d/50-default.conf

    # license
    install -Dm644 "${pkgbase}"/LICENSE "${pkgdir}"/usr/share/licenses/"${pkgname}"/LICENSE

    # openrc extra; agetty,kmod,udev,tmpfiles,sysusers
    make -C "${pkgbase}"-extra DESTDIR="${pkgdir}" install

    # pacman hooks
    make -C alpm-hooks DESTDIR="${pkgdir}" install_openrc

    # remove suport dir
    rm -r "${pkgdir}"/usr/share/openrc

    # remove init symlink
    rm -v "${pkgdir}"/usr/bin/init

    install -m755 "${pkgbase}"/support/deptree2dot/deptree2dot "${pkgdir}"/usr/bin/deptree2dot

    # split out libeinfo
    install -d "${srcdir}"/_libeinfo/usr/{include,lib/{pkgconfig,openrc/bin},share/man/man3}
    mv -v "${pkgdir}"/usr/include/einfo.h "${srcdir}"/_libeinfo/usr/include/
    mv -v "${pkgdir}"/usr/lib/libeinfo.so* "${srcdir}"/_libeinfo/usr/lib/
    mv -v "${pkgdir}"/usr/lib/openrc/bin/e* "${srcdir}"/_libeinfo/usr/lib/openrc/bin/
    mv -v "${pkgdir}"/usr/lib/pkgconfig/einfo.pc "${srcdir}"/_libeinfo/usr/lib/pkgconfig/
    mv -v "${pkgdir}"/usr/share/man/man3/e*.3 "${srcdir}"/_libeinfo/usr/share/man/man3/
}

package_libeinfo() {
    pkgdesc="Pretty console informational display"
    depends=(
        'glibc'
    )
    provides=(
        'libeinfo.so'
    )

    mv -v "${srcdir}"/_libeinfo/* "${pkgdir}"/

    # license
    install -Dm644 "${pkgbase}"/LICENSE "${pkgdir}"/usr/share/licenses/"${pkgname}"/LICENSE
}
