gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

busybox 69 → 64: psmisc y bc, las dos piezas que el plan marcaba TRAER

psmisc 23.7 (killall pstree fuser prtstat pslog) y gavinhoward/bc 7.0.3 (bc Y dc
del mismo árbol). Ninguna estaba en el corpus, y lo de psmisc es lo que el plan
daba por cubierto sin estarlo: procps-ng NO trae killall ni pstree ni fuser —
procps-ng es ps/top/free/kill/pgrep/pkill/pidof/uptime/vmstat/w/watch.

bc es el de gavinhoward y no el de GNU por la cadena: C99 sin dependencias, bc y
dc en un árbol, y es el bc de sistema de Alpine y FreeBSD. El de GNU arrastra ed
y flex, y su dc va en otro paquete.

⚠ killall5 NO lo trae psmisc: es de sysvinit. Acá lo cubre arje-zero por FUNCIÓN
(es PID 1 y apaga él) ⇒ se retira con los indultos, no se reemplaza. Son 3 de los
4 que la tabla prometía, dicho así para que no vuelva a prometer lo que no hay.

Dos pisones de psmisc, los dos escritos en la receta para no repetirlos:

1. `-lncurses` no existe acá (la nuestra es widec ⇒ libncursesw.a). No sirve
   LIBS=-lncursesw —el AC_CHECK_LIB compila un programa de prueba CON -lncurses,
   no pregunta si el símbolo resuelve— ni la variable de caché con
   `make TERMCAP_LIB=…`, porque src_pstree_LDADD = @TERMCAP_LIB@ se sustituye en
   tiempo de configure y el Makefile queda con -lncurses LITERAL. Lo que funciona
   es un enlace libncurses.a → libncursesw.a en el scratch y un -L.

2. Y ese -L se comió el -static. El harness inyecta LDFLAGS=-static para las
   recetas link="static" (takana-build/src/lib.rs:285); reemplazar LDFLAGS lo
   pierde. Los seis binarios sellaron DINÁMICOS sin que nada fallara: killall
   respondía bien y sólo pstree moría en ejecución con `Error relocating
   /lib/libncursesw.so.6`, tomando la librería del anfitrión. Un `file` lo dice en
   un segundo; ninguna prueba del build lo iba a decir.

Los dos van a `base` en targets.toml, y el censo baja de 69 a 64.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

4357b29cb763d39cf9f0970b55abd81d6fa8efc0 · ruwaq Sergio · (1 killa ñawpaq) · tayta 5fd874644 · kay commitpi sach'ata qhaway

Semántico sayk'uy

Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.

5 qillqakuna · +155 −5

diff --git a/docs/plan-botar-busybox.md b/docs/plan-botar-busybox.md
index 1dbe0e87..de2f8d3c 100644
--- a/docs/plan-botar-busybox.md
+++ b/docs/plan-botar-busybox.md
@@ -1215,3 +1215,40 @@ repo que escribe la EXPECTATIVA (este applet debería venir de este paquete) con
 Es la misma forma que [[subcomando-sin-driver]]: el problema no se ve mirando el artefacto, se ve
 cruzándolo con lo que alguien prometió que tendría.
 
