pkgname =  "shadow" # BLFS one for PAM support
pkgver  = "4.19.0" 
source  = f"https://github.com/shadow-maint/shadow/releases/download/{pkgver}/shadow-{pkgver}.tar.xz"
builddir = f"/tmp/fempkg/build/{pkgname}/shadow-{pkgver}"
fembuilddir = f"/tmp/fempkg/build/{pkgname}"
outputdir = "/home/gabry/lfs-repo/binpkg"
manifestdir = "/home/gabry/lfs-repo/manifests"
destdir = f"{fembuilddir}/DESTDIR"

deps = []

build = [
    # Extract
    f"mkdir -p /tmp/fempkg/build {fembuilddir} && cd {fembuilddir} && tar -xvf /var/lib/fempkg/pkgs/shadow-{pkgver}.tar.xz",

    # 64-bit build
    f"""cd {builddir} && \\
    sed -i 's/groups$(EXEEXT) //' src/Makefile.in && \\
    find man -name Makefile.in -exec sed -i 's/groups\\.1 / /' {{}} \\; && \\
    find man -name Makefile.in -exec sed -i 's/getspnam\\.3 / /' {{}} \\; && \\
    find man -name Makefile.in -exec sed -i 's/passwd\\.5 / /' {{}} \\; && \\
    sed -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD YESCRYPT@' \\
        -e 's@/var/spool/mail@/var/mail@' \\
        -e '/PATH=/{{s@/sbin:@@;s@/bin:@@}}' -i etc/login.defs && \
    ./configure --sysconfdir=/etc --disable-static --without-libbsd --with-{{b,yes}}crypt""",

    f"cd {builddir} && make -j$(nproc)",
    f"cd {builddir} && make exec_prefix=/usr pamddir= DESTDIR={destdir} install",

    f"install -v -m644 {destdir}/etc/login.defs {destdir}/etc/login.defs.orig",
    f"""for FUNCTION in FAIL_DELAY               \\
                FAILLOG_ENAB             \\
                LASTLOG_ENAB             \\
                MAIL_CHECK_ENAB          \\
                OBSCURE_CHECKS_ENAB      \\
                PORTTIME_CHECKS_ENAB     \\
                QUOTAS_ENAB              \\
                CONSOLE MOTD_FILE        \\
                FTMP_FILE NOLOGINS_FILE  \\
                ENV_HZ PASS_MIN_LEN      \\
                SU_WHEEL_ONLY            \\
                PASS_CHANGE_TRIES        \\
                PASS_ALWAYS_WARN         \\
                CHFN_AUTH ENCRYPT_METHOD \\
                ENVIRON_FILE
do
    sed -i "s/^${{FUNCTION}}/# &/" {destdir}/etc/login.defs
done""",

    f"mkdir -pv {destdir}/etc/pam.d",

    f"cd {destdir}/etc/pam.d && wget https://rocketleaguechatp.duckdns.org/login",
    f"cd {destdir}/etc/pam.d && wget https://rocketleaguechatp.duckdns.org/passwd",
    f"cd {destdir}/etc/pam.d && wget https://rocketleaguechatp.duckdns.org/su",
    f"cd {destdir}/etc/pam.d && wget https://rocketleaguechatp.duckdns.org/chpasswd",
    f"cd {destdir}/etc/pam.d && wget https://rocketleaguechatp.duckdns.org/chage",

    f"sed -e s/chpasswd/newusers/ {destdir}/etc/pam.d/chpasswd >{destdir}/etc/pam.d/newusers",
    f"""for PROGRAM in chfn chgpasswd chsh groupadd groupdel \\
               groupmems groupmod useradd userdel usermod
do
    install -v -m644 {destdir}/etc/pam.d/chage {destdir}/etc/pam.d/${{PROGRAM}}
    sed -i "s/chage/$PROGRAM/" {destdir}/etc/pam.d/${{PROGRAM}}
done""",
    f"if [ -f {destdir}/etc/login.access ]; then mv -v {destdir}/etc/login.access{{,.NOUSE}}; fi && "
    f"if [ -f {destdir}/etc/limits ]; then mv -v {destdir}/etc/limits{{,.NOUSE}}; fi",

    f"install -v -d -m755 {destdir}/usr/share/licenses/{pkgname}/",
    f"install -v -m644 {builddir}/COPYING {destdir}/usr/share/licenses/{pkgname}/LICENSE",

    # 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 {builddir} {fembuilddir}"
]
