summaryrefslogtreecommitdiff
path: root/APACHE_1_3_42/src/helpers/TestCompile
diff options
context:
space:
mode:
Diffstat (limited to 'APACHE_1_3_42/src/helpers/TestCompile')
-rwxr-xr-xAPACHE_1_3_42/src/helpers/TestCompile298
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
+