+
+## Segunda tanda: las dos piezas que el plan marcaba TRAER (2026-09-21)
+
+> **64 applets** sólo-busybox, desde 79. Cinco más, y otra vez sin escribir userland.
+
+| receta | applets | sello |
+|---|---|---|
+| `recipes/psmisc.toml` (23.7) | `killall pstree fuser` (+`prtstat pslog`) | `b3:b361bd04…` |
+| `recipes/bc.toml` (gavinhoward/bc 7.0.3) | `bc dc` | `b3:050efb84…` |
+
+**`bc` es gavinhoward/bc y no el de GNU**, y la razón es de cadena: C99 sin dependencias, `bc` **y**
+`dc` del mismo árbol, y es el bc de sistema de Alpine y FreeBSD. El de GNU arrastra `ed` y `flex`
+como build-deps y su `dc` va en otro paquete.
+
+⚠ **`killall5` NO lo trae psmisc** — es de sysvinit. Acá lo cubre `arje-zero` por FUNCIÓN (es PID 1
+y apaga él), así que el applet se retira con los indultos en vez de reemplazarse. Son 3 de los 4 que
+la tabla prometía, y decirlo así evita que vuelva a prometer lo que no hay.
+
+### Los dos pisones de psmisc, que enseñan más que el resultado
+
+**1 · `-lncurses` no existe en este corpus, y hay dos formas de no arreglarlo.** El `configure` de
+psmisc busca `tgetent` por NOMBRE de librería (`-ltinfo`, `-lncurses`, `-ltermcap`) y la nuestra es
+`--enable-widec`, o sea `libncursesw.a`. Falló primero con `LIBS=-lncursesw` —el `AC_CHECK_LIB` no
+pregunta si el símbolo resuelve, **compila un programa de prueba con `-lncurses`**— y falló después
+con `ac_cv_lib_ncurses_tgetent=yes` + `make TERMCAP_LIB=-lncursesw`, porque
+`src_pstree_LDADD = @TERMCAP_LIB@` se sustituye **en tiempo de configure** y el Makefile queda con
+`-lncurses` literal, no con una referencia a la variable. Lo que funciona es darle el nombre que
+busca: un enlace `libncurses.a → libncursesw.a` en el scratch y un `-L` a ese directorio.
+
+**2 · Y ese `-L` se comió el `-static`.** Primera versión: `LDFLAGS="-L$PWD/.compat-ncurses"`. El
+harness inyecta `LDFLAGS=-static` para las recetas `link = "static"`
+(`takana-build/src/lib.rs:285`), así que reemplazarlo lo pierde. **Los seis binarios sellaron
+DINÁMICOS y nada falló**: `killall --version` contestaba bien, y sólo `pstree` —el único que enlaza
+ncurses— moría en ejecución con `Error relocating /lib/libncursesw.so.6`, tomando la librería del
+anfitrión. Un `file` sobre los binarios lo dice en un segundo; ninguna prueba del build lo iba a
+decir. Es [[cgo-sin-baseline-sigill]] otra vez: **redefinir una variable que el harness ya puebla
+pierde en silencio lo que el harness había puesto**, y el síntoma aparece lejos.
diff --git a/docs/state/busybox-applets.tsv b/docs/state/busybox-applets.tsv
index e8b4a1c6..1b6afb3f 100644
--- a/docs/state/busybox-applets.tsv
+++ b/docs/state/busybox-applets.tsv
@@ -15,7 +15,7 @@ awk	awk-DECISION	—	n/a	DECIDIR — gawk (C) y goawk (Go) sellados sin perfil;
 base32	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	BASE32	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 base64	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	BASE64	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 basename	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	BASENAME	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
-bc	bc-TRAER	—	n/a	TRAER — no hay receta bc	BC	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
+bc	bc-TRAER	—	n/a	TRAER — no hay receta bc	BC	sigue	bc	2026-09-21	bc	2026-09-21
 beep	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	BEEP	RETIRADO	n/a (retirado)		n/a (retirado)	
 blkdiscard	util-linux	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	BLKDISCARD	sigue	util-linux	2026-09-21	util-linux	2026-09-21
 blkid	util-linux	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	BLKID	sigue	e2fsprogs,util-linux	2026-09-21	e2fsprogs,util-linux	2026-09-21
@@ -51,7 +51,7 @@ cryptpw	shadow	sellada+perfil	NO-drop-in	shadow no lo trae	CRYPTPW	sigue	SOLO-BU
 cttyhack	getty-ESCRIBIR	—	n/a	ESCRIBIR — hoy la card de getty ejecuta /bin/busybox (lib.rs:429)	CTTYHACK	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
 cut	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	CUT	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 date	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	DATE	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
-dc	bc-TRAER	—	n/a	TRAER — no hay receta bc	DC	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
+dc	bc-TRAER	—	n/a	TRAER — no hay receta bc	DC	sigue	bc	2026-09-21	bc	2026-09-21
 dd	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	DD	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 deallocvt	kbd	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	DEALLOCVT	sigue	kbd	2026-09-21	kbd	2026-09-21
 delgroup	shadow	sellada+perfil	NO-drop-in	shadow da groupdel	DELGROUP	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
