#! /usr/bin/env bash
#
# Import and patch up external files.
#
# Not the generic script because we provide a semgrep-specific scanner.c
#
set -eu -o pipefail

name=$(basename "$(pwd)" | sed -e 's/semgrep-//')

# Symlink upstream's vendored tree-sitter runtime headers (array.h, alloc.h,
# ...) into the wrapper's src/tree_sitter/. Needed when tree-sitter generate
# does not auto-vendor them; harmless when it does.
upstream_inc=../tree-sitter-"$name"/src/tree_sitter
if [[ -d "$upstream_inc" ]]; then
  mkdir -p src/tree_sitter
  (
    cd src/tree_sitter
    upstream_rel=../../"$upstream_inc"
    for header in "$upstream_rel"/*.h; do
      [[ -e "$header" ]] || continue
      base=$(basename "$header")
      # parser.h is wrapper-specific (regenerated by `tree-sitter generate`).
      [[ "$base" == parser.h ]] && continue
      ln -sf "$header" .
    done
  )
fi

mkdir -p test/corpus
(
  cd test/corpus
  rm -f inherited
  # The root of the tests is either 'test/corpus' or 'corpus' as per
  # tree-sitter documentation.
  for dir in test/corpus corpus; do
    corpus=../../../tree-sitter-"$name"/$dir
    if [[ -e "$corpus" ]]; then
      ln -sf "$corpus" inherited
    fi
  done
)
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo Note that semgrep-ruby/src/scanner.c must be in sync with
echo tree-sitter-ruby/src/scanner.c except for the semgrep-ext changes.
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
