#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

ME="$(readlink -f "$0")"
ROOT="$(readlink -f "$(dirname "$ME")/../..")"

find "$ROOT" -name pom.xml -not -path '*/target/*' | while read pom; do
	rel="$(xpath -q -e '//plugin/configuration/relativePath/text()' "$pom")"
	[ -z "$rel" ] && continue;
	abs="$(readlink -f "$(dirname "$pom")/$rel")"
	[ "$ROOT" = "$abs" ] || echo "Invalid relativePath for jrebel in $pom: $rel resolves to $abs (should be $ROOT)"
done