@@ -107,7 +107,7 @@ fsync	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	FSYNC	RETIRA
 ftpd	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	FTPD	RETIRADO	n/a (retirado)		n/a (retirado)	
 ftpget	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	FTPGET	RETIRADO	n/a (retirado)		n/a (retirado)	
 ftpput	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	FTPPUT	RETIRADO	n/a (retirado)		n/a (retirado)	
-fuser	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	FUSER	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
+fuser	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	FUSER	sigue	psmisc	2026-09-21	psmisc	2026-09-21
 getopt	util-linux	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	GETOPT	sigue	util-linux	2026-09-21	util-linux	2026-09-21
 getty	getty-ESCRIBIR	—	n/a	ESCRIBIR — hoy la card de getty ejecuta /bin/busybox (lib.rs:429)	GETTY	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
 grep	grep-posix	—	n/a	ESCRIBIR — CLI POSIX sobre grep-searcher/grep-regex de ripgrep; `grep` GNU (sellado, sin perfil) como puente	GREP	sigue	grep	2026-09-21	grep	2026-09-21
@@ -154,7 +154,7 @@ iprule	iproute2	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritor
 iptunnel	iproute2	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	IPTUNNEL	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
 kbd_mode	kbd	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	KBD_MODE	sigue	kbd	2026-09-21	kbd	2026-09-21
 kill	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	KILL	sigue	coreutils,procps-ng,util-linux,uutils	2026-09-21	coreutils,procps-ng,util-linux,uutils	2026-09-21
-killall	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	KILLALL	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
+killall	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	KILLALL	sigue	psmisc	2026-09-21	psmisc	2026-09-21
 killall5	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	KILLALL5	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
 klogd	hammerd	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	KLOGD	RETIRADO	n/a (retirado)		n/a (retirado)	
 last	util-linux	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	LAST	sigue	util-linux	2026-09-21	util-linux	2026-09-21
@@ -247,7 +247,7 @@ printenv	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ningun
 printf	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	PRINTF	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 ps	procps-ng	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	PS	sigue	procps-ng	2026-09-21	procps-ng	2026-09-21
 pscan	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	PSCAN	RETIRADO	n/a (retirado)		n/a (retirado)	
-pstree	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	PSTREE	sigue	SOLO-BUSYBOX	2026-09-21	SOLO-BUSYBOX	2026-09-21
+pstree	psmisc-TRAER	—	n/a	TRAER — no hay receta psmisc; procps-ng NO trae killall/pstree	PSTREE	sigue	psmisc	2026-09-21	psmisc	2026-09-21
 pwd	uutils	sellada SIN perfil	sin-verificar	construida y no viaja en ninguna imagen	PWD	sigue	coreutils,uutils	2026-09-21	coreutils,uutils	2026-09-21
 pwdx	procps-ng	sellada+perfil	sin-verificar	base,cli,escritorio-cosmic,escritorio-gnome,escritorio-kde,escritorio-sway,servidor	PWDX	sigue	procps-ng	2026-09-21	procps-ng	2026-09-21
 raidautorun	BORRAR	—	n/a	BORRAR — sale del defconfig, no se reemplaza	RAIDAUTORUN	RETIRADO	n/a (retirado)		n/a (retirado)	
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 60d5ad86..4cb5e37a 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -134,6 +134,13 @@ paquetes = [
   # así que el único `xz` de la imagen era el applet de busybox. Ampliar la canónica re-hashearía
   # a sus 14 consumidores; va como variante, igual que `zstd-cli`.
   "xz-tools",
+  # `psmisc` y `bc` (2026-09-21): las dos piezas que el censo marcaba como TRAER, y ninguna estaba
+  # en el corpus. `psmisc` da `killall pstree fuser prtstat pslog` — y esto es lo que el plan daba
+  # por cubierto y no lo estaba: **`procps-ng` NO los trae**. procps-ng es `ps top free kill pgrep
+  # pkill pidof uptime vmstat w watch`; matar por NOMBRE y el árbol de procesos son de psmisc.
+  # `bc` es gavinhoward/bc: `bc` Y `dc` del mismo árbol, C99 sin dependencias, el que usan Alpine y
+  # FreeBSD. La alternativa de GNU arrastra `ed` y `flex`, y su `dc` va en otro paquete.
+  "psmisc", "bc",
 ]
 
 [perfil.cli]
