#!/bin/sh

#
# This script computes the various flags needed to run GNU C++ testsuites
# (compiler specific as well as library specific). 
#
# Written by Benjamin Kosnik <bkoz@redhat.com>
#            Gabriel Dos Reis <gdr@codesourcery.com>
#

# Print a message saying how this script is intended to be invoked
print_usage() {
    cat <<EOF
Usage: 
    testsuite_flags --install-includes
		    --build-includes
		    --build-cxx
		    --build-cc
		    --install-cxx
		    --cxxflags
		    --cxxldflags
		    --cxxpchflags
		    --cxxvtvflags

EOF
}

# Establish configure-generated directory structure.
BUILD_DIR=@glibcxx_builddir@
SRC_DIR=@glibcxx_srcdir@
PREFIX_DIR=@glibcxx_prefixdir@
query=$1

case ${query} in
    --install-includes)
      INCLUDES="-I${SRC_DIR}/testsuite/util"
      echo ${INCLUDES}
      ;;
    --build-includes)
      INCLUDES="-nostdinc++ @GLIBCXX_INCLUDES@ 
                -I${SRC_DIR}/include/backward -I${SRC_DIR}/testsuite/util"
      echo ${INCLUDES}
      ;;
    --install-cxx)
      CXX=${PREFIX_DIR}/bin/g++
      echo ${CXX}
      ;;
    --build-cxx)
      CXX_build="@CXX@"
      CXX=`echo "$CXX_build" | sed 's,gcc/xgcc ,gcc/xg++ ,'`
      echo ${CXX}
      ;;
    --build-cc)
      CC_build="@CC@"
      CC="$CC_build"
      echo ${CC}
      ;;
    --cxxflags)
      CXXFLAGS_default="-fmessage-length=0 -fno-show-column"
      CXXFLAGS_config="@SECTION_FLAGS@ @EXTRA_CXX_FLAGS@"
      echo ${CXXFLAGS_default} ${CXXFLAGS_config} 
      ;;
    --cxxvtvflags)
      CXXFLAGS_vtv="@VTV_CXXFLAGS@"
      LDFLAGS_vtv="@VTV_CXXLINKFLAGS@"
      echo ${CXXFLAGS_vtv} ${LDFLAGS_vtv}
      ;;
    --cxxparallelflags)
      CXXFLAGS_parallel="-D_GLIBCXX_PARALLEL -fopenmp
			 -B${BUILD_DIR}/../libgomp 
                         -I${BUILD_DIR}/../libgomp 
			 -L${BUILD_DIR}/../libgomp/.libs -lgomp"
      echo ${CXXFLAGS_parallel}
      ;;
    --cxxpchflags)
      PCHFLAGS="@glibcxx_PCHFLAGS@"
      echo ${PCHFLAGS}
      ;;
    --cxxldflags)
      SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@
                      -L${BUILD_DIR}/src/filesystem/.libs"
      echo ${SECTIONLDFLAGS}
      ;;
    *)
      print_usage
      ;;
esac

exit 0
