musl-obstack: nueva receta — la `obstack` de glibc que musl no trae
Primera pieza del frente libdw/musl (para `dwarves`). La necesitan DOS cosas: `libdw` de elfutils (su libdwP.h mete `struct obstack` en el Dwarf) y el propio `dwarves`, que hace `find_package(obstack REQUIRED)`. Es lo que Alpine empaqueta como `musl-obstack`. Se compila A MANO: el tarball trae Makefile.am pero no un `configure` generado, y el corpus no tiene autoconf/automake/libtool. Son dos .c. Dos gotchas resueltos: · `obstack.c` hace `#include <config.h>` SIN guarda (fuera de _LIBC) ⇒ hay que fabricarle uno. Lo único que mira es HAVE_LIBINTL_H, que musl no tiene, así que el config.h mínimo vale. · Es `<config.h>` con ÁNGULOS, no comillas ⇒ no basta con dejarlo en el cwd, hace falta `-I.` en el compile. El nombre importa: dwarves lo busca con `find_library(NAMES obstack)` en /usr/lib ⇒ instala /usr/lib/libobstack.a y obstack.h.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +44 −0
- recipes/musl-obstack.toml +44 −0
diff --git a/recipes/musl-obstack.toml b/recipes/musl-obstack.toml
new file mode 100644
index 00000000..3183b089
--- /dev/null
+++ b/recipes/musl-obstack.toml
@@ -0,0 +1,44 @@
+# musl-obstack 1.2.3 — la `obstack` de glibc, empaquetada aparte para musl.
+#
+# POR QUÉ EXISTE: `obstack` es una extensión de GNU libc que musl NO trae, y la necesitan DOS cosas
+# del corpus: `libdw` de elfutils (su `libdwP.h` mete `struct obstack` en el `Dwarf`) y `dwarves`,
+# que hace `find_package(obstack REQUIRED)`. Es la misma pieza que Alpine empaqueta como
+# `musl-obstack`. Ver [[frente libdw/musl]] en la receta `elfutils-libdw`.
+#
+# SE COMPILA A MANO, sin autotools: el tarball trae `Makefile.am` pero NO un `configure` generado, y
+# el corpus no tiene recetas de autoconf/automake/libtool. Son DOS ficheros .c, así que un
+# `$CC -c` + `ar` es más honesto que arrastrar toda la cadena autotools para esto.
+# Los nombres importan: `dwarves` busca `libobstack` con `find_library(... NAMES obstack)` en
+# /usr/lib, así que el artefacto tiene que instalar `/usr/lib/libobstack.a` y `obstack.h`.
+name = "musl-obstack"
+version = "1.2.3"
+license = "GPL-2.0-or-later"
+
+[source]
+tarball = "https://github.com/void-linux/musl-obstack/archive/refs/tags/v1.2.3.tar.gz"
+sha256 = "9ffb3479b15df0170eba4480e51723c3961dbe0b461ec289744622db03a69395"
+
+[build]
+compiler = "zig-cc"
+target = "x86_64-linux-musl"
+link = "static"
+
+[build.phases]
+# `obstack.c` hace `#include <config.h>` SIN guarda (fuera de `_LIBC`), así que hay que darle uno
+# aunque no venga de autotools. Lo único que mira de él es `HAVE_LIBINTL_H`, que en musl NO existe
+# ⇒ basta con no definirlo. Escribimos el config.h mínimo en vez de arrastrar autoconf.
+configure = "printf '/* minimo para musl: sin libintl */\\n' > config.h"
+compile = '''
+$CC -c -O2 -fPIC -I. obstack.c -o obstack.o
+$CC -c -O2 -fPIC -I. obstack_printf.c -o obstack_printf.o
+ar rcs libobstack.a obstack.o obstack_printf.o
+'''
+install = '''
+mkdir -p /out/usr/lib /out/usr/include
+cp libobstack.a /out/usr/lib/
+cp obstack.h /out/usr/include/
+test -f /out/usr/lib/libobstack.a && test -f /out/usr/include/obstack.h
+'''
+
+[deps]
+build = ["binutils"]