pkgname =  "udev"
pkgver  = "259" 
lfs_udev_ver = "20230818"
source  = f"https://github.com/systemd/systemd/archive/v{pkgver}/systemd-{pkgver}.tar.gz" # ok
builddir = f"/tmp/fempkg/build/{pkgname}/systemd-{pkgver}"
fembuilddir = f"/tmp/fempkg/build/{pkgname}"
outputdir = "/home/gabry/lfs-repo/binpkg"
manifestdir = "/home/gabry/lfs-repo/manifests"
destdir = f"{fembuilddir}/DESTDIR"
exports = f"export udev_helpers=$(grep \"'name' :\" ../src/udev/meson.build | awk '{{print $3}}' | tr -d \",'\" | grep -v 'udevadm')"

deps = []

build = [
    # Extract
    f"mkdir -p {fembuilddir} && cd {fembuilddir} && tar -xvf /var/lib/fempkg/pkgs/systemd-{pkgver}.tar.gz && wget https://anduin.linuxfromscratch.org/LFS/udev-lfs-{lfs_udev_ver}.tar.xz",

    # 64-bit build
    f"cd {builddir} && sed -e 's/GROUP=\"render\"/GROUP=\"video\"/' -e 's/GROUP=\"sgx\", //' -i rules.d/50-udev-default.rules.in",
    f"cd {builddir} && sed -i '/systemd-sysctl/s/^/#/' rules.d/99-systemd.rules.in",
    f"cd {builddir} && sed -e '/NETWORK_DIRS/s/systemd/udev/' -i src/libsystemd/sd-network/network-util.h",

    f"cd {builddir} && mkdir -pv build && cd build && meson setup .. --prefix=/usr --buildtype=release -D gcrypt=false -D mode=release -D "
    f"dev-kvm-mode=0660 -D link-udev-shared=false -D logind=false -D pam=false -D seccomp=false -D vconsole=false",

    f"cd {builddir}/build && {exports} && ninja udevadm systemd-hwdb $(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') "
    f"$(realpath libudev.so --relative-to .) $udev_helpers",

    f"""cd {builddir}/build && {exports} && install -vm755 -d {destdir}{{/usr/lib,/etc}}/udev/{{hwdb.d,rules.d,network}}
install -vm755 -d {destdir}/usr/{{lib,share}}/pkgconfig
install -vm755 udevadm                             {destdir}/usr/bin/
install -vm755 systemd-hwdb                        {destdir}/usr/bin/udev-hwdb
ln      -svfn  ../bin/udevadm                      {destdir}/usr/sbin/udevd
cp      -av    libudev.so{{,*[0-9]}}               {destdir}/usr/lib/
install -vm644 ../src/libudev/libudev.h            {destdir}/usr/include/
install -vm644 src/libudev/*.pc                    {destdir}/usr/lib/pkgconfig/
install -vm644 src/udev/*.pc                       {destdir}/usr/share/pkgconfig/
install -vm644 ../src/udev/udev.conf               {destdir}/etc/udev/
install -vm644 rules.d/* ../rules.d/README         {destdir}/usr/lib/udev/rules.d/
install -vm644 $(find ../rules.d/*.rules \\
                      -not -name '*power-switch*') {destdir}/usr/lib/udev/rules.d/
install -vm644 hwdb.d/*  ../hwdb.d/{{*.hwdb,README}} {destdir}/usr/lib/udev/hwdb.d/
install -vm755 $udev_helpers                       {destdir}/usr/lib/udev
install -vm644 ../network/99-default.link          {destdir}/usr/lib/udev/network""",

    f"cd {builddir}/build && tar -xvf ../../udev-lfs-{lfs_udev_ver}.tar.xz",
    f"cd {builddir}/build && {exports} && make -f udev-lfs-{lfs_udev_ver}/Makefile.lfs install",
    f"cd {builddir}/build && rm -rf *",

    #32-bit build
    f"cd {builddir}/build && PKG_CONFIG_PATH=\"/usr/lib32/pkgconfig\" CC=\"gcc -m32 -march=i686\" CXX=\"g++ -m32 -march=i686\" LANG=en_US.UTF-8 "
    f"meson setup --prefix=/usr --buildtype=release -Dpam=false -Dseccomp=false -Dmode=release -Ddev-kvm-mode=0660 -Dgcrypt=false -Dlink-udev-shared=false -Dlogind=false -Dvconsole=false ..",

    f"cd {builddir}/build && ninja $(grep -o -E \"^build (src/libudev|src/udev)[^:]*\" build.ninja | awk '{{ print $2 }}') "
    f"$(realpath libudev.so --relative-to .)",

    f"cd {builddir}/build && mkdir -pv {destdir}/usr/lib32/pkgconfig && cp -av libudev.so{{,*[0-9]}} {destdir}/usr/lib32/ && "
    f"sed -e \"s;/usr/lib;&32;g\" src/libudev/libudev.pc > {destdir}/usr/lib32/pkgconfig/libudev.pc",

    f"install -v -d -m755 {destdir}/usr/share/licenses/{pkgname}/",
    f"install -v -m644 {builddir}/LICENSE.GPL2 {destdir}/usr/share/licenses/{pkgname}/LICENSE.GPL2",
    f"install -v -m644 {builddir}/LICENSE.LGPL2.1 {destdir}/usr/share/licenses/{pkgname}/LICENSE.LGPL2.1",
    f"install -v -m644 {builddir}/LICENSES/Linux-syscall-note.txt {destdir}/usr/share/licenses/{pkgname}/Linux-syscall-note.txt",
    f"install -v -m644 {builddir}/LICENSES/MIT.txt {destdir}/usr/share/licenses/{pkgname}/MIT.txt",

    # Make tarball + manifests
    f"mkdir -p {outputdir} && cd {destdir} && tar --transform 's|^\\.||' -I zstd -cf {outputdir}/{pkgname}-{pkgver}.tar.zst .",
    f"mkdir -p {manifestdir} && tar -tf {outputdir}/{pkgname}-{pkgver}.tar.zst | grep -v '/$' > {manifestdir}/{pkgname}.txt",

    # Cleanup
    f"rm -rf {fembuilddir}"
]

triggers = [
    f"cd /tmp && udev-hwdb update"
]
