# Maintainer: Alexey Pavlov <alexpux@gmail.com>

pkgname=("util-linux" "libutil-linux" "libutil-linux-devel")
_pkgmajor=2.40
pkgver=${_pkgmajor}.2
pkgrel=2
pkgdesc="Miscellaneous system utilities for Linux"
arch=('i686' 'x86_64')
license=('spdx:GPL-2.0-or-later')
url="https://www.kernel.org/pub/linux/utils/util-linux/"
msys2_references=(
  "anitya: 8179"
  "cpe: cpe:/a:andries_brouwer:util-linux"
  "cpe: cpe:/a:kernel:util-linux"
  "cpe: cpe:/a:linux:util-linux"
  "cpe: cpe:/a:util-linux_project:util-linux"
)
makedepends=('autotools'
             'gcc'
             'gettext-devel'
             'gtk-doc'
             'libiconv-devel'
             'libreadline-devel'
             'libsqlite-devel'
             'libxcrypt-devel'
             'ncurses-devel'
             'zlib-devel')
source=(https://www.kernel.org/pub/linux/utils/$pkgname/v${_pkgmajor}/${pkgname}-${pkgver}.tar.xz
        2.24.2-libintl.patch
        2.25.1-relocate-sbin-to-usr-bin.patch
        2.33.1-cygwin-cpuset.patch
        2.39.3-cygwin-fallocate.patch
        2.39.3-cygwin-include.patch
        2.39.3-cygwin-more.patch
        2.39.3-testsuite.patch
        2.40.2-agetty.patch
        2.40.2-col.patch
        2.40.2-libblkid-topology.patch
        2.40.2-probe.patch
        2.40.2-setsid.patch
        2.40.2-uuid_time.patch
        msys2-2.40.2-taskset.patch
        msys2-2.40.2-fallocate.patch)
sha256sums=('d78b37a66f5922d70edf3bdfb01a6b33d34ed3c3cafd6628203b2a2b67c8e8b3'
            'a678a08fa18fc2ad34bc2a39bb0ff983f76803d4df742daf9d5e7b0d1d3b76f6'
            'd6bfc7e34349a98c8d110f1e216bd16d6f1edf45c369cda8c6301fb994986d13'
            '5536be94962e4b3cbc746811b6a7c40f11adc6b6d13ac91a5396c58af1dedf80'
            '7cf5f2cd65c7d517ea61c6d36a87bfec596df5412d2e59d982b6316343f500fb'
            '224505c3624f61f085130b4bc440c6237b19536bcdda57599ea4100f8b704d42'
            '60030e9c1f7a77eb317ac415d521b0a8c6da6b761f940664874f6eeeb7a0efd0'
            'd55723ab9f563f8c614b7d920c0feb9f2f47e49403247e6e282e449160141918'
            '2ea8cc78fd90a3149760d9bedc6152fd974bba039e7ad08c0b305fa3d2b35f8f'
            '5c0e64b9b7334bee98cfd76607a39ab61ee3f14c6e79184b60a9ecc56052fd8d'
            '165523f857d04ad5b60028d94a4d09466c5042714bb0b16fbcc93934c4739465'
            'f77fcbfba6c6ed4ad9a722df562bd9b2b2675e64a11bf0f323f0868cf3ba5738'
            '3a38dec3d3dbaf012b52511368c40bfd8108616fee74287603f3fd5ae9680402'
            'f6954765c98b956d1006e14e43ee9ce14b423e91397e251d978a6d2d5947cbd0'
            '1616f09d37ce37f2d102dad6494fa111a64b396cc9308736f99a7565dcb06028'
            '923c9bec7a508e6e091bda54bcc974e93dcb578b858ae0f9ae2a4ff53dbea93d')

prepare() {
  cd ${pkgname}-${pkgver}

  patch -p2 -i ${srcdir}/2.24.2-libintl.patch
  patch -p1 -i ${srcdir}/2.25.1-relocate-sbin-to-usr-bin.patch
  patch -p2 -i ${srcdir}/2.33.1-cygwin-cpuset.patch
  patch -p2 -i ${srcdir}/2.39.3-cygwin-fallocate.patch
  patch -p2 -i ${srcdir}/2.39.3-cygwin-include.patch
  patch -p2 -i ${srcdir}/2.39.3-cygwin-more.patch
  patch -p2 -i ${srcdir}/2.39.3-testsuite.patch
  patch -p2 -i ${srcdir}/2.40.2-agetty.patch
  patch -p2 -i ${srcdir}/2.40.2-col.patch
  patch -p2 -i ${srcdir}/2.40.2-libblkid-topology.patch
  patch -p2 -i ${srcdir}/2.40.2-probe.patch
  patch -p2 -i ${srcdir}/2.40.2-setsid.patch
  patch -p2 -i ${srcdir}/2.40.2-uuid_time.patch
  # TODO: find out where Cygwin's util-linux package is getting sys/syscall.h
  # and drop these patches in favor of that
  patch -p1 -i ${srcdir}/msys2-2.40.2-taskset.patch
  patch -p1 -i ${srcdir}/msys2-2.40.2-fallocate.patch
  autoreconf -fi
}

