diff --git a/scripts/all.sh b/scripts/all.sh new file mode 100755 index 0000000..c85ec14 --- /dev/null +++ b/scripts/all.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Convenience wrapper: +# apply patches -> build -> install +# +# Env: +# SSLTYPE, TARGET, JOBS (see build.sh) +# PREFIX (see install.sh) + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$ROOT" + +./scripts/apply-patches.sh +./scripts/build.sh +./scripts/install.sh diff --git a/scripts/apply-patches.sh b/scripts/apply-patches.sh new file mode 100755 index 0000000..737fb99 --- /dev/null +++ b/scripts/apply-patches.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +PATCHDIR="${ROOT}/patches" + +usage() { + cat <&2 + exit 1 +fi + +# Apply patches only if they are not already applied. +# We use --dry-run to test applicability; if it fails, we assume it's already applied. +shopt -s nullglob +patches=( "$PATCHDIR"/000[1-4]-*.patch ) +#patches=( "$PATCHDIR"/*.patch ) +if (( ${#patches[@]} == 0 )); then + echo "ERROR: no patches found in $PATCHDIR" >&2 + exit 1 +fi + +for p in "${patches[@]}"; do + echo "==> Checking $p" + if patch --dry-run -p1 < "$p" >/dev/null 2>&1; then + echo "==> Applying $(basename "$p")" + patch -p1 < "$p" + else + echo "==> Skipping $(basename "$p") (already applied or does not apply cleanly)" + fi +done + +echo "Done." diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..bda029a --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +SSLTYPE="${SSLTYPE:-unix.nopwd}" # recommended +TARGET="${TARGET:-lnp}" # lnp is what you used successfully +JOBS="${JOBS:-$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)}" + +usage() { + cat < Cleaning previous build artifacts" + make clean || true + rm -f OSTYPE CFLAGS CCTYPE LDFLAGS OSCFLAGS ARCHIVE SPECIALS + rm -rf c-client mtest ipopd imapd mailutil mlock dmail tmail rebuild tools/an +fi + +echo "==> Building UW-IMAP: make ${TARGET} SSLTYPE=${SSLTYPE}" +# UW-IMAP makefiles are not always parallel-safe in all subdirs; use -j carefully. +# We'll still allow -j, but you can set JOBS=1 if you see race issues. +make -j"${JOBS}" "${TARGET}" "SSLTYPE=${SSLTYPE}" + +echo "Build done." diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..a1d967c --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +PREFIX="${PREFIX:-/usr/local/imap}" + +usage() { + cat <&2 + exit 1 +fi + +echo "==> Installing to PREFIX=$PREFIX" +install -d -m 0755 "$PREFIX/include" "$PREFIX/lib" + +echo "==> Installing headers" +# Only install the public headers (all .h in c-client/) +install -m 0644 "$SRC_HDR_DIR"/*.h "$PREFIX/include/" + +echo "==> Installing libc-client.a" +install -m 0644 "$SRC_LIB" "$PREFIX/lib/libc-client.a" + +echo "==> Done." +echo "Installed:" +echo " Headers: $PREFIX/include/*.h" +echo " Library: $PREFIX/lib/libc-client.a"