#!/usr/bin/env bash

set -e

rootdir=$(cd "$(dirname $0)/.." && pwd)

function emacs_bin () {
    local ver
    ver=$(echo "$1" | tr '.' '-')
    echo "$(nix-build --no-out-link -A "emacs-$ver" https://github.com/purcell/nix-emacs-ci/archive/master.tar.gz)"/bin/emacs
}

symbol_dump_dir="$rootdir/.symbol-dumps"
mkdir -p "$symbol_dump_dir"
for v in 23.4 24.1 24.2 24.3 24.4 24.5 25.1 25.2 25.3 26.1 26.2 26.3 27.1 27.2 28.1 28.2 29.1; do
    echo "Dumping $v"
    $(emacs_bin $v) -Q --script "$rootdir/tools/sym-dump.el" > "$symbol_dump_dir/$v";
done

echo "Calculating changes between versions"

diff_expr=$(cat - <<EOF
(progn
  (setq default-directory "$symbol_dump_dir")
  (pp
  \`(((24 1) . ,(sym-diff-dumps "23.4" "24.1"))
     ((24 2) . ,(sym-diff-dumps "24.1" "24.2"))
     ((24 3) . ,(sym-diff-dumps "24.2" "24.3"))
     ((24 4) . ,(sym-diff-dumps "24.3" "24.4"))
     ((24 5) . ,(sym-diff-dumps "24.4" "24.5"))
     ((25 1) . ,(sym-diff-dumps "24.5" "25.1"))
     ((25 2) . ,(sym-diff-dumps "25.1" "25.2"))
     ((25 3) . ,(sym-diff-dumps "25.2" "25.3"))
     ((26 1) . ,(sym-diff-dumps "25.3" "26.1"))
     ((26 2) . ,(sym-diff-dumps "26.1" "26.2"))
     ((26 3) . ,(sym-diff-dumps "26.2" "26.3"))
     ((27 1) . ,(sym-diff-dumps "26.3" "27.1"))
     ((27 2) . ,(sym-diff-dumps "27.1" "27.2"))
     ((28 1) . ,(sym-diff-dumps "27.2" "28.1"))
     ((28 2) . ,(sym-diff-dumps "28.1" "28.2"))
     ((29 1) . ,(sym-diff-dumps "28.2" "29.1"))
     )))
EOF
)

mkdir -p "$rootdir/data"
$(emacs_bin 29.1) -Q -batch --load "$rootdir/tools/sym-diff.el" --eval "$diff_expr" > "$rootdir/data/stdlib-changes"
cat <<EOF >> "$rootdir/data/stdlib-changes"

;; Local Variables:
;; no-byte-compile: t
;; no-update-autoloads: t
;; End:
EOF
