174 lines
4.6 KiB
Bash
174 lines
4.6 KiB
Bash
#!/bin/sh
|
|
|
|
#
|
|
# This script computes the various flags needed to run GNU C++ testsuites
|
|
# (compiler specific as well as library specific). It is based on
|
|
# the file ./mkcheck.in, which in the long will be removed in favor of a
|
|
# DejaGnu-based framework.
|
|
#
|
|
# Written by Gabriel Dos Reis <gdr@codesourcery.com>
|
|
#
|
|
|
|
#
|
|
# Synopsis
|
|
# * tests_flags --compiler build-dir src-dir
|
|
#
|
|
# Returns a space-separated list of flags needed to run front-end
|
|
# specific tests.
|
|
#
|
|
# * tests_flags --built-library build-dir src-dir
|
|
# * tests_flags --installed-library build-dir src-dir install-dir
|
|
#
|
|
# Returns a colon-separated list of space-separated list of flags,
|
|
# needed to run library specific tests,
|
|
# BUILD_DIR:SRC_DIR:PREFIX_DIR:CXX:CXXFLAGS:INCLUDES:LIBS
|
|
# the meaning of which is as follows:
|
|
# BUILD_DIR libstdc++-v3 build-dir
|
|
# SRC_DIR libstdc++-v3 src-dir
|
|
# PREFIX_DIR install-dir (meaningful only with --installed-library)
|
|
# CXX which C++ compiler is being used
|
|
# CXXFLAGS special flags to pass to g++
|
|
# INCLUDES paths to headers
|
|
# LIBS flags to pass to the linker
|
|
#
|
|
|
|
##
|
|
## Utility functions
|
|
##
|
|
|
|
# Print a message saying how this script is intended to be invoked
|
|
print_usage() {
|
|
cat <<EOF
|
|
Usage:
|
|
tests_flags --compiler <build-dir> <src-dir>
|
|
--built-library <build-dir> <src-dir>
|
|
--installed-library <build-dir> <src-dir> <install-dir>
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
# Check for command line option
|
|
check_options() {
|
|
# First, check for number of command line arguments
|
|
if [ \( $1 -ne 3 \) -a \( $1 -ne 4 \) ]; then
|
|
print_usage;
|
|
fi
|
|
|
|
# Then, see if we understand the job we're asked for
|
|
case $2 in
|
|
--compiler|--built-library|--installed-library)
|
|
# OK
|
|
;;
|
|
*)
|
|
print_usage
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Directory sanity check
|
|
check_directory() {
|
|
if [ ! -d $2 ]; then
|
|
echo "$1 '$2' directory not found, exiting."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
##
|
|
## Main processing
|
|
##
|
|
|
|
# Command line options sanity check
|
|
check_options $# $1
|
|
|
|
query=$1
|
|
|
|
# Check for build, source and install directories
|
|
BUILD_DIR=$2; SRC_DIR=$3
|
|
check_directory 'Build' ${BUILD_DIR}
|
|
check_directory 'Source' ${SRC_DIR}
|
|
case ${query} in
|
|
--installed-library)
|
|
PREFIX_DIR=$4
|
|
check_directory 'Install' ${PREFIX_DIR}
|
|
;;
|
|
*)
|
|
PREFIX_DIR=
|
|
;;
|
|
esac
|
|
|
|
# Compute include paths
|
|
# INCLUDES == include path to new headers for use on gcc command-line
|
|
C_DIR="`basename @C_INCLUDE_DIR@`"
|
|
case ${query} in
|
|
--installed-library)
|
|
INCLUDES="-I${SRC_DIR}/testsuite"
|
|
;;
|
|
*)
|
|
INCLUDES="-nostdinc++ -I${BUILD_DIR}/include -I${SRC_DIR}/include
|
|
-I${SRC_DIR}/include/std -I${SRC_DIR}/include/$C_DIR
|
|
-I${SRC_DIR}/libsupc++ -I${SRC_DIR}/libio
|
|
-I${SRC_DIR}/testsuite"
|
|
if test x@xcompiling@ = x1; then
|
|
INCLUDES="${INCLUDES} -I${SRC_DIR}/../newlib/libc/include"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# If called for compiler tests, just output appropriate include paths
|
|
case ${query} in
|
|
--compiler)
|
|
echo ${INCLUDES} -I${SRC_DIR}/include/backward -I${SRC_DIR}/include/ext
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
# For built or installed libraries, we need to get right OS-specific bits.
|
|
. ${SRC_DIR}/configure.target
|
|
|
|
# LIB_PATH == where to find the C++ build libraries for libtool's use
|
|
# GCC_LIB_PATH == where to find the gcc build libraries for libtool's use
|
|
# CXX == how to invoke the compiler
|
|
case ${query} in
|
|
--built-library)
|
|
LIB_PATH=${BUILD_DIR}/src
|
|
GCC_LIB_PATH=${BUILD_DIR}/../../gcc
|
|
CROSS_LIB_PATH=${BUILD_DIR}/../newlib
|
|
CXX="${BUILD_DIR}/../../gcc/g++ -B${BUILD_DIR}/../../gcc/"
|
|
;;
|
|
--installed-library)
|
|
LIB_PATH=${PREFIX_DIR}/lib
|
|
GCC_LIB_PATH=
|
|
CROSS_LIB_PATH=
|
|
CXX=${PREFIX_DIR}/bin/g++
|
|
;;
|
|
esac
|
|
|
|
# CXXFLAGS == run the testsuite with any special configuration
|
|
# flags from the library build.
|
|
CXXFLAGS="-ggdb3 -DDEBUG_ASSERT @SECTION_FLAGS@ @SECTION_LDFLAGS@"
|
|
|
|
# LIBS == any extra may needed -L switches
|
|
case ${query} in
|
|
--built-library)
|
|
LIBS="${LIB_PATH}/libstdc++.la -no-install -rpath ${GCC_LIB_PATH}"
|
|
if test x@xcompiling@ = x1; then
|
|
LIBS="${LIBS} -B${CROSS_LIB_PATH}/"
|
|
fi
|
|
case @target_os@ in
|
|
*cygwin*)
|
|
LIBS="${LIBS} -nodefaultlibs -lgcc -lcygwin -luser32
|
|
-lkernel32 -ladvapi32 -lshell32"
|
|
;;
|
|
*)
|
|
LIBS="${LIBS} -nodefaultlibs -lgcc -lc -lgcc"
|
|
;;
|
|
esac
|
|
;;
|
|
--installed-library)
|
|
LIBS="${LIB_PATH}/libstdc++.la -no-install -rpath ${LIB_PATH}"
|
|
;;
|
|
esac
|
|
|
|
echo ${BUILD_DIR}:${SRC_DIR}:${PREFIX_DIR}:${CXX}:${CXXFLAGS}:${INCLUDES}:${LIBS}
|
|
exit 0
|