#!/bin/bash set -e # released to public domain help() { cat << eof usage: $1 [-v] For each binary-only library file from ESP-NONOS-SDK, this script searches for the exact commits and reports matching versions and commit urls. The argument must be the ESP-NONOS-SDK git-cloned directory. It is left unmodified, and is locally cloned to work with. The local copy is then removed. Because of libmain.a local tweaks, comparison is done for each .a file by extracting object files, removing the potentially modified ones (mem_manager.o time.o user_interface.o eagle_lwip_if.o) and doing a md5 check against the core files. eof exit 1 } verbose=false [ "$1" = "-v" ] && { shift; verbose=true; } sdk="$1" me="$0" core=$(cd ${me%/*}/../../../..; pwd) [ -r "$sdk/lib/libnet80211.a" ] || help "$0" [ -r "$core/tools/xtensa-lx106-elf/bin" ] || help "$0" tmp=$(pwd)/NONOSDK.deleteme cat << eof nonos-sdk = '$sdk' core root directory = '$core' temporary nonos-sdk clone = '$tmp' If libmain.a is not found, it should be the one around the same libpp.a's commit eof md5() { mkdir temp cd temp PATH="$core/tools/xtensa-lx106-elf/bin:$PATH" xtensa-lx106-elf-ar x "$1" rm -f mem_manager.o time.o user_interface.o eagle_lwip_if.o cat *.o | md5sum cd .. rm -rf temp } search() { rm -rf "$tmp" git clone $sdk "$tmp" 1>&2 cd "$tmp" git reset --hard 1>&2 corelibs=$(cd "$core/tools/sdk/lib"; ls *.a) commits=$(git log|grep ^commit\ | tac | sed 's,commit ,,') for f in $corelibs; do git checkout master 1>&2 # needed if [ -r "$tmp/lib/$f" ]; then coremd5=$(md5 "$core/tools/sdk/lib/$f") found=false for i in $commits; do git reset --hard 1>&2 git checkout $i 1>&2 [ -d "$tmp/lib" ] || continue espmd5=$(md5 "$tmp/lib/$f") if [ "$espmd5" = "$coremd5" ]; then tag=$(git describe --tag) echo "$tag - https://github.com/espressif/ESP8266_NONOS_SDK/commit/$i - $f" found=true break fi done $found || echo "NOTFOUND - $f" fi done cd .. rm -rf "$tmp" } $verbose && search $verbose || search 2>/dev/null echo "all done"