rse 98/09/16 12:38:28
Modified: . configure src CHANGES Configuration.tmpl Configure Added: src/helpers findcpp.sh checkheader.sh Log: Ok, here as Roy requested: We do commit then review/fixing. So, here is the first cut for a fixed C header file check: | Fix the recently introduced C header file checking: We now use the C | pre-processor pass only (and no longer the complete compiler pass) to | determine whether a C header file exists or not. Because only this way we're | safe against inter-header dependencies (which caused horrible portability | problems). The only drawback is that we now have a CPP configuration variable | which has to be determined first (we do a similar approach as GNU Autoconf | does here). When all fails the user still has the possibility to override it | manually via APACI or src/Configuration. As a fallback for the header check | itself we can directly check the existance of the file under /usr/include, | too. Please try it out, fix it, grep out the PR-numbers, etc. Cleanups and other stuff for src/helpers/* I'll do tomorrow. Today I've totally tired and have to go to bed... Revision Changes Path 1.46 +2 -2 apache-1.3/configure Index: configure =================================================================== RCS file: /export/home/cvs/apache-1.3/configure,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- configure 1998/08/25 10:51:51 1.45 +++ configure 1998/09/16 19:38:25 1.46 @@ -278,7 +278,7 @@ echo "## restoring your configuration. Additional parameters can be supplied." >>$configstatus echo "##" >>$configstatus echo "" >>$configstatus - for var in CC OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \ + for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \ LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB; do eval "val=\"\$$var\"" if [ ".$val" != . ]; then @@ -954,7 +954,7 @@ # generate settings from imported environment variables OIFS="$IFS" IFS="$DIFS" -for var in CC OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \ +for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \ LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB DEPS; do eval "val=\"\$$var\""; if [ ".$val" != . ]; then 1.1060 +12 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1059 retrieving revision 1.1060 diff -u -r1.1059 -r1.1060 --- CHANGES 1998/09/15 19:47:36 1.1059 +++ CHANGES 1998/09/16 19:38:26 1.1060 @@ -1,5 +1,17 @@ Changes with Apache 1.3.2 + *) Fix the recently introduced C header file checking: We now use the C + pre-processor pass only (and no longer the complete compiler pass) to + determine whether a C header file exists or not. Because only this way + we're safe against inter-header dependencies (which caused horrible + portability problems). The only drawback is that we now have a CPP + configuration variable which has to be determined first (we do a similar + approach as GNU Autoconf does here). When all fails the user still has + the possibility to override it manually via APACI or src/Configuration. + As a fallback for the header check itself we can directly check the + existance of the file under /usr/include, too. + [Ralf S. Engelschall] PR???? + *) PORT: Added RHAPSODY (Mac OS X Server) support. MAP_TMPFILE defined as an alternate mechanism for mmap'd shared memory for RHAPSODY. ap_private_extern defined to hide symbols that conflict with loaded 1.111 +1 -0 apache-1.3/src/Configuration.tmpl Index: Configuration.tmpl =================================================================== RCS file: /export/home/cvs/apache-1.3/src/Configuration.tmpl,v retrieving revision 1.110 retrieving revision 1.111 diff -u -r1.110 -r1.111 --- Configuration.tmpl 1998/09/12 20:16:52 1.110 +++ Configuration.tmpl 1998/09/16 19:38:26 1.111 @@ -58,6 +58,7 @@ EXTRA_DEPS= #CC= +#CPP= #OPTIM= #RANLIB= 1.289 +57 -40 apache-1.3/src/Configure Index: Configure =================================================================== RCS file: /export/home/cvs/apache-1.3/src/Configure,v retrieving revision 1.288 retrieving revision 1.289 diff -u -r1.288 -r1.289 --- Configure 1998/09/15 19:47:36 1.288 +++ Configure 1998/09/16 19:38:26 1.289 @@ -799,6 +799,63 @@ fi #################################################################### +## Now check how we can _directly_ run the C pre-processor +## +TCPP=`egrep '^CPP=' Makefile.config | tail -1 | awk -F= '{print $2}'` +if [ ".$TCPP" != . ]; then + CPP=`CC=$CC CPP=$TCPP ./helpers/findcpp.sh` +else + CPP=`CC=$CC ./helpers/findcpp.sh` +fi +if [ ".$TCPP" = . ]; then + echo "CPP=$CPP" >> Makefile.config +fi +echo " + setting C pre-processor to $CPP" + +#################################################################### +## Now check for existance of non-standard system header files +## and start generation of the ap_config_auto.h header +## +AP_CONFIG_AUTO_H="include/ap_config_auto.h" +echo "/*" >$AP_CONFIG_AUTO_H +echo " * ap_config_auto.h -- Automatically determined configuration stuff" >>$AP_CONFIG_AUTO_H +echo " * THIS FILE WAS AUTOMATICALLY GENERATED - DO NOT EDIT!" >>$AP_CONFIG_AUTO_H +echo " */" >>$AP_CONFIG_AUTO_H +echo "" >>$AP_CONFIG_AUTO_H +echo "#ifndef AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H +echo "#define AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H + +echo " + checking for system header files" +CHECK_FOR_HEADERS="dlfcn.h dl.h bstring.h crypt.h unistd.h sys/resource.h sys/select.h sys/processor.h" +for header in $CHECK_FOR_HEADERS; do + echo "" >>$AP_CONFIG_AUTO_H + echo "/* check: #include <$header> */" >>$AP_CONFIG_AUTO_H + name="`echo $header | sed -e 's:/:_:g' -e 's:\.:_:g' | tr '[a-z]' '[A-Z]'`" + CPP=$CPP ./helpers/checkheader.sh $header + if [ $? -eq 0 ]; then + echo "#ifndef HAVE_${name}" >>$AP_CONFIG_AUTO_H + echo "#define HAVE_${name} 1" >>$AP_CONFIG_AUTO_H + echo "#endif" >>$AP_CONFIG_AUTO_H + else + echo "#ifdef HAVE_${name}" >>$AP_CONFIG_AUTO_H + echo "#undef HAVE_${name}" >>$AP_CONFIG_AUTO_H + echo "#endif" >>$AP_CONFIG_AUTO_H + fi +done + +#################################################################### +# Special AIX 4.x support: need to check for sys/processor.h +# to decide whether the Processor Binding can be used or not +case "$PLAT" in + *-ibm-aix*) + CPP=$CPP ./helpers/checkheader.sh sys/processor.h + if [ $? -eq 0 ]; then + CFLAGS="$CFLAGS -DAIX_BIND_PROCESSOR" + fi + ;; +esac + +#################################################################### ## Look for OPTIM and save for later ## TOPTIM=`egrep '^OPTIM=' Makefile.config | tail -1 | awk -F= '{print $2}'` @@ -1239,17 +1296,6 @@ esac fi -# AIX 4.x support: Special Case: need to check for sys/processor.h -# before we usually would. -# Processor Binding -case "$PLAT" in - *-ibm-aix*) - if ./helpers/TestCompile header sys/processor.h ; then - CFLAGS="$CFLAGS -DAIX_BIND_PROCESSOR" - fi - ;; -esac - #################################################################### ## Find out what modules we want and try and configure things for them ## Module lines can look like this: @@ -1700,35 +1746,6 @@ fi #################################################################### -## Now check for existance of non-standard system header files -## and start generation of the ap_config_auto.h header -## -AP_CONFIG_AUTO_H="include/ap_config_auto.h" -echo "/*" >$AP_CONFIG_AUTO_H -echo " * ap_config_auto.h -- Automatically determined configuration stuff" >>$AP_CONFIG_AUTO_H -echo " * THIS FILE WAS AUTOMATICALLY GENERATED - DO NOT EDIT!" >>$AP_CONFIG_AUTO_H -echo " */" >>$AP_CONFIG_AUTO_H -echo "" >>$AP_CONFIG_AUTO_H -echo "#ifndef AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H -echo "#define AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H - -echo " + checking for system header files" -CHECK_FOR_HEADERS="dlfcn.h dl.h bstring.h crypt.h unistd.h sys/resource.h sys/select.h sys/processor.h" -for header in $CHECK_FOR_HEADERS; do - echo "" >>$AP_CONFIG_AUTO_H - echo "/* check: #include <$header> */" >>$AP_CONFIG_AUTO_H - name="`echo $header | sed -e 's:/:_:g' -e 's:\.:_:g' | tr '[a-z]' '[A-Z]'`" - if ./helpers/TestCompile header $header; then - echo "#ifndef HAVE_${name}" >>$AP_CONFIG_AUTO_H - echo "#define HAVE_${name} 1" >>$AP_CONFIG_AUTO_H - echo "#endif" >>$AP_CONFIG_AUTO_H - else - echo "#ifdef HAVE_${name}" >>$AP_CONFIG_AUTO_H - echo "#undef HAVE_${name}" >>$AP_CONFIG_AUTO_H - echo "#endif" >>$AP_CONFIG_AUTO_H - fi -done - ## Finish building ap_config_auto.h ## ## We pick out all -D's from CFLAGS and insert them as defines into 1.1 apache-1.3/src/helpers/findcpp.sh Index: findcpp.sh =================================================================== #!/bin/sh ## ## findcpp.sh -- Find out how to _directly_ run the C Pre-Processor (CPP) ## Written by Ralf S. Engelschall for the Apache configuration mechanism ## # create a test C source: # - has to use extension ".c" because some CPP only accept this one # - uses assert.h because this is a standard header and harmless to include # - contains a Syntax Error to make sure it passes only the preprocessor # but not the real compiler pass cat >conftest.c <<EOF #include <assert.h> Syntax Error EOF # default in case of problems if [ ".$AP_PRINTPATH" = . ]; then AP_PRINTPATH='PrintPath' fi # some braindead systems have a CPP define for a directory :-( if [ ".$CPP" != . ]; then if [ -d "$CPP" ]; then CPP='' fi fi if [ ".$CPP" != . ]; then # case 1: user provided a default CPP variable (we only check) (eval "$CPP conftest.c >/dev/null") 2>conftest.out my_error=`grep -v '^ *+' conftest.out` if [ ".$my_error" != . ]; then CPP='' fi else # case 2: no default CPP variable (we have to find one) # 1. try the standard -E option CPP="${CC-cc} -E" (eval "$CPP conftest.c >/dev/null") 2>conftest.out my_error=`grep -v '^ *+' conftest.out` if [ ".$my_error" != . ]; then # 2. try the -E option and GCC's -traditional-ccp option CPP="${CC-cc} -E -traditional-cpp" (eval "$CPP conftest.c >/dev/null") 2>conftest.out my_error=`grep -v '^ *+' conftest.out` if [ ".$my_error" != . ]; then # 3. try a standalone cpp command in $PATH and lib dirs CPP="`./helpers/$AP_PRINTPATH cpp`" if [ ".$CPP" = . ]; then CPP="`./helpers/$AP_PRINTPATH -p/lib:/usr/lib:/usr/local/lib cpp`" fi if [ ".$CPP" != . ]; then (eval "$CPP conftest.c >/dev/null") 2>conftest.out my_error=`grep -v '^ *+' conftest.out` if [ ".$my_error" != . ]; then # ok, we gave up... CPP='' fi fi fi fi fi # cleanup after work rm -f conftest.* # Ok, empty CPP variable now means it's not available if [ ".$CPP" = . ]; then CPP='NOT-AVAILABLE' fi echo $CPP 1.1 apache-1.3/src/helpers/checkheader.sh Index: checkheader.sh =================================================================== #!/bin/sh ## ## checkheader.sh -- Check whether a C header file exists ## Written by Ralf S. Engelschall for the Apache configuration mechanism ## header=$1 rc=1 if [ ".$CPP" = . ]; then CPP='NOT-AVAILABLE' fi if [ ".$CPP" != ".NOT-AVAILABLE" ]; then # create a test C source cat >conftest.c <<EOF #include <$header> Syntax Error EOF (eval "$CPP conftest.c >/dev/null") 2>conftest.out my_error=`grep -v '^ *+' conftest.out` if [ ".$my_error" = . ]; then rc=0 fi else if [ -f "/usr/include/$header" ]; then rc=0 fi fi rm -f conftest.* exit $rc