# BST-TIMEOUT: 1500 # 193 cases, 472s measured on a quiet host; 300s trips it even unloaded . "$BST_LIB" # libgpg-error is the GnuPG runtime library: the error-code namespace every # GnuPG component shares (a 32-bit value packing a 7-bit source with a 16-bit # code, plus the tables that render both as text and map them to and from # errno), and, since 1.x, "libgpgrt" -- the estream stdio replacement, its own # printf engine, a base64 codec, an allocator, an argument parser and the # gpgrt_lock_t mutex wrapper. It carries no crypto of its own, which is why it # lands first on this Epic: libgcrypt and the rest of the family link it. # # The distro is static-only, so what the image gets is /usr/bin/gpg-error (the # error-code lookup tool), /usr/bin/gpgrt-config (the pkg-config-style config # script), the headers, gpg-error.pc, the two aclocal macros, and the archive # libgpg-error.a. The upstream main package on this arm carries only yat2m, a # texinfo-to-man converter that is a documentation build tool rather than # anything a browser machine runs, so the image names -dev and -staticdev only. # # --------------------------------------------------------------------------- # WHY THIS SUITE RUNS A PROBE AS WELL AS THE CLI # # The CLI reaches exactly one corner of the package -- the error-code tables -- # and nothing at all of libgpgrt, which is the half that -dev/-staticdev exist # to ship and the half libgcrypt will link. BRINTOS-217 is why stopping at the # CLI is not enough: oniguruma COMPILED and PACKAGED perfectly on this arm and # then returned silently wrong offsets to every caller, so a payload-only suite # would have gone green on the exact defect the port existed to find. # # This port produced one of those defects itself, and the suite leads with it. # libgpg-error sizes the public gpgrt_lock_t at configure time by running # `objdump -j .bss -t` over a compiled probe object. This arm's `cc -c` emits # LLVM IR bitcode, which llvm-objdump refuses outright and llvm-nm reports at # size 0, and upstream checks only that the COMPILE succeeded -- so the size # came back empty and was substituted unchecked into # `volatile char _priv[$ac_mtx_size]`, yielding a lock object with no room in # it at all while configure still announced success. gpgrt_lock_init() writes a # whole pthread_mutex_t into that object. The fix is a patch on the recipe # (0001-gen-lock-obj-derive-the-mutex-size-without-objdump.patch); the two # cases that hold it in place are header-lock-obj-sized below, which reads the # size out of the header THAT SHIPS, and the probe's lock-canary, which drives # the whole init/lock/trylock/unlock/destroy cycle against a poisoned guard # band so an overflow is caught as a value rather than as a crash that may or # may not reproduce. # # So data/libgpg-error-probe is cross-linked with wasmcc-glibc against THE VERY # ARCHIVE THAT SHIPS (/usr/lib/libgpg-error.a), staged to $TMPDIR and run here. # Its source is src/libgpg_error_probe.c, and its groups are documented there. # The cross-link reported `refused=0 skipped=0`, so no coroutinize refusal # anywhere in a module linking this archive. # # EVERY EXPECTED VALUE BELOW IS THE VALUE A NATIVE x86_64 BUILD OF THE IDENTICAL # RELEASE PRODUCES, checked before this suite was ever run on target. Where the # target legitimately differs from that control the difference is a Yocto # packaging property and is called out at the case: gpg-error.pc reports # `Version: 1.48-unknown` and an empty Cflags (poky's pkgconfig.patch), and # gpg-error-config is replaced by poky's binconfig-disabled refusal stub. require gpg-error gpg-error/present incd=/usr/include lib=/usr/lib/libgpg-error.a pc=/usr/lib/pkgconfig/gpg-error.pc nl=' ' hasfile() { if [ -s "$2" ]; then bst_ok "$1"; else bst_notok "$1" "absent or empty: $2"; fi; } has() { case "$3" in *"$2"*) bst_ok "$1" ;; *) bst_notok "$1" "not found: $2" ;; esac; } hasnot() { case "$3" in *"$2"*) bst_notok "$1" "unexpectedly present: $2" ;; *) bst_ok "$1" ;; esac; } hasline() { case "$nl$3$nl" in *"$nl$2$nl"*) bst_ok "$1" ;; *) bst_notok "$1" "not in archive: $2" ;; esac; } # check_out insists on rc 0 and check_rc discards the output, so neither fits a # case whose message AND exit status are both under test (the refusal stub). out_rc() { _id=$1; _want=$2; _needle=$3; shift 3 _out=$("$@" 2>&1); _rc=$? case "$_out" in *"$_needle"*) _hit=1 ;; *) _hit=0 ;; esac if [ "$_rc" -eq "$_want" ] && [ "$_hit" -eq 1 ]; then bst_ok "$_id" else bst_notok "$_id" "rc=$_rc want=$_want want:'$_needle' got:'$(_bst_1line "$_out")'"; fi } # --- payload shape ----------------------------------------------------------- hasfile gpg-error/header "$incd/gpg-error.h" hasfile gpg-error/header-32 "$incd/gpg-error-32.h" hasfile gpg-error/header-gpgrt "$incd/gpgrt.h" hasfile gpg-error/header-gpgrt-32 "$incd/gpgrt-32.h" hasfile gpg-error/archive "$lib" hasfile gpg-error/pkgconfig "$pc" hasfile gpg-error/m4-gpg-error /usr/share/aclocal/gpg-error.m4 hasfile gpg-error/m4-gpgrt /usr/share/aclocal/gpgrt.m4 hasfile gpg-error/bin-gpg-error /usr/bin/gpg-error hasfile gpg-error/bin-gpgrt-config /usr/bin/gpgrt-config pctext=$(cat "$pc" 2>/dev/null) has gpg-error/pc-name "Name: gpg-error" "$pctext" has gpg-error/pc-desc "Description: GPG Runtime" "$pctext" has gpg-error/pc-libs "Libs: -lgpg-error" "$pctext" has gpg-error/pc-libdir "libdir=/usr/lib" "$pctext" # The arm's own triple, as autoconf canonicalised it -- this is the string that # sent configure down the objdump branch rather than the syscfg branch. has gpg-error/pc-host "host=wasm32-hwjs-linux-gnu" "$pctext" # Yocto, not the platform: poky's pkgconfig.patch empties Cflags, and the # version carries an -unknown suffix the native control does not have. has gpg-error/pc-version "Version: 1.48-unknown" "$pctext" # --- the lock object in the header THAT SHIPS -------------------------------- # The regression guard for this port's patch. A zero-length _priv[] here is the # broken configure probe having come back; anything but a plain integer size is # equally wrong. hdrtext=$(cat "$incd/gpg-error-32.h" 2>/dev/null) has gpg-error/header-lock-obj-sized "volatile char _priv[24];" "$hdrtext" hasnot gpg-error/header-lock-obj-empty "volatile char _priv[];" "$hdrtext" has gpg-error/header-lock-initializer "#define GPGRT_LOCK_INITIALIZER {1,{{0,0,0,0,0,0,0,0," "$hdrtext" # Same -unknown suffix pc-version and cfg-modversion carry: the header the # cross build generates stamps it too, where the native control says just "1.48". has gpg-error/header-version "#define GPG_ERROR_VERSION \"1.48-unknown\"" "$hdrtext" # --- every function the header declares is in the archive -------------------- # Nine of the header's names are `static GPG_ERR_INLINE` / `static GPGRT_INLINE` # definitions (gpg_err_make, gpg_err_code, gpg_error_from_errno, # gpgrt_annotate_leaked_object, ...) and so carry no archive symbol by design. # They are excluded by READING the header rather than by a hardcoded list, so a # release that promotes one of them to a real function is checked rather than # permanently forgiven. 161 names remain, and the native x86_64 control archive # is missing none of them either. arcsyms=$(grep -ao 'gpg[a-z0-9_]*' "$lib" 2>/dev/null | sort -u) inlinesyms=$(awk '/static (GPG_ERR_INLINE|GPGRT_INLINE)/ { getline if (match($0, /^[A-Za-z_][A-Za-z0-9_]*/)) print substr($0, RSTART, RLENGTH) }' "$incd/gpg-error-32.h" 2>/dev/null | sort -u) hdrsyms=$(grep -vE '^[[:space:]]*#' "$incd/gpg-error-32.h" 2>/dev/null \ | grep -oE '\b(gpgrt|gpg_err|gpg_error|gpg_str)[a-z0-9_]*[[:space:]]*\(' \ | sed -e 's/[[:space:]]*(//' | sort -u) nsym=0 nmiss=0 missing="" for f in $hdrsyms; do case "$nl$inlinesyms$nl" in *"$nl$f$nl"*) continue ;; esac nsym=$((nsym + 1)) case "$nl$arcsyms$nl" in *"$nl$f$nl"*) ;; *) nmiss=$((nmiss + 1)); missing="$missing $f" ;; esac done check_eq gpg-error/symbols-counted 161 "$nsym" if [ "$nmiss" -eq 0 ]; then bst_ok gpg-error/symbols-complete else bst_notok gpg-error/symbols-complete "$nmiss of $nsym missing:$(_bst_1line "$missing")" fi hasline gpg-error/sym-gpgrt_lock_init gpgrt_lock_init "$arcsyms" hasline gpg-error/sym-gpgrt_fopenmem gpgrt_fopenmem "$arcsyms" hasline gpg-error/sym-gpgrt_b64dec_proc gpgrt_b64dec_proc "$arcsyms" hasline gpg-error/sym-gpgrt_argparse gpgrt_argparse "$arcsyms" hasline gpg-error/sym-gpgrt_bsprintf gpgrt_bsprintf "$arcsyms" # --- the gpg-error CLI ------------------------------------------------------- check_out gpg-error/cli-version "gpg-error (libgpg-error) 1.48" gpg-error --version check_out gpg-error/cli-decode-1 \ "1 = (0, 1) = (GPG_ERR_SOURCE_UNKNOWN, GPG_ERR_GENERAL) = (Unspecified source, General error)" \ gpg-error 1 check_out gpg-error/cli-decode-symbol \ "8 = (0, 8) = (GPG_ERR_SOURCE_UNKNOWN, GPG_ERR_BAD_SIGNATURE) = (Unspecified source, Bad signature)" \ gpg-error GPG_ERR_BAD_SIGNATURE # a packed value: source 1 (gcrypt) with code 0, which must render as Success check_out gpg-error/cli-decode-packed \ "16777216 = (1, 0) = (GPG_ERR_SOURCE_GCRYPT, GPG_ERR_NO_ERROR) = (gcrypt, Success)" \ gpg-error 16777216 check_out gpg-error/cli-usage-line "Usage: gpg-error [options] error-numbers" gpg-error --help # an unrecognised argument is a warning on stderr, and NOT a non-zero exit out_rc gpg-error/cli-unknown-arg 0 "could not recognize nonsense" gpg-error nonsense listout=$(gpg-error --list 2>/dev/null) listn=$(printf '%s\n' "$listout" | wc -l | tr -d ' ') check_eq gpg-error/cli-list-lines 606 "$listn" has gpg-error/cli-list-gcrypt "16777216 = (1, -) = (GPG_ERR_SOURCE_GCRYPT, -) = (gcrypt, -)" "$listout" has gpg-error/cli-list-gpg "33554432 = (2, -) = (GPG_ERR_SOURCE_GPG, -) = (GnuPG, -)" "$listout" # --- gpgrt-config ------------------------------------------------------------ # gpgrt_prefix is derived from the script's own path (/usr/bin/.. -> /usr) and, # with no compiler on the image to ask, it falls back to ${prefix}/lib -- which # is where the .pc actually is, so the bare form resolves on target. check_out gpg-error/cfg-libs "-lgpg-error" gpgrt-config gpg-error --libs check_out gpg-error/cfg-modversion "1.48-unknown" gpgrt-config gpg-error --modversion check_out gpg-error/cfg-libdir-flag "-lgpg-error" gpgrt-config --libdir=/usr/lib gpg-error --libs check gpg-error/cfg-cflags-ok gpgrt-config gpg-error --cflags check_eq gpg-error/cfg-cflags-empty "" "$(gpgrt-config gpg-error --cflags 2>/dev/null | tr -d ' \n')" check_out gpg-error/cfg-usage "Usage: gpgrt-config" gpgrt-config --help # poky replaces gpg-error-config with binconfig-disabled's refusal stub: it must # fail loudly rather than hand a caller host paths. out_rc gpg-error/config-stub-refuses 1 \ "should not be used, use an alternative such as pkg-config" gpg-error-config --libs # --- the library RUNNING, via the cross-linked probe ------------------------- probe=${TMPDIR:-/tmp}/bst-libgpg-error-probe.$$ if cp "$BST_DATA/libgpg-error-probe" "$probe" 2>/dev/null && chmod +x "$probe" 2>/dev/null; then out=$("$probe" 2>&1) # identity has gpg-error/run-version "GPE-version OK" "$out" has gpg-error/run-version-req-ok "GPE-version-req-ok OK" "$out" has gpg-error/run-version-req-too-new "GPE-version-req-too-new OK" "$out" has gpg-error/run-version-number "GPE-version-number OK" "$out" has gpg-error/run-cmp-version-eq "GPE-cmp-version-eq OK" "$out" has gpg-error/run-cmp-version-lt "GPE-cmp-version-lt OK" "$out" has gpg-error/run-cmp-version-gt "GPE-cmp-version-gt OK" "$out" has gpg-error/run-cmp-version-levels-agree "GPE-cmp-version-levels-agree OK" "$out" has gpg-error/run-cmp-version-out-of-range "GPE-cmp-version-level-out-of-range OK" "$out" # THE LOCK OBJECT -- this port's own defect and its repair has gpg-error/run-lock-size "GPE-lock-size OK" "$out" has gpg-error/run-lock-static-lock "GPE-lock-static-lock OK" "$out" has gpg-error/run-lock-static-unlock "GPE-lock-static-unlock OK" "$out" has gpg-error/run-lock-static-destroy "GPE-lock-static-destroy OK" "$out" has gpg-error/run-lock-init "GPE-lock-init OK" "$out" has gpg-error/run-lock-lock "GPE-lock-lock OK" "$out" has gpg-error/run-lock-unlock "GPE-lock-unlock OK" "$out" has gpg-error/run-lock-trylock "GPE-lock-trylock OK" "$out" has gpg-error/run-lock-unlock2 "GPE-lock-unlock2 OK" "$out" has gpg-error/run-lock-destroy "GPE-lock-destroy OK" "$out" has gpg-error/run-lock-canary "GPE-lock-canary OK" "$out" # the measured sizes, so a target run is diffable rather than merely green has gpg-error/run-lock-sizes-value "GPE-lock-sizes lock=28 mutex=24 long=4" "$out" # error-code packing has gpg-error/run-make-code "GPE-make-code OK" "$out" has gpg-error/run-make-source "GPE-make-source OK" "$out" has gpg-error/run-make-noerror-collapses "GPE-make-noerror-collapses OK" "$out" has gpg-error/run-code-of-zero "GPE-code-of-zero OK" "$out" has gpg-error/run-source-of-zero "GPE-source-of-zero OK" "$out" has gpg-error/run-roundtrip-sources "GPE-roundtrip-sources OK" "$out" has gpg-error/run-roundtrip-codes "GPE-roundtrip-codes OK" "$out" has gpg-error/run-make-max-code "GPE-make-max-code OK" "$out" has gpg-error/run-make-max-source "GPE-make-max-source OK" "$out" has gpg-error/run-make-value "GPE-make-value 0x01000008" "$out" has gpg-error/run-dims-value "GPE-dims code=65536 source=128" "$out" # the published strings has gpg-error/run-strerror-noerror "GPE-strerror-noerror OK" "$out" has gpg-error/run-strerror-general "GPE-strerror-general OK" "$out" has gpg-error/run-strerror-badsig "GPE-strerror-badsig OK" "$out" has gpg-error/run-strerror-nopubkey "GPE-strerror-nopubkey OK" "$out" has gpg-error/run-strerror-checksum "GPE-strerror-checksum OK" "$out" has gpg-error/run-strerror-badpass "GPE-strerror-badpass OK" "$out" has gpg-error/run-strerror-invvalue "GPE-strerror-invvalue OK" "$out" has gpg-error/run-strerror-eof "GPE-strerror-eof OK" "$out" has gpg-error/run-strerror-bug "GPE-strerror-bug OK" "$out" has gpg-error/run-strerror-notsup "GPE-strerror-notsup OK" "$out" has gpg-error/run-strsource-unknown "GPE-strsource-unknown OK" "$out" has gpg-error/run-strsource-gcrypt "GPE-strsource-gcrypt OK" "$out" has gpg-error/run-strsource-gpgme "GPE-strsource-gpgme OK" "$out" has gpg-error/run-strsource-user1 "GPE-strsource-user1 OK" "$out" has gpg-error/run-strerror-src-independent "GPE-strerror-src-independent OK" "$out" has gpg-error/run-strerror-r-rc "GPE-strerror-r-rc OK" "$out" has gpg-error/run-strerror-r-text "GPE-strerror-r-text OK" "$out" has gpg-error/run-strerror-r-truncates "GPE-strerror-r-truncates OK" "$out" has gpg-error/run-strerror-r-nul "GPE-strerror-r-nul OK" "$out" has gpg-error/run-strerror-never-empty "GPE-strerror-never-empty OK" "$out" # errno mapping, both directions, on published pairings has gpg-error/run-errno-from-enoent "GPE-errno-from-enoent OK" "$out" has gpg-error/run-errno-to-enoent "GPE-errno-to-enoent OK" "$out" has gpg-error/run-errno-from-enomem "GPE-errno-from-enomem OK" "$out" has gpg-error/run-errno-to-enomem "GPE-errno-to-enomem OK" "$out" has gpg-error/run-errno-from-einval "GPE-errno-from-einval OK" "$out" has gpg-error/run-errno-to-einval "GPE-errno-to-einval OK" "$out" has gpg-error/run-errno-from-eacces "GPE-errno-from-eacces OK" "$out" has gpg-error/run-errno-to-eacces "GPE-errno-to-eacces OK" "$out" has gpg-error/run-errno-from-eexist "GPE-errno-from-eexist OK" "$out" has gpg-error/run-errno-to-eexist "GPE-errno-to-eexist OK" "$out" has gpg-error/run-errno-from-eagain "GPE-errno-from-eagain OK" "$out" has gpg-error/run-errno-to-eagain "GPE-errno-to-eagain OK" "$out" has gpg-error/run-errno-from-eintr "GPE-errno-from-eintr OK" "$out" has gpg-error/run-errno-to-eintr "GPE-errno-to-eintr OK" "$out" has gpg-error/run-errno-from-epipe "GPE-errno-from-epipe OK" "$out" has gpg-error/run-errno-to-epipe "GPE-errno-to-epipe OK" "$out" has gpg-error/run-errno-from-erange "GPE-errno-from-erange OK" "$out" has gpg-error/run-errno-to-erange "GPE-errno-to-erange OK" "$out" has gpg-error/run-errno-from-ebadf "GPE-errno-from-ebadf OK" "$out" has gpg-error/run-errno-to-ebadf "GPE-errno-to-ebadf OK" "$out" has gpg-error/run-errno-from-zero "GPE-errno-from-zero OK" "$out" has gpg-error/run-errno-to-nonsys "GPE-errno-to-nonsys OK" "$out" has gpg-error/run-errno-error-code "GPE-errno-error-code OK" "$out" has gpg-error/run-errno-syserror-code "GPE-errno-syserror-code OK" "$out" has gpg-error/run-errno-set-errno "GPE-errno-set-errno OK" "$out" has gpg-error/run-errno-unknown-not-zero "GPE-errno-unknown-not-zero OK" "$out" # estream: memory streams, growth, and a real file through the syscall layer has gpg-error/run-estream-fopenmem "GPE-estream-fopenmem OK" "$out" has gpg-error/run-estream-tell-after-write "GPE-estream-tell-after-write OK" "$out" has gpg-error/run-estream-snatch-rc "GPE-estream-snatch-rc OK" "$out" has gpg-error/run-estream-snatch-len "GPE-estream-snatch-len OK" "$out" has gpg-error/run-estream-snatch-text "GPE-estream-snatch-text OK" "$out" has gpg-error/run-estream-fopenmem-init "GPE-estream-fopenmem-init OK" "$out" has gpg-error/run-estream-fgets-1 "GPE-estream-fgets-1 OK" "$out" has gpg-error/run-estream-fgets-2 "GPE-estream-fgets-2 OK" "$out" has gpg-error/run-estream-fgets-eof "GPE-estream-fgets-eof OK" "$out" has gpg-error/run-estream-feof "GPE-estream-feof OK" "$out" has gpg-error/run-estream-tell-at-eof "GPE-estream-tell-at-eof OK" "$out" has gpg-error/run-estream-seek-set "GPE-estream-seek-set OK" "$out" has gpg-error/run-estream-tell-after-seek "GPE-estream-tell-after-seek OK" "$out" has gpg-error/run-estream-fread-n "GPE-estream-fread-n OK" "$out" has gpg-error/run-estream-fread-text "GPE-estream-fread-text OK" "$out" has gpg-error/run-estream-grow-writes "GPE-estream-grow-writes OK" "$out" has gpg-error/run-estream-grow-tell "GPE-estream-grow-tell OK" "$out" has gpg-error/run-estream-grow-readback "GPE-estream-grow-readback OK" "$out" has gpg-error/run-estream-grow-content "GPE-estream-grow-content OK" "$out" has gpg-error/run-estream-file-open-w "GPE-estream-file-open-w OK" "$out" has gpg-error/run-estream-file-write "GPE-estream-file-write OK" "$out" has gpg-error/run-estream-file-close-w "GPE-estream-file-close-w OK" "$out" has gpg-error/run-estream-file-open-r "GPE-estream-file-open-r OK" "$out" has gpg-error/run-estream-file-read "GPE-estream-file-read OK" "$out" has gpg-error/run-estream-file-content "GPE-estream-file-content OK" "$out" has gpg-error/run-estream-file-fileno "GPE-estream-file-fileno OK" "$out" has gpg-error/run-estream-file-close-r "GPE-estream-file-close-r OK" "$out" has gpg-error/run-estream-file-enoent "GPE-estream-file-enoent OK" "$out" # libgpgrt's own printf engine, over a va_list, on a coroutinized arm has gpg-error/run-printf-basic "GPE-printf-basic OK" "$out" has gpg-error/run-printf-width "GPE-printf-width OK" "$out" has gpg-error/run-printf-float-zeroflag "GPE-printf-float-zeroflag-ignored OK" "$out" has gpg-error/run-printf-int-zeroflag "GPE-printf-int-zeroflag-honoured OK" "$out" has gpg-error/run-printf-float-forms "GPE-printf-float-forms OK" "$out" has gpg-error/run-printf-radix "GPE-printf-radix OK" "$out" has gpg-error/run-printf-lengths "GPE-printf-lengths OK" "$out" has gpg-error/run-printf-precision "GPE-printf-precision OK" "$out" has gpg-error/run-printf-empty "GPE-printf-empty OK" "$out" has gpg-error/run-printf-asprintf-rc "GPE-printf-asprintf-rc OK" "$out" has gpg-error/run-printf-asprintf "GPE-printf-asprintf OK" "$out" has gpg-error/run-printf-snprintf-rc "GPE-printf-snprintf-rc OK" "$out" has gpg-error/run-printf-snprintf-trunc "GPE-printf-snprintf-trunc OK" "$out" has gpg-error/run-printf-long "GPE-printf-long OK" "$out" # the allocator, and that wipememory is not optimised away has gpg-error/run-alloc-strdup "GPE-alloc-strdup OK" "$out" has gpg-error/run-alloc-strconcat "GPE-alloc-strconcat OK" "$out" has gpg-error/run-alloc-malloc "GPE-alloc-malloc OK" "$out" has gpg-error/run-alloc-realloc "GPE-alloc-realloc OK" "$out" has gpg-error/run-alloc-realloc-keeps "GPE-alloc-realloc-keeps OK" "$out" has gpg-error/run-alloc-calloc "GPE-alloc-calloc OK" "$out" has gpg-error/run-alloc-calloc-zeroed "GPE-alloc-calloc-zeroed OK" "$out" has gpg-error/run-alloc-free-null "GPE-alloc-free-null OK" "$out" has gpg-error/run-alloc-wipememory "GPE-alloc-wipememory OK" "$out" # base64, on the RFC 4648 test vectors, plus the decoder's leniency has gpg-error/run-b64enc-empty "GPE-b64enc-empty OK" "$out" has gpg-error/run-b64enc-1byte "GPE-b64enc-1byte OK" "$out" has gpg-error/run-b64enc-2byte "GPE-b64enc-2byte OK" "$out" has gpg-error/run-b64enc-3byte "GPE-b64enc-3byte OK" "$out" has gpg-error/run-b64enc-4byte "GPE-b64enc-4byte OK" "$out" has gpg-error/run-b64enc-5byte "GPE-b64enc-5byte OK" "$out" has gpg-error/run-b64enc-6byte "GPE-b64enc-6byte OK" "$out" has gpg-error/run-b64dec-start "GPE-b64dec-start OK" "$out" has gpg-error/run-b64dec-proc "GPE-b64dec-proc OK" "$out" has gpg-error/run-b64dec-len "GPE-b64dec-len OK" "$out" has gpg-error/run-b64dec-text "GPE-b64dec-text OK" "$out" has gpg-error/run-b64dec-nonalpha-len "GPE-b64dec-skips-nonalpha-len OK" "$out" has gpg-error/run-b64dec-nonalpha-bytes "GPE-b64dec-skips-nonalpha-bytes OK" "$out" has gpg-error/run-b64dec-nonalpha-value "GPE-b64dec-nonalpha-value 9e8b5b6ac7ba" "$out" # the platform edges libgpgrt wraps has gpg-error/run-misc-getcwd "GPE-misc-getcwd OK" "$out" has gpg-error/run-misc-fnameconcat "GPE-misc-fnameconcat OK" "$out" has gpg-error/run-misc-yield "GPE-misc-yield OK" "$out" has gpg-error/run-misc-setenv-getenv "GPE-misc-setenv-getenv OK" "$out" has gpg-error/run-misc-unsetenv "GPE-misc-unsetenv OK" "$out" # The probe's own tally and its exit status. 144/144 is what the same source # scores natively against a host build of the identical release. has gpg-error/run-summary "GPE-SUMMARY 144/144" "$out" check_rc gpg-error/run-exit0 0 "$probe" rm -f "$probe" else bst_notok gpg-error/run-stage "cannot stage $BST_DATA/libgpg-error-probe" fi