Fix native Chez build on Termux

ober

6673f5119ab02343b2b274f3f9a3d62459262d66

diff --git a/Makefile b/Makefile
index 139305b..464234f 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,7 @@ SOURCE_DATE_EPOCH ?= $(shell git log -1 --format=%ct)
 export SOURCE_DATE_EPOCH
 HOST_UNAME_S := $(shell uname -s)
 HOST_UNAME_M := $(shell uname -m)
+HOST_UNAME_O := $(shell uname -o 2>/dev/null || true)
 STATIC ?= 0
 STATIC_ENABLED := $(filter 1 yes true on,$(STATIC))
 CHEZ_BUILD_DIR ?= $(JERBOA_HOME)/build/chez
@@ -27,6 +28,14 @@ else
 CHEZ_HARDEN ?= --enable-harden
 endif
 
+CHEZ_CONFIGURE_EXTRA ?=
+ifeq ($(HOST_UNAME_O),Android)
+CHEZ_TERMUX_PREFIX ?= $(if $(PREFIX),$(PREFIX),/data/data/com.termux/files/usr)
+CHEZ_TERMUX_CONFIGURE_VARS ?= CFLAGS=-I$(CHEZ_TERMUX_PREFIX)/include LDFLAGS=-L$(CHEZ_TERMUX_PREFIX)/lib LIBS=-liconv
+else
+CHEZ_TERMUX_CONFIGURE_VARS ?=
+endif
+
 CHEZ_INSTALL_FLAGS = \
 		$(if $(STATIC_ENABLED),--static) \
 		$(CHEZ_HARDEN) \
@@ -35,7 +44,9 @@ CHEZ_INSTALL_FLAGS = \
 		--installlib=$(CHEZ_PREFIX)/lib \
 	--installman=$(CHEZ_PREFIX)/share/man \
 	--installdoc=$(CHEZ_PREFIX)/share/doc \
-	--as-is
+	--as-is \
+	$(CHEZ_TERMUX_CONFIGURE_VARS) \
+	$(CHEZ_CONFIGURE_EXTRA)
 LIBDIRS = $(JERBOA_HOME)/lib:$(JERBOA_HOME)/vendor/jsqlite/src
 # Base directory for chez-* repos (legacy C FFI — see `make native` for Rust backend)
 JERBOA_EXT_DIR ?= $(HOME)/src
diff --git a/data/cookbooks.sexp b/data/cookbooks.sexp
index 6597238..11611a5 100644
--- a/data/cookbooks.sexp
+++ b/data/cookbooks.sexp
@@ -6506,4 +6506,13 @@
      "release-evidence" "chez" "jmcp")
    ("title"
      .
-     "Build Native Static Artifacts and Compare Reproducibility Reports")))
+     "Build Native Static Artifacts and Compare Reproducibility Reports"))
+ (("code"
+    .
+    "HOST_UNAME_O := $(shell uname -o 2>/dev/null || true)\nCHEZ_CONFIGURE_EXTRA ?=\nifeq ($(HOST_UNAME_O),Android)\nCHEZ_TERMUX_PREFIX ?= $(if $(PREFIX),$(PREFIX),/data/data/com.termux/files/usr)\nCHEZ_TERMUX_CONFIGURE_VARS ?= CFLAGS=-I$(CHEZ_TERMUX_PREFIX)/include LDFLAGS=-L$(CHEZ_TERMUX_PREFIX)/lib LIBS=-liconv\nelse\nCHEZ_TERMUX_CONFIGURE_VARS ?=\nendif\n\nCHEZ_INSTALL_FLAGS = \\\n        --installprefix=$(CHEZ_PREFIX) \\\n        --as-is \\\n        $(CHEZ_TERMUX_CONFIGURE_VARS) \\\n        $(CHEZ_CONFIGURE_EXTRA)") ("id" . "termux-native-chez-build-libiconv") ("imports")
+   ("notes"
+     .
+     "Termux reports uname -s as Linux and uname -o as Android. Chez Scheme's vendored make-android helper passes CFLAGS, LDFLAGS, and LIBS=-liconv because GNU libiconv is a separate Termux library. Gate these settings on Android so normal Linux builds do not link against a separate libiconv.")
+   ("tags" "chez" "termux" "android" "build" "libiconv"
+     "makefile")
+   ("title" . "Build native Chez on Termux with libiconv")))
diff --git a/data/error-fixes.sexp b/data/error-fixes.sexp
index 876f134..fd51283 100644
--- a/data/error-fixes.sexp
+++ b/data/error-fixes.sexp
@@ -2552,4 +2552,18 @@
    ("pattern"
      .
      "ld: cannot find -lncurses: No such file or directory")
+   ("type" . "linker"))
+ (("code_example"
+    .
+    "CHEZ_TERMUX_PREFIX ?= $(if $(PREFIX),$(PREFIX),/data/data/com.termux/files/usr)\nCHEZ_TERMUX_CONFIGURE_VARS ?= CFLAGS=-I$(CHEZ_TERMUX_PREFIX)/include LDFLAGS=-L$(CHEZ_TERMUX_PREFIX)/lib LIBS=-liconv")
+   ("explanation"
+     .
+     "Termux provides GNU libiconv as a separate package/library. Chez's Android helper already uses LIBS=-liconv, but Jerboa's native Chez configure wrapper must pass the same settings or ld.lld leaves iconv symbols unresolved.")
+   ("fix"
+     .
+     "On Termux/Android native Chez builds, pass Termux's prefix paths and libiconv to Chez configure: CFLAGS=-I$PREFIX/include LDFLAGS=-L$PREFIX/lib LIBS=-liconv. In this repo, keep it Android-gated in Makefile so ordinary Linux builds are unchanged.")
+   ("id" . "termux-chez-libiconv-link")
+   ("pattern"
+     .
+     "undefined symbol: libiconv_open|undefined symbol: libiconv_close|undefined symbol: libiconv")
    ("type" . "linker")))