diff options
Diffstat (limited to 'APACHE_1_3_42/src/helpers/TestCompile')
-rwxr-xr-x | APACHE_1_3_42/src/helpers/TestCompile | 298 |
1 files changed, 298 insertions, 0 deletions
diff --git a/APACHE_1_3_42/src/helpers/TestCompile b/APACHE_1_3_42/src/helpers/TestCompile new file mode 100755 index 0000000000..ff8a4bc531 --- /dev/null +++ b/APACHE_1_3_42/src/helpers/TestCompile @@ -0,0 +1,298 @@ +#!/bin/sh +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +exstat=1 +trap 'rm -f Makefile dummy ../dummy.o dummy.exe testfunc.c testfunc ../testfunc.o testfunc.exe; exit $exstat' 0 1 2 3 15 +# +# Yet another Apache Configure helper script. +# This script tests certain aspects of the compilation +# process. Right now, it can perform 5 tests: +# +# ./helpers/TestCompile lib <libname> +# Which checks to see if <libname> exists on this system +# +# ./helpers/TestCompile lib <libname> <func> +# Which checks to see if <libname> exists on this system and +# contains func. +# +# ./helpers/TestCompile func <function> +# Which checks to see if <function> exists +# +# ./helpers/TestCompile header <header> +# Which checks to see if header file <header> exists +# +# ./helpers/TestCompile sanity +# Which does a simple sanity check/test compile +# +# ./helpers/TestCompile sizeof <type> +# Which prints out the sizeof <type> (sure would be nice +# if sizeof could be use in preprocessor if's) +# +# ./helpers/TestCompile byteorder +# Which prints out the byte order of the machine +# (12: little endian, 21: big endian) +# +# It does these by creating a small mini-makefile, based on +# ../Makefile.config and trying to compile a small dummy +# program. If the compilation succeeds, we assume the test +# was successful as well. +# +# This must be run as './helpers/TestCompile' from +# the ./src directory (same directory that Configure is +# located) if you want to test it out. Configure must +# also call it as './helpers/TestCompile' +# +# +# INVOCATION SWITCHES: +# TestCompile evaluates the following switches +# (currently, it accepts only *ONE* of them!): +# +# -v (enable verbose operation) +# Enables VERBOSE=yes, see below. +# +# -s (enforce silent operation) +# Override a VERBOSE=yes, force it to VERBOSE=no. +# +# -r (run generated test program) +# Enables TCRUNIT=yes, see below +# +# +# ENVIRONMENT VARIABLES: +# The following environment variables have influence on +# TestCompile's operation: +# +# $VERBOSE (yes|no; default=no) +# If set to "yes", will print compiler messages to stderr +# Otherwise, stderr of all invoked programs is sent to /dev/null +# +# $TCRUNIT (yes|no; default=no) +# (This variable is obsoleted by the "-r" switch) +# If set to "yes", will invoke the test program which was +# generated by TestCompile. Useful for "TestCompile sizeof" +# and "TestCompile byteorder" tests. +# Otherwise, TestCompile only tests for the presence of a +# generated program when deciding whether the compilation was +# successful. +# +# $TCADDINCL (#include <> stmt list; default=empty) +# If set to an "#include <file>" preprocessor directive +# (optionally several #include's separated by newlines), these +# directives will be added to the generated test sources. +# That allows, e.g., the "TestCompile sizeof" test to check for +# types which are not defined in the standard locations. +# +# $TLIB (additional libraries; default=empty) +# If set to a list of additional libraries, these libs will be used +# in addition to the one tested by the "TestCompile lib" call. +# For the other TestCompile tests, it is ignored. +# +# +# Initially written by Jim Jagielski for the Apache configuration mechanism +# +# This script falls under the Apache License. +# See http://www.apache.org/docs/LICENSE + + +cd ./helpers + +# +# Handle "verbose", "silent" and "runit" flags. Allow for them +# to be set via the environment +# +if [ "x$VERBOSE" = "x" ]; then + VERBOSE="no" +fi +if [ "x$TCRUNIT" = "x" ]; then + TCRUNIT="no"; +fi +case "$1" in + "-v") + VERBOSE="yes" + shift + ;; + "-s") + VERBOSE="no" + shift + ;; + "-r") + TCRUNIT="yes" + shift + ;; +esac + +# +# Make sure we have the right arguments +# + +case "$1" in + "lib") + if [ "x$2" = "x" ]; then + exit + fi + TLIB="-l$2 $TLIB" + if [ "x$VERBOSE" = "xyes" ]; then + ERRDIR="" + else + ERRDIR='2>/dev/null' + fi + if [ "x$3" = "x" ]; then + TARGET='dummy' + else + TARGET='testfunc' + echo "int main(void) { $3(); return(0); }" > testfunc.c + fi + ;; + "sizeof") + if [ "x$2" = "x" ]; then + exit + fi + TLIB="" + if [ "x$VERBOSE" = "xyes" ]; then + ERRDIR="" + else + ERRDIR='2>/dev/null' + fi + TARGET='testfunc' + cat <<EOF >testfunc.c +#include <stdio.h> +#include <sys/types.h> +$TCADDINCL +int main(void) { + printf("%d\n", sizeof($2)); + return(0); +} +EOF + ;; + "byteorder") + TLIB="" + if [ "x$VERBOSE" = "xyes" ]; then + ERRDIR="" + else + ERRDIR='2>/dev/null' + fi + TARGET='testfunc' + cat <<EOF >testfunc.c +#include <stdio.h> +#include <sys/types.h> +$TCADDINCL +int main(void) { + /* Are we little or big endian? From Harbison & Steele */ + union { + long l; + char c[sizeof(long)]; + } u; + u.l = 1; + printf("%s\n", u.c[sizeof(long)-1] == 1 ? "21" : "12"); + return(0); +} +EOF + ;; + "sanity") + TLIB="" + if [ "x$VERBOSE" = "xno" ]; then + ERRDIR='2>/dev/null' + else + ERRDIR="" + fi + TARGET='dummy' + ;; + "func") + if [ "x$2" = "x" ]; then + exit + fi + TLIB="" + if [ "x$VERBOSE" = "xyes" ]; then + ERRDIR="" + else + ERRDIR='2>/dev/null' + fi + TARGET='testfunc' + cat <<EOF >testfunc.c +$TCADDINCL +int main(void) { + $2(); + return(0); +} +EOF + ;; + "header") + if [ "x$2" = "x" ]; then + exit + fi + TLIB="" + if [ "x$VERBOSE" = "xyes" ]; then + ERRDIR="" + else + ERRDIR='2>/dev/null' + fi + TARGET='testfunc' + cat <<EOF >testfunc.c +$TCADDINCL +#include <$2> +int main(void) { + return(0); +} +EOF + ;; + *) + exit + ;; +esac + +# +# Get makefile settings and build a basic Makefile +# +rm -f dummy ../dummy.o testfunc ../testfunc.o + +cat ../Makefile.config > Makefile +cat <<EOF >> Makefile +CFLAGS=\$(OPTIM) \$(CFLAGS1) \$(EXTRA_CFLAGS) +LIBS=\$(EXTRA_LIBS) \$(LIBS1) +INCLUDES=\$(INCLUDES1) \$(EXTRA_INCLUDES) +LDFLAGS=\$(LDFLAGS1) \$(EXTRA_LDFLAGS) + +dummy: + cd ..; \$(CC) \$(CFLAGS) \$(INCLUDES) \$(LDFLAGS) -o helpers/dummy helpers/dummy.c $TLIB \$(LIBS) + +testfunc: + cd ..; \$(CC) \$(CFLAGS) \$(INCLUDES) \$(LDFLAGS) -o helpers/testfunc helpers/testfunc.c $TLIB \$(LIBS) +EOF + +# Now run that Makefile +eval "${MAKE-make} ${TARGET} $ERRDIR >&2" + +# And see if dummy exists and is executable, if so, then we +# assume the condition we are testing for is good +# +# Use our PrintPath helper script using the "-p" option to +# have PrintPath just search this directory. + +if ./PrintPath -s -p`pwd` $TARGET ; then + if [ "x$OS" = "xMPE/iX" ]; then + # clever hack to check for unresolved externals without actually + # executing the test program + if eval "callci run `pwd`/$TARGET\;stdin=\*notfound 2>&1 | /bin/grep ^UNRESOLVED $ERRDIR >&2"; then + exit 1 # there were unresolved externals + fi + fi + if [ "x$TCRUNIT" = "xyes" ]; then + `pwd`/$TARGET + fi + exstat=0 +fi + |