#!/bin/sh
#                                  build 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 allows LLVM modules to be built. Specify the modules you want to
# build on the command line; or leave it blank to specify the currently checked
# out modules. Any dependencies will be checked out and built before the 
# specified list. You can also specify build options. 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

# Process the arguments so that anything starting with - is passed down to the
# configure scripts while anything else is a module name. Collect the arguments
# in appropriate variables for later use.
process_arguments "$@"

# Get (and possibly check out) the set of modules and their dependencies. This
# sets the MODULE_DEPENDENCIES variable to the set of module names that should
# be configured, in the correct order (least dependent first, no duplicates).
get_module_dependencies $MODULES

# Build a list of the static build options we'll pass to the modules
build_args="LLVM_TOP=$LLVM_TOP PREFIX=$PREFIX DESTDIR=$DESTDIR VERBOSE=$VERBOSE"
build_args="$build_args $OPTIONS_DASH $OPTIONS_DASH_DASH $OPTIONS_ASSIGN"

# Now that we have a list of dependent modules, we must configure each of them
# according to the specifications of the module.
for mod in $MODULE_DEPENDENCIES ; do
  build_a_module "$mod"
done

# Just indicate what modules we configured
msg 1 Modules built:"$MODULE_DEPENDENCIES".
