scuffed-code/tools/release/c/uconfigtest.sh
Steven R. Loomis 77b162e87b ICU-10981 merge from branch
X-SVN-Rev: 36495
2014-09-13 05:19:28 +00:00

432 lines
9.2 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# Exhaust(ive, ing) (Mean, Multi) (Test, Trouble)
# Copyright (c) 2002-2014 IBM All Rights Reserved
# Builds ICU a whole lotta times and with different options
# Set the options below and execute this script with the shell.
# This script is checked into tools/trunk/release/c. It assumes that the
# icu directory is at the same level as the tools directory. If this
# is not the case, use the uconfigtest.local file to set the
# SRC_DIR variable to point at the ICU source directory.
# Or, alternatively, you can make a symlink tools/icu -> your_icu_dir
# You can also use the uconfigtest.local file to override the BUILD_DIR
# and ICUPLATFORM variables.
# It can be handy to run 'tail -F uconfigtest/stats' in another window to see where things are.
#------------------- Find full path names -----------------------
JOPT=-j2
# check for uconfigtest.local
if [ -f ./uconfigtest.local ]
then
. ./uconfigtest.local
fi
# location of this script
S=$(pwd)
# Build root - tools/release/c/uconfigtest
BUILD_DIR=${BUILD_DIR:-${S}/uconfigtest}
if [ ! -d ${BUILD_DIR} ];
then
mkdir -p ${BUILD_DIR} || exit 1
fi
FAILS=${BUILD_DIR}/fails
STATS=${BUILD_DIR}/stats
>${FAILS}
>${STATS}
echo >> ${STATS}
echo >> ${STATS}
# the runConfigureICU platform name
ICUPLATFORM=${ICUPLATFORM:-Linux}
# Global Config options to use
#export COPTS=" --with-data-packaging=archive"
export COPTS=
# Global testing options to use
export INTLTESTOPTS=-w
export CINTLTEST_OPTS=-w
# --- Probably will not need to modify the following variables ---
# ICU directory is $S/../../../icu
ICU=$(dirname $(dirname $(dirname ${S})))/icu
# Source directory
SRC_DIR=${SRC_DIR:-${ICU}/source}
# ------------ End of config variables
UCONFIG_H=$SRC_DIR/common/unicode/uconfig.h
UCONFIG_LOCAL_H=uconfig_local.h
UCONFIG_USE_LOCAL=UCONFIG_USE_LOCAL
# Prepare uconfig.h
if grep -q ${UCONFIG_LOCAL_H} $UCONFIG_H ;
then
echo "# $UCONFIG_H already contains our patch, no change"
else
mv $UCONFIG_H ${UCONFIG_H}.orig
cat > $UCONFIG_H <<EOF
#if defined(${UCONFIG_USE_LOCAL})
#include ${UCONFIG_LOCAL_H}"
#endif
/* for uconfigtest.sh - you may REMOVE above this line */
/* ----------------------------------------------------------- */
EOF
cat ${UCONFIG_H}.orig >> ${UCONFIG_H}
echo "# $UCONFIG_H updated"
fi
# Start, set a default name to start with in case something goes wrong
export NAME=foo
mkdir -p ${BUILD_DIR} ${BUILD_DIR}/times 2>/dev/null
# Banner function - print a separator to split the output
ban()
{
echo
echo
echo "#- -----------------------$NAME------------- -#"
echo
echo "CPPFLAGS = $CPPFLAGS"
echo "UCONFIGS = $UCONFIGS"
echo
echo " build to ${BUILD_DIR}/${NAME} and install in ${BUILD_DIR}/I${NAME} "
echo
echo "${NAME} ---------------------------------------" >> ${STATS}
}
# Clean up the old tree before building again
clean()
{
stats clean
echo cleaning ${BUILD_DIR}/${NAME} and ${BUILD_DIR}/I${NAME}
rm -rf ${BUILD_DIR}/I${NAME} ${BUILD_DIR}/${NAME}
mkdir -p ${BUILD_DIR}/${NAME}
}
# Run configure with the appropriate options (out of source build)
config()
{
stats config
mkdir -p ${BUILD_DIR}/${NAME} 2>/dev/null
cd ${BUILD_DIR}/${NAME}
mkdir emtinc 2>/dev/null
# myconfig.h
cat > emtinc/${UCONFIG_LOCAL_H} <<EOF
/* NAME=${NAME} */
/* UCONFIGS=${UCONFIGS} */
/* CPPFLAGS=${CPPFLAGS} */
#ifndef _MYCONFIG_H
#define _MYCONFIG_H
EOF
for what in `echo $UCONFIGS`;
do
echo "#define UCONFIG_${what} 1" >> emtinc/${UCONFIG_LOCAL_H}
done
cat >> emtinc/${UCONFIG_LOCAL_H} <<EOF
#endif
EOF
CPPFLAGS="${CPPFLAGS} -D${UCONFIG_USE_LOCAL} -I${BUILD_DIR}/${NAME}/emtinc"
echo "CPPFLAGS=\"$CPPFLAGS\" Configure ${ICUPLATFORM} ${CONFIG_OPTS} $COPTS --srcdir=$SRC_DIR"
$SRC_DIR/runConfigureICU ${ICUPLATFORM} $CONFIG_OPTS $COPTS --prefix=${BUILD_DIR}/I${NAME} --srcdir=$SRC_DIR 2>&1 > ${BUILD_DIR}/${NAME}/config.out
CONFIG_OPTS=
}
stats()
{
STATUS="${NAME}: ${1} "`date`
echo ${STATUS} >> ${STATS}
echo "*** ${NAME} ********* ${1} ************* "
}
fail()
{
FAILURE="error: ${BUILD_DIR}/${NAME}: ${1} "`date`
echo ${FAILURE} >> ${FAILS}
echo ${FAILURE} >> ${STATS}
echo "${FAILURE}"
}
TESTCPP=uconfig-simpleTest.cpp
TESTCPPPATH=${S}/${TESTCPP}
if [ ! -f ${TESTCPPPATH} ];
then
echo error cannot load simple test ${TESTCPPPATH}
exit 1
fi
# Do an actual build
bld()
{
##*## Stream filter to put 'NAME: ' in front of
##*## every line:
##*## . . . 2>&1 | tee -a ./bld.log | sed -e "s/^/${NAME}: /"
cd ${BUILD_DIR}/${NAME}
stats "make -k ${JOPT} all ${1}"
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.all make -k ${JOPT} all ${1} DEPS= || fail make
stats install
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.install make -k install ${1} DEPS= INSTALL_DATA='ln -svf ' || fail install
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.il make -k install-local ${1} DEPS= || fail install-local
stats tests
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.tst make -k ${JOPT} tests ${1} DEPS= || fail tests
if [ -f ${BUILD_DIR}/${NAME}/test/intltest/intltest ];
then
stats check
# use parallel check (pcheck)
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.chk make -k ${JOPT} pcheck ${1} INTLTEST_OPTS=-w CINTLTST_OPTS=-w DEPS= || fail check
else
stats check0
fi
stats hdrtst
PATH=${BUILD_DIR}/I${NAME}/bin:$PATH make -k -C ${BUILD_DIR}/${NAME}/test/hdrtst/ DEPS= check || fail hdrtst
stats irun
cp ${TESTCPPPATH} ${TESTCPP}
/usr/bin/time -o ${BUILD_DIR}/times/${NAME}.irun ${S}/../../scripts/icurun -i ${BUILD_DIR}/I${NAME} ${TESTCPP} || fail irun
}
# Do a complete cycle for a run
# arg: opts to build
doit()
{
ban ; clean ; config ; bld ${1}
}
# Set up the variables for convenience
NO_COL="NO_COLLATION"
NO_BRK="NO_BREAK_ITERATION"
NO_FMT="NO_FORMATTING"
NO_UCM="NO_LEGACY_CONVERSION"
NO_CNV="NO_CONVERSION"
NO_FIO="NO_FILE_IO"
NO_XLT="NO_TRANSLITERATION"
NO_RGX="NO_REGULAR_EXPRESSIONS"
JS_COL="ONLY_COLLATION"
NO_NRM="NO_NORMALIZATION"
NO_IDN="NO_IDNA"
NO_SVC="NO_SERVICE"
NO_MST="$NO_COL $NO_BRK $NO_FMT $NO_UCM $NO_FIO $NO_RGX $NO_XLT $NO_NRM $NO_IDN $NO_SVC"
NO_ALL="$NO_MST $NO_SVC"
# Now, come the actual test runs
# Each one sets a NAME, and CPPFLAGS or other flags, and calls doit
do_DEFAULT()
{
######################
# DEFAULT
export NAME=DEFAULT
export UCONFIGS=""
export CPPFLAGS=""
doit
}
# these are now valid:
USE_PREBUILT_DATA="ICUDATA_SOURCE_ARCHIVE=`echo ${BUILD_DIR}/DEFAULT/data/out/tmp/*.dat`"
# use cross build
CROSS_BUILD="--with-cross-build=${BUILD_DIR}/DEFAULT --disable-tools --disable-extras --disable-samples"
######################
do_NO_MST()
{
######################
# NO_MST
export NAME=NO_MST
export UCONFIGS="$NO_MST"
export CPPFLAGS=""
doit ${USE_PREBUILT_DATA}
######################
}
do_NO_RGX()
{
######################
# NO_RGX
export NAME=NO_RGX
export UCONFIGS="$NO_RGX"
export CPPFLAGS=""
doit
######################
}
do_NO_COL()
{
######################
# NO_COL
export NAME=NO_COL
export UCONFIGS="$NO_COL"
export CPPFLAGS=""
doit
######################
}
do_NO_BRK()
{
######################
# NO_BRK
export NAME=NO_BRK
export UCONFIGS="$NO_BRK"
export CPPFLAGS=""
doit
######################
}
do_NO_FMT()
{
######################
# NO_FMT
export NAME=NO_FMT
export UCONFIGS="$NO_FMT"
export CPPFLAGS=""
doit
######################
}
do_NO_UCM()
{
######################
# NO_UCM
export NAME=NO_UCM
export UCONFIGS="$NO_UCM"
export CPPFLAGS=""
doit
######################
}
do_NO_FIO()
{
######################
# NO_FIO
export NAME=NO_FIO
export UCONFIGS="$NO_FIO"
export CPPFLAGS=""
doit ${USE_PREBUILT_DATA}
######################
}
do_NO_CNV()
{
######################
# NO_FIO
export NAME=NO_CNV
export UCONFIGS="$NO_CNV"
export CPPFLAGS=""
CONFIG_OPTS="${CROSS_BUILD} --disable-tests"
doit ${USE_PREBUILT_DATA}
######################
}
do_NO_XLT()
{
######################
# NO_XLT
export NAME=NO_XLT
export UCONFIGS="$NO_XLT"
export CPPFLAGS=""
doit
######################
}
do_NO_IDN()
{
######################
# NO_IDN
export NAME=NO_IDN
export UCONFIGS="$NO_IDN"
export CPPFLAGS=""
doit
######################
}
do_NO_NRM()
{
######################
# NO_NRM
export NAME=NO_NRM
export UCONFIGS="$NO_NRM"
export CPPFLAGS=""
doit
######################
}
do_NO_SVC()
{
######################
# NO_SVC
export NAME=NO_SVC
export UCONFIGS="$NO_SVC"
export CPPFLAGS=""
doit
######################
}
do_JS_COL()
{
######################
# JS_COL
export NAME=JS_COL
export UCONFIGS="$JS_COL"
export CPPFLAGS=""
doit
######################
}
do_NO_ALL()
{
######################
# NO_ALL
export NAME=NO_ALL
export UCONFIGS="$NO_ALL"
export CPPFLAGS=""
doit ${USE_PREBUILT_DATA}
######################
}
# now run them
# Always needed - as the host
do_DEFAULT
do_NO_MST
do_NO_RGX
do_NO_COL
do_NO_BRK
do_NO_FMT
do_NO_UCM
do_NO_FIO
do_NO_XLT
do_NO_CNV
do_NO_IDN
do_NO_NRM
do_NO_SVC
do_JS_COL
do_NO_ALL
NAME=done
ban
echo "All builds finished! Times are in ${BUILD_DIR}/times"
echo "There were errors if the following grep finds anything."
echo "grep status ${BUILD_DIR}/times/*"
grep status ${BUILD_DIR}/times/*
if [ -s ${FAILS} ];
then
echo "Failures: "
cat ${FAILS}
fi