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…

⎇ main recipes/argp-standalone.toml TOML · 68 lines · 2.8 KB History raw

argp-standalone: nueva receta — la `argp` de glibc que musl no trae 377eecc57 · Sergio ·

1# argp-standalone 1.5.0 — la `argp` de glibc, empaquetada aparte para musl.
2#
3# POR QUÉ EXISTE: `argp` (el parser de opciones de GNU) es una extensión de glibc que musl NO trae,
4# y `dwarves` hace `find_package(argp REQUIRED)`. Misma pieza que Alpine empaqueta como
5# `argp-standalone`. Segunda pata del frente libdw/musl, junto a `musl-obstack`.
6#
7# SE COMPILA A MANO, sin autotools: el tarball trae Makefile.am pero NO un `configure` generado y el
8# corpus no tiene autoconf/automake/libtool.
9#
10# Sólo los SIETE `argp-*.c` que el propio `Makefile.am` pone en `libargp_a_SOURCES`. Los otros .c
11# del tarball (mempcpy/strchrnul/strndup/strcasecmp) son `LIBOBJS` de autoconf: reemplazos que sólo
12# se compilan si el sistema NO los tiene, y musl SÍ los tiene ⇒ incluirlos duplicaría símbolos de
13# la libc. `argp-test.c` es el test, tampoco entra.
14#
15# El nombre importa: dwarves lo busca con `find_library(... NAMES argp)` en /usr/lib.
16name    = "argp-standalone"
17version = "1.5.0"
18license = "LGPL-2.1-or-later"
19
20[source]
21tarball = "https://github.com/argp-standalone/argp-standalone/archive/refs/tags/1.5.0.tar.gz"
22sha256  = "c29eae929dfebd575c38174f2c8c315766092cec99a8f987569d0cad3c6d64f6"
23
24[build]
25compiler = "zig-cc"
26target   = "x86_64-linux-musl"
27link     = "static"
28
29[build.phases]
30# config.h a mano con los valores de musl. Lo que de verdad importa es que musl SÍ exporta
31# `program_invocation_name`/`_short_name` (argp los usa para el nombre del programa en la ayuda).
32# Los `HAVE_DECL_*_UNLOCKED` se dejan SIN definir a propósito: el código hace `#if !HAVE_DECL_x`,
33# y un macro no definido vale 0 ⇒ cae solo en la variante con lock, que es la correcta y portable.
34# `UNUSED` lo define normalmente el `acinclude.m4` de autoconf (no es del código): sin él, las firmas
35# `char* arg UNUSED` no parsean y salen errores de sintaxis que NO parecen de config.
36configure = '''
37printf '%s\n' \
38  '#define HAVE_ALLOCA_H 1' \
39  '#define HAVE_UNISTD_H 1' \
40  '#define HAVE_LIMITS_H 1' \
41  '#define HAVE_STDLIB_H 1' \
42  '#define HAVE_STRING_H 1' \
43  '#define HAVE_STRCASECMP 1' \
44  '#define HAVE_STRCHRNUL 1' \
45  '#define HAVE_STRNDUP 1' \
46  '#define HAVE_MEMPCPY 1' \
47  '#define HAVE_FLOCKFILE 1' \
48  '#define HAVE_FUNLOCKFILE 1' \
49  '#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1' \
50  '#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1' \
51  '#define UNUSED __attribute__ ((__unused__))' \
52  > config.h
53'''
54compile = '''
55for f in argp-ba argp-eexst argp-fmtstream argp-help argp-parse argp-pv argp-pvh; do
56  $CC -c -O2 -fPIC -I. -D_GNU_SOURCE -DHAVE_CONFIG_H $f.c -o $f.o
57done
58ar rcs libargp.a argp-ba.o argp-eexst.o argp-fmtstream.o argp-help.o argp-parse.o argp-pv.o argp-pvh.o
59'''
60install = '''
61mkdir -p /out/usr/lib /out/usr/include
62cp libargp.a /out/usr/lib/
63cp argp.h /out/usr/include/
64test -f /out/usr/lib/libargp.a && test -f /out/usr/include/argp.h
65'''
66
67[deps]
68build = ["binutils"]