#! /bin/sh

# Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors
# Licensed under the MIT License:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

# This is a one-off test rule.

set -eu

echo findProvider special:ekam-interceptor
read INTERCEPTOR

if test "$INTERCEPTOR" = ""; then
  echo "error:  couldn't find intercept.so." >&2
  exit 1
fi

echo findProvider file:capnp
read CAPNP

if test "$CAPNP" = ""; then
  echo "error:  couldn't find capnp." >&2
  exit 1
fi

echo findProvider file:capnpc-c++
read CAPNPC_CXX

if test "$CAPNPC_CXX" = ""; then
  echo "error:  couldn't find capnpc-c++." >&2
  exit 1
fi

mkdir -p tmp/capnp/bootstrap-test-tmp

INPUTS="capnp/c++.capnp capnp/schema.capnp capnp/stream.capnp capnp/compiler/lexer.capnp \
capnp/compiler/grammar.capnp capnp/rpc.capnp capnp/rpc-twoparty.capnp capnp/persistent.capnp \
capnp/compat/json.capnp"

SRC_INPUTS=""
for file in $INPUTS; do
  echo findProvider file:$file
  read srcfile
  SRC_INPUTS="$SRC_INPUTS $srcfile"
done

$CAPNP compile --src-prefix=src -Isrc --no-standard-import \
    -o$CAPNPC_CXX:tmp/capnp/bootstrap-test-tmp $SRC_INPUTS

for file in $INPUTS; do
  for ext in h c++; do
    echo findProvider file:$file.$ext
    read srcfile
    test "x$srcfile" != x || (echo "missing: $file.$ext" >&2 && exit 1)
    diff -u $srcfile tmp/capnp/bootstrap-test-tmp/$file.$ext >&2
  done
done

echo passed
