#!/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 # # # 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 < --built-library --installed-library 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++ @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 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 == the full pathname of the compiler case ${query} in --built-library) LIB_PATH=${BUILD_DIR}/src GCC_LIB_PATH=${BUILD_DIR}/../../gcc CXX="${BUILD_DIR}/../../gcc/g++" ;; --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@" # LIBS == any extra needed -l switches, etc (may need more libs, lose lose) case ${query} in --built-library) LIBS="${LIB_PATH}/libstdc++.la ${LIB_PATH}/../libsupc++/libsupc++.la -no-install -rpath ${GCC_LIB_PATH}" case @target_os@ in *cygwin*) LIBS="${LIBS} -nodefaultlibs -lgcc -lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32" ;; *) LIBS="${LIBS} -nodefaultlibs -lc -lgcc -lc" ;; esac ;; --installed-library) LIBS="-L${LIB_PATH} ${LIB_PATH}/libstdc++.la -no-install -rpath ${LIB_PATH}" ;; esac echo ${BUILD_DIR}:${SRC_DIR}:${PREFIX_DIR}:${CXX}:${CXXFLAGS}:${INCLUDES}:${LIBS} exit 0