pkgname = "gcc"
pkgver  = "15.2.0"
source  = f"https://ftpmirror.gnu.org/gnu/gcc/gcc-{pkgver}/gcc-{pkgver}.tar.xz"
builddir = f"/tmp/fempkg/build/{pkgname}/{pkgname}-{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 /tmp/fempkg/build {fembuilddir} || true && cd {fembuilddir} && tar -xvf /var/lib/fempkg/pkgs/{pkgname}-{pkgver}.tar.xz",

    # Patch multilib directories
    f"cd {builddir} && sed -e '/m64=/s/lib64/lib/' "
    f"-e '/m32=/s/m32=.*/m32=..\\/lib32$(call if_multiarch,:i386-linux-gnu)/' -i.orig gcc/config/i386/t-linux64",

    # Make -mstackrealign default for 32-bit
    f"cd {builddir} && sed '/STACK_REALIGN_DEFAULT/s/0/(!TARGET_64BIT \\&\\& TARGET_SSE)/' -i gcc/config/i386/i386.h",

    # Make build directory
    f"cd {builddir} && mkdir -v build",

    # 64-bit + multilib configure
    f"cd {builddir}/build && export mlist=m64,m32 && "
    f"../configure --prefix=/usr LD=ld "
    f"--enable-languages=c,c++ "
    f"--enable-default-pie --enable-default-ssp --enable-host-pie "
    f"--enable-multilib --with-multilib-list=$mlist "
    f"--disable-bootstrap --disable-fixincludes --with-system-zlib",

    # Compile and install
    f"cd {builddir}/build && make -j$(nproc)",
    f"cd {builddir}/build && make DESTDIR={destdir} install",

    # Fix ownership of installed headers
    f"cd {builddir}/build && "
    f"chown -v -R root:root {destdir}/usr/lib/gcc/$(gcc -dumpmachine)/{pkgver}/include{{,-fixed}}",

    # Create required symlinks
    f"cd {builddir}/build && ln -svr /usr/bin/cpp {destdir}/usr/lib",
    f"cd {builddir} && ln -sv gcc {destdir}/usr/bin/cc",
    f"install -v -d -m755 {destdir}/usr/share/man/man1",
    f"cd {builddir}/build && ln -sv gcc.1 {destdir}/usr/share/man/man1/cc.1",
    f"mkdir -p {destdir}/usr/lib/bfd-plugins/",
    f"cd {builddir}/build && "
    f"ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/{pkgver}/liblto_plugin.so {destdir}/usr/lib/bfd-plugins/",

    # Move GDB auto-load files
    f"cd {builddir}/build && mkdir -pv {destdir}/usr/share/gdb/auto-load/usr/lib",
    f"cd {builddir}/build && mv -v {destdir}/usr/lib/*gdb.py {destdir}/usr/share/gdb/auto-load/usr/lib",
    f"cd {builddir} && mkdir -p {destdir}/usr/share/licenses/{pkgname} && "
    f"cp -v COPYING COPYING.LIB COPYING.RUNTIME COPYING3 COPYING3.LIB "
    f"{destdir}/usr/share/licenses/{pkgname}/",

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