diff --git a/recipes/bc.toml b/recipes/bc.toml
new file mode 100644
index 00000000..6cbcea0b
--- /dev/null
+++ b/recipes/bc.toml
@@ -0,0 +1,39 @@
+# bc 7.0.3 (gavinhoward/bc) — la calculadora POSIX: `bc` Y `dc` en un solo árbol, sin dependencias.
+#
+# ── POR QUÉ ESTA IMPLEMENTACIÓN Y NO LA DE GNU ──────────────────────────────────────────────────
+# El corpus no tenía ninguna: `bc` y `dc` eran dos de los applets que en toda la imagen sólo proveía
+# busybox (medido con `scripts/busybox-censo-proveedores.py`, ver `docs/plan-botar-busybox.md`).
+# Upstream hay dos candidatos reales:
+#   · GNU bc — arrastra `ed` y `flex` como build-deps, y `dc` es OTRO paquete (dc de GNU va aparte).
+#   · gavinhoward/bc — C99 puro, CERO dependencias, `bc` + `dc` del mismo árbol, y es el que usan
+#     Alpine y FreeBSD como su bc de sistema. Implementa POSIX bc + las extensiones de GNU.
+# Para una cadena musl donde cada dep nueva es trabajo, la segunda gana sin discusión.
+#
+# ── BUILD ───────────────────────────────────────────────────────────────────────────────────────
+# No es autotools: `configure.sh` propio que escribe el Makefile. No acepta `--build`/`--host`, así
+# que NO se le pasan (un `--host` a un configure que no lo entiende termina en la lista de
+# argumentos ignorados o en un error, según el script). El cross a musl lo hace `zig cc` vía $CC.
+
+name    = "bc"
+version = "7.0.3"
+license = "BSD-2-Clause"
+
+[source]
+tarball = "https://github.com/gavinhoward/bc/releases/download/7.0.3/bc-7.0.3.tar.xz"
+sha256  = "91eb74caed0ee6655b669711a4f350c25579778694df248e28363318e03c7fc4"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+flags    = []
+
+[deps]
+build = ["make"]
+
+[build.phases]
+# `-p bc -p dc` NO existe acá: el binario es multicall por enlaces, como busybox. `PREFIX` en vez de
+# `--prefix` porque así lo quiere su configure.sh.
+configure = './configure.sh --prefix=/usr --disable-nls'
+compile   = 'make'
+install   = 'make DESTDIR=/out install'
diff --git a/recipes/psmisc.toml b/recipes/psmisc.toml
new file mode 100644
index 00000000..817f3c07
--- /dev/null
+++ b/recipes/psmisc.toml
@@ -0,0 +1,67 @@
+# psmisc 23.7 — `killall`, `pstree`, `fuser`, `prtstat`, `pslog`, `peekfd`.
+#
+# ── POR QUÉ ENTRA ───────────────────────────────────────────────────────────────────────────────
+# **`procps-ng` NO los trae**, y eso era lo que el plan de botar busybox daba por supuesto hasta que
+# se midió: `killall killall5 pstree fuser` eran cuatro de los applets que sólo proveía busybox, con
+# procps-ng declarado en los 7 perfiles. procps-ng da `ps top free kill pgrep pkill pidof uptime
+# vmstat w watch` — matar por NOMBRE y el árbol de procesos son de este paquete, no de aquél.
+#
+# ⚠ `killall5` NO lo trae psmisc: es de sysvinit (`/sbin/killall5`, el «mata todo menos PID 1» que
+# usan los guiones de apagado). Acá lo cubre arje-zero por FUNCIÓN —es PID 1 y apaga él— así que el
+# applet se retirará con los indultos, no se reemplaza. Son 3 de los 4, y decirlo así evita que la
+# tabla vuelva a prometer lo que no hay.
+#
+# ── EL DETALLE QUE MUERDE: `-lncurses` no existe acá ────────────────────────────────────────────
+# `pstree` pide `tgetent`, y el `configure` la busca por NOMBRE DE LIBRERÍA: `-ltinfo`, `-lncurses`,
+# `-ltermcap`. Nuestra ncurses es `--enable-widec`, o sea **`libncursesw.a`**, y ninguno de los tres
+# nombres existe ⇒ `configure: error: Cannot find tinfo, ncurses or termcap libraries`.
+#
+# Se probaron dos caminos que NO sirven, y conviene dejarlos escritos para no repetirlos:
+#   · `LIBS=-lncursesw` — el `AC_CHECK_LIB` no pregunta «¿resuelve tgetent?»: **compila un programa
+#     de prueba con `-lncurses`** y mira si enlaza. Otra librería en LIBS no cambia eso.
+#   · `ac_cv_lib_ncurses_tgetent=yes` + `make TERMCAP_LIB=-lncursesw` — la variable de caché sí
+#     salta la prueba, pero después falla el enlace igual: `src_pstree_LDADD = @LIBINTL@
+#     @TERMCAP_LIB@` se SUSTITUYE en tiempo de configure, así que el Makefile queda con `-lncurses`
+#     LITERAL, no con una referencia a `$(TERMCAP_LIB)`. Sobreescribir esa variable en la línea de
+#     `make` no toca nada. (Medido: `error: unable to find static system library 'ncurses'`.)
+#
+# Lo que sí funciona es darle el nombre que busca: un enlace `libncurses.a → libncursesw.a` en un
+# directorio propio del árbol, y `-L` a ese directorio. Así el `AC_CHECK_LIB` pasa de verdad —sin
+# mentirle a la caché— y el enlace resuelve contra la ncursesw real. El enlace vive en el scratch
+# del build, no viaja al artefacto.
+#
+# ⚠ Y el `-L` se AÑADE a `$LDFLAGS`, no lo reemplaza. El harness inyecta `LDFLAGS=-static` para las
+# recetas `link = "static"` (`takana-build/src/lib.rs:285`), así que un `LDFLAGS="-L…"` a secas se
+# lo come y los seis binarios salen DINÁMICOS sin que nada falle — medido acá: sellaron, `killall`
+# corría, y `pstree` moría con `Error relocating /lib/libncursesw.so.6` al tomar la librería del
+# sistema anfitrión. Es la misma forma que [[cgo-sin-baseline-sigill]]: redefinir una variable que
+# el harness ya puebla pierde en silencio lo que el harness había puesto.
+
+name    = "psmisc"
+version = "23.7"
+license = "GPL-2.0-or-later"
+
+[source]
+tarball = "https://downloads.sourceforge.net/project/psmisc/psmisc/psmisc-23.7.tar.xz"
+sha256  = "58c55d9c1402474065adae669511c191de374b0871eec781239ab400b907c327"
+
+[build]
+compiler = "zig-cc"
+target   = "x86_64-linux-musl"
+link     = "static"
+flags    = []
+
+[deps]
+build = ["ncurses", "make", "pkgconf"]
+
+[build.phases]
+# `--disable-nls`: musl no trae <libintl.h>, y es lo que hace el resto del corpus.
+# SELinux viene apagado por defecto en este configure (lo dice su configure.ac), no hace falta flag.
+configure = '''
+mkdir -p "$PWD/.compat-ncurses"
+ln -sf /usr/lib/libncursesw.a "$PWD/.compat-ncurses/libncurses.a"
+./configure --build=$CBUILD --host=$CHOST --prefix=/usr \
+	--disable-nls LDFLAGS="$LDFLAGS -L$PWD/.compat-ncurses"
+'''
+compile = 'make'
+install = 'make DESTDIR=/out install'