#! /bin/sh
#
# Canonifies hiltic output for baseline diffing.

# shellcheck disable=SC2016
cat \
  | sed 's#\\\\#/#g' \
  | sed 's#\(^\|[ "('\''[]\)[A-Za-z]:/#\1/#g' \
  | sed '/\/\* __HILTI_LINKER_V1__/,/\*\// {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/\/\/ Begin of [^ ]* (from/       {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/\/\/ \{1,\}- [^ ]\{1,\} (.*/     {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/\] parsing file/                 {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/\] loaded module/                {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/[^ ]\{1,\}\.[^ ]\{1,\}:[0-9]\{1,\}:/      {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed '/[^ ]\{1,\}\.[^ ]\{1,\}:[0-9]\{1,\}-[0-9]\{1,\}:/      {s#/\([^/ ]\{1,\}/\)\{1,\}\([^/ ]\{1,\}\)#<...>/\2#g;}' \
  | sed 's#[("]\(/[^/\]\{1,\}\)\{1,\}\([^/\]\{1,\}:[0-9-]\{1,\}\)[")]#(<...>/\1\2)#g' \
  | sed 's#[("]\(/[^")/\]\{1,\}\)\{1,\}\([^")/\]\{1,\}\)[")]#"<...>\1\2"#g' \
  | sed 's#libc++abi.dylib: ##g' \
  | sed 's#\(Compiled by HILTI version\) .*#\1 X.X.X#g' \
  | sed 's#hlt_internal_hlto_library_version = .*#hlt_internal_hlto_library_version = <...>#g' \
  | sed 's#hlt_internal_hlto_bind_to_version = .*#hlt_internal_hlto_bind_to_version = <...>#g' \
  | sed 's/\[\(@.:\)[0-9a-f]\{1,\}\]/[\1XXX]/g' \
  | sed 's/\[\(parent @.:\)[0-9a-f]\{1,\}\]/[\1XXX]/g' \
  | sed 's#0x0\.0000000000000p+0#0x0p+0#g' \
  | sed 's#\(0x[0-9a-fA-F]\{1,\}\)\.0\{1,\}\(p[+-][0-9]\{1,\}\)#\1\2#g' \
  | sed 's#stream=0x[0-9a-fA-F]\{1,\}#stream=0xXXXXXXXX#g' \
  | sed 's#stream=[0-9a-fA-F]\{8,16\}#stream=0xXXXXXXXX#g' \
  | sed 's#for stream 0x[0-9a-fA-F]\{1,\}#for stream 0xXXXXXXXX#g' \
  | sed 's#for stream [0-9a-fA-F]\{8,16\}#for stream 0xXXXXXXXX#g' \
  | sed '/^extern "C" {$/d; /^extern "C" }$/d' \
  | awk '/^}$/ && prev ~ /hlt_internal_hlto_bind_to_version/ { next } { prev=$0; print }'
