# argp-standalone 1.5.0 — la `argp` de glibc, empaquetada aparte para musl. # # POR QUÉ EXISTE: `argp` (el parser de opciones de GNU) es una extensión de glibc que musl NO trae, # y `dwarves` hace `find_package(argp REQUIRED)`. Misma pieza que Alpine empaqueta como # `argp-standalone`. Segunda pata del frente libdw/musl, junto a `musl-obstack`. # # SE COMPILA A MANO, sin autotools: el tarball trae Makefile.am pero NO un `configure` generado y el # corpus no tiene autoconf/automake/libtool. # # Sólo los SIETE `argp-*.c` que el propio `Makefile.am` pone en `libargp_a_SOURCES`. Los otros .c # del tarball (mempcpy/strchrnul/strndup/strcasecmp) son `LIBOBJS` de autoconf: reemplazos que sólo # se compilan si el sistema NO los tiene, y musl SÍ los tiene ⇒ incluirlos duplicaría símbolos de # la libc. `argp-test.c` es el test, tampoco entra. # # El nombre importa: dwarves lo busca con `find_library(... NAMES argp)` en /usr/lib. name = "argp-standalone" version = "1.5.0" license = "LGPL-2.1-or-later" [source] tarball = "https://github.com/argp-standalone/argp-standalone/archive/refs/tags/1.5.0.tar.gz" sha256 = "c29eae929dfebd575c38174f2c8c315766092cec99a8f987569d0cad3c6d64f6" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" [build.phases] # config.h a mano con los valores de musl. Lo que de verdad importa es que musl SÍ exporta # `program_invocation_name`/`_short_name` (argp los usa para el nombre del programa en la ayuda). # Los `HAVE_DECL_*_UNLOCKED` se dejan SIN definir a propósito: el código hace `#if !HAVE_DECL_x`, # y un macro no definido vale 0 ⇒ cae solo en la variante con lock, que es la correcta y portable. # `UNUSED` lo define normalmente el `acinclude.m4` de autoconf (no es del código): sin él, las firmas # `char* arg UNUSED` no parsean y salen errores de sintaxis que NO parecen de config. configure = ''' printf '%s\n' \ '#define HAVE_ALLOCA_H 1' \ '#define HAVE_UNISTD_H 1' \ '#define HAVE_LIMITS_H 1' \ '#define HAVE_STDLIB_H 1' \ '#define HAVE_STRING_H 1' \ '#define HAVE_STRCASECMP 1' \ '#define HAVE_STRCHRNUL 1' \ '#define HAVE_STRNDUP 1' \ '#define HAVE_MEMPCPY 1' \ '#define HAVE_FLOCKFILE 1' \ '#define HAVE_FUNLOCKFILE 1' \ '#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1' \ '#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1' \ '#define UNUSED __attribute__ ((__unused__))' \ > config.h ''' compile = ''' for f in argp-ba argp-eexst argp-fmtstream argp-help argp-parse argp-pv argp-pvh; do $CC -c -O2 -fPIC -I. -D_GNU_SOURCE -DHAVE_CONFIG_H $f.c -o $f.o done ar rcs libargp.a argp-ba.o argp-eexst.o argp-fmtstream.o argp-help.o argp-parse.o argp-pv.o argp-pvh.o ''' install = ''' mkdir -p /out/usr/lib /out/usr/include cp libargp.a /out/usr/lib/ cp argp.h /out/usr/include/ test -f /out/usr/lib/libargp.a && test -f /out/usr/include/argp.h ''' [deps] build = ["binutils"]