build() {
  mkdir -p build-${CHOST} && cd build-${CHOST}

  CPPFLAGS+=" -D__USE_LINUX_IOCTL_DEFS"

  export MSYSTEM=CYGWIN
  local CYGWIN_CHOST="${CHOST/-msys/-cygwin}"
  local -a extra_config
  # 32-bit cygwin only has 32-bit time_t
  # https://github.com/msys2/MSYS2-packages/issues/4078
  #
  # fallocate only builds for Cygwin 3.5+, and i686 is stuck on 3.3
  if [[ "$CARCH" == "i686" ]]; then
    extra_config+=("--disable-year2038" "--disable-fallocate")
  fi
  ../${pkgname}-${pkgver}/configure \
    --build=${CYGWIN_CHOST} \
    --prefix=/usr \
    --bindir=/usr/bin \
    --sbindir=/usr/bin \
    --libexecdir=/usr/lib \
    --libdir=/usr/lib \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --runstatedir=/var/run \
    --enable-libuuid \
    --enable-libuuid-force-uuidd \
    --enable-libblkid \
    --enable-libfdisk \
    --disable-libmount \
    --disable-mount \
    --disable-losetup \
    --disable-fsck \
    --disable-partx \
    --enable-uuidd \
    --disable-mountpoint \
    --disable-unshare \
    --disable-nsenter \
    --disable-setpriv \
    --disable-eject \
    --enable-agetty \
    --enable-cramfs \
    --enable-bfs \
    --disable-fdformat \
    --disable-hwclock \
    --disable-wdctl \
    --disable-switch_root \
    --disable-pivot_root \
    --disable-ipcrm \
    --disable-ipcs \
    --disable-tunelp \
    --disable-kill \
    --disable-last \
    --disable-lslogins \
    --disable-utmpdump \
    --disable-line \
    --disable-mesg \
    --disable-raw \
    --enable-rename \
    --disable-vipw \
    --disable-newgrp \
    --disable-chfn-chsh \
    --disable-login \
    --enable-nologin \
    --disable-sulogin \
    --disable-su \
    --disable-runuser \
    --enable-ul \
    --enable-more \
    --enable-pg \
    --disable-setterm \
    --disable-wall \
    --disable-write \
    --disable-use-tty-group \
    --disable-makeinstall-chown \
    --disable-makeinstall-setuid \
    --without-libiconv-prefix \
    --without-libintl-prefix \
    "${extra_config[@]}" \
    SOLIB_LDFLAGS=-no-undefined

  make
  make DESTDIR=${srcdir}/dest install
}

check() {
  cd build-${CHOST}

  # Remove || true once testcase doesn't cause failures.
  make check || true
}

package_util-linux() {
  pkgdesc="Collection of basic system utilities"
  depends=("coreutils" "libutil-linux" "libiconv" "libreadline" "libsqlite")
  provides=('getopt')
  conflicts=('getopt')
  replaces=('getopt')

  mkdir -p ${pkgdir}/usr/bin
  cp dest/usr/bin/*.exe ${pkgdir}/usr/bin/
  cp -rf dest/usr/share ${pkgdir}/usr/
}

package_libutil-linux() {
  pkgdesc="Block device ID and Universally Unique ID libraries"
  provides=("libblkid" "libuuid" "libsmartcols")
  depends=("gcc-libs" "libintl")

  mkdir -p ${pkgdir}/usr/bin
  cp ${srcdir}/dest/usr/bin/*.dll ${pkgdir}/usr/bin/
}

package_libutil-linux-devel() {
  pkgdesc="Block device ID and Universally Unique ID headers and libraries."
  provides=("libblkid-devel" "libuuid-devel" "libsmartcols-devel")
  depends=("libutil-linux")
  options=('staticlibs')

  mkdir -p ${pkgdir}/usr
  cp -rf dest/usr/lib ${pkgdir}/usr/
  cp -rf dest/usr/include ${pkgdir}/usr/
}
