#!/usr/bin/env bash
# contrib/clang-format/clang-format-check - show the diff to clang-format
#
# Copyright (C) 1996-2014
# CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
#
# This file is part of CACAO.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.

###
# Usage: clang-format-check [-i] [<file> ...]
#
# Options:
#          -i           Inplace. Apply edits to files.
#
# If not <file>s are given, clang-format is applied to all cpp and hpp
# files. Otherwise only the specified files are checked.
###

set -u

CLANG_FORMAT=${CLANG_FORMAT:=clang-format}

PATCH=""
if [[ $# > 0 ]] ; then
  if [[ x"$1" == x"-i" ]] ; then
    PATCH=" | patch -p0"
    shift
  fi
fi


if [[ $# == 0 ]] ; then
  find -name "*.hpp" -exec bash -c "$CLANG_FORMAT {} | diff -u {} - $PATCH" \;
  find -name "*.cpp" -exec bash -c "$CLANG_FORMAT {} | diff -u {} - $PATCH" \;
else
  for f in $@ ; do
    bash -c "$CLANG_FORMAT $f | diff -u $f - $PATCH"
  done
fi
