#!/bin/sh
#                                   info script
# 
# This file was developed by Reid Spencer and is distributed under the
# University of Illinois Open Source License. See LICENSE.TXT for details.
# 
#===------------------------------------------------------------------------===#

# This script gets subversion information about each module checked out. Just
# specify the list of modules your' interested in or specify none to get show
# information about the currently checked out modules. See the README.txt file.

# Get the library.
if test ! -z "$LLVM_TOP" ; then
  if test -f "$LLVM_TOP/library.sh" ; then
    . "$LLVM_TOP/library.sh"
  else
    echo "Your LLVM_TOP variable is not set to an llvm-top directory"
    exit 1
  fi
elif test -f ./library.sh ; then
  . ./library.sh
elif test -f ../library.sh ; then
  . ../library.sh
else
  echo Please run $0 from the llvm-top directory or a module directory.
  exit 1
fi

# Get the list of modules
process_arguments "$@"

# Getting the module dependencies also causes them to be checked out.
get_module_dependencies $MODULES

for mod in $MODULE_DEPENDENCIES ; do
  msg 0 "Information for module '$mod'"
  if test "$VERBOSE" -gt 0 ; then
    vcs_info $mod
  else
    vcs_info $mod | sed -e '/^Repository/d' -e '/^Node/d' -e '/^Sched/d'
  fi
done
