rse 98/07/11 03:24:12
Modified: src CHANGES Configure
src/helpers TestCompile
src/include .cvsignore conf.h
src/main http_main.c
src/os/unix os.h
src/os/win32 os.h
Log:
Provide HAVE_XXXX_H defines for C headers (take 3)
==================================================
PR#2093, PR#2361, PR#2377, PR#2434,
PR#2524, PR#2525, PR#2533, PR#2569
Background
----------
Currently we have some places (especially in conf.h and os/unix/os.h) where we
make decisions about the existence of particular header files based on the
underlying platform. In general this is sufficient, but expercience showed
(especially the Linux/dlfcn.h PRs) that making general implications from
platforms to file existance is very problematic because of too much variants
and version of particular platforms.
Problem
-------
The problem is that we decide particular header files exists even when they
don't exist. This caused compile time failures and a lot of PRs.
Solution
--------
The short-hand solution in the past was to use ``-D<PLATFORM>=<VERSION>''
defines instead of ``-D<PLATFORM>'' and use ``#if defined(<PLATFORM>) &&
<PLATFORM> >= <VERSION>'' instead of ``#ifdef <PLATFORM>''. This is ok for
platforms where we really have access to and where we can be sure that a
particular platform version has a file or hasn't it. This is not the case for
esoteric Unix derivates and not the case of the huge amount of Linux variants.
So a long-term solution is needed. As often GNU Autoconf is the father of the
idea: We actually check for the existance of particular header files and
define HAVE_XXXX_H if ``#include <xxxx.h>'' works (which means xxxx.h exists).
The patch
---------
The patch actually does the following:
1. It src/Configure another check-cycle is done where we test for various
header files which later conditionally can be included via
#ifdef HAVE_XXX_H
#include <xxx.h>
#endif
This is done by calling TestCompile with a new command "header" which
checks for existing header files. As a result the file include/conf_auto.h
is generated containing these HAVE_XXX_H defines. Currently the following
header files are tested (can be extended in the future):
dlfcn.h
dl.h
bstring.h
crypt.h
unistd.h
sys/resource.h
sys/select.h
sys/processor.h
2. In include/conf.h all HAVE_XXX_H defines/undefines were replaced by
a single ``#include "conf_auto.h"'' statement at the top. And in all
related files the inclusion of such headers are now based on HAVE_XXX_H
defines.
The generated conf_auto.h file looks like this:
| /* Automatically generated file - DO NOT EDIT */
| #ifndef APACHE_CONF_AUTO_H
| #define APACHE_CONF_AUTO_H 1
|
| /* <dlfcn.h> */
| #ifndef HAVE_DLFCN_H
| #define HAVE_DLFCN_H 1
| #endif
|
| /* <dl.h> */
| #ifdef HAVE_DL_H
| #undef HAVE_DL_H
| #endif
| :
| :
| #endif /* APACHE_CONF_AUTO_H */
Submitted by: Ralf S. Engelschall
Reviewed by: Dean Gaudet, Jim Jagielski
PR: 2093, 2361, 2377, 2434, 2524, 2525, 2533, 2569
Revision Changes Path
1.959 +9 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.958
retrieving revision 1.959
diff -u -r1.958 -r1.959
--- CHANGES 1998/07/10 18:29:45 1.958
+++ CHANGES 1998/07/11 10:24:05 1.959
@@ -1,5 +1,14 @@
Changes with Apache 1.3.1
+ *) Autogenerate some HAVE_XXXXX_H defines in conf_auto.h (determined via
+ TestCompile) instead of defining them manually in conf.h based on less
+ accurate platform definitions. This way we no longer have to fiddle with
+ OS-type and/or OS-version identifiers to discover whether a system
header
+ file exists or not. Instead we now directly check for the existence of
+ those esoteric ones.
+ [Ralf S. Engelschall] PR#2093, PR#2361, PR#2377, PR#2434,
+ PR#2524, PR#2525, PR#2533, PR#2569
+
*) mod_setenvif (BrowserMatch* and friends) will now match a missing
field with "^$". [Ken Coar]
1.274 +40 -0 apache-1.3/src/Configure
Index: Configure
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/Configure,v
retrieving revision 1.273
retrieving revision 1.274
diff -u -r1.273 -r1.274
--- Configure 1998/07/08 17:46:53 1.273
+++ Configure 1998/07/11 10:24:05 1.274
@@ -1203,6 +1203,36 @@
;;
esac
+####################################################################
+## Now check for existance of non-standard system header files
+##
+echo " + checking for system header files"
+
+CONF_AUTO_H="include/conf_auto.h"
+CHECK_FOR_HEADERS="dlfcn.h dl.h bstring.h crypt.h unistd.h sys/resource.h
sys/select.h sys/processor.h"
+
+echo "/* Automatically generated file - DO NOT EDIT */" >$CONF_AUTO_H
+echo "#ifndef APACHE_CONF_AUTO_H" >>$CONF_AUTO_H
+echo "#define APACHE_CONF_AUTO_H 1" >>$CONF_AUTO_H
+echo "" >>$CONF_AUTO_H
+for header in $CHECK_FOR_HEADERS; do
+ echo "/* <$header> */" >>$CONF_AUTO_H
+ name="`echo $header | sed -e 's:/:_:g' -e 's:\.:_:g' | tr 'a-z' 'A-Z'`"
+ if ./helpers/TestCompile header $header; then
+ eval "HAVE_${name}=1"
+ echo "#ifndef HAVE_${name}" >>$CONF_AUTO_H
+ echo "#define HAVE_${name} 1" >>$CONF_AUTO_H
+ echo "#endif" >>$CONF_AUTO_H
+ else
+ eval "HAVE_${name}=0"
+ echo "#ifdef HAVE_${name}" >>$CONF_AUTO_H
+ echo "#undef HAVE_${name}" >>$CONF_AUTO_H
+ echo "#endif" >>$CONF_AUTO_H
+ fi
+ echo "" >>$CONF_AUTO_H
+done
+echo "#endif /* APACHE_CONF_AUTO_H */" >>$CONF_AUTO_H
+
# SOCKS4 support:
# We assume that if they are using SOCKS4, then they've
# adjusted EXTRA_LIBS and/or EXTRA_LDFLAGS as required,
@@ -1240,6 +1270,16 @@
;;
esac
fi
+
+# AIX 4.x support:
+# Processor Binding
+case "$PLAT" in
+ *-ibm-aix*)
+ if [ ".$HAVE_SYS_PROCESSOR_H" = .1 ]; then
+ CFLAGS="$CFLAGS -DAIX_BIND_PROCESSOR"
+ fi
+ ;;
+esac
####################################################################
## Find out what modules we want and try and configure things for them
1.12 +20 -1 apache-1.3/src/helpers/TestCompile
Index: TestCompile
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/helpers/TestCompile,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TestCompile 1998/04/11 15:45:59 1.11
+++ TestCompile 1998/07/11 10:24:07 1.12
@@ -4,7 +4,7 @@
#
# Yet another Apache Configure helper script.
# This script tests certain aspects of the compilation
-# process. Right now, it can perform 3 tests:
+# process. Right now, it can perform 5 tests:
#
# ./helpers/TestCompile lib <libname>
# Which checks to see if <libname> exists on this system
@@ -16,6 +16,9 @@
# ./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
#
@@ -92,6 +95,22 @@
void main(void) {
$2();
}
+EOF
+ ;;
+ "header")
+ if [ "x$2" = "x" ]; then
+ exit
+ fi
+ TLIB=""
+ if [ "$VERBOSE" = "yes" ]; then
+ ERRDIR=""
+ else
+ ERRDIR='2>/dev/null'
+ fi
+ TARGET='testfunc'
+ cat <<EOF >testfunc.c
+#include <$2>
+void main(void) { }
EOF
;;
*)
1.2 +1 -0 apache-1.3/src/include/.cvsignore
Index: .cvsignore
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- .cvsignore 1998/03/08 03:46:25 1.1
+++ .cvsignore 1998/07/11 10:24:08 1.2
@@ -1 +1,2 @@
ap_config.h
+conf_auto.h
1.221 +2 -43 apache-1.3/src/include/conf.h
Index: conf.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/conf.h,v
retrieving revision 1.220
retrieving revision 1.221
diff -u -r1.220 -r1.221
--- conf.h 1998/07/08 17:46:59 1.220
+++ conf.h 1998/07/11 10:24:08 1.221
@@ -67,6 +67,7 @@
* See PORTING for a listing of what they mean
*/
+#include "conf_auto.h"
/* Have to include sys/stat.h before ../os/win32/os.h so we can override
stat() properly */
@@ -88,7 +89,6 @@
/* Define one of these according to your system. */
#if defined(MINT)
typedef int rlim_t;
-#define HAVE_SYS_RESOURCE_H 1
#define JMP_BUF sigjmp_buf
#define NO_LONG_DOUBLE
#define USE_FLOCK_SERIALIZED_ACCEPT
@@ -123,7 +123,6 @@
#elif defined(SUNOS4)
#define HAVE_GMTOFF 1
-#define HAVE_SYS_RESOURCE_H 1
#undef NO_KILLPG
#undef NO_SETSID
char *crypt(const char *pw, const char *salt);
@@ -144,8 +143,6 @@
#undef HAVE_GMTOFF
#define NO_KILLPG
#undef NO_SETSID
-#define HAVE_SYS_RESOURCE_H 1
-#define HAVE_DLFCN_H 1
#define bzero(a,b) memset(a,0,b)
#if !defined(USE_SYSVSEM_SERIALIZED_ACCEPT) && \
!defined(USE_PTHREAD_SERIALIZED_ACCEPT)
@@ -155,7 +152,6 @@
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
#define USE_MMAP_FILES
-#define HAVE_CRYPT_H 1
int gethostname(char *name, int namelen);
#define HAVE_SYSLOG 1
#define SYS_SIGLIST _sys_siglist
@@ -173,15 +169,11 @@
#define USE_SHMGET_SCOREBOARD
#define HAVE_MMAP 1
#define USE_MMAP_FILES
-#define HAVE_CRYPT_H 1
-#define HAVE_DLFCN_H 1
#define NO_LONG_DOUBLE
-#define HAVE_BSTRING_H 1
#define NO_LINGCLOSE
#define HAVE_SYSLOG 1
#elif defined(HIUX)
-#define HAVE_SYS_RESOURCE_H 1
#undef HAVE_GMTOFF
#define NO_KILLPG
#undef NO_SETSID
@@ -194,7 +186,6 @@
#define HAVE_SYSLOG 1
#elif defined(HPUX) || defined(HPUX10)
-#define HAVE_SYS_RESOURCE_H 1
#undef HAVE_GMTOFF
#define NO_KILLPG
#undef NO_SETSID
@@ -218,9 +209,6 @@
#define USE_SHMGET_SCOREBOARD
#undef HAVE_GMTOFF
#define HAVE_RESOURCE
-#define HAVE_CRYPT_H
-#undef HAVE_SYS_SELECT_H
-#define HAVE_SYS_RESOURCE_H
#define USE_FCNTL_SERIALIZED_ACCEPT
/* feeling brave? want to try using POSIX mutexes? */
/* #define HAVE_MMAP */
@@ -235,7 +223,6 @@
#undef HAVE_GMTOFF
#undef NO_KILLPG
#undef NO_SETSID
-#define HAVE_SYS_SELECT_H 1
#ifndef __ps2__
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
@@ -277,7 +264,6 @@
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
#define USE_MMAP_FILES
-#define HAVE_CRYPT_H 1
#define NO_LONG_DOUBLE
#define HAVE_SYSLOG 1
#define USE_FLOCK_SERIALIZED_ACCEPT
@@ -290,7 +276,6 @@
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
#define USE_MMAP_FILES
-#define HAVE_CRYPT_H 1
#define NO_LONG_DOUBLE
#define HAVE_SYSLOG 1
typedef int rlim_t;
@@ -309,7 +294,6 @@
#define NO_SETSID
#define NEED_STRDUP
#define NO_LINGCLOSE
-#define NO_UNISTD_H
#undef _POSIX_SOURCE
#ifndef FD_CLOEXEC
#define FD_CLOEXEC 1
@@ -368,7 +352,6 @@
#define HAVE_SYSLOG 1
#elif defined(LINUX)
-#define HAVE_DLFCN_H 1
#if LINUX > 1
#include <features.h>
@@ -402,7 +385,6 @@
#define USE_SHMGET_SCOREBOARD
#define HAVE_MMAP 1
#define USE_MMAP_FILES
-#define HAVE_SYS_RESOURCE_H 1
/* glibc 2.1 and later finally define rlim_t */
#if !defined(__GLIBC__) || __GLIBC__ < 2 || (__GLIBC__ == 2 &&
__GLIBC_MINOR__ < 1)
@@ -436,12 +418,10 @@
#elif defined(SCO5)
-#define HAVE_SYS_SELECT_H 1
#define USE_FCNTL_SERIALIZED_ACCEPT
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
#define USE_MMAP_FILES
-#define HAVE_SYS_RESOURCE_H 1
#define SecureWare
#define HAVE_SYSLOG 1
@@ -527,9 +507,6 @@
#define USE_MMAP_FILES
#define HAVE_SHMGET 1
#undef USE_SHMGET_SCOREBOARD /* force use of mmap() scoreboard */
-#define HAVE_CRYPT_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_SYS_RESOURCE_H 1
#include <sys/time.h>
#if UW >= 200
#define _POSIX_SOURCE
@@ -551,7 +528,6 @@
#define HAVE_SYSLOG 1
#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(NETBSD)
-#define HAVE_SYS_RESOURCE_H 1
#define HAVE_GMTOFF 1
#undef NO_KILLPG
#undef NO_SETSID
@@ -601,8 +577,6 @@
#if defined(__FreeBSD__)
#include <osreldate.h>
#endif
-#define HAVE_DLFCN_H 1
-#define HAVE_SYS_RESOURCE_H 1
#define HAVE_GMTOFF 1
#undef NO_KILLPG
#undef NO_SETSID
@@ -638,7 +612,6 @@
#define NEED_INITGROUPS
#define NEED_SELECT_H
#define NEED_PROCESS_H
-#define HAVE_SYS_SELECT_H 1
#include <unix.h>
#define HAVE_MMAP 1
#define USE_POSIX_SCOREBOARD
@@ -651,13 +624,9 @@
#define HAVE_RESOURCE 1
#undef USE_MMAP_SCOREBOARD
#undef USE_SHMGET_SCOREBOARD
-#undef HAVE_CRYPT_H
-#undef HAVE_SYS_SELECT_H
-#define HAVE_SYS_RESOURCE_H 1
#undef USE_FCNTL_SERIALIZED_ACCEPT
#undef USE_FLOCK_SERIALIZED_ACCEPT
#define USE_LONGJMP
-#undef NO_UNISTD_H
#undef NO_KILLPG
#undef NO_SETSID
#undef NO_USE_SIGACTION
@@ -679,7 +648,6 @@
#define HAVE_MMAP 1
#define USE_MMAP_SCOREBOARD
#define USE_MMAP_FILES
-#define HAVE_CRYPT_H 1
#define HAVE_SYSLOG 1
#elif defined(__EMX__)
@@ -696,7 +664,6 @@
#define MAXSOCKETS 4096
#define USE_OS2_SCOREBOARD
#define NO_RELIABLE_PIPED_LOGS
-#define HAVE_SYS_SELECT_H 1
#elif defined(__MACHTEN__)
typedef int rlim_t;
@@ -744,7 +711,6 @@
#define HAVE_SYSLOG 1
#elif defined(NEWSOS)
-#define HAVE_SYS_RESOURCE_H 1
#define HAVE_SHMGET 1
#define USE_SHMGET_SCOREBOARD
#define USE_LONGJMP
@@ -849,13 +815,6 @@
#define ENUM_BITFIELD(e,n,w) e n : w
#endif
-/* Do we have sys/resource.h; assume that BSD does. */
-#ifndef HAVE_SYS_RESOURCE_H
-#ifdef BSD
-#define HAVE_SYS_RESOURCE_H 1
-#endif
-#endif /* HAVE_SYS_RESOURCE_H */
-
/*
* The particular directory style your system supports. If you have dirent.h
* in /usr/include (POSIX) or /usr/include/sys (SYSV), #include
@@ -964,7 +923,7 @@
#define LOGNAME_MAX 25
#endif
-#ifndef NO_UNISTD_H
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
1.371 +1 -1 apache-1.3/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v
retrieving revision 1.370
retrieving revision 1.371
diff -u -r1.370 -r1.371
--- http_main.c 1998/07/08 16:54:34 1.370
+++ http_main.c 1998/07/11 10:24:09 1.371
@@ -3733,7 +3733,7 @@
}
if (!pid) {
-#if defined(AIX) && (AIX >= 41)
+#ifdef AIX_BIND_PROCESSOR
/* by default AIX binds to a single processor
* this bit unbinds children which will then bind to another cpu
*/
1.27 +2 -12 apache-1.3/src/os/unix/os.h
Index: os.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/os/unix/os.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- os.h 1998/07/10 18:29:51 1.26
+++ os.h 1998/07/11 10:24:11 1.27
@@ -58,6 +58,8 @@
#ifndef APACHE_OS_H
#define APACHE_OS_H
+#include "conf.h"
+
#define PLATFORM "Unix"
/*
@@ -86,18 +88,6 @@
* Apache modules under run-time via
* dynamic shared object (DSO) mechanism
*/
-
-#if defined(HPUX) || defined(HPUX10)
-#define HAVE_DL_H 1
-#endif
-
-#if defined(LINUX) || defined(__FreeBSD__) ||\
- defined(__OpenBSD__) || defined(__NetBSD__) || \
- defined(SOLARIS2) || defined(__bsdi__) || \
- defined(IRIX) || defined(SVR4) || defined(OSF1) ||\
- defined(SCO5)
-#define HAVE_DLFCN_H 1
-#endif
#ifdef HAVE_DL_H
#include <dl.h>
1.20 +0 -1 apache-1.3/src/os/win32/os.h
Index: os.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/os/win32/os.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- os.h 1998/06/20 11:20:40 1.19
+++ os.h 1998/07/11 10:24:11 1.20
@@ -23,7 +23,6 @@
#define STRICT
#endif
#define CASE_BLIND_FILESYSTEM
-#define NO_UNISTD_H
#define NO_WRITEV
#define NO_SETSID
#define NO_USE_SIGACTION