# BST-TIMEOUT: 600 # three instantiations of an 8.4 MB probe + one pass over a 1.3 MB archive . "$BST_LIB" # glog (meta-oe recipes-support/glog, 0.6.0 at SRCREV b33e3bad) -- Google's # application-level logging library. Severity-levelled LOG() streams, CHECK() # assertions, and one file per severity carrying a fixed four-line header. The # fourth port of the C++ round (BRINTOS-1094), after abseil-cpp, re2 and gflags. # # --------------------------------------------------------------------------- # TWO CONSUMERS, BECAUSE THEY PROVE DIFFERENT THINGS # # The PAYLOAD blocks assert what a downstream recipe reaches -- the seven # headers, the archive and its seven translation units, the pkg-config file, # the CMake package -- plus, unlike gflags, a genuine _ZTV/_ZTI triple. # glog HAS polymorphic classes (LogSink, base::Logger, LogMessage::LogStream, # base_logging::LogStreamBuf), so this port can point at 107 vtable and # typeinfo records in the shipped archive: a record a C compile of the same # sources cannot emit, and therefore direct evidence that the C++ arm of the # toolchain worked. # # data/glog-probe is a CONSUMER of that payload: a program compiled against # these headers and LINKED AGAINST THIS BUILD'S libglog.a, built by the # recipe so it cannot drift from what shipped. # # THE PROBE IS NOT DECORATION HERE -- IT IS THE ONLY THING THAT COULD HAVE # CAUGHT THIS PORT'S REAL DEFECT. As first built, libglog.a carried # `U backtrace`: glog saw execinfo.h in the sysroot, selected # stacktrace_generic-inl.h, and called glibc's backtrace(), which needs # _Unwind_Backtrace and _Unwind_GetIP -- neither of which exists on this arm. # An undefined symbol in a static archive is not an error until something # links it, and a static-only port ships no program, so the recipe went # green, the headers and the archive were all present, and a file-presence # suite would have reported a clean pass on a library NO CONSUMER ON THIS # IMAGE COULD EVER LINK. The bbappend pins HAVE_EXECINFO_H off; this suite # exists so that the day something unpins it, the failure is visible here. # # WHAT IS COMPARED BYTE-FOR-BYTE. The probe's scripted run is compared line for # line against data/glog-native.txt -- the identical source built and run on # x86-64 from the glog-native recipe -- with no tolerance band. Four fields in # glog's output legitimately differ between any two runs on any two machines # (the log file's creation date, the hostname, the process's running duration, # and the thread id in each line prefix); the PROBE replaces each with a fixed # token before printing, so the comparison still asserts the field was present # and well-formed. Nothing else is normalised, and one differing line is a # defect. # # The log FILENAMES are made deterministic rather than normalised, which is the # stronger position and is available here: SetLogDestination() replaces glog's # ...log..-