#!/usr/bin/env bash

# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -euo pipefail

function usage() {
  echo "Usage: $0 [LIBRARY_NAME] [CURRENT_IFS] [REFERENCE_IFS] [STAMP] [--warn]"
  echo "Verifies the list of public symbols against a golden file."
  echo "Additionally, checks that none of the symbols is a C++ symbol."
  echo "[LIBRARY_NAME]: a human-readable name for the library"
  echo "[CURRENT]:      path to the ifs file from this library"
  echo "[REFERENCE]:    path to the checked in ifs file"
  echo "[STAMP]:        touch this file when the script succeeds"
  echo "[--warn]:       (optional) if is specified, only output warnings and do not fail the build"
  exit 1
}

function realpath() {
  echo $(cd $(dirname "$1"); pwd)/$(basename "$1")
}

readonly LIBRARY_NAME=$1
readonly CURRENT=$(realpath "$2")
readonly REFERENCE=$(realpath "$3")
readonly STAMP=$4

WARN_ON_CHANGES=0
if [[ ($# -eq 5) && ($5 == "--warn") ]]; then
  WARN_ON_CHANGES=1
fi

for file in $CURRENT $REFERENCE
do
    if ! [[ -e "$file" ]]; then
        echo "Error: $file not found" >&2
        usage
    fi
done

# TODO(fxbug.dev/101666): This is no longer needed, this whole file can be replaced
# with `golden_file` or similar.
if [[ $LIBRARY_NAME != "libc" ]]; then
  # Detect presence of C++ symbols
  if grep -q "Name: _Z" $REFERENCE; then
    echo
    echo "Error: Prebuilt libraries exported to the SDK should not have C++ symbols"
    echo "In library $LIBRARY_NAME"
    echo "NOTE: the following functions are exported with C++ linkage:"
    grep "Name: _Z" $REFERENCE

    if [[ "$WARN_ON_CHANGES" -eq 0 ]]; then
      exit 1
    fi
  fi
fi

if ! diff $CURRENT $REFERENCE; then
  echo
  echo "Error: ABI has changed! In library $LIBRARY_NAME"
  echo

  echo -e "Please acknowledge this change by running:\ncp $CURRENT $REFERENCE\n"

  if [[ "$WARN_ON_CHANGES" -eq 0 ]]; then
    exit 1
  fi
fi

touch ${STAMP}
