#!/bin/bash
# This script was used to generate the version script for CPP symbols

set -e

declare -A versions=()
declare -A c=()
declare -A cpp=()

while read ligne; do
  symbol="$(echo "$ligne" | awk -F'@' '{print $1}')"
  version="$(echo "$ligne" | awk -F'@' '{print $2}')"
  if [ ! ${versions[$version]+_} ]; then
    versions[$version]=""
  fi
  if [[ "$symbol" =~ ^[^\ :]*$ ]]; then
    c[$version]="${c[$version]}${symbol}\n"
  else
    cpp[$version]="${cpp[$version]}${symbol}\n"
  fi
done < <(grep -Ev '^(lib|\s*#)' debian/libhdf5-cpp-7.symbols | sed 's/([^)]*)//' | sed 's/^ "\?\([^@]*\)@Base"\? \(.*\)$/\1@\2/')

prev_version=""
for version in $(echo "${!versions[@]}" | sed 's/ /\n/g' | sort -V); do
  echo "HDF5_CPP_$version {"
  echo "    global:"
  echo '        extern "C++" {'
  echo -e "${cpp[$version]}" | sed '/^$/d;s/^/            "/;s/$/"\;/'
  echo '        };'
  echo -e "${c[$version]}" | sed '/^$/d;s/^/        /;s/$/\;/'
  echo "}${prev_version:+ HDF5_CPP_$prev_version};"
  echo ""
  prev_version=$version
done
