fb34ebc505
* tests_flags.in: Fix typo in usage. * tests_flags.in: Set target specific LIBS for cygwin. From-SVN: r38599
176 lines
4.9 KiB
Bash
176 lines
4.9 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 ./mkcheck.in, which in the long will be removed in favor of a
|
|
# DejaGnu-base 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:LTCXX:LIBS:LTEXE:CXX:CXXFLAGS
|
|
# the meaning of which is as follows:
|
|
# BUILD_DIR build-dir
|
|
# SRC_DIR src-dir
|
|
# PREFIX_DIR install-dir (meaningful only with --installed-library)
|
|
# LTCXX libtoolized command to compile a C++ program
|
|
# LIBS flags to pass to the linker
|
|
# LTEXE libtoolized command to run a compiled C++ program
|
|
# CXX which C++ compiler is being used
|
|
# CXXFLAGS special C++ flags used
|
|
#
|
|
|
|
##
|
|
## 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 [ ! $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
|
|
|
|
# This is LIBTOOL=@LIBTOOL@ piped through a bit of sanity that we can
|
|
# assume for this script (by the time we run this).
|
|
LIBTOOL="${BUILD_DIR}/libtool"
|
|
chmod u+x ${LIBTOOL}
|
|
|
|
# Compute include paths
|
|
# INC_PATH == include path to new headers for use on gcc command-line
|
|
top_srcdir=@top_srcdir@
|
|
C_DIR="`basename @C_INCLUDE_DIR@`"
|
|
case ${query} in
|
|
--installed-library)
|
|
INC_PATH="-I${SRC_DIR}/testsuite"
|
|
;;
|
|
*)
|
|
INC_PATH="-nostdinc++ @CSHADOW_FLAGS@ -I${BUILD_DIR}/include
|
|
-I${SRC_DIR}/include/std -I${SRC_DIR}/include/$C_DIR
|
|
-I${SRC_DIR}/include -I${SRC_DIR}/libsupc++ -I${SRC_DIR}/libio
|
|
-I${SRC_DIR}/testsuite"
|
|
;;
|
|
esac
|
|
|
|
# If called for compiler tests, just output include paths
|
|
case ${query} in
|
|
--compiler)
|
|
echo ${INC_PATH} -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.
|
|
. ${top_srcdir}/configure.target
|
|
|
|
# LIB_PATH == where to find the build libraries for libtool's use
|
|
# CXX == how to call the compiler
|
|
case ${query} in
|
|
--built-library)
|
|
LIB_PATH=${BUILD_DIR}/src
|
|
CXX="${BUILD_DIR}/../../gcc/g++ -B${BUILD_DIR}/../../gcc/"
|
|
;;
|
|
--installed-library)
|
|
LIB_PATH=${PREFIX_DIR}/lib
|
|
CXX=${PREFIX_DIR}/bin/g++
|
|
;;
|
|
esac
|
|
|
|
# gcc compiler flags (maybe use glibcpp_cxxflags from configure.target,
|
|
# but thst's really meant for building the library itself, not using it)
|
|
CXXFLAGS="-ggdb3 -DDEBUG_ASSERT @SECTION_FLAGS@ @SECTION_LDFLAGS@"
|
|
|
|
# LTCXX == how to call libtool when creating an executable
|
|
# LIBS == any extra needed -l switches, etc (may need more libs, lose lose)
|
|
case ${query} in
|
|
--built-library)
|
|
LTCXX="${LIBTOOL} --tag=CXX --mode=link ${CXX} ${CXXFLAGS} ${INC_PATH}
|
|
${LIB_PATH}/../libsupc++/libsupc++.la ${LIB_PATH}/libstdc++.la
|
|
-no-install"
|
|
LTEXE="${LIBTOOL} --mode=execute"
|
|
case @target_os@ in
|
|
*cygwin*) LIBS="-nodefaultlibs -lgcc -lcygwin -luser32
|
|
-lkernel32 -ladvapi32 -lshell32" ;;
|
|
*) LIBS="-nodefaultlibs -lc -lgcc -lc" ;;
|
|
esac
|
|
;;
|
|
--installed-library)
|
|
# For the installed version, we really only need to use libtool and
|
|
# the .la file to get correct rpaths.
|
|
LTCXX="${LIBTOOL} --tag=CXX --mode=link ${CXX} ${CXXFLAGS} ${INC_PATH}
|
|
-L${LIB_PATH} ${LIB_PATH}/libstdc++.la -no-install
|
|
-rpath ${LIB_PATH}"
|
|
LTEXE="${LIBTOOL} --mode=execute"
|
|
LIBS=
|
|
;;
|
|
esac
|
|
|
|
echo ${BUILD_DIR}:${SRC_DIR}:${PREFIX_DIR}:${LTCXX}:${LIBS}:${LTEXE}:${CXX}:${CXXFLAGS}
|
|
exit 0
|