#!/bin/bash # ============================================================================ # DarkForge Linux — Phase 0, Chapter 6: Ncurses # ============================================================================ # Purpose: Cross-compile the ncurses library (terminal handling). Required # by bash, many TUI programs, and the installer. # Inputs: ${LFS}/sources/ncurses.tar.gz (unversioned tarball from mirror) # Outputs: ncurses libraries and tic utility in ${LFS}/usr/ # Assumes: Cross-toolchain (Ch.5) complete # Ref: LFS 13.0 §6.3 # ============================================================================ set -euo pipefail source "${LFS}/sources/darkforge-env.sh" PACKAGE="ncurses" SRCDIR="${LFS}/sources" echo "=== Building ${PACKAGE} (Temporary Tool) ===" cd "${SRCDIR}" # The mirror provides ncurses.tar.gz (unversioned). Auto-detect the # directory name inside the tarball. tar -xf ncurses.tar.gz NCDIR=$(find . -maxdepth 1 -type d -name 'ncurses-*' | head -1) if [ -z "${NCDIR}" ]; then echo "ERROR: Could not find ncurses-* directory after extraction" exit 1 fi VERSION="${NCDIR#./ncurses-}" echo " Detected version: ${VERSION}" cd "${NCDIR}" # First, build the tic program that runs on the host # This is needed to create the terminal database during install sed -i s/mawk// configure mkdir build pushd build ../configure make -C include make -C progs tic popd # Now cross-compile ncurses for the target ./configure \ --prefix=/usr \ --host="${LFS_TGT}" \ --build="$(./config.guess)" \ --mandir=/usr/share/man \ --with-manpage-format=normal \ --with-shared \ --without-normal \ --with-cxx-shared \ --without-debug \ --without-ada \ --disable-stripping make make DESTDIR="${LFS}" TIC_PATH="$(pwd)/build/progs/tic" install # Fix library so that it can be found by linker ln -sv libncursesw.so "${LFS}/usr/lib/libncurses.so" # Create pkg-config compatibility for programs that look for -lncurses sed -e 's/^#if.*XOPEN.*$/#if 1/' -i "${LFS}/usr/include/curses.h" cd "${SRCDIR}" rm -rf "${NCDIR}" echo "=== ${PACKAGE}-${VERSION} complete ==="