summaryrefslogtreecommitdiffstatsabout
diff options
context:
space:
mode:
-rw-r--r--apache13.h11
-rwxr-xr-xconfig.guess1314
-rwxr-xr-xconfig.sub1410
-rw-r--r--configure.ac4
-rw-r--r--functions.h8
-rw-r--r--mod_log_sql.c618
-rw-r--r--mod_log_sql.h48
-rw-r--r--mod_log_sql_logio.c19
-rw-r--r--mod_log_sql_ssl.c22
9 files changed, 542 insertions, 2912 deletions
diff --git a/apache13.h b/apache13.h
index 77bf0ce..8174263 100644
--- a/apache13.h
+++ b/apache13.h
@@ -47,7 +47,7 @@
47/* Functions */ 47/* Functions */
48#define ap_get_remote_host(a,b,c,d) ap_get_remote_host(a,b,c) 48#define ap_get_remote_host(a,b,c,d) ap_get_remote_host(a,b,c)
49#define ap_set_deprecated NULL 49#define ap_set_deprecated NULL
50 50
51#define apr_uri_unparse ap_unparse_uri_components 51#define apr_uri_unparse ap_unparse_uri_components
52#define apr_uri_parse ap_parse_uri_components 52#define apr_uri_parse ap_parse_uri_components
53#define ap_add_version_component(p,s) ap_add_version_component(s) 53#define ap_add_version_component(p,s) ap_add_version_component(s)
@@ -75,15 +75,18 @@
75#define apr_array_cat ap_array_cat 75#define apr_array_cat ap_array_cat
76#define apr_is_empty_array(t) (((t) == NULL)||((t)->nelts == 0)) 76#define apr_is_empty_array(t) (((t) == NULL)||((t)->nelts == 0))
77 77
78#define apr_file_t FILE
79#define apr_file_printf fprintf
80
78#define apr_tolower ap_tolower 81#define apr_tolower ap_tolower
79 82
80void log_error(char *file, int line, int level, apr_status_t status, 83void log_error(char *file, int line, int level, apr_status_t status,
81 const server_rec *s, const char *fmt, ...) __attribute__ ((format (printf, 6,7))); 84 const server_rec *s, const char *fmt, ...) __attribute__ ((format (printf, 6,7)));
82 85
83#ifndef WIN32 86#ifndef WIN32
84inline 87inline
85#endif 88#endif
86void log_error(char *file, int line, int level, 89void log_error(char *file, int line, int level,
87 apr_status_t status, const server_rec *s, const char *fmt, ...) 90 apr_status_t status, const server_rec *s, const char *fmt, ...)
88{ 91{
89 static char buff[MAX_STRING_LEN]; 92 static char buff[MAX_STRING_LEN];
diff --git a/config.guess b/config.guess
deleted file mode 100755
index cd430f6..0000000
--- a/config.guess
+++ /dev/null
@@ -1,1314 +0,0 @@
1#! /bin/sh
2# Attempt to guess a canonical system name.
3# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
4# Free Software Foundation, Inc.
5
6timestamp='2001-08-21'
7
8# This file is free software; you can redistribute it and/or modify it
9# under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16# General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21#
22# As a special exception to the GNU General Public License, if you
23# distribute this file as part of a program that contains a
24# configuration script generated by Autoconf, you may include it under
25# the same distribution terms that you use for the rest of that program.
26
27# Written by Per Bothner <bothner@cygnus.com>.
28# Please send patches to <config-patches@gnu.org>.
29#
30# This script attempts to guess a canonical system name similar to
31# config.sub. If it succeeds, it prints the system name on stdout, and
32# exits with 0. Otherwise, it exits with 1.
33#
34# The plan is that this can be called by configure scripts if you
35# don't specify an explicit build system type.
36
37me=`echo "$0" | sed -e 's,.*/,,'`
38
39usage="\
40Usage: $0 [OPTION]
41
42Output the configuration name of the system \`$me' is run on.
43
44Operation modes:
45 -h, --help print this help, then exit
46 -t, --time-stamp print date of last modification, then exit
47 -v, --version print version number, then exit
48
49Report bugs and patches to <config-patches@gnu.org>."
50
51version="\
52GNU config.guess ($timestamp)
53
54Originally written by Per Bothner.
55Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
56Free Software Foundation, Inc.
57
58This is free software; see the source for copying conditions. There is NO
59warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
60
61help="
62Try \`$me --help' for more information."
63
64# Parse command line
65while test $# -gt 0 ; do
66 case $1 in
67 --time-stamp | --time* | -t )
68 echo "$timestamp" ; exit 0 ;;
69 --version | -v )
70 echo "$version" ; exit 0 ;;
71 --help | --h* | -h )
72 echo "$usage"; exit 0 ;;
73 -- ) # Stop option processing
74 shift; break ;;
75 - ) # Use stdin as input.
76 break ;;
77 -* )
78 echo "$me: invalid option $1$help" >&2
79 exit 1 ;;
80 * )
81 break ;;
82 esac
83done
84
85if test $# != 0; then
86 echo "$me: too many arguments$help" >&2
87 exit 1
88fi
89
90
91dummy=dummy-$$
92trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
93
94# CC_FOR_BUILD -- compiler used by this script.
95# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
96# use `HOST_CC' if defined, but it is deprecated.
97
98set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
99 ,,) echo "int dummy(){}" > $dummy.c ;
100 for c in cc gcc c89 ; do
101 ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
102 if test $? = 0 ; then
103 CC_FOR_BUILD="$c"; break ;
104 fi ;
105 done ;
106 rm -f $dummy.c $dummy.o $dummy.rel ;
107 if test x"$CC_FOR_BUILD" = x ; then
108 CC_FOR_BUILD=no_compiler_found ;
109 fi
110 ;;
111 ,,*) CC_FOR_BUILD=$CC ;;
112 ,*,*) CC_FOR_BUILD=$HOST_CC ;;
113esac'
114
115# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
116# (ghazi@noc.rutgers.edu 1994-08-24)
117if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
118 PATH=$PATH:/.attbin ; export PATH
119fi
120
121UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
122UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
123UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
124UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
125
126# Note: order is significant - the case branches are not exclusive.
127
128case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
129 *:NetBSD:*:*)
130 # Netbsd (nbsd) targets should (where applicable) match one or
131 # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
132 # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
133 # switched to ELF, *-*-netbsd* would select the old
134 # object file format. This provides both forward
135 # compatibility and a consistent mechanism for selecting the
136 # object file format.
137 # Determine the machine/vendor (is the vendor relevant).
138 case "${UNAME_MACHINE}" in
139 amiga) machine=m68k-unknown ;;
140 arm32) machine=arm-unknown ;;
141 atari*) machine=m68k-atari ;;
142 sun3*) machine=m68k-sun ;;
143 mac68k) machine=m68k-apple ;;
144 macppc) machine=powerpc-apple ;;
145 hp3[0-9][05]) machine=m68k-hp ;;
146 ibmrt|romp-ibm) machine=romp-ibm ;;
147 *) machine=${UNAME_MACHINE}-unknown ;;
148 esac
149 # The Operating System including object format, if it has switched
150 # to ELF recently, or will in the future.
151 case "${UNAME_MACHINE}" in
152 i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
153 eval $set_cc_for_build
154 if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
155 | grep __ELF__ >/dev/null
156 then
157 # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
158 # Return netbsd for either. FIX?
159 os=netbsd
160 else
161 os=netbsdelf
162 fi
163 ;;
164 *)
165 os=netbsd
166 ;;
167 esac
168 # The OS release
169 release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
170 # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
171 # contains redundant information, the shorter form:
172 # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
173 echo "${machine}-${os}${release}"
174 exit 0 ;;
175 alpha:OSF1:*:*)
176 if test $UNAME_RELEASE = "V4.0"; then
177 UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
178 fi
179 # A Vn.n version is a released version.
180 # A Tn.n version is a released field test version.
181 # A Xn.n version is an unreleased experimental baselevel.
182 # 1.2 uses "1.2" for uname -r.
183 cat <<EOF >$dummy.s
184 .data
185\$Lformat:
186 .byte 37,100,45,37,120,10,0 # "%d-%x\n"
187
188 .text
189 .globl main
190 .align 4
191 .ent main
192main:
193 .frame \$30,16,\$26,0
194 ldgp \$29,0(\$27)
195 .prologue 1
196 .long 0x47e03d80 # implver \$0
197 lda \$2,-1
198 .long 0x47e20c21 # amask \$2,\$1
199 lda \$16,\$Lformat
200 mov \$0,\$17
201 not \$1,\$18
202 jsr \$26,printf
203 ldgp \$29,0(\$26)
204 mov 0,\$16
205 jsr \$26,exit
206 .end main
207EOF
208 eval $set_cc_for_build
209 $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
210 if test "$?" = 0 ; then
211 case `./$dummy` in
212 0-0)
213 UNAME_MACHINE="alpha"
214 ;;
215 1-0)
216 UNAME_MACHINE="alphaev5"
217 ;;
218 1-1)
219 UNAME_MACHINE="alphaev56"
220 ;;
221 1-101)
222 UNAME_MACHINE="alphapca56"
223 ;;
224 2-303)
225 UNAME_MACHINE="alphaev6"
226 ;;
227 2-307)
228 UNAME_MACHINE="alphaev67"
229 ;;
230 2-1307)
231 UNAME_MACHINE="alphaev68"
232 ;;
233 esac
234 fi
235 rm -f $dummy.s $dummy
236 echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
237 exit 0 ;;
238 Alpha\ *:Windows_NT*:*)
239 # How do we know it's Interix rather than the generic POSIX subsystem?
240 # Should we change UNAME_MACHINE based on the output of uname instead
241 # of the specific Alpha model?
242 echo alpha-pc-interix
243 exit 0 ;;
244 21064:Windows_NT:50:3)
245 echo alpha-dec-winnt3.5
246 exit 0 ;;
247 Amiga*:UNIX_System_V:4.0:*)
248 echo m68k-unknown-sysv4
249 exit 0;;
250 amiga:OpenBSD:*:*)
251 echo m68k-unknown-openbsd${UNAME_RELEASE}
252 exit 0 ;;
253 *:[Aa]miga[Oo][Ss]:*:*)
254 echo ${UNAME_MACHINE}-unknown-amigaos
255 exit 0 ;;
256 arc64:OpenBSD:*:*)
257 echo mips64el-unknown-openbsd${UNAME_RELEASE}
258 exit 0 ;;
259 arc:OpenBSD:*:*)
260 echo mipsel-unknown-openbsd${UNAME_RELEASE}
261 exit 0 ;;
262 hkmips:OpenBSD:*:*)
263 echo mips-unknown-openbsd${UNAME_RELEASE}
264 exit 0 ;;
265 pmax:OpenBSD:*:*)
266 echo mipsel-unknown-openbsd${UNAME_RELEASE}
267 exit 0 ;;
268 sgi:OpenBSD:*:*)
269 echo mips-unknown-openbsd${UNAME_RELEASE}
270 exit 0 ;;
271 wgrisc:OpenBSD:*:*)
272 echo mipsel-unknown-openbsd${UNAME_RELEASE}
273 exit 0 ;;
274 *:OS/390:*:*)
275 echo i370-ibm-openedition
276 exit 0 ;;
277 arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
278 echo arm-acorn-riscix${UNAME_RELEASE}
279 exit 0;;
280 SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
281 echo hppa1.1-hitachi-hiuxmpp
282 exit 0;;
283 Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
284 # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
285 if test "`(/bin/universe) 2>/dev/null`" = att ; then
286 echo pyramid-pyramid-sysv3
287 else
288 echo pyramid-pyramid-bsd
289 fi
290 exit 0 ;;
291 NILE*:*:*:dcosx)
292 echo pyramid-pyramid-svr4
293 exit 0 ;;
294 sun4H:SunOS:5.*:*)
295 echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
296 exit 0 ;;
297 sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
298 echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
299 exit 0 ;;
300 i86pc:SunOS:5.*:*)
301 echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
302 exit 0 ;;
303 sun4*:SunOS:6*:*)
304 # According to config.sub, this is the proper way to canonicalize
305 # SunOS6. Hard to guess exactly what SunOS6 will be like, but
306 # it's likely to be more like Solaris than SunOS4.
307 echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
308 exit 0 ;;
309 sun4*:SunOS:*:*)
310 case "`/usr/bin/arch -k`" in
311 Series*|S4*)
312 UNAME_RELEASE=`uname -v`
313 ;;
314 esac
315 # Japanese Language versions have a version number like `4.1.3-JL'.
316 echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
317 exit 0 ;;
318 sun3*:SunOS:*:*)
319 echo m68k-sun-sunos${UNAME_RELEASE}
320 exit 0 ;;
321 sun*:*:4.2BSD:*)
322 UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
323 test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
324 case "`/bin/arch`" in
325 sun3)
326 echo m68k-sun-sunos${UNAME_RELEASE}
327 ;;
328 sun4)
329 echo sparc-sun-sunos${UNAME_RELEASE}
330 ;;
331 esac
332 exit 0 ;;
333 aushp:SunOS:*:*)
334 echo sparc-auspex-sunos${UNAME_RELEASE}
335 exit 0 ;;
336 sparc*:NetBSD:*)
337 echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
338 exit 0 ;;
339 atari*:OpenBSD:*:*)
340 echo m68k-unknown-openbsd${UNAME_RELEASE}
341 exit 0 ;;
342 # The situation for MiNT is a little confusing. The machine name
343 # can be virtually everything (everything which is not
344 # "atarist" or "atariste" at least should have a processor
345 # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
346 # to the lowercase version "mint" (or "freemint"). Finally
347 # the system name "TOS" denotes a system which is actually not
348 # MiNT. But MiNT is downward compatible to TOS, so this should
349 # be no problem.
350 atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
351 echo m68k-atari-mint${UNAME_RELEASE}
352 exit 0 ;;
353 atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
354 echo m68k-atari-mint${UNAME_RELEASE}
355 exit 0 ;;
356 *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
357 echo m68k-atari-mint${UNAME_RELEASE}
358 exit 0 ;;
359 milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
360 echo m68k-milan-mint${UNAME_RELEASE}
361 exit 0 ;;
362 hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
363 echo m68k-hades-mint${UNAME_RELEASE}
364 exit 0 ;;
365 *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
366 echo m68k-unknown-mint${UNAME_RELEASE}
367 exit 0 ;;
368 sun3*:OpenBSD:*:*)
369 echo m68k-unknown-openbsd${UNAME_RELEASE}
370 exit 0 ;;
371 mac68k:OpenBSD:*:*)
372 echo m68k-unknown-openbsd${UNAME_RELEASE}
373 exit 0 ;;
374 mvme68k:OpenBSD:*:*)
375 echo m68k-unknown-openbsd${UNAME_RELEASE}
376 exit 0 ;;
377 mvme88k:OpenBSD:*:*)
378 echo m88k-unknown-openbsd${UNAME_RELEASE}
379 exit 0 ;;
380 powerpc:machten:*:*)
381 echo powerpc-apple-machten${UNAME_RELEASE}
382 exit 0 ;;
383 RISC*:Mach:*:*)
384 echo mips-dec-mach_bsd4.3
385 exit 0 ;;
386 RISC*:ULTRIX:*:*)
387 echo mips-dec-ultrix${UNAME_RELEASE}
388 exit 0 ;;
389 VAX*:ULTRIX*:*:*)
390 echo vax-dec-ultrix${UNAME_RELEASE}
391 exit 0 ;;
392 2020:CLIX:*:* | 2430:CLIX:*:*)
393 echo clipper-intergraph-clix${UNAME_RELEASE}
394 exit 0 ;;
395 mips:*:*:UMIPS | mips:*:*:RISCos)
396 sed 's/^ //' << EOF >$dummy.c
397#ifdef __cplusplus
398#include <stdio.h> /* for printf() prototype */
399 int main (int argc, char *argv[]) {
400#else
401 int main (argc, argv) int argc; char *argv[]; {
402#endif
403 #if defined (host_mips) && defined (MIPSEB)
404 #if defined (SYSTYPE_SYSV)
405 printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
406 #endif
407 #if defined (SYSTYPE_SVR4)
408 printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
409 #endif
410 #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
411 printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
412 #endif
413 #endif
414 exit (-1);
415 }
416EOF
417 eval $set_cc_for_build
418 $CC_FOR_BUILD $dummy.c -o $dummy \
419 && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
420 && rm -f $dummy.c $dummy && exit 0
421 rm -f $dummy.c $dummy
422 echo mips-mips-riscos${UNAME_RELEASE}
423 exit 0 ;;
424 Motorola:PowerMAX_OS:*:*)
425 echo powerpc-motorola-powermax
426 exit 0 ;;
427 Night_Hawk:Power_UNIX:*:*)
428 echo powerpc-harris-powerunix
429 exit 0 ;;
430 m88k:CX/UX:7*:*)
431 echo m88k-harris-cxux7
432 exit 0 ;;
433 m88k:*:4*:R4*)
434 echo m88k-motorola-sysv4
435 exit 0 ;;
436 m88k:*:3*:R3*)
437 echo m88k-motorola-sysv3
438 exit 0 ;;
439 AViiON:dgux:*:*)
440 # DG/UX returns AViiON for all architectures
441 UNAME_PROCESSOR=`/usr/bin/uname -p`
442 if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
443 then
444 if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
445 [ ${TARGET_BINARY_INTERFACE}x = x ]
446 then
447 echo m88k-dg-dgux${UNAME_RELEASE}
448 else
449 echo m88k-dg-dguxbcs${UNAME_RELEASE}
450 fi
451 else
452 echo i586-dg-dgux${UNAME_RELEASE}
453 fi
454 exit 0 ;;
455 M88*:DolphinOS:*:*) # DolphinOS (SVR3)
456 echo m88k-dolphin-sysv3
457 exit 0 ;;
458 M88*:*:R3*:*)
459 # Delta 88k system running SVR3
460 echo m88k-motorola-sysv3
461 exit 0 ;;
462 XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
463 echo m88k-tektronix-sysv3
464 exit 0 ;;
465 Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
466 echo m68k-tektronix-bsd
467 exit 0 ;;
468 *:IRIX*:*:*)
469 echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
470 exit 0 ;;
471 ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
472 echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
473 exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
474 i*86:AIX:*:*)
475 echo i386-ibm-aix
476 exit 0 ;;
477 ia64:AIX:*:*)
478 if [ -x /usr/bin/oslevel ] ; then
479 IBM_REV=`/usr/bin/oslevel`
480 else
481 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
482 fi
483 echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
484 exit 0 ;;
485 *:AIX:2:3)
486 if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
487 sed 's/^ //' << EOF >$dummy.c
488 #include <sys/systemcfg.h>
489
490 main()
491 {
492 if (!__power_pc())
493 exit(1);
494 puts("powerpc-ibm-aix3.2.5");
495 exit(0);
496 }
497EOF
498 eval $set_cc_for_build
499 $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
500 rm -f $dummy.c $dummy
501 echo rs6000-ibm-aix3.2.5
502 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
503 echo rs6000-ibm-aix3.2.4
504 else
505 echo rs6000-ibm-aix3.2
506 fi
507 exit 0 ;;
508 *:AIX:*:[45])
509 IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
510 if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
511 IBM_ARCH=rs6000
512 else
513 IBM_ARCH=powerpc
514 fi
515 if [ -x /usr/bin/oslevel ] ; then
516 IBM_REV=`/usr/bin/oslevel`
517 else
518 IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
519 fi
520 echo ${IBM_ARCH}-ibm-aix${IBM_REV}
521 exit 0 ;;
522 *:AIX:*:*)
523 echo rs6000-ibm-aix
524 exit 0 ;;
525 ibmrt:4.4BSD:*|romp-ibm:BSD:*)
526 echo romp-ibm-bsd4.4
527 exit 0 ;;
528 ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
529 echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
530 exit 0 ;; # report: romp-ibm BSD 4.3
531 *:BOSX:*:*)
532 echo rs6000-bull-bosx
533 exit 0 ;;
534 DPX/2?00:B.O.S.:*:*)
535 echo m68k-bull-sysv3
536 exit 0 ;;
537 9000/[34]??:4.3bsd:1.*:*)
538 echo m68k-hp-bsd
539 exit 0 ;;
540 hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
541 echo m68k-hp-bsd4.4
542 exit 0 ;;
543 9000/[34678]??:HP-UX:*:*)
544 HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
545 case "${UNAME_MACHINE}" in
546 9000/31? ) HP_ARCH=m68000 ;;
547 9000/[34]?? ) HP_ARCH=m68k ;;
548 9000/[678][0-9][0-9])
549 case "${HPUX_REV}" in
550 11.[0-9][0-9])
551 if [ -x /usr/bin/getconf ]; then
552 sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
553 sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
554 case "${sc_cpu_version}" in
555 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
556 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
557 532) # CPU_PA_RISC2_0
558 case "${sc_kernel_bits}" in
559 32) HP_ARCH="hppa2.0n" ;;
560 64) HP_ARCH="hppa2.0w" ;;
561 esac ;;
562 esac
563 fi ;;
564 esac
565 if [ "${HP_ARCH}" = "" ]; then
566 sed 's/^ //' << EOF >$dummy.c
567
568 #define _HPUX_SOURCE
569 #include <stdlib.h>
570 #include <unistd.h>
571
572 int main ()
573 {
574 #if defined(_SC_KERNEL_BITS)
575 long bits = sysconf(_SC_KERNEL_BITS);
576 #endif
577 long cpu = sysconf (_SC_CPU_VERSION);
578
579 switch (cpu)
580 {
581 case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
582 case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
583 case CPU_PA_RISC2_0:
584 #if defined(_SC_KERNEL_BITS)
585 switch (bits)
586 {
587 case 64: puts ("hppa2.0w"); break;
588 case 32: puts ("hppa2.0n"); break;
589 default: puts ("hppa2.0"); break;
590 } break;
591 #else /* !defined(_SC_KERNEL_BITS) */
592 puts ("hppa2.0"); break;
593 #endif
594 default: puts ("hppa1.0"); break;
595 }
596 exit (0);
597 }
598EOF
599 eval $set_cc_for_build
600 (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
601 if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
602 rm -f $dummy.c $dummy
603 fi ;;
604 esac
605 echo ${HP_ARCH}-hp-hpux${HPUX_REV}
606 exit 0 ;;
607 ia64:HP-UX:*:*)
608 HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
609 echo ia64-hp-hpux${HPUX_REV}
610 exit 0 ;;
611 3050*:HI-UX:*:*)
612 sed 's/^ //' << EOF >$dummy.c
613 #include <unistd.h>
614 int
615 main ()
616 {
617 long cpu = sysconf (_SC_CPU_VERSION);
618 /* The order matters, because CPU_IS_HP_MC68K erroneously returns
619 true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
620 results, however. */
621 if (CPU_IS_PA_RISC (cpu))
622 {
623 switch (cpu)
624 {
625 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
626 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
627 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
628 default: puts ("hppa-hitachi-hiuxwe2"); break;
629 }
630 }
631 else if (CPU_IS_HP_MC68K (cpu))
632 puts ("m68k-hitachi-hiuxwe2");
633 else puts ("unknown-hitachi-hiuxwe2");
634 exit (0);
635 }
636EOF
637 eval $set_cc_for_build
638 $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
639 rm -f $dummy.c $dummy
640 echo unknown-hitachi-hiuxwe2
641 exit 0 ;;
642 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
643 echo hppa1.1-hp-bsd
644 exit 0 ;;
645 9000/8??:4.3bsd:*:*)
646 echo hppa1.0-hp-bsd
647 exit 0 ;;
648 *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
649 echo hppa1.0-hp-mpeix
650 exit 0 ;;
651 hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
652 echo hppa1.1-hp-osf
653 exit 0 ;;
654 hp8??:OSF1:*:*)
655 echo hppa1.0-hp-osf
656 exit 0 ;;
657 i*86:OSF1:*:*)
658 if [ -x /usr/sbin/sysversion ] ; then
659 echo ${UNAME_MACHINE}-unknown-osf1mk
660 else
661 echo ${UNAME_MACHINE}-unknown-osf1
662 fi
663 exit 0 ;;
664 parisc*:Lites*:*:*)
665 echo hppa1.1-hp-lites
666 exit 0 ;;
667 hppa*:OpenBSD:*:*)
668 echo hppa-unknown-openbsd
669 exit 0 ;;
670 C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
671 echo c1-convex-bsd
672 exit 0 ;;
673 C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
674 if getsysinfo -f scalar_acc
675 then echo c32-convex-bsd
676 else echo c2-convex-bsd
677 fi
678 exit 0 ;;
679 C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
680 echo c34-convex-bsd
681 exit 0 ;;
682 C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
683 echo c38-convex-bsd
684 exit 0 ;;
685 C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
686 echo c4-convex-bsd
687 exit 0 ;;
688 CRAY*X-MP:*:*:*)
689 echo xmp-cray-unicos
690 exit 0 ;;
691 CRAY*Y-MP:*:*:*)
692 echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
693 exit 0 ;;
694 CRAY*[A-Z]90:*:*:*)
695 echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
696 | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
697 -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
698 -e 's/\.[^.]*$/.X/'
699 exit 0 ;;
700 CRAY*TS:*:*:*)
701 echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
702 exit 0 ;;
703 CRAY*T3D:*:*:*)
704 echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
705 exit 0 ;;
706 CRAY*T3E:*:*:*)
707 echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
708 exit 0 ;;
709 CRAY*SV1:*:*:*)
710 echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
711 exit 0 ;;
712 CRAY-2:*:*:*)
713 echo cray2-cray-unicos
714 exit 0 ;;
715 F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
716 FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
717 FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
718 FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
719 echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
720 exit 0 ;;
721 hp300:OpenBSD:*:*)
722 echo m68k-unknown-openbsd${UNAME_RELEASE}
723 exit 0 ;;
724 i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
725 echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
726 exit 0 ;;
727 sparc*:BSD/OS:*:*)
728 echo sparc-unknown-bsdi${UNAME_RELEASE}
729 exit 0 ;;
730 *:BSD/OS:*:*)
731 echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
732 exit 0 ;;
733 *:FreeBSD:*:*)
734 echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
735 exit 0 ;;
736 *:OpenBSD:*:*)
737 echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
738 exit 0 ;;
739 i*:CYGWIN*:*)
740 echo ${UNAME_MACHINE}-pc-cygwin
741 exit 0 ;;
742 i*:MINGW*:*)
743 echo ${UNAME_MACHINE}-pc-mingw32
744 exit 0 ;;
745 i*:PW*:*)
746 echo ${UNAME_MACHINE}-pc-pw32
747 exit 0 ;;
748 i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
749 # How do we know it's Interix rather than the generic POSIX subsystem?
750 # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
751 # UNAME_MACHINE based on the output of uname instead of i386?
752 echo i386-pc-interix
753 exit 0 ;;
754 i*:UWIN*:*)
755 echo ${UNAME_MACHINE}-pc-uwin
756 exit 0 ;;
757 p*:CYGWIN*:*)
758 echo powerpcle-unknown-cygwin
759 exit 0 ;;
760 prep*:SunOS:5.*:*)
761 echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
762 exit 0 ;;
763 *:GNU:*:*)
764 echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
765 exit 0 ;;
766 i*86:Minix:*:*)
767 echo ${UNAME_MACHINE}-pc-minix
768 exit 0 ;;
769 arm*:Linux:*:*)
770 echo ${UNAME_MACHINE}-unknown-linux-gnu
771 exit 0 ;;
772 ia64:Linux:*:*)
773 echo ${UNAME_MACHINE}-unknown-linux
774 exit 0 ;;
775 m68*:Linux:*:*)
776 echo ${UNAME_MACHINE}-unknown-linux-gnu
777 exit 0 ;;
778 mips:Linux:*:*)
779 case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
780 big) echo mips-unknown-linux-gnu && exit 0 ;;
781 little) echo mipsel-unknown-linux-gnu && exit 0 ;;
782 esac
783 ;;
784 ppc:Linux:*:*)
785 echo powerpc-unknown-linux-gnu
786 exit 0 ;;
787 ppc64:Linux:*:*)
788 echo powerpc64-unknown-linux-gnu
789 exit 0 ;;
790 alpha:Linux:*:*)
791 case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
792 EV5) UNAME_MACHINE=alphaev5 ;;
793 EV56) UNAME_MACHINE=alphaev56 ;;
794 PCA56) UNAME_MACHINE=alphapca56 ;;
795 PCA57) UNAME_MACHINE=alphapca56 ;;
796 EV6) UNAME_MACHINE=alphaev6 ;;
797 EV67) UNAME_MACHINE=alphaev67 ;;
798 EV68*) UNAME_MACHINE=alphaev68 ;;
799 esac
800 objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
801 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
802 echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
803 exit 0 ;;
804 parisc:Linux:*:* | hppa:Linux:*:*)
805 # Look for CPU level
806 case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
807 PA7*) echo hppa1.1-unknown-linux-gnu ;;
808 PA8*) echo hppa2.0-unknown-linux-gnu ;;
809 *) echo hppa-unknown-linux-gnu ;;
810 esac
811 exit 0 ;;
812 parisc64:Linux:*:* | hppa64:Linux:*:*)
813 echo hppa64-unknown-linux-gnu
814 exit 0 ;;
815 s390:Linux:*:* | s390x:Linux:*:*)
816 echo ${UNAME_MACHINE}-ibm-linux
817 exit 0 ;;
818 sh*:Linux:*:*)
819 echo ${UNAME_MACHINE}-unknown-linux-gnu
820 exit 0 ;;
821 sparc:Linux:*:* | sparc64:Linux:*:*)
822 echo ${UNAME_MACHINE}-unknown-linux-gnu
823 exit 0 ;;
824 x86_64:Linux:*:*)
825 echo x86_64-unknown-linux-gnu
826 exit 0 ;;
827 i*86:Linux:*:*)
828 # The BFD linker knows what the default object file format is, so
829 # first see if it will tell us. cd to the root directory to prevent
830 # problems with other programs or directories called `ld' in the path.
831 ld_supported_targets=`cd /; ld --help 2>&1 \
832 | sed -ne '/supported targets:/!d
833 s/[ ][ ]*/ /g
834 s/.*supported targets: *//
835 s/ .*//
836 p'`
837 case "$ld_supported_targets" in
838 elf32-i386)
839 TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
840 ;;
841 a.out-i386-linux)
842 echo "${UNAME_MACHINE}-pc-linux-gnuaout"
843 exit 0 ;;
844 coff-i386)
845 echo "${UNAME_MACHINE}-pc-linux-gnucoff"
846 exit 0 ;;
847 "")
848 # Either a pre-BFD a.out linker (linux-gnuoldld) or
849 # one that does not give us useful --help.
850 echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
851 exit 0 ;;
852 esac
853 # Determine whether the default compiler is a.out or elf
854 cat >$dummy.c <<EOF
855#include <features.h>
856#ifdef __cplusplus
857#include <stdio.h> /* for printf() prototype */
858 int main (int argc, char *argv[]) {
859#else
860 int main (argc, argv) int argc; char *argv[]; {
861#endif
862#ifdef __ELF__
863# ifdef __GLIBC__
864# if __GLIBC__ >= 2
865 printf ("%s-pc-linux-gnu\n", argv[1]);
866# else
867 printf ("%s-pc-linux-gnulibc1\n", argv[1]);
868# endif
869# else
870 printf ("%s-pc-linux-gnulibc1\n", argv[1]);
871# endif
872#else
873 printf ("%s-pc-linux-gnuaout\n", argv[1]);
874#endif
875 return 0;
876}
877EOF
878 eval $set_cc_for_build
879 $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
880 rm -f $dummy.c $dummy
881 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
882 ;;
883 i*86:DYNIX/ptx:4*:*)
884 # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
885 # earlier versions are messed up and put the nodename in both
886 # sysname and nodename.
887 echo i386-sequent-sysv4
888 exit 0 ;;
889 i*86:UNIX_SV:4.2MP:2.*)
890 # Unixware is an offshoot of SVR4, but it has its own version
891 # number series starting with 2...
892 # I am not positive that other SVR4 systems won't match this,
893 # I just have to hope. -- rms.
894 # Use sysv4.2uw... so that sysv4* matches it.
895 echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
896 exit 0 ;;
897 i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
898 UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
899 if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
900 echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
901 else
902 echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
903 fi
904 exit 0 ;;
905 i*86:*:5:[78]*)
906 case `/bin/uname -X | grep "^Machine"` in
907 *486*) UNAME_MACHINE=i486 ;;
908 *Pentium) UNAME_MACHINE=i586 ;;
909 *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
910 esac
911 echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
912 exit 0 ;;
913 i*86:*:3.2:*)
914 if test -f /usr/options/cb.name; then
915 UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
916 echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
917 elif /bin/uname -X 2>/dev/null >/dev/null ; then
918 UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
919 (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
920 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
921 && UNAME_MACHINE=i586
922 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
923 && UNAME_MACHINE=i686
924 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
925 && UNAME_MACHINE=i686
926 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
927 else
928 echo ${UNAME_MACHINE}-pc-sysv32
929 fi
930 exit 0 ;;
931 i*86:*DOS:*:*)
932 echo ${UNAME_MACHINE}-pc-msdosdjgpp
933 exit 0 ;;
934 pc:*:*:*)
935 # Left here for compatibility:
936 # uname -m prints for DJGPP always 'pc', but it prints nothing about
937 # the processor, so we play safe by assuming i386.
938 echo i386-pc-msdosdjgpp
939 exit 0 ;;
940 Intel:Mach:3*:*)
941 echo i386-pc-mach3
942 exit 0 ;;
943 paragon:*:*:*)
944 echo i860-intel-osf1
945 exit 0 ;;
946 i860:*:4.*:*) # i860-SVR4
947 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
948 echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
949 else # Add other i860-SVR4 vendors below as they are discovered.
950 echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
951 fi
952 exit 0 ;;
953 mini*:CTIX:SYS*5:*)
954 # "miniframe"
955 echo m68010-convergent-sysv
956 exit 0 ;;
957 M68*:*:R3V[567]*:*)
958 test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
959 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
960 OS_REL=''
961 test -r /etc/.relid \
962 && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
963 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
964 && echo i486-ncr-sysv4.3${OS_REL} && exit 0
965 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
966 && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
967 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
968 /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
969 && echo i486-ncr-sysv4 && exit 0 ;;
970 m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
971 echo m68k-unknown-lynxos${UNAME_RELEASE}
972 exit 0 ;;
973 mc68030:UNIX_System_V:4.*:*)
974 echo m68k-atari-sysv4
975 exit 0 ;;
976 i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
977 echo i386-unknown-lynxos${UNAME_RELEASE}
978 exit 0 ;;
979 TSUNAMI:LynxOS:2.*:*)
980 echo sparc-unknown-lynxos${UNAME_RELEASE}
981 exit 0 ;;
982 rs6000:LynxOS:2.*:*)
983 echo rs6000-unknown-lynxos${UNAME_RELEASE}
984 exit 0 ;;
985 PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
986 echo powerpc-unknown-lynxos${UNAME_RELEASE}
987 exit 0 ;;
988 SM[BE]S:UNIX_SV:*:*)
989 echo mips-dde-sysv${UNAME_RELEASE}
990 exit 0 ;;
991 RM*:ReliantUNIX-*:*:*)
992 echo mips-sni-sysv4
993 exit 0 ;;
994 RM*:SINIX-*:*:*)
995 echo mips-sni-sysv4
996 exit 0 ;;
997 *:SINIX-*:*:*)
998 if uname -p 2>/dev/null >/dev/null ; then
999 UNAME_MACHINE=`(uname -p) 2>/dev/null`
1000 echo ${UNAME_MACHINE}-sni-sysv4
1001 else
1002 echo ns32k-sni-sysv
1003 fi
1004 exit 0 ;;
1005 PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
1006 # says <Richard.M.Bartel@ccMail.Census.GOV>
1007 echo i586-unisys-sysv4
1008 exit 0 ;;
1009 *:UNIX_System_V:4*:FTX*)
1010 # From Gerald Hewes <hewes@openmarket.com>.
1011 # How about differentiating between stratus architectures? -djm
1012 echo hppa1.1-stratus-sysv4
1013 exit 0 ;;
1014 *:*:*:FTX*)
1015 # From seanf@swdc.stratus.com.
1016 echo i860-stratus-sysv4
1017 exit 0 ;;
1018 *:VOS:*:*)
1019 # From Paul.Green@stratus.com.
1020 echo hppa1.1-stratus-vos
1021 exit 0 ;;
1022 mc68*:A/UX:*:*)
1023 echo m68k-apple-aux${UNAME_RELEASE}
1024 exit 0 ;;
1025 news*:NEWS-OS:6*:*)
1026 echo mips-sony-newsos6
1027 exit 0 ;;
1028 R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
1029 if [ -d /usr/nec ]; then
1030 echo mips-nec-sysv${UNAME_RELEASE}
1031 else
1032 echo mips-unknown-sysv${UNAME_RELEASE}
1033 fi
1034 exit 0 ;;
1035 BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
1036 echo powerpc-be-beos
1037 exit 0 ;;
1038 BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
1039 echo powerpc-apple-beos
1040 exit 0 ;;
1041 BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
1042 echo i586-pc-beos
1043 exit 0 ;;
1044 SX-4:SUPER-UX:*:*)
1045 echo sx4-nec-superux${UNAME_RELEASE}
1046 exit 0 ;;
1047 SX-5:SUPER-UX:*:*)
1048 echo sx5-nec-superux${UNAME_RELEASE}
1049 exit 0 ;;
1050 Power*:Rhapsody:*:*)
1051 echo powerpc-apple-rhapsody${UNAME_RELEASE}
1052 exit 0 ;;
1053 *:Rhapsody:*:*)
1054 echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
1055 exit 0 ;;
1056 *:Darwin:*:*)
1057 echo `uname -p`-apple-darwin${UNAME_RELEASE}
1058 exit 0 ;;
1059 *:procnto*:*:* | *:QNX:[0123456789]*:*)
1060 if test "${UNAME_MACHINE}" = "x86pc"; then
1061 UNAME_MACHINE=pc
1062 fi
1063 echo `uname -p`-${UNAME_MACHINE}-nto-qnx
1064 exit 0 ;;
1065 *:QNX:*:4*)
1066 echo i386-pc-qnx
1067 exit 0 ;;
1068 NSR-[KW]:NONSTOP_KERNEL:*:*)
1069 echo nsr-tandem-nsk${UNAME_RELEASE}
1070 exit 0 ;;
1071 *:NonStop-UX:*:*)
1072 echo mips-compaq-nonstopux
1073 exit 0 ;;
1074 BS2000:POSIX*:*:*)
1075 echo bs2000-siemens-sysv
1076 exit 0 ;;
1077 DS/*:UNIX_System_V:*:*)
1078 echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
1079 exit 0 ;;
1080 *:Plan9:*:*)
1081 # "uname -m" is not consistent, so use $cputype instead. 386
1082 # is converted to i386 for consistency with other x86
1083 # operating systems.
1084 if test "$cputype" = "386"; then
1085 UNAME_MACHINE=i386
1086 else
1087 UNAME_MACHINE="$cputype"
1088 fi
1089 echo ${UNAME_MACHINE}-unknown-plan9
1090 exit 0 ;;
1091 i*86:OS/2:*:*)
1092 # If we were able to find `uname', then EMX Unix compatibility
1093 # is probably installed.
1094 echo ${UNAME_MACHINE}-pc-os2-emx
1095 exit 0 ;;
1096 *:TOPS-10:*:*)
1097 echo pdp10-unknown-tops10
1098 exit 0 ;;
1099 *:TENEX:*:*)
1100 echo pdp10-unknown-tenex
1101 exit 0 ;;
1102 KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
1103 echo pdp10-dec-tops20
1104 exit 0 ;;
1105 XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
1106 echo pdp10-xkl-tops20
1107 exit 0 ;;
1108 *:TOPS-20:*:*)
1109 echo pdp10-unknown-tops20
1110 exit 0 ;;
1111 *:ITS:*:*)
1112 echo pdp10-unknown-its
1113 exit 0 ;;
1114 i*86:XTS-300:*:STOP)
1115 echo ${UNAME_MACHINE}-unknown-stop
1116 exit 0 ;;
1117esac
1118
1119#echo '(No uname command or uname output not recognized.)' 1>&2
1120#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
1121
1122cat >$dummy.c <<EOF
1123#ifdef _SEQUENT_
1124# include <sys/types.h>
1125# include <sys/utsname.h>
1126#endif
1127main ()
1128{
1129#if defined (sony)
1130#if defined (MIPSEB)
1131 /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
1132 I don't know.... */
1133 printf ("mips-sony-bsd\n"); exit (0);
1134#else
1135#include <sys/param.h>
1136 printf ("m68k-sony-newsos%s\n",
1137#ifdef NEWSOS4
1138 "4"
1139#else
1140 ""
1141#endif
1142 ); exit (0);
1143#endif
1144#endif
1145
1146#if defined (__arm) && defined (__acorn) && defined (__unix)
1147 printf ("arm-acorn-riscix"); exit (0);
1148#endif
1149
1150#if defined (hp300) && !defined (hpux)
1151 printf ("m68k-hp-bsd\n"); exit (0);
1152#endif
1153
1154#if defined (NeXT)
1155#if !defined (__ARCHITECTURE__)
1156#define __ARCHITECTURE__ "m68k"
1157#endif
1158 int version;
1159 version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
1160 if (version < 4)
1161 printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
1162 else
1163 printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
1164 exit (0);
1165#endif
1166
1167#if defined (MULTIMAX) || defined (n16)
1168#if defined (UMAXV)
1169 printf ("ns32k-encore-sysv\n"); exit (0);
1170#else
1171#if defined (CMU)
1172 printf ("ns32k-encore-mach\n"); exit (0);
1173#else
1174 printf ("ns32k-encore-bsd\n"); exit (0);
1175#endif
1176#endif
1177#endif
1178
1179#if defined (__386BSD__)
1180 printf ("i386-pc-bsd\n"); exit (0);
1181#endif
1182
1183#if defined (sequent)
1184#if defined (i386)
1185 printf ("i386-sequent-dynix\n"); exit (0);
1186#endif
1187#if defined (ns32000)
1188 printf ("ns32k-sequent-dynix\n"); exit (0);
1189#endif
1190#endif
1191
1192#if defined (_SEQUENT_)
1193 struct utsname un;
1194
1195 uname(&un);
1196
1197 if (strncmp(un.version, "V2", 2) == 0) {
1198 printf ("i386-sequent-ptx2\n"); exit (0);
1199 }
1200 if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
1201 printf ("i386-sequent-ptx1\n"); exit (0);
1202 }
1203 printf ("i386-sequent-ptx\n"); exit (0);
1204
1205#endif
1206
1207#if defined (vax)
1208# if !defined (ultrix)
1209# include <sys/param.h>
1210# if defined (BSD)
1211# if BSD == 43
1212 printf ("vax-dec-bsd4.3\n"); exit (0);
1213# else
1214# if BSD == 199006
1215 printf ("vax-dec-bsd4.3reno\n"); exit (0);
1216# else
1217 printf ("vax-dec-bsd\n"); exit (0);
1218# endif
1219# endif
1220# else
1221 printf ("vax-dec-bsd\n"); exit (0);
1222# endif
1223# else
1224 printf ("vax-dec-ultrix\n"); exit (0);
1225# endif
1226#endif
1227
1228#if defined (alliant) && defined (i860)
1229 printf ("i860-alliant-bsd\n"); exit (0);
1230#endif
1231
1232 exit (1);
1233}
1234EOF
1235
1236eval $set_cc_for_build
1237$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
1238rm -f $dummy.c $dummy
1239
1240# Apollos put the system type in the environment.
1241
1242test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
1243
1244# Convex versions that predate uname can use getsysinfo(1)
1245
1246if [ -x /usr/convex/getsysinfo ]
1247then
1248 case `getsysinfo -f cpu_type` in
1249 c1*)
1250 echo c1-convex-bsd
1251 exit 0 ;;
1252 c2*)
1253 if getsysinfo -f scalar_acc
1254 then echo c32-convex-bsd
1255 else echo c2-convex-bsd
1256 fi
1257 exit 0 ;;
1258 c34*)
1259 echo c34-convex-bsd
1260 exit 0 ;;
1261 c38*)
1262 echo c38-convex-bsd
1263 exit 0 ;;
1264 c4*)
1265 echo c4-convex-bsd
1266 exit 0 ;;
1267 esac
1268fi
1269
1270cat >&2 <<EOF
1271$0: unable to guess system type
1272
1273This script, last modified $timestamp, has failed to recognize
1274the operating system you are using. It is advised that you
1275download the most up to date version of the config scripts from
1276
1277 ftp://ftp.gnu.org/pub/gnu/config/
1278
1279If the version you run ($0) is already up to date, please
1280send the following data and any information you think might be
1281pertinent to <config-patches@gnu.org> in order to provide the needed
1282information to handle your system.
1283
1284config.guess timestamp = $timestamp
1285
1286uname -m = `(uname -m) 2>/dev/null || echo unknown`
1287uname -r = `(uname -r) 2>/dev/null || echo unknown`
1288uname -s = `(uname -s) 2>/dev/null || echo unknown`
1289uname -v = `(uname -v) 2>/dev/null || echo unknown`
1290
1291/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
1292/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
1293
1294hostinfo = `(hostinfo) 2>/dev/null`
1295/bin/universe = `(/bin/universe) 2>/dev/null`
1296/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
1297/bin/arch = `(/bin/arch) 2>/dev/null`
1298/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
1299/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
1300
1301UNAME_MACHINE = ${UNAME_MACHINE}
1302UNAME_RELEASE = ${UNAME_RELEASE}
1303UNAME_SYSTEM = ${UNAME_SYSTEM}
1304UNAME_VERSION = ${UNAME_VERSION}
1305EOF
1306
1307exit 1
1308
1309# Local variables:
1310# eval: (add-hook 'write-file-hooks 'time-stamp)
1311# time-stamp-start: "timestamp='"
1312# time-stamp-format: "%:y-%02m-%02d"
1313# time-stamp-end: "'"
1314# End:
diff --git a/config.sub b/config.sub
deleted file mode 100755
index 12ebc78..0000000
--- a/config.sub
+++ /dev/null
@@ -1,1410 +0,0 @@
1#! /bin/sh
2# Configuration validation subroutine script.
3# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
4# Free Software Foundation, Inc.
5
6timestamp='2001-08-13'
7
8# This file is (in principle) common to ALL GNU software.
9# The presence of a machine in this file suggests that SOME GNU software
10# can handle that machine. It does not imply ALL GNU software can.
11#
12# This file is free software; you can redistribute it and/or modify
13# it under the terms of the GNU General Public License as published by
14# the Free Software Foundation; either version 2 of the License, or
15# (at your option) any later version.
16#
17# This program is distributed in the hope that it will be useful,
18# but WITHOUT ANY WARRANTY; without even the implied warranty of
19# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20# GNU General Public License for more details.
21#
22# You should have received a copy of the GNU General Public License
23# along with this program; if not, write to the Free Software
24# Foundation, Inc., 59 Temple Place - Suite 330,
25# Boston, MA 02111-1307, USA.
26
27# As a special exception to the GNU General Public License, if you
28# distribute this file as part of a program that contains a
29# configuration script generated by Autoconf, you may include it under
30# the same distribution terms that you use for the rest of that program.
31
32# Please send patches to <config-patches@gnu.org>.
33#
34# Configuration subroutine to validate and canonicalize a configuration type.
35# Supply the specified configuration type as an argument.
36# If it is invalid, we print an error message on stderr and exit with code 1.
37# Otherwise, we print the canonical config type on stdout and succeed.
38
39# This file is supposed to be the same for all GNU packages
40# and recognize all the CPU types, system types and aliases
41# that are meaningful with *any* GNU software.
42# Each package is responsible for reporting which valid configurations
43# it does not support. The user should be able to distinguish
44# a failure to support a valid configuration from a meaningless
45# configuration.
46
47# The goal of this file is to map all the various variations of a given
48# machine specification into a single specification in the form:
49# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
50# or in some cases, the newer four-part form:
51# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
52# It is wrong to echo any other type of specification.
53
54me=`echo "$0" | sed -e 's,.*/,,'`
55
56usage="\
57Usage: $0 [OPTION] CPU-MFR-OPSYS
58 $0 [OPTION] ALIAS
59
60Canonicalize a configuration name.
61
62Operation modes:
63 -h, --help print this help, then exit
64 -t, --time-stamp print date of last modification, then exit
65 -v, --version print version number, then exit
66
67Report bugs and patches to <config-patches@gnu.org>."
68
69version="\
70GNU config.sub ($timestamp)
71
72Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
73Free Software Foundation, Inc.
74
75This is free software; see the source for copying conditions. There is NO
76warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
77
78help="
79Try \`$me --help' for more information."
80
81# Parse command line
82while test $# -gt 0 ; do
83 case $1 in
84 --time-stamp | --time* | -t )
85 echo "$timestamp" ; exit 0 ;;
86 --version | -v )
87 echo "$version" ; exit 0 ;;
88 --help | --h* | -h )
89 echo "$usage"; exit 0 ;;
90 -- ) # Stop option processing
91 shift; break ;;
92 - ) # Use stdin as input.
93 break ;;
94 -* )
95 echo "$me: invalid option $1$help"
96 exit 1 ;;
97
98 *local*)
99 # First pass through any local machine types.
100 echo $1
101 exit 0;;
102
103 * )
104 break ;;
105 esac
106done
107
108case $# in
109 0) echo "$me: missing argument$help" >&2
110 exit 1;;
111 1) ;;
112 *) echo "$me: too many arguments$help" >&2
113 exit 1;;
114esac
115
116# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
117# Here we must recognize all the valid KERNEL-OS combinations.
118maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
119case $maybe_os in
120 nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
121 os=-$maybe_os
122 basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
123 ;;
124 *)
125 basic_machine=`echo $1 | sed 's/-[^-]*$//'`
126 if [ $basic_machine != $1 ]
127 then os=`echo $1 | sed 's/.*-/-/'`
128 else os=; fi
129 ;;
130esac
131
132### Let's recognize common machines as not being operating systems so
133### that things like config.sub decstation-3100 work. We also
134### recognize some manufacturers as not being operating systems, so we
135### can provide default operating systems below.
136case $os in
137 -sun*os*)
138 # Prevent following clause from handling this invalid input.
139 ;;
140 -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
141 -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
142 -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
143 -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
144 -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
145 -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
146 -apple | -axis)
147 os=
148 basic_machine=$1
149 ;;
150 -sim | -cisco | -oki | -wec | -winbond)
151 os=
152 basic_machine=$1
153 ;;
154 -scout)
155 ;;
156 -wrs)
157 os=-vxworks
158 basic_machine=$1
159 ;;
160 -chorusos*)
161 os=-chorusos
162 basic_machine=$1
163 ;;
164 -chorusrdb)
165 os=-chorusrdb
166 basic_machine=$1
167 ;;
168 -hiux*)
169 os=-hiuxwe2
170 ;;
171 -sco5)
172 os=-sco3.2v5
173 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
174 ;;
175 -sco4)
176 os=-sco3.2v4
177 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
178 ;;
179 -sco3.2.[4-9]*)
180 os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
181 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
182 ;;
183 -sco3.2v[4-9]*)
184 # Don't forget version if it is 3.2v4 or newer.
185 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
186 ;;
187 -sco*)
188 os=-sco3.2v2
189 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
190 ;;
191 -udk*)
192 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
193 ;;
194 -isc)
195 os=-isc2.2
196 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
197 ;;
198 -clix*)
199 basic_machine=clipper-intergraph
200 ;;
201 -isc*)
202 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
203 ;;
204 -lynx*)
205 os=-lynxos
206 ;;
207 -ptx*)
208 basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
209 ;;
210 -windowsnt*)
211 os=`echo $os | sed -e 's/windowsnt/winnt/'`
212 ;;
213 -psos*)
214 os=-psos
215 ;;
216 -mint | -mint[0-9]*)
217 basic_machine=m68k-atari
218 os=-mint
219 ;;
220esac
221
222# Decode aliases for certain CPU-COMPANY combinations.
223case $basic_machine in
224 # Recognize the basic CPU types without company name.
225 # Some are omitted here because they have special meanings below.
226 1750a | 580 \
227 | a29k \
228 | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
229 | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
230 | c4x | clipper \
231 | d10v | d30v | dsp16xx \
232 | fr30 \
233 | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
234 | i370 | i860 | i960 | ia64 \
235 | m32r | m68000 | m68k | m88k | mcore \
236 | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
237 | mips64vr4100 | mips64vr4100el | mips64vr4300 \
238 | mips64vr4300el | mips64vr5000 | mips64vr5000el \
239 | mipsbe | mipsel | mipsle | mipstx39 | mipstx39el \
240 | mn10200 | mn10300 \
241 | ns16k | ns32k \
242 | openrisc \
243 | pdp10 | pdp11 | pj | pjl \
244 | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
245 | pyramid \
246 | s390 | s390x \
247 | sh | sh[34] | sh[34]eb | shbe | shle \
248 | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
249 | strongarm \
250 | tahoe | thumb | tic80 | tron \
251 | v850 \
252 | we32k \
253 | x86 | xscale \
254 | z8k)
255 basic_machine=$basic_machine-unknown
256 ;;
257 m6811 | m68hc11 | m6812 | m68hc12)
258 # Motorola 68HC11/12.
259 basic_machine=$basic_machine-unknown
260 os=-none
261 ;;
262 m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
263 ;;
264
265 # We use `pc' rather than `unknown'
266 # because (1) that's what they normally are, and
267 # (2) the word "unknown" tends to confuse beginning users.
268 i*86 | x86_64)
269 basic_machine=$basic_machine-pc
270 ;;
271 # Object if more than one company name word.
272 *-*-*)
273 echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
274 exit 1
275 ;;
276 # Recognize the basic CPU types with company name.
277 580-* \
278 | a29k-* \
279 | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
280 | alphapca5[67]-* | arc-* \
281 | arm-* | armbe-* | armle-* | armv*-* \
282 | bs2000-* \
283 | c[123]* | c30-* | [cjt]90-* | c54x-* \
284 | clipper-* | cray2-* | cydra-* \
285 | d10v-* | d30v-* \
286 | elxsi-* \
287 | f30[01]-* | f700-* | fr30-* | fx80-* \
288 | h8300-* | h8500-* \
289 | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
290 | i*86-* | i860-* | i960-* | ia64-* \
291 | m32r-* \
292 | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
293 | m88110-* | m88k-* | mcore-* \
294 | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
295 | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
296 | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipsel-* \
297 | mipsle-* | mipstx39-* | mipstx39el-* \
298 | none-* | np1-* | ns16k-* | ns32k-* \
299 | orion-* \
300 | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
301 | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
302 | pyramid-* \
303 | romp-* | rs6000-* \
304 | s390-* | s390x-* \
305 | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
306 | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
307 | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* \
308 | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
309 | v850-* | vax-* \
310 | we32k-* \
311 | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
312 | ymp-* \
313 | z8k-*)
314 ;;
315 # Recognize the various machine names and aliases which stand
316 # for a CPU type and a company and sometimes even an OS.
317 386bsd)
318 basic_machine=i386-unknown
319 os=-bsd
320 ;;
321 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
322 basic_machine=m68000-att
323 ;;
324 3b*)
325 basic_machine=we32k-att
326 ;;
327 a29khif)
328 basic_machine=a29k-amd
329 os=-udi
330 ;;
331 adobe68k)
332 basic_machine=m68010-adobe
333 os=-scout
334 ;;
335 alliant | fx80)
336 basic_machine=fx80-alliant
337 ;;
338 altos | altos3068)
339 basic_machine=m68k-altos
340 ;;
341 am29k)
342 basic_machine=a29k-none
343 os=-bsd
344 ;;
345 amdahl)
346 basic_machine=580-amdahl
347 os=-sysv
348 ;;
349 amiga | amiga-*)
350 basic_machine=m68k-unknown
351 ;;
352 amigaos | amigados)
353 basic_machine=m68k-unknown
354 os=-amigaos
355 ;;
356 amigaunix | amix)
357 basic_machine=m68k-unknown
358 os=-sysv4
359 ;;
360 apollo68)
361 basic_machine=m68k-apollo
362 os=-sysv
363 ;;
364 apollo68bsd)
365 basic_machine=m68k-apollo
366 os=-bsd
367 ;;
368 aux)
369 basic_machine=m68k-apple
370 os=-aux
371 ;;
372 balance)
373 basic_machine=ns32k-sequent
374 os=-dynix
375 ;;
376 convex-c1)
377 basic_machine=c1-convex
378 os=-bsd
379 ;;
380 convex-c2)
381 basic_machine=c2-convex
382 os=-bsd
383 ;;
384 convex-c32)
385 basic_machine=c32-convex
386 os=-bsd
387 ;;
388 convex-c34)
389 basic_machine=c34-convex
390 os=-bsd
391 ;;
392 convex-c38)
393 basic_machine=c38-convex
394 os=-bsd
395 ;;
396 cray | ymp)
397 basic_machine=ymp-cray
398 os=-unicos
399 ;;
400 cray2)
401 basic_machine=cray2-cray
402 os=-unicos
403 ;;
404 [cjt]90)
405 basic_machine=${basic_machine}-cray
406 os=-unicos
407 ;;
408 crds | unos)
409 basic_machine=m68k-crds
410 ;;
411 cris | cris-* | etrax*)
412 basic_machine=cris-axis
413 ;;
414 da30 | da30-*)
415 basic_machine=m68k-da30
416 ;;
417 decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
418 basic_machine=mips-dec
419 ;;
420 delta | 3300 | motorola-3300 | motorola-delta \
421 | 3300-motorola | delta-motorola)
422 basic_machine=m68k-motorola
423 ;;
424 delta88)
425 basic_machine=m88k-motorola
426 os=-sysv3
427 ;;
428 dpx20 | dpx20-*)
429 basic_machine=rs6000-bull
430 os=-bosx
431 ;;
432 dpx2* | dpx2*-bull)
433 basic_machine=m68k-bull
434 os=-sysv3
435 ;;
436 ebmon29k)
437 basic_machine=a29k-amd
438 os=-ebmon
439 ;;
440 elxsi)
441 basic_machine=elxsi-elxsi
442 os=-bsd
443 ;;
444 encore | umax | mmax)
445 basic_machine=ns32k-encore
446 ;;
447 es1800 | OSE68k | ose68k | ose | OSE)
448 basic_machine=m68k-ericsson
449 os=-ose
450 ;;
451 fx2800)
452 basic_machine=i860-alliant
453 ;;
454 genix)
455 basic_machine=ns32k-ns
456 ;;
457 gmicro)
458 basic_machine=tron-gmicro
459 os=-sysv
460 ;;
461 go32)
462 basic_machine=i386-pc
463 os=-go32
464 ;;
465 h3050r* | hiux*)
466 basic_machine=hppa1.1-hitachi
467 os=-hiuxwe2
468 ;;
469 h8300hms)
470 basic_machine=h8300-hitachi
471 os=-hms
472 ;;
473 h8300xray)
474 basic_machine=h8300-hitachi
475 os=-xray
476 ;;
477 h8500hms)
478 basic_machine=h8500-hitachi
479 os=-hms
480 ;;
481 harris)
482 basic_machine=m88k-harris
483 os=-sysv3
484 ;;
485 hp300-*)
486 basic_machine=m68k-hp
487 ;;
488 hp300bsd)
489 basic_machine=m68k-hp
490 os=-bsd
491 ;;
492 hp300hpux)
493 basic_machine=m68k-hp
494 os=-hpux
495 ;;
496 hp3k9[0-9][0-9] | hp9[0-9][0-9])
497 basic_machine=hppa1.0-hp
498 ;;
499 hp9k2[0-9][0-9] | hp9k31[0-9])
500 basic_machine=m68000-hp
501 ;;
502 hp9k3[2-9][0-9])
503 basic_machine=m68k-hp
504 ;;
505 hp9k6[0-9][0-9] | hp6[0-9][0-9])
506 basic_machine=hppa1.0-hp
507 ;;
508 hp9k7[0-79][0-9] | hp7[0-79][0-9])
509 basic_machine=hppa1.1-hp
510 ;;
511 hp9k78[0-9] | hp78[0-9])
512 # FIXME: really hppa2.0-hp
513 basic_machine=hppa1.1-hp
514 ;;
515 hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
516 # FIXME: really hppa2.0-hp
517 basic_machine=hppa1.1-hp
518 ;;
519 hp9k8[0-9][13679] | hp8[0-9][13679])
520 basic_machine=hppa1.1-hp
521 ;;
522 hp9k8[0-9][0-9] | hp8[0-9][0-9])
523 basic_machine=hppa1.0-hp
524 ;;
525 hppa-next)
526 os=-nextstep3
527 ;;
528 hppaosf)
529 basic_machine=hppa1.1-hp
530 os=-osf
531 ;;
532 hppro)
533 basic_machine=hppa1.1-hp
534 os=-proelf
535 ;;
536 i370-ibm* | ibm*)
537 basic_machine=i370-ibm
538 ;;
539# I'm not sure what "Sysv32" means. Should this be sysv3.2?
540 i*86v32)
541 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
542 os=-sysv32
543 ;;
544 i*86v4*)
545 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
546 os=-sysv4
547 ;;
548 i*86v)
549 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
550 os=-sysv
551 ;;
552 i*86sol2)
553 basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
554 os=-solaris2
555 ;;
556 i386mach)
557 basic_machine=i386-mach
558 os=-mach
559 ;;
560 i386-vsta | vsta)
561 basic_machine=i386-unknown
562 os=-vsta
563 ;;
564 iris | iris4d)
565 basic_machine=mips-sgi
566 case $os in
567 -irix*)
568 ;;
569 *)
570 os=-irix4
571 ;;
572 esac
573 ;;
574 isi68 | isi)
575 basic_machine=m68k-isi
576 os=-sysv
577 ;;
578 m88k-omron*)
579 basic_machine=m88k-omron
580 ;;
581 magnum | m3230)
582 basic_machine=mips-mips
583 os=-sysv
584 ;;
585 merlin)
586 basic_machine=ns32k-utek
587 os=-sysv
588 ;;
589 mingw32)
590 basic_machine=i386-pc
591 os=-mingw32
592 ;;
593 miniframe)
594 basic_machine=m68000-convergent
595 ;;
596 *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
597 basic_machine=m68k-atari
598 os=-mint
599 ;;
600 mipsel*-linux*)
601 basic_machine=mipsel-unknown
602 os=-linux-gnu
603 ;;
604 mips*-linux*)
605 basic_machine=mips-unknown
606 os=-linux-gnu
607 ;;
608 mips3*-*)
609 basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
610 ;;
611 mips3*)
612 basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
613 ;;
614 mmix*)
615 basic_machine=mmix-knuth
616 os=-mmixware
617 ;;
618 monitor)
619 basic_machine=m68k-rom68k
620 os=-coff
621 ;;
622 msdos)
623 basic_machine=i386-pc
624 os=-msdos
625 ;;
626 mvs)
627 basic_machine=i370-ibm
628 os=-mvs
629 ;;
630 ncr3000)
631 basic_machine=i486-ncr
632 os=-sysv4
633 ;;
634 netbsd386)
635 basic_machine=i386-unknown
636 os=-netbsd
637 ;;
638 netwinder)
639 basic_machine=armv4l-rebel
640 os=-linux
641 ;;
642 news | news700 | news800 | news900)
643 basic_machine=m68k-sony
644 os=-newsos
645 ;;
646 news1000)
647 basic_machine=m68030-sony
648 os=-newsos
649 ;;
650 news-3600 | risc-news)
651 basic_machine=mips-sony
652 os=-newsos
653 ;;
654 necv70)
655 basic_machine=v70-nec
656 os=-sysv
657 ;;
658 next | m*-next )
659 basic_machine=m68k-next
660 case $os in
661 -nextstep* )
662 ;;
663 -ns2*)
664 os=-nextstep2
665 ;;
666 *)
667 os=-nextstep3
668 ;;
669 esac
670 ;;
671 nh3000)
672 basic_machine=m68k-harris
673 os=-cxux
674 ;;
675 nh[45]000)
676 basic_machine=m88k-harris
677 os=-cxux
678 ;;
679 nindy960)
680 basic_machine=i960-intel
681 os=-nindy
682 ;;
683 mon960)
684 basic_machine=i960-intel
685 os=-mon960
686 ;;
687 nonstopux)
688 basic_machine=mips-compaq
689 os=-nonstopux
690 ;;
691 np1)
692 basic_machine=np1-gould
693 ;;
694 nsr-tandem)
695 basic_machine=nsr-tandem
696 ;;
697 op50n-* | op60c-*)
698 basic_machine=hppa1.1-oki
699 os=-proelf
700 ;;
701 OSE68000 | ose68000)
702 basic_machine=m68000-ericsson
703 os=-ose
704 ;;
705 os68k)
706 basic_machine=m68k-none
707 os=-os68k
708 ;;
709 pa-hitachi)
710 basic_machine=hppa1.1-hitachi
711 os=-hiuxwe2
712 ;;
713 paragon)
714 basic_machine=i860-intel
715 os=-osf
716 ;;
717 pbd)
718 basic_machine=sparc-tti
719 ;;
720 pbb)
721 basic_machine=m68k-tti
722 ;;
723 pc532 | pc532-*)
724 basic_machine=ns32k-pc532
725 ;;
726 pentium | p5 | k5 | k6 | nexgen)
727 basic_machine=i586-pc
728 ;;
729 pentiumpro | p6 | 6x86 | athlon)
730 basic_machine=i686-pc
731 ;;
732 pentiumii | pentium2)
733 basic_machine=i686-pc
734 ;;
735 pentium-* | p5-* | k5-* | k6-* | nexgen-*)
736 basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
737 ;;
738 pentiumpro-* | p6-* | 6x86-* | athlon-*)
739 basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
740 ;;
741 pentiumii-* | pentium2-*)
742 basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
743 ;;
744 pn)
745 basic_machine=pn-gould
746 ;;
747 power) basic_machine=power-ibm
748 ;;
749 ppc) basic_machine=powerpc-unknown
750 ;;
751 ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
752 ;;
753 ppcle | powerpclittle | ppc-le | powerpc-little)
754 basic_machine=powerpcle-unknown
755 ;;
756 ppcle-* | powerpclittle-*)
757 basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
758 ;;
759 ppc64) basic_machine=powerpc64-unknown
760 ;;
761 ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
762 ;;
763 ppc64le | powerpc64little | ppc64-le | powerpc64-little)
764 basic_machine=powerpc64le-unknown
765 ;;
766 ppc64le-* | powerpc64little-*)
767 basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
768 ;;
769 ps2)
770 basic_machine=i386-ibm
771 ;;
772 pw32)
773 basic_machine=i586-unknown
774 os=-pw32
775 ;;
776 rom68k)
777 basic_machine=m68k-rom68k
778 os=-coff
779 ;;
780 rm[46]00)
781 basic_machine=mips-siemens
782 ;;
783 rtpc | rtpc-*)
784 basic_machine=romp-ibm
785 ;;
786 sa29200)
787 basic_machine=a29k-amd
788 os=-udi
789 ;;
790 sequent)
791 basic_machine=i386-sequent
792 ;;
793 sh)
794 basic_machine=sh-hitachi
795 os=-hms
796 ;;
797 sparclite-wrs)
798 basic_machine=sparclite-wrs
799 os=-vxworks
800 ;;
801 sps7)
802 basic_machine=m68k-bull
803 os=-sysv2
804 ;;
805 spur)
806 basic_machine=spur-unknown
807 ;;
808 st2000)
809 basic_machine=m68k-tandem
810 ;;
811 stratus)
812 basic_machine=i860-stratus
813 os=-sysv4
814 ;;
815 sun2)
816 basic_machine=m68000-sun
817 ;;
818 sun2os3)
819 basic_machine=m68000-sun
820 os=-sunos3
821 ;;
822 sun2os4)
823 basic_machine=m68000-sun
824 os=-sunos4
825 ;;
826 sun3os3)
827 basic_machine=m68k-sun
828 os=-sunos3
829 ;;
830 sun3os4)
831 basic_machine=m68k-sun
832 os=-sunos4
833 ;;
834 sun4os3)
835 basic_machine=sparc-sun
836 os=-sunos3
837 ;;
838 sun4os4)
839 basic_machine=sparc-sun
840 os=-sunos4
841 ;;
842 sun4sol2)
843 basic_machine=sparc-sun
844 os=-solaris2
845 ;;
846 sun3 | sun3-*)
847 basic_machine=m68k-sun
848 ;;
849 sun4)
850 basic_machine=sparc-sun
851 ;;
852 sun386 | sun386i | roadrunner)
853 basic_machine=i386-sun
854 ;;
855 sv1)
856 basic_machine=sv1-cray
857 os=-unicos
858 ;;
859 symmetry)
860 basic_machine=i386-sequent
861 os=-dynix
862 ;;
863 t3e)
864 basic_machine=t3e-cray
865 os=-unicos
866 ;;
867 tic54x | c54x*)
868 basic_machine=tic54x-unknown
869 os=-coff
870 ;;
871 tx39)
872 basic_machine=mipstx39-unknown
873 ;;
874 tx39el)
875 basic_machine=mipstx39el-unknown
876 ;;
877 tower | tower-32)
878 basic_machine=m68k-ncr
879 ;;
880 udi29k)
881 basic_machine=a29k-amd
882 os=-udi
883 ;;
884 ultra3)
885 basic_machine=a29k-nyu
886 os=-sym1
887 ;;
888 v810 | necv810)
889 basic_machine=v810-nec
890 os=-none
891 ;;
892 vaxv)
893 basic_machine=vax-dec
894 os=-sysv
895 ;;
896 vms)
897 basic_machine=vax-dec
898 os=-vms
899 ;;
900 vpp*|vx|vx-*)
901 basic_machine=f301-fujitsu
902 ;;
903 vxworks960)
904 basic_machine=i960-wrs
905 os=-vxworks
906 ;;
907 vxworks68)
908 basic_machine=m68k-wrs
909 os=-vxworks
910 ;;
911 vxworks29k)
912 basic_machine=a29k-wrs
913 os=-vxworks
914 ;;
915 w65*)
916 basic_machine=w65-wdc
917 os=-none
918 ;;
919 w89k-*)
920 basic_machine=hppa1.1-winbond
921 os=-proelf
922 ;;
923 windows32)
924 basic_machine=i386-pc
925 os=-windows32-msvcrt
926 ;;
927 xmp)
928 basic_machine=xmp-cray
929 os=-unicos
930 ;;
931 xps | xps100)
932 basic_machine=xps100-honeywell
933 ;;
934 z8k-*-coff)
935 basic_machine=z8k-unknown
936 os=-sim
937 ;;
938 none)
939 basic_machine=none-none
940 os=-none
941 ;;
942
943# Here we handle the default manufacturer of certain CPU types. It is in
944# some cases the only manufacturer, in others, it is the most popular.
945 w89k)
946 basic_machine=hppa1.1-winbond
947 ;;
948 op50n)
949 basic_machine=hppa1.1-oki
950 ;;
951 op60c)
952 basic_machine=hppa1.1-oki
953 ;;
954 mips)
955 if [ x$os = x-linux-gnu ]; then
956 basic_machine=mips-unknown
957 else
958 basic_machine=mips-mips
959 fi
960 ;;
961 romp)
962 basic_machine=romp-ibm
963 ;;
964 rs6000)
965 basic_machine=rs6000-ibm
966 ;;
967 vax)
968 basic_machine=vax-dec
969 ;;
970 pdp10)
971 # there are many clones, so DEC is not a safe bet
972 basic_machine=pdp10-unknown
973 ;;
974 pdp11)
975 basic_machine=pdp11-dec
976 ;;
977 we32k)
978 basic_machine=we32k-att
979 ;;
980 sh3 | sh4 | sh3eb | sh4eb)
981 basic_machine=sh-unknown
982 ;;
983 sparc | sparcv9 | sparcv9b)
984 basic_machine=sparc-sun
985 ;;
986 cydra)
987 basic_machine=cydra-cydrome
988 ;;
989 orion)
990 basic_machine=orion-highlevel
991 ;;
992 orion105)
993 basic_machine=clipper-highlevel
994 ;;
995 mac | mpw | mac-mpw)
996 basic_machine=m68k-apple
997 ;;
998 pmac | pmac-mpw)
999 basic_machine=powerpc-apple
1000 ;;
1001 c4x*)
1002 basic_machine=c4x-none
1003 os=-coff
1004 ;;
1005 *-unknown)
1006 # Make sure to match an already-canonicalized machine name.
1007 ;;
1008 *)
1009 echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
1010 exit 1
1011 ;;
1012esac
1013
1014# Here we canonicalize certain aliases for manufacturers.
1015case $basic_machine in
1016 *-digital*)
1017 basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
1018 ;;
1019 *-commodore*)
1020 basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
1021 ;;
1022 *)
1023 ;;
1024esac
1025
1026# Decode manufacturer-specific aliases for certain operating systems.
1027
1028if [ x"$os" != x"" ]
1029then
1030case $os in
1031 # First match some system type aliases
1032 # that might get confused with valid system types.
1033 # -solaris* is a basic system type, with this one exception.
1034 -solaris1 | -solaris1.*)
1035 os=`echo $os | sed -e 's|solaris1|sunos4|'`
1036 ;;
1037 -solaris)
1038 os=-solaris2
1039 ;;
1040 -svr4*)
1041 os=-sysv4
1042 ;;
1043 -unixware*)
1044 os=-sysv4.2uw
1045 ;;
1046 -gnu/linux*)
1047 os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
1048 ;;
1049 # First accept the basic system types.
1050 # The portable systems comes first.
1051 # Each alternative MUST END IN A *, to match a version number.
1052 # -sysv* is not here because it comes later, after sysvr4.
1053 -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
1054 | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
1055 | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
1056 | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
1057 | -aos* \
1058 | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
1059 | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
1060 | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
1061 | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
1062 | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
1063 | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
1064 | -chorusos* | -chorusrdb* \
1065 | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
1066 | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
1067 | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
1068 | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
1069 | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
1070 | -os2* | -vos*)
1071 # Remember, each alternative MUST END IN *, to match a version number.
1072 ;;
1073 -qnx*)
1074 case $basic_machine in
1075 x86-* | i*86-*)
1076 ;;
1077 *)
1078 os=-nto$os
1079 ;;
1080 esac
1081 ;;
1082 -nto*)
1083 os=-nto-qnx
1084 ;;
1085 -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
1086 | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
1087 | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
1088 ;;
1089 -mac*)
1090 os=`echo $os | sed -e 's|mac|macos|'`
1091 ;;
1092 -linux*)
1093 os=`echo $os | sed -e 's|linux|linux-gnu|'`
1094 ;;
1095 -sunos5*)
1096 os=`echo $os | sed -e 's|sunos5|solaris2|'`
1097 ;;
1098 -sunos6*)
1099 os=`echo $os | sed -e 's|sunos6|solaris3|'`
1100 ;;
1101 -opened*)
1102 os=-openedition
1103 ;;
1104 -wince*)
1105 os=-wince
1106 ;;
1107 -osfrose*)
1108 os=-osfrose
1109 ;;
1110 -osf*)
1111 os=-osf
1112 ;;
1113 -utek*)
1114 os=-bsd
1115 ;;
1116 -dynix*)
1117 os=-bsd
1118 ;;
1119 -acis*)
1120 os=-aos
1121 ;;
1122 -386bsd)
1123 os=-bsd
1124 ;;
1125 -ctix* | -uts*)
1126 os=-sysv
1127 ;;
1128 -ns2 )
1129 os=-nextstep2
1130 ;;
1131 -nsk*)
1132 os=-nsk
1133 ;;
1134 # Preserve the version number of sinix5.
1135 -sinix5.*)
1136 os=`echo $os | sed -e 's|sinix|sysv|'`
1137 ;;
1138 -sinix*)
1139 os=-sysv4
1140 ;;
1141 -triton*)
1142 os=-sysv3
1143 ;;
1144 -oss*)
1145 os=-sysv3
1146 ;;
1147 -svr4)
1148 os=-sysv4
1149 ;;
1150 -svr3)
1151 os=-sysv3
1152 ;;
1153 -sysvr4)
1154 os=-sysv4
1155 ;;
1156 # This must come after -sysvr4.
1157 -sysv*)
1158 ;;
1159 -ose*)
1160 os=-ose
1161 ;;
1162 -es1800*)
1163 os=-ose
1164 ;;
1165 -xenix)
1166 os=-xenix
1167 ;;
1168 -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
1169 os=-mint
1170 ;;
1171 -none)
1172 ;;
1173 *)
1174 # Get rid of the `-' at the beginning of $os.
1175 os=`echo $os | sed 's/[^-]*-//'`
1176 echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
1177 exit 1
1178 ;;
1179esac
1180else
1181
1182# Here we handle the default operating systems that come with various machines.
1183# The value should be what the vendor currently ships out the door with their
1184# machine or put another way, the most popular os provided with the machine.
1185
1186# Note that if you're going to try to match "-MANUFACTURER" here (say,
1187# "-sun"), then you have to tell the case statement up towards the top
1188# that MANUFACTURER isn't an operating system. Otherwise, code above
1189# will signal an error saying that MANUFACTURER isn't an operating
1190# system, and we'll never get to this point.
1191
1192case $basic_machine in
1193 *-acorn)
1194 os=-riscix1.2
1195 ;;
1196 arm*-rebel)
1197 os=-linux
1198 ;;
1199 arm*-semi)
1200 os=-aout
1201 ;;
1202 pdp10-*)
1203 os=-tops20
1204 ;;
1205 pdp11-*)
1206 os=-none
1207 ;;
1208 *-dec | vax-*)
1209 os=-ultrix4.2
1210 ;;
1211 m68*-apollo)
1212 os=-domain
1213 ;;
1214 i386-sun)
1215 os=-sunos4.0.2
1216 ;;
1217 m68000-sun)
1218 os=-sunos3
1219 # This also exists in the configure program, but was not the
1220 # default.
1221 # os=-sunos4
1222 ;;
1223 m68*-cisco)
1224 os=-aout
1225 ;;
1226 mips*-cisco)
1227 os=-elf
1228 ;;
1229 mips*-*)
1230 os=-elf
1231 ;;
1232 *-tti) # must be before sparc entry or we get the wrong os.
1233 os=-sysv3
1234 ;;
1235 sparc-* | *-sun)
1236 os=-sunos4.1.1
1237 ;;
1238 *-be)
1239 os=-beos
1240 ;;
1241 *-ibm)
1242 os=-aix
1243 ;;
1244 *-wec)
1245 os=-proelf
1246 ;;
1247 *-winbond)
1248 os=-proelf
1249 ;;
1250 *-oki)
1251 os=-proelf
1252 ;;
1253 *-hp)
1254 os=-hpux
1255 ;;
1256 *-hitachi)
1257 os=-hiux
1258 ;;
1259 i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
1260 os=-sysv
1261 ;;
1262 *-cbm)
1263 os=-amigaos
1264 ;;
1265 *-dg)
1266 os=-dgux
1267 ;;
1268 *-dolphin)
1269 os=-sysv3
1270 ;;
1271 m68k-ccur)
1272 os=-rtu
1273 ;;
1274 m88k-omron*)
1275 os=-luna
1276 ;;
1277 *-next )
1278 os=-nextstep
1279 ;;
1280 *-sequent)
1281 os=-ptx
1282 ;;
1283 *-crds)
1284 os=-unos
1285 ;;
1286 *-ns)
1287 os=-genix
1288 ;;
1289 i370-*)
1290 os=-mvs
1291 ;;
1292 *-next)
1293 os=-nextstep3
1294 ;;
1295 *-gould)
1296 os=-sysv
1297 ;;
1298 *-highlevel)
1299 os=-bsd
1300 ;;
1301 *-encore)
1302 os=-bsd
1303 ;;
1304 *-sgi)
1305 os=-irix
1306 ;;
1307 *-siemens)
1308 os=-sysv4
1309 ;;
1310 *-masscomp)
1311 os=-rtu
1312 ;;
1313 f30[01]-fujitsu | f700-fujitsu)
1314 os=-uxpv
1315 ;;
1316 *-rom68k)
1317 os=-coff
1318 ;;
1319 *-*bug)
1320 os=-coff
1321 ;;
1322 *-apple)
1323 os=-macos
1324 ;;
1325 *-atari*)
1326 os=-mint
1327 ;;
1328 *)
1329 os=-none
1330 ;;
1331esac
1332fi
1333
1334# Here we handle the case where we know the os, and the CPU type, but not the
1335# manufacturer. We pick the logical manufacturer.
1336vendor=unknown
1337case $basic_machine in
1338 *-unknown)
1339 case $os in
1340 -riscix*)
1341 vendor=acorn
1342 ;;
1343 -sunos*)
1344 vendor=sun
1345 ;;
1346 -aix*)
1347 vendor=ibm
1348 ;;
1349 -beos*)
1350 vendor=be
1351 ;;
1352 -hpux*)
1353 vendor=hp
1354 ;;
1355 -mpeix*)
1356 vendor=hp
1357 ;;
1358 -hiux*)
1359 vendor=hitachi
1360 ;;
1361 -unos*)
1362 vendor=crds
1363 ;;
1364 -dgux*)
1365 vendor=dg
1366 ;;
1367 -luna*)
1368 vendor=omron
1369 ;;
1370 -genix*)
1371 vendor=ns
1372 ;;
1373 -mvs* | -opened*)
1374 vendor=ibm
1375 ;;
1376 -ptx*)
1377 vendor=sequent
1378 ;;
1379 -vxsim* | -vxworks*)
1380 vendor=wrs
1381 ;;
1382 -aux*)
1383 vendor=apple
1384 ;;
1385 -hms*)
1386 vendor=hitachi
1387 ;;
1388 -mpw* | -macos*)
1389 vendor=apple
1390 ;;
1391 -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
1392 vendor=atari
1393 ;;
1394 -vos*)
1395 vendor=stratus
1396 ;;
1397 esac
1398 basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
1399 ;;
1400esac
1401
1402echo $basic_machine$os
1403exit 0
1404
1405# Local variables:
1406# eval: (add-hook 'write-file-hooks 'time-stamp)
1407# time-stamp-start: "timestamp='"
1408# time-stamp-format: "%:y-%02m-%02d"
1409# time-stamp-end: "'"
1410# End:
diff --git a/configure.ac b/configure.ac
index ee2d474..8a348dc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,15 +1,15 @@
1dnl Required initializer 1dnl Required initializer
2AC_INIT(mod_log_sql, 1.101) 2AC_INIT(mod_log_sql, 1.102)
3OOO_CONFIG_NICE(config.nice) 3OOO_CONFIG_NICE(config.nice)
4AC_PREREQ(2.53) 4AC_PREREQ(2.53)
5AC_CONFIG_HEADERS(config.h) 5AC_CONFIG_HEADERS(config.h)
6
7AC_CONFIG_SRCDIR(mod_log_sql.c) 6AC_CONFIG_SRCDIR(mod_log_sql.c)
8 7
9OOO_MAINTAIN_MODE 8OOO_MAINTAIN_MODE
10 9
11dnl Add a test for a compiler. 10dnl Add a test for a compiler.
12AC_PROG_CC 11AC_PROG_CC
12AC_PROG_LIBTOOL
13 13
14APACHE20_VERSION=2.0.40 14APACHE20_VERSION=2.0.40
15APACHE13_VERSION=1.3.20 15APACHE13_VERSION=1.3.20
diff --git a/functions.h b/functions.h
index b35634a..07711d2 100644
--- a/functions.h
+++ b/functions.h
@@ -52,11 +52,11 @@ static const char *extract_request_line(request_rec *r, char *a)
52 * (note the truncation before the protocol string for HTTP/0.9 requests) 52 * (note the truncation before the protocol string for HTTP/0.9 requests)
53 * (note also that r->the_request contains the unmodified request) 53 * (note also that r->the_request contains the unmodified request)
54 */ 54 */
55 return (r->parsed_uri.password) 55 return (r->parsed_uri.password)
56 ? apr_pstrcat(r->pool, r->method, " ", 56 ? apr_pstrcat(r->pool, r->method, " ",
57 apr_uri_unparse(r->pool, 57 apr_uri_unparse(r->pool,
58 &r->parsed_uri, 0), 58 &r->parsed_uri, 0),
59 r->assbackwards ? NULL : " ", 59 r->assbackwards ? NULL : " ",
60 r->protocol, NULL) 60 r->protocol, NULL)
61 : r->the_request; 61 : r->the_request;
62} 62}
@@ -239,13 +239,13 @@ static const char *extract_specific_cookie(request_rec *r, char *a)
239 return "-"; 239 return "-";
240} 240}
241 241
242static const char *extract_cookie(request_rec *r, char *a) 242/*static const char *extract_cookie(request_rec *r, char *a)
243{ 243{
244 logsql_state *cls = ap_get_module_config(r->server->module_config, 244 logsql_state *cls = ap_get_module_config(r->server->module_config,
245 &log_sql_module); 245 &log_sql_module);
246 246
247 return extract_specific_cookie(r, (char *)cls->cookie_name); 247 return extract_specific_cookie(r, (char *)cls->cookie_name);
248} 248}*/
249 249
250static const char *extract_unique_id(request_rec *r, char *a) 250static const char *extract_unique_id(request_rec *r, char *a)
251{ 251{
diff --git a/mod_log_sql.c b/mod_log_sql.c
index 1892eec..a6086d7 100644
--- a/mod_log_sql.c
+++ b/mod_log_sql.c
@@ -59,18 +59,37 @@ typedef struct {
59 int announce; 59 int announce;
60 logsql_dbconnection db; 60 logsql_dbconnection db;
61 logsql_dbdriver *driver; 61 logsql_dbdriver *driver;
62 /** Show config support */
63 char *showconfig;
64 apr_file_t *showconfig_fp;
62} global_config_t; 65} global_config_t;
63 66
64static global_config_t global_config; 67static global_config_t global_config;
65 68
66/* structure to hold helper function info */ 69/* structure to hold helper function info */
67typedef struct { 70typedef struct {
68 char key; /* item letter character */ 71 const char *alias; /* The function alias */
69 logsql_item_func *func; /* its extraction function */ 72 logsql_item_func *func; /* The extraction function pointer */
73 int want_orig_req; /* if it requires the original request prior to internal redirection */
74} logsql_function;
75
76/* list of logsql_functions's for log types */
77static apr_array_header_t *logsql_function_list;
78
79/* structure to hold sqlfield mappings */
80typedef struct {
81 const char *alias; /* long name for item */
82 const char *funcalias; /* The function alias */
83 logsql_function *func; /* its extraction function */
84 char *param; /* Parameter for function */
70 const char *sql_field_name; /* its column in SQL */ 85 const char *sql_field_name; /* its column in SQL */
71 int want_orig_default; /* if it requires the original request prior to internal redirection */ 86 char string_contents; /* Whether this is a string field or not */
72 int string_contents; /* if it returns a string */ 87 logsql_field_datatype datatype; /* the field data type */
73} logsql_item; 88 apr_size_t size; /* The size of the data type */
89} logsql_field;
90
91/* list of logsql_item's for log types */
92static apr_array_header_t *logsql_field_list;
74 93
75/* But the contents of this structure will vary by virtual server. 94/* But the contents of this structure will vary by virtual server.
76 * This permits each virtual server to vary its configuration slightly 95 * This permits each virtual server to vary its configuration slightly
@@ -91,45 +110,140 @@ typedef struct {
91 const char *hin_table_name; 110 const char *hin_table_name;
92 const char *cookie_table_name; 111 const char *cookie_table_name;
93 const char *transfer_table_name; 112 const char *transfer_table_name;
94 const char *transfer_log_format; 113 apr_array_header_t *transfer_log_format;
95 apr_pool_t *parsed_pool; 114 apr_pool_t *parsed_pool;
96 logsql_item **parsed_log_format; 115 logsql_field **parsed_log_format;
97 const char *preserve_file; 116 const char *preserve_file;
98 const char *cookie_name; 117 const char *cookie_name;
99} logsql_state; 118} logsql_state;
100 119
120/** Registration function for extract functions
121 *
122 * This functions registers an alias for a function
123 *
124 * @note This is exported from the module
125 */
126LOGSQL_DECLARE(void) log_sql_register_function(apr_pool_t *p,
127 const char *alias, logsql_item_func *func,
128 logsql_function_req want_orig_req)
129{
130 logsql_function *item;
131 if (!logsql_function_list)
132 logsql_function_list = apr_array_make(p,10, sizeof(logsql_function));
101 133
102/* list of "handlers" for log types */ 134 item = apr_array_push(logsql_function_list);
103static apr_array_header_t *logsql_item_list; 135 item->alias = alias;
104 136 item->func = func;
105/* Registration function for extract functions * 137 item->want_orig_req = want_orig_req;
106 * and update parse cache for transfer_log_format * 138 if (global_config.showconfig_fp) {
107 * this is exported from the module */ 139 apr_file_printf(global_config.showconfig_fp," Function : %s\n",alias);
108LOGSQL_DECLARE(void) log_sql_register_item(server_rec *s, apr_pool_t *p, 140 }
109 char key, logsql_item_func *func, const char *sql_field_name, 141}
110 int want_orig_default, int string_contents) 142/** Register a old style sql mapping to the new style
143 *
144 * @note This is exported from the module
145 */
146LOGSQL_DECLARE(void) log_sql_register_alias(server_rec *s, apr_pool_t *p,
147 char key, const char *alias)
111{ 148{
112 server_rec *ts; 149 server_rec *ts;
113 logsql_item *item; 150 for (ts = s; ts; ts = ts->next) {
114 if (!logsql_item_list) 151 logsql_state *cfg = ap_get_module_config(ts->module_config,
115 logsql_item_list = apr_array_make(p,10, sizeof(logsql_item)); 152 &log_sql_module);
153 int itr;
154 for (itr = 0; itr < cfg->transfer_log_format->nelts; itr++) {
155 const char *logformat = ((const char **)cfg->transfer_log_format->elts)[itr];
156 //log_error(APLOG_MARK, APLOG_DEBUG, 0, s, "Testing Logformat %s against %c for %s",logformat,key,alias);
157 // Check if it is only one character AND it is our key
158 if (logformat[1]=='\0' && logformat[0]==key) {
159 ((const char **)cfg->transfer_log_format->elts)[itr] = alias;
160 }
161 }
162 }
163}
116 164
117 item= apr_array_push(logsql_item_list); 165
118 item->key = key; 166/** Registration sqlfield aliases to functions
119 item->func = func; 167 *
120 item->sql_field_name = sql_field_name; 168 * And update parse cache for transfer_log_format
121 item->want_orig_default = want_orig_default; 169 *
122 item->string_contents = string_contents; 170 * @note This is exported from the module
171 */
172LOGSQL_DECLARE(void) log_sql_register_field(apr_pool_t *p,
173 const char *alias,
174 const char *funcalias, const char *param,
175 const char *sql_field_name,
176 logsql_field_datatype datatype, apr_size_t size)
177{
178 logsql_field *item;
179
180 if (!logsql_field_list)
181 logsql_field_list = apr_array_make(p,10, sizeof(logsql_field));
182
183 item = apr_array_push(logsql_field_list);
184 item->func = NULL;
185 item->alias = apr_pstrdup(p, alias);
186 item->funcalias = apr_pstrdup(p, funcalias);
187 item->param = apr_pstrdup(p, param);
188 item->sql_field_name = apr_pstrdup(p,sql_field_name);
189 item->datatype = datatype;
190 item->string_contents = 0;
191 if (datatype == LOGSQL_DATATYPE_CHAR || datatype == LOGSQL_DATATYPE_VARCHAR) {
192 item->string_contents = 1;
193 }
194 item->size = size;
195}
196
197/**
198 * Links sql field items with their functions
199 */
200LOGSQL_DECLARE(void) log_sql_register_finish(server_rec *s)
201{
202 server_rec *ts;
203 int itr, f;
204 logsql_field *item;
205 logsql_function *func;
206 for (itr = 0; itr < logsql_field_list->nelts; itr++) {
207 item = &((logsql_field *)logsql_field_list->elts)[itr];
208 if (item->func) continue;
209 /* Find function alias in function list */
210 for (f = 0; f < logsql_function_list->nelts; f++) {
211 func = &((logsql_function *)logsql_function_list->elts)[f];
212 if (strcmp(func->alias,item->funcalias)==0) {
213 item->func = func;
214 if (global_config.showconfig_fp) {
215 apr_file_printf(global_config.showconfig_fp," Item : %s using function %s(%s)\n"
216 "\tStoring in field %s of type %s(%d)\n",
217 item->alias, item->funcalias, item->param,
218 item->sql_field_name, item->string_contents ? "TEXT":"NUMERIC", item->size);
219 }
220 break;
221 }
222 }
223 if (!item->func) {
224 log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
225 "Could not find function %s for item %s",item->funcalias, item->alias);
226 }
227 }
123 /* some voodoo here to post parse logitems in all servers * 228 /* some voodoo here to post parse logitems in all servers *
124 * so a "cached" list is used in the main logging loop for speed */ 229 * so a "cached" list is used in the main logging loop for speed */
125 for (ts = s; ts; ts = ts->next) { 230 for (ts = s; ts; ts = ts->next) {
126 logsql_state *cfg = ap_get_module_config(ts->module_config, 231 logsql_state *cfg = ap_get_module_config(ts->module_config,
127 &log_sql_module); 232 &log_sql_module);
128 char *pos;
129 233
130 if (cfg->transfer_log_format) { 234 if (!cfg->parsed_log_format) {
131 if ( (pos = ap_strchr_c(cfg->transfer_log_format,key))!=NULL) { 235 cfg->parsed_log_format = apr_pcalloc(cfg->parsed_pool,
132 cfg->parsed_log_format[pos - cfg->transfer_log_format] = item; 236 cfg->transfer_log_format->nelts * sizeof(logsql_field *));
237 }
238
239 for (itr = 0; itr < cfg->transfer_log_format->nelts; itr++) {
240 const char *logformat = ((char **)cfg->transfer_log_format->elts)[itr];
241 for (f = 0; f < logsql_field_list->nelts; f++) {
242 item = &((logsql_field *)logsql_field_list->elts)[f];
243 if (item->func && strcmp(logformat,item->alias)==0) {
244 cfg->parsed_log_format[itr] = item;
245 break;
246 }
133 } 247 }
134 } 248 }
135 } 249 }
@@ -157,7 +271,7 @@ static logsql_opendb_ret log_sql_opendb_link(server_rec* s)
157 return LOGSQL_OPENDB_FAIL; 271 return LOGSQL_OPENDB_FAIL;
158 } 272 }
159 if (global_config.forcepreserve) { 273 if (global_config.forcepreserve) {
160 //global_config.db.connected = 1; 274 /*global_config.db.connected = 1;*/
161 return LOGSQL_OPENDB_PRESERVE; 275 return LOGSQL_OPENDB_PRESERVE;
162 } 276 }
163 if (global_config.db.connected) { 277 if (global_config.db.connected) {
@@ -187,13 +301,9 @@ static void preserve_entry(request_rec *r, const char *query)
187{ 301{
188 logsql_state *cls = ap_get_module_config(r->server->module_config, 302 logsql_state *cls = ap_get_module_config(r->server->module_config,
189 &log_sql_module); 303 &log_sql_module);
190 #if defined(WITH_APACHE20) 304 apr_status_t result;
191 apr_file_t *fp; 305 apr_file_t *fp;
192 apr_status_t result; 306
193 #elif defined(WITH_APACHE13)
194 FILE *fp;
195 int result;
196 #endif
197 /* If preserve file is disabled bail out */ 307 /* If preserve file is disabled bail out */
198 if (global_config.disablepreserve) 308 if (global_config.disablepreserve)
199 return; 309 return;
@@ -207,11 +317,10 @@ static void preserve_entry(request_rec *r, const char *query)
207 log_error(APLOG_MARK, APLOG_ERR, result, r->server, 317 log_error(APLOG_MARK, APLOG_ERR, result, r->server,
208 "attempted append of local preserve file '%s' but failed.",cls->preserve_file); 318 "attempted append of local preserve file '%s' but failed.",cls->preserve_file);
209 } else { 319 } else {
320 apr_file_printf(fp,"%s;\n", query);
210 #if defined(WITH_APACHE20) 321 #if defined(WITH_APACHE20)
211 apr_file_printf(fp,"%s;\n", query);
212 apr_file_close(fp); 322 apr_file_close(fp);
213 #elif defined(WITH_APACHE13) 323 #elif defined(WITH_APACHE13)
214 fprintf(fp,"%s;\n", query);
215 ap_pfclose(r->pool, fp); 324 ap_pfclose(r->pool, fp);
216 #endif 325 #endif
217 log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, 326 log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
@@ -262,6 +371,7 @@ static const char *set_global_string_slot(cmd_parms *cmd,
262 *(const char **)((char *)ptr + offset) = apr_pstrdup(cmd->pool,arg); 371 *(const char **)((char *)ptr + offset) = apr_pstrdup(cmd->pool,arg);
263 return NULL; 372 return NULL;
264} 373}
374
265static const char *set_server_string_slot(cmd_parms *cmd, 375static const char *set_server_string_slot(cmd_parms *cmd,
266 void *struct_ptr, 376 void *struct_ptr,
267 const char *arg) 377 const char *arg)
@@ -296,18 +406,25 @@ static const char *set_server_file_slot(cmd_parms *cmd,
296 return NULL; 406 return NULL;
297} 407}
298 408
299static const char *set_logformat_slot(cmd_parms *cmd, 409static apr_array_header_t *create_logformat_default(apr_pool_t *p)
300 void *struct_ptr,
301 const char *arg)
302{ 410{
303 logsql_state *cfg = ap_get_module_config(cmd->server->module_config, 411 apr_array_header_t *logformat;
304 &log_sql_module); 412 char **addme;
305 413
306 cfg->transfer_log_format = arg; 414 logformat = apr_array_make(p, 12, sizeof(char *));
307/* apr_pool_clear(cfg->parsed_pool);*/ 415 addme = apr_array_push(logformat); *addme = "useragent";
308 cfg->parsed_log_format = apr_pcalloc(cfg->parsed_pool, 416 addme = apr_array_push(logformat); *addme = "bytes_sent";
309 strlen(arg) * sizeof(logsql_item *)); 417 addme = apr_array_push(logformat); *addme = "request_protocol";
310 return NULL; 418 addme = apr_array_push(logformat); *addme = "remote_host";
419 addme = apr_array_push(logformat); *addme = "request_method";
420 addme = apr_array_push(logformat); *addme = "referer";
421 addme = apr_array_push(logformat); *addme = "timestamp";
422 addme = apr_array_push(logformat); *addme = "status";
423 addme = apr_array_push(logformat); *addme = "request_duration";
424 addme = apr_array_push(logformat); *addme = "request_uri";
425 addme = apr_array_push(logformat); *addme = "remote_user";
426 addme = apr_array_push(logformat); *addme = "virtual_host";
427 return logformat;
311} 428}
312 429
313static const char *set_server_nmv_string_slot(cmd_parms *parms, 430static const char *set_server_nmv_string_slot(cmd_parms *parms,
@@ -404,6 +521,60 @@ static const char *add_server_string_slot(cmd_parms *cmd,
404 return NULL; 521 return NULL;
405} 522}
406 523
524static const char *set_logformat_slot(cmd_parms *cmd,
525 void *struct_ptr,
526 const char *arg)
527{
528 const char *t;
529 char t2[2] = {'\0','\0'};
530 for (t = arg; *t != '\0'; t++) {
531 t2[0] = *t;
532 add_server_string_slot(cmd, NULL, t2);
533 }
534 return NULL;
535}
536
537static const char *set_register_field(cmd_parms *cmd,
538 void *struct_ptr,
539 const char *arg)
540{
541 char *alias, *funcalias, *param, *field, *datatype_s, *size_s;
542 logsql_field_datatype datatype;
543 apr_size_t size;
544
545 alias = ap_getword_white(cmd->pool, &arg);
546 funcalias = ap_getword_white(cmd->pool, &arg);
547 param = ap_getword_conf(cmd->pool, &arg);
548 field = ap_getword_white(cmd->pool, &arg);
549 datatype_s = ap_getword_white(cmd->pool, &arg);
550 size_s = ap_getword_white(cmd->pool, &arg);
551
552 if (strcasecmp("VARCHAR",datatype_s)==0) {
553 datatype = LOGSQL_DATATYPE_VARCHAR;
554 } else if (strcasecmp("INT",datatype_s)==0) {
555 datatype = LOGSQL_DATATYPE_INT;
556 } else if (strcasecmp("CHAR",datatype_s)==0) {
557 datatype = LOGSQL_DATATYPE_CHAR;
558 } else if (strcasecmp("SMALLINT",datatype_s)==0) {
559 datatype = LOGSQL_DATATYPE_SMALLINT;
560 } else if (strcasecmp("BIGINT",datatype_s)==0) {
561 datatype = LOGSQL_DATATYPE_BIGINT;
562 } else {
563 return apr_psprintf(cmd->pool, "Unknown data type %s",datatype_s);
564 }
565
566 size = atoi(size_s);
567
568 log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
569 "%s, %s, %s, %s, %s(%d), %s(%d)",
570 alias, funcalias, param, field, datatype_s, datatype, size_s, size);
571
572 log_sql_register_field(cmd->pool, alias, funcalias, param,
573 field, datatype, size);
574
575 return NULL;
576}
577
407/*------------------------------------------------------------* 578/*------------------------------------------------------------*
408 * Apache-specific hooks into the module code * 579 * Apache-specific hooks into the module code *
409 * that are defined in the array 'mysql_lgog_module' (at EOF) * 580 * that are defined in the array 'mysql_lgog_module' (at EOF) *
@@ -460,6 +631,8 @@ static void log_sql_child_init(server_rec *s, apr_pool_t *p)
460 } 631 }
461} 632}
462 633
634static apr_array_header_t *do_merge_array(apr_array_header_t *parent, apr_array_header_t *child, apr_pool_t *p);
635
463/* post_config / module_init */ 636/* post_config / module_init */
464#if defined(WITH_APACHE20) 637#if defined(WITH_APACHE20)
465static int log_sql_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) 638static int log_sql_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
@@ -467,47 +640,161 @@ static int log_sql_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptem
467static void log_sql_module_init(server_rec *s, apr_pool_t *p) 640static void log_sql_module_init(server_rec *s, apr_pool_t *p)
468#endif 641#endif
469{ 642{
470 /* TODO: Add local_address, remote_address, server_name, connection_status */ 643 server_rec *cur_s;
644 const char *default_p = ap_server_root_relative(p, DEFAULT_PRESERVE_FILE);
645 apr_array_header_t *parent = NULL;
646
647 if (global_config.showconfig != NULL) {
648 const char *tempfile = ap_server_root_relative(p, global_config.showconfig);
649 apr_status_t result;
650 #if defined(WITH_APACHE20)
651 result = apr_file_open(&global_config.showconfig_fp, tempfile,APR_TRUNCATE | APR_WRITE | APR_CREATE, APR_OS_DEFAULT, p);
652 #elif defined(WITH_APACHE13)
653 global_config.showconfig_fp = ap_pfopen(p, tempfile, "w");
654 result = (fp)?0:errno;
655 #endif
656 if (result != APR_SUCCESS) {
657 log_error(APLOG_MARK, APLOG_ERR, result, s,
658 "attempted open of showconfig file '%s' failed.",tempfile);
659 global_config.showconfig_fp = NULL;
660 } else {
661 #if defined(WITH_APACHE20)
662 char temp_time[APR_RFC822_DATE_LEN];
663 apr_rfc822_date(temp_time,apr_time_now());
664 #elif defined(WITH_APACHE13)
665 char *temp_time = ap_get_time());
666 #endif
667 apr_file_printf(global_config.showconfig_fp,"Mod_log_sql Config dump created on %s\n", temp_time);
668 }
669 }
670
671 for (cur_s = s; cur_s != NULL; cur_s= cur_s->next) {
672 logsql_state *cls = ap_get_module_config(cur_s->module_config,
673 &log_sql_module);
674 /* ap_server_root_relative any default preserve file locations */
675 if (cls->preserve_file == DEFAULT_PRESERVE_FILE)
676 cls->preserve_file = default_p;
677
678 /* Post-process logformats */
679 if (!cur_s->is_virtual) {
680 parent = create_logformat_default(p);
681 cls->transfer_log_format = do_merge_array(parent, cls->transfer_log_format, p);
682 parent = cls->transfer_log_format;
683 } else {
684 cls->transfer_log_format = do_merge_array(parent, cls->transfer_log_format, p);
685 }
686 }
687
688 /* TODO: Add local_address, remote_address, connection_status */
689 /** Register functions */
690 /** register_function(p, funcname, func_ptr, which request_rec); */
691 log_sql_register_function(p, "useragent", extract_agent, LOGSQL_FUNCTION_REQ_ORIG);
692 log_sql_register_function(p, "request_args", extract_request_query, LOGSQL_FUNCTION_REQ_ORIG);
693 log_sql_register_function(p, "bytes_sent", extract_bytes_sent, LOGSQL_FUNCTION_REQ_FINAL);
694 log_sql_register_function(p, "cookie", extract_specific_cookie,LOGSQL_FUNCTION_REQ_FINAL);
695 log_sql_register_function(p, "request_file", extract_request_file, LOGSQL_FUNCTION_REQ_FINAL);
696 log_sql_register_function(p, "request_protocol",extract_request_protocol,LOGSQL_FUNCTION_REQ_FINAL);
697 log_sql_register_function(p, "remote_host", extract_remote_host, LOGSQL_FUNCTION_REQ_FINAL);
698 log_sql_register_function(p, "unique_id", extract_unique_id, LOGSQL_FUNCTION_REQ_FINAL);
699 log_sql_register_function(p, "remote_logname", extract_remote_logname, LOGSQL_FUNCTION_REQ_FINAL);
700 log_sql_register_function(p, "request_method", extract_request_method, LOGSQL_FUNCTION_REQ_FINAL);
701 log_sql_register_function(p, "machine_id", extract_machine_id, LOGSQL_FUNCTION_REQ_FINAL);
702 log_sql_register_function(p, "child_pid", extract_child_pid, LOGSQL_FUNCTION_REQ_FINAL);
703 log_sql_register_function(p, "server_port", extract_server_port, LOGSQL_FUNCTION_REQ_FINAL);
704 log_sql_register_function(p, "referrer", extract_referer, LOGSQL_FUNCTION_REQ_ORIG);
705 log_sql_register_function(p, "request_line", extract_request_line, LOGSQL_FUNCTION_REQ_ORIG);
706 log_sql_register_function(p, "timestamp", extract_request_timestamp,LOGSQL_FUNCTION_REQ_FINAL);
707 log_sql_register_function(p, "status", extract_status, LOGSQL_FUNCTION_REQ_ORIG);
708 log_sql_register_function(p, "request_duration",extract_request_duration,LOGSQL_FUNCTION_REQ_ORIG);
709 log_sql_register_function(p, "request_time", extract_request_time, LOGSQL_FUNCTION_REQ_FINAL);
710 log_sql_register_function(p, "remote_user", extract_remote_user, LOGSQL_FUNCTION_REQ_FINAL);
711 log_sql_register_function(p, "request_uri", extract_request_uri, LOGSQL_FUNCTION_REQ_ORIG);
712 log_sql_register_function(p, "virtual_host", extract_virtual_host, LOGSQL_FUNCTION_REQ_FINAL);
713 log_sql_register_function(p, "server_name", extract_server_name, LOGSQL_FUNCTION_REQ_FINAL);
714
715 /** Old style aliases */
716 /** register_alias(s, shortname, longname) */
717 log_sql_register_alias(s,p,'A',"useragent");
718 log_sql_register_alias(s,p,'a',"request_args");
719 log_sql_register_alias(s,p,'b',"bytes_sent");
720 log_sql_register_alias(s,p,'c',"cookie");
721 log_sql_register_alias(s,p,'f',"request_file");
722 log_sql_register_alias(s,p,'H',"request_protocol");
723 log_sql_register_alias(s,p,'h',"remote_host");
724 log_sql_register_alias(s,p,'I',"unique_id");
725 log_sql_register_alias(s,p,'l',"remote_logname");
726 log_sql_register_alias(s,p,'m',"request_method");
727 log_sql_register_alias(s,p,'M',"machine_id");
728 log_sql_register_alias(s,p,'P',"child_pid");
729 log_sql_register_alias(s,p,'p',"server_port");
730 log_sql_register_alias(s,p,'R',"referrer");
731 log_sql_register_alias(s,p,'r',"request_line");
732 log_sql_register_alias(s,p,'S',"timestamp");
733 log_sql_register_alias(s,p,'s',"status");
734 log_sql_register_alias(s,p,'T',"request_duration");
735 log_sql_register_alias(s,p,'t',"request_time");
736 log_sql_register_alias(s,p,'u',"remote_user");
737 log_sql_register_alias(s,p,'U',"request_uri");
738 log_sql_register_alias(s,p,'v',"virtual_host");
739 log_sql_register_alias(s,p,'V',"server_name");
740
471 /* Register handlers */ 741 /* Register handlers */
472 log_sql_register_item(s,p,'A', extract_agent, "agent", 1, 1); 742 /** register_field(s,p, longname, funcalias, arg,
473 log_sql_register_item(s,p,'a', extract_request_query, "request_args", 1, 1); 743 * sqlfieldname, DATATYPE, DATA LENGTH); */
474 log_sql_register_item(s,p,'b', extract_bytes_sent, "bytes_sent", 0, 0); 744 log_sql_register_field(p,"useragent", "useragent",NULL,
475 log_sql_register_item(s,p,'c', extract_cookie, "cookie", 0, 1); 745 "agent", LOGSQL_DATATYPE_VARCHAR, 0);
476 /* TODO: Document */ 746 log_sql_register_field(p,"request_args", "request_args",NULL,
477 log_sql_register_item(s,p,'f', extract_request_file, "request_file", 0, 1); 747 "request_args",LOGSQL_DATATYPE_VARCHAR,0);
478 log_sql_register_item(s,p,'H', extract_request_protocol, "request_protocol", 0, 1); 748 log_sql_register_field(p,"bytes_sent", "bytes_sent",NULL,
479 log_sql_register_item(s,p,'h', extract_remote_host, "remote_host", 0, 1); 749 "bytes_sent",LOGSQL_DATATYPE_INT,0);
480 log_sql_register_item(s,p,'I', extract_unique_id, "id", 0, 1); 750 log_sql_register_field(p,"cookie", "cookie","Apache",
481 log_sql_register_item(s,p,'l', extract_remote_logname, "remote_logname", 0, 1); 751 "cookie",LOGSQL_DATATYPE_VARCHAR,0);
482 log_sql_register_item(s,p,'m', extract_request_method, "request_method", 0, 1); 752 log_sql_register_field(p,"request_file", "request_file",NULL,
483 log_sql_register_item(s,p,'M', extract_machine_id, "machine_id", 0, 1); 753 "request_file",LOGSQL_DATATYPE_VARCHAR,0);
484 log_sql_register_item(s,p,'P', extract_child_pid, "child_pid", 0, 0); 754 log_sql_register_field(p,"request_protocol", "request_protocol",NULL,
485 log_sql_register_item(s,p,'p', extract_server_port, "server_port", 0, 0); 755 "request_protocol",LOGSQL_DATATYPE_VARCHAR,0);
486 log_sql_register_item(s,p,'R', extract_referer, "referer", 1, 1); 756 log_sql_register_field(p,"remote_host", "remote_host",NULL,
487 log_sql_register_item(s,p,'r', extract_request_line, "request_line", 1, 1); 757 "remote_host",LOGSQL_DATATYPE_VARCHAR,0);
488 log_sql_register_item(s,p,'S', extract_request_timestamp, "time_stamp", 0, 0); 758 log_sql_register_field(p,"unique_id", "unique_id",NULL,
489 log_sql_register_item(s,p,'s', extract_status, "status", 1, 0); 759 "id",LOGSQL_DATATYPE_VARCHAR,0);
490 log_sql_register_item(s,p,'T', extract_request_duration, "request_duration", 1, 0); 760 log_sql_register_field(p,"remote_logname", "remote_logname",NULL,
491 log_sql_register_item(s,p,'t', extract_request_time, "request_time", 0, 1); 761 "remote_logname",LOGSQL_DATATYPE_VARCHAR,0);
492 log_sql_register_item(s,p,'u', extract_remote_user, "remote_user", 0, 1); 762 log_sql_register_field(p,"request_method", "request_method",NULL,
493 log_sql_register_item(s,p,'U', extract_request_uri, "request_uri", 1, 1); 763 "request_method",LOGSQL_DATATYPE_VARCHAR,0);
494 log_sql_register_item(s,p,'v', extract_virtual_host, "virtual_host", 0, 1); 764 log_sql_register_field(p,"machine_id", "machine_id",NULL,
495 log_sql_register_item(s,p,'V', extract_server_name, "virtual_host", 0, 1); 765 "machine_id",LOGSQL_DATATYPE_VARCHAR,0);
766 log_sql_register_field(p,"child_pid", "child_pid",NULL,
767 "child_pid",LOGSQL_DATATYPE_INT,0);
768 log_sql_register_field(p,"server_port", "server_port",NULL,
769 "server_port",LOGSQL_DATATYPE_INT,0);
770 log_sql_register_field(p,"referer", "referrer",NULL,
771 "referer",LOGSQL_DATATYPE_VARCHAR,0);
772 log_sql_register_field(p,"referrer", "referrer",NULL,
773 "referer",LOGSQL_DATATYPE_VARCHAR,0);
774 log_sql_register_field(p,"request_line", "request_line",NULL,
775 "request_line",LOGSQL_DATATYPE_VARCHAR,0);
776 log_sql_register_field(p,"timestamp", "timestamp",NULL,
777 "time_stamp",LOGSQL_DATATYPE_INT,0);
778 log_sql_register_field(p,"status", "status",NULL,
779 "status",LOGSQL_DATATYPE_INT,0);
780 log_sql_register_field(p,"request_duration", "request_duration",NULL,
781 "request_duration",LOGSQL_DATATYPE_INT,0);
782 log_sql_register_field(p,"request_time", "request_time",NULL,
783 "request_time",LOGSQL_DATATYPE_VARCHAR,0);
784 log_sql_register_field(p,"remote_user", "remote_user",NULL,
785 "remote_user",LOGSQL_DATATYPE_VARCHAR,0);
786 log_sql_register_field(p,"request_uri", "request_uri",NULL,
787 "request_uri",LOGSQL_DATATYPE_VARCHAR,0);
788 log_sql_register_field(p,"virtual_host", "virtual_host",NULL,
789 "virtual_host",LOGSQL_DATATYPE_VARCHAR,0);
790 log_sql_register_field(p,"server_name", "server_name",NULL,
791 "virtual_host",LOGSQL_DATATYPE_VARCHAR,0);
792
793 log_sql_register_finish(s);
496 794
497 if (global_config.announce) { 795 if (global_config.announce) {
498 ap_add_version_component(p, PACKAGE_NAME"/"PACKAGE_VERSION); 796 ap_add_version_component(p, PACKAGE_NAME"/"PACKAGE_VERSION);
499 } 797 }
500 /* ap_server_root_relative any default preserve file locations */
501 {
502 server_rec *cur_s;
503 const char *default_p = ap_server_root_relative(p, DEFAULT_PRESERVE_FILE);
504 for (cur_s = s; cur_s != NULL; cur_s= cur_s->next) {
505 logsql_state *cls = ap_get_module_config(cur_s->module_config,
506 &log_sql_module);
507 if (cls->preserve_file == DEFAULT_PRESERVE_FILE)
508 cls->preserve_file = default_p;
509 }
510 }
511 global_config.db.p = p; 798 global_config.db.p = p;
512 799
513#if defined(WITH_APACHE20) 800#if defined(WITH_APACHE20)
@@ -639,10 +926,9 @@ static void *log_sql_make_state(apr_pool_t *p, server_rec *s)
639 logsql_state *cls = (logsql_state *) apr_pcalloc(p, sizeof(logsql_state)); 926 logsql_state *cls = (logsql_state *) apr_pcalloc(p, sizeof(logsql_state));
640 927
641 /* These defaults are overridable in the httpd.conf file. */ 928 /* These defaults are overridable in the httpd.conf file. */
642 cls->transfer_log_format = DEFAULT_TRANSFER_LOG_FMT; 929 cls->transfer_log_format = apr_array_make(p, 1, sizeof(char *));
643 apr_pool_create(&cls->parsed_pool, p); 930 cls->parsed_pool = p;
644 cls->parsed_log_format = apr_pcalloc(cls->parsed_pool, 931
645 strlen(cls->transfer_log_format) * sizeof(logsql_item *));
646 cls->notes_table_name = DEFAULT_NOTES_TABLE_NAME; 932 cls->notes_table_name = DEFAULT_NOTES_TABLE_NAME;
647 cls->hin_table_name = DEFAULT_HIN_TABLE_NAME; 933 cls->hin_table_name = DEFAULT_HIN_TABLE_NAME;
648 cls->hout_table_name = DEFAULT_HOUT_TABLE_NAME; 934 cls->hout_table_name = DEFAULT_HOUT_TABLE_NAME;
@@ -656,7 +942,6 @@ static void *log_sql_make_state(apr_pool_t *p, server_rec *s)
656 cls->hin_list = apr_array_make(p, 1, sizeof(char *)); 942 cls->hin_list = apr_array_make(p, 1, sizeof(char *));
657 cls->hout_list = apr_array_make(p, 1, sizeof(char *)); 943 cls->hout_list = apr_array_make(p, 1, sizeof(char *));
658 cls->cookie_list = apr_array_make(p, 1, sizeof(char *)); 944 cls->cookie_list = apr_array_make(p, 1, sizeof(char *));
659
660 return (void *) cls; 945 return (void *) cls;
661} 946}
662 947
@@ -675,43 +960,52 @@ static int in_array(apr_array_header_t *ary, const char *elem)
675} 960}
676 961
677 962
678/* Parse through cookie lists and merge based on +/- prefixes */ 963/* Parse through lists and merge based on +/- prefixes */
679/* TODO: rewrite as a function */ 964static apr_array_header_t *do_merge_array(apr_array_header_t *parent, apr_array_header_t *child, apr_pool_t *p)
680#define DO_MERGE_ARRAY(parent,child,pool) \ 965{
681if (apr_is_empty_array(child)) { \ 966 apr_array_header_t *ret;
682 apr_array_cat(child, parent); \ 967 ret = apr_array_make(p, 1, sizeof(char *));
683} else { \ 968 if (apr_is_empty_array(child)) {
684 apr_array_header_t *addlist, *dellist; \ 969 apr_array_cat(ret, parent);
685 char **elem, **ptr = (char **)(child->elts); \ 970 } else {
686 int itr, overwrite = 0; \ 971 apr_array_header_t *addlist, *dellist;
687 addlist = apr_array_make(pool,5,sizeof(char *)); \ 972 apr_pool_t *subp;
688 dellist = apr_array_make(subp,5,sizeof(char *)); \ 973 char **elem, **ptr = (char **)(child->elts);
689\ 974 int itr, overwrite = 0;
690 for (itr=0; itr<child->nelts; itr++) { \ 975
691 if (*ptr[itr] == '+') { \ 976 apr_pool_create(&subp,p);
692 elem = (char **)apr_array_push(addlist); \ 977
693 *elem = (ptr[itr]+1); \ 978 addlist = apr_array_make(subp,5,sizeof(char *));
694 } else if (*ptr[itr] == '-') { \ 979 dellist = apr_array_make(subp,5,sizeof(char *));
695 elem = (char **)apr_array_push(dellist); \ 980
696 *elem = (ptr[itr]+1); \ 981 for (itr=0; itr<child->nelts; itr++) {
697 } else { \ 982 if (*ptr[itr] == '+') {
698 overwrite = 1; \ 983 elem = (char **)apr_array_push(addlist);
699 elem = (char **)apr_array_push(addlist); \ 984 *elem = (ptr[itr]+1);
700 *elem = ptr[itr]; \ 985 } else if (*ptr[itr] == '-') {
701 } \ 986 elem = (char **)apr_array_push(dellist);
702 } \ 987 *elem = (ptr[itr]+1);
703 child = apr_array_make(p,1,sizeof(char *)); \ 988 } else {
704 ptr = (char **)(parent->elts); \ 989 overwrite = 1;
705 if (overwrite==0) { \ 990 elem = (char **)apr_array_push(addlist);
706 /* if we are not overwriting the existing then prepare for merge */ \ 991 *elem = ptr[itr];
707 for (itr=0; itr<parent->nelts; itr++) { \ 992 }
708 if (!in_array(addlist, ptr[itr]) && !in_array(dellist,ptr[itr])) { \ 993 }
709 elem = apr_array_push(child); \ 994 child = apr_array_make(p,1,sizeof(char *));
710 *elem = apr_pstrdup(p, ptr[itr]); \ 995 ptr = (char **)(parent->elts);
711 } \ 996 if (overwrite==0) {
712 } \ 997 /* if we are not overwriting the existing then prepare for merge */
713 } \ 998 for (itr=0; itr<parent->nelts; itr++) {
714 apr_array_cat(child, addlist); \ 999 if (!in_array(addlist, ptr[itr]) && !in_array(dellist,ptr[itr])) {
1000 elem = apr_array_push(ret);
1001 *elem = apr_pstrdup(p, ptr[itr]);
1002 }
1003 }
1004 }
1005 apr_array_cat(ret, addlist);
1006 apr_pool_destroy(subp);
1007 }
1008 return ret;
715} 1009}
716 1010
717static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv) 1011static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv)
@@ -720,10 +1014,6 @@ static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv)
720 logsql_state *parent = (logsql_state *) basev; 1014 logsql_state *parent = (logsql_state *) basev;
721 logsql_state *child = (logsql_state *) addv; 1015 logsql_state *child = (logsql_state *) addv;
722 1016
723 apr_pool_t *subp;
724
725 apr_pool_create(&subp,p);
726
727 /* Child can override these, otherwise they default to parent's choice. 1017 /* Child can override these, otherwise they default to parent's choice.
728 * If the parent didn't set them, create reasonable defaults for the 1018 * If the parent didn't set them, create reasonable defaults for the
729 * ones that should have such default settings. Leave the others null. */ 1019 * ones that should have such default settings. Leave the others null. */
@@ -734,13 +1024,6 @@ static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv)
734 child->transfer_table_name = parent->transfer_table_name; 1024 child->transfer_table_name = parent->transfer_table_name;
735 } 1025 }
736 1026
737 if (child->transfer_log_format == DEFAULT_TRANSFER_LOG_FMT) {
738 child->transfer_log_format = parent->transfer_log_format;
739 /*apr_pool_clear(child->parsed_pool);*/
740 child->parsed_log_format = apr_pcalloc(child->parsed_pool,
741 strlen(child->transfer_log_format) * sizeof(logsql_item *));
742 }
743
744 if (child->preserve_file == DEFAULT_PRESERVE_FILE) 1027 if (child->preserve_file == DEFAULT_PRESERVE_FILE)
745 child->preserve_file = parent->preserve_file; 1028 child->preserve_file = parent->preserve_file;
746 /* server_root_relative the preserve file location */ 1029 /* server_root_relative the preserve file location */
@@ -759,15 +1042,13 @@ static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv)
759 if (child->cookie_table_name == DEFAULT_COOKIE_TABLE_NAME) 1042 if (child->cookie_table_name == DEFAULT_COOKIE_TABLE_NAME)
760 child->cookie_table_name = parent->cookie_table_name; 1043 child->cookie_table_name = parent->cookie_table_name;
761 1044
762 DO_MERGE_ARRAY(parent->transfer_ignore_list, child->transfer_ignore_list, subp); 1045 child->transfer_ignore_list = do_merge_array(parent->transfer_ignore_list, child->transfer_ignore_list, p);
763 DO_MERGE_ARRAY(parent->transfer_accept_list, child->transfer_accept_list, subp); 1046 child->transfer_accept_list = do_merge_array(parent->transfer_accept_list, child->transfer_accept_list, p);
764 DO_MERGE_ARRAY(parent->remhost_ignore_list, child->remhost_ignore_list, subp); 1047 child->remhost_ignore_list = do_merge_array(parent->remhost_ignore_list, child->remhost_ignore_list, p);
765 DO_MERGE_ARRAY(parent->notes_list, child->notes_list, subp); 1048 child->notes_list = do_merge_array(parent->notes_list, child->notes_list, p);
766 DO_MERGE_ARRAY(parent->hin_list, child->hin_list, subp); 1049 child->hin_list = do_merge_array(parent->hin_list, child->hin_list, p);
767 DO_MERGE_ARRAY(parent->hout_list, child->hout_list, subp); 1050 child->hout_list = do_merge_array(parent->hout_list, child->hout_list, p);
768 DO_MERGE_ARRAY(parent->cookie_list,child->cookie_list, subp); 1051 child->cookie_list = do_merge_array(parent->cookie_list,child->cookie_list, p);
769
770 apr_pool_destroy(subp);
771 1052
772 if (!child->cookie_name) 1053 if (!child->cookie_name)
773 child->cookie_name = parent->cookie_name; 1054 child->cookie_name = parent->cookie_name;
@@ -844,7 +1125,7 @@ static int log_sql_transaction(request_rec *orig)
844 char *cookie_query = NULL; 1125 char *cookie_query = NULL;
845 const char *unique_id; 1126 const char *unique_id;
846 const char *formatted_item; 1127 const char *formatted_item;
847 int i,length; 1128 int i, showcomma;
848 int proceed; 1129 int proceed;
849 1130
850 for (r = orig; r->next; r = r->next) { 1131 for (r = orig; r->next; r = r->next) {
@@ -885,7 +1166,7 @@ static int log_sql_transaction(request_rec *orig)
885 thehost = ap_get_remote_host(r->connection, r->per_dir_config, REMOTE_NAME, NULL); 1166 thehost = ap_get_remote_host(r->connection, r->per_dir_config, REMOTE_NAME, NULL);
886 if (thehost) { 1167 if (thehost) {
887 for (ptrptr = (char **) cls->remhost_ignore_list->elts; ptrptr < ptrptr2; ptrptr = (char **) ((char *) ptrptr + cls->remhost_ignore_list->elt_size)) 1168 for (ptrptr = (char **) cls->remhost_ignore_list->elts; ptrptr < ptrptr2; ptrptr = (char **) ((char *) ptrptr + cls->remhost_ignore_list->elt_size))
888 if (ap_strstr(thehost, *ptrptr)) { 1169 if (ap_strstr_c(thehost, *ptrptr)) {
889 return OK; 1170 return OK;
890 } 1171 }
891 } 1172 }
@@ -893,18 +1174,19 @@ static int log_sql_transaction(request_rec *orig)
893 1174
894 /* Iterate through the format characters and set up the INSERT string according to 1175 /* Iterate through the format characters and set up the INSERT string according to
895 * what the user has configured. */ 1176 * what the user has configured. */
896 length = strlen(cls->transfer_log_format); 1177 showcomma = 0;
897 for (i = 0; i<length; i++) { 1178 for (i = 0; i<cls->transfer_log_format->nelts; i++) {
898 logsql_item *item = cls->parsed_log_format[i]; 1179 logsql_field *item = cls->parsed_log_format[i];
899 if (item==NULL) { 1180 if (item==NULL || item->func==NULL) {
900 log_error(APLOG_MARK, APLOG_ERR, 0, orig->server, 1181 log_error(APLOG_MARK, APLOG_ERR, 0, orig->server,
901 "Log Format '%c' unknown",cls->transfer_log_format[i]); 1182 "Log Format '%s' unknown or incomplete",((char **)cls->transfer_log_format->elts)[i]);
902 continue; 1183 continue;
903 } 1184 }
904 1185
905 /* Yes, this key is one of the configured keys. 1186 /* Yes, this key is one of the configured keys.
906 * Call the key's function and put the returned value into 'formatted_item' */ 1187 * Call the key's function and put the returned value into 'formatted_item' */
907 formatted_item = item->func(item->want_orig_default ? orig : r, ""); 1188 formatted_item = item->func->func(item->func->want_orig_req ? orig : r,
1189 item->param ? item->param : "");
908 1190
909 /* Massage 'formatted_item' for proper SQL eligibility... */ 1191 /* Massage 'formatted_item' for proper SQL eligibility... */
910 if (!formatted_item) { 1192 if (!formatted_item) {
@@ -916,10 +1198,11 @@ static int log_sql_transaction(request_rec *orig)
916 } 1198 }
917 1199
918 /* Append the fieldname and value-to-insert to the appropriate strings, quoting stringvals with ' as appropriate */ 1200 /* Append the fieldname and value-to-insert to the appropriate strings, quoting stringvals with ' as appropriate */
919 fields = apr_pstrcat(r->pool, fields, (i ? "," : ""), 1201 fields = apr_pstrcat(r->pool, fields, (showcomma ? "," : ""),
920 item->sql_field_name, NULL); 1202 item->sql_field_name, NULL);
921 values = apr_pstrcat(r->pool, values, (i ? "," : ""), 1203 values = apr_pstrcat(r->pool, values, (showcomma ? "," : ""),
922 global_config.driver->escape(formatted_item, r->pool,&global_config.db), NULL); 1204 global_config.driver->escape(formatted_item, r->pool,&global_config.db), NULL);
1205 showcomma = 1;
923 } 1206 }
924 1207
925 /* Work through the list of notes defined by LogSQLWhichNotes */ 1208 /* Work through the list of notes defined by LogSQLWhichNotes */
@@ -1171,10 +1454,19 @@ static const command_rec log_sql_cmds[] = {
1171 (void *)APR_OFFSETOF(logsql_state, cookie_table_name), RSRC_CONF, 1454 (void *)APR_OFFSETOF(logsql_state, cookie_table_name), RSRC_CONF,
1172 "The database table that holds the cookie info") 1455 "The database table that holds the cookie info")
1173 , 1456 ,
1174 /* Log format */ 1457 /* New Log Format */
1175 AP_INIT_TAKE1("LogSQLTransferLogFormat", set_logformat_slot, 1458 AP_INIT_ITERATE("LogSQLTransferLogItems", add_server_string_slot,
1459 (void *)APR_OFFSETOF(logsql_state, transfer_log_format), RSRC_CONF,
1460 "What fields to log to the database transfer log")
1461 ,
1462 AP_INIT_RAW_ARGS("LogSQLRegisterItem", set_register_field,
1176 NULL, RSRC_CONF, 1463 NULL, RSRC_CONF,
1177 "Instruct the module what information to log to the database transfer log") 1464 "Register a new Item for logging, Arguments: ItemName function argument sqlfield datatype datalen<br>"
1465 "datatypes are INT, SMALLINT, VARCHAR, CHAR<br>")
1466 ,
1467 AP_INIT_TAKE1("LogSQLShowConfig", set_global_string_slot,
1468 (void *)APR_OFFSETOF(global_config_t, showconfig), RSRC_CONF,
1469 "Add this to export the entire running function and dfield configuration to the named file")
1178 , 1470 ,
1179 /* Machine ID */ 1471 /* Machine ID */
1180 AP_INIT_TAKE1("LogSQLMachineID", set_global_string_slot, 1472 AP_INIT_TAKE1("LogSQLMachineID", set_global_string_slot,
@@ -1194,7 +1486,7 @@ static const command_rec log_sql_cmds[] = {
1194 (void *)APR_OFFSETOF(logsql_state, remhost_ignore_list), RSRC_CONF, 1486 (void *)APR_OFFSETOF(logsql_state, remhost_ignore_list), RSRC_CONF,
1195 "List of remote hosts to ignore. Accesses that match will not be logged to database") 1487 "List of remote hosts to ignore. Accesses that match will not be logged to database")
1196 , 1488 ,
1197 /* Special loggin table configuration */ 1489 /* Special logging table configuration */
1198 AP_INIT_TAKE1("LogSQLWhichCookie", set_server_string_slot, 1490 AP_INIT_TAKE1("LogSQLWhichCookie", set_server_string_slot,
1199 (void *)APR_OFFSETOF(logsql_state, cookie_name), RSRC_CONF, 1491 (void *)APR_OFFSETOF(logsql_state, cookie_name), RSRC_CONF,
1200 "The single cookie that you want logged in the access_log when using the 'c' config directive") 1492 "The single cookie that you want logged in the access_log when using the 'c' config directive")
@@ -1219,6 +1511,10 @@ static const command_rec log_sql_cmds[] = {
1219 "<br><b>Deprecated</b><br>The following Commands are deprecated and should not be used.. <br>Read the documentation for more information<br><b>Deprecated</b>") 1511 "<br><b>Deprecated</b><br>The following Commands are deprecated and should not be used.. <br>Read the documentation for more information<br><b>Deprecated</b>")
1220 , 1512 ,
1221 /* Deprecated commands */ 1513 /* Deprecated commands */
1514 AP_INIT_TAKE1("LogSQLTransferLogFormat", set_logformat_slot,
1515 (void *)APR_OFFSETOF(logsql_state, transfer_log_format), RSRC_CONF,
1516 "<b>(Deprecated) Use LogSQLTransferLogItem to specify symbolic log items instead")
1517 ,
1222 AP_INIT_TAKE1("LogSQLDatabase", set_dbparam_slot, 1518 AP_INIT_TAKE1("LogSQLDatabase", set_dbparam_slot,
1223 (void *)"database", RSRC_CONF, 1519 (void *)"database", RSRC_CONF,
1224 "<b>(Deprecated) Use LogSQLDBParam database dbname.</b> The name of the database database for logging") 1520 "<b>(Deprecated) Use LogSQLDBParam database dbname.</b> The name of the database database for logging")
diff --git a/mod_log_sql.h b/mod_log_sql.h
index 6bcd6cb..2d20374 100644
--- a/mod_log_sql.h
+++ b/mod_log_sql.h
@@ -24,13 +24,40 @@
24#define LOGSQL_DECLARE_DATA __declspec(dllimport) 24#define LOGSQL_DECLARE_DATA __declspec(dllimport)
25#endif 25#endif
26 26
27#define LOG_SQL_PLUGIN_VERSION 20070704
28
27/* Registration function for extract functions */ 29/* Registration function for extract functions */
28 30
29typedef const char *logsql_item_func(request_rec *r, char *a); 31typedef const char *logsql_item_func(request_rec *r, char *a);
30 32
31LOGSQL_DECLARE(void) log_sql_register_item(server_rec *s, apr_pool_t *p, 33
32 char key, logsql_item_func *func, const char *sql_field_name, 34typedef enum {
33 int want_orig_default, int string_contents); 35 LOGSQL_FUNCTION_REQ_FINAL = 0,
36 LOGSQL_FUNCTION_REQ_ORIG
37} logsql_function_req;
38
39LOGSQL_DECLARE(void) log_sql_register_function(apr_pool_t *p,
40 const char *alias, logsql_item_func *func,
41 logsql_function_req want_orig_default);
42
43LOGSQL_DECLARE(void) log_sql_register_alias(server_rec *s, apr_pool_t *p,
44 char key, const char *alias);
45
46typedef enum {
47 LOGSQL_DATATYPE_INT = 0,
48 LOGSQL_DATATYPE_SMALLINT,
49 LOGSQL_DATATYPE_VARCHAR,
50 LOGSQL_DATATYPE_CHAR,
51 LOGSQL_DATATYPE_BIGINT
52} logsql_field_datatype;
53
54LOGSQL_DECLARE(void) log_sql_register_field(apr_pool_t *p,
55 const char *alias,
56 const char *funcalias, const char *param,
57 const char *sql_field_name,
58 logsql_field_datatype datatype, apr_size_t size);
59
60LOGSQL_DECLARE(void) log_sql_register_finish(server_rec *s);
34 61
35/* DB Connection structure holds connection handle */ 62/* DB Connection structure holds connection handle */
36typedef struct { 63typedef struct {
@@ -88,7 +115,7 @@ typedef struct {
88 /* disconnect from the underlying database layer */ 115 /* disconnect from the underlying database layer */
89 void (*disconnect)(logsql_dbconnection *db); 116 void (*disconnect)(logsql_dbconnection *db);
90 /* escape the SQL statement according to database rules */ 117 /* escape the SQL statement according to database rules */
91 const char *(*escape)(const char *from_str, apr_pool_t *p, 118 const char *(*escape)(const char *from_str, apr_pool_t *p,
92 logsql_dbconnection *db); 119 logsql_dbconnection *db);
93 /* insert a SQL query statement */ 120 /* insert a SQL query statement */
94 logsql_query_ret (*insert)(request_rec *r,logsql_dbconnection *db, 121 logsql_query_ret (*insert)(request_rec *r,logsql_dbconnection *db,
@@ -102,35 +129,38 @@ LOGSQL_DECLARE(void) log_sql_register_driver(apr_pool_t *p,
102 logsql_dbdriver *driver); 129 logsql_dbdriver *driver);
103 130
104/* Module initialization Macros */ 131/* Module initialization Macros */
132#define LOGSQL_MODULE(driver) log_sql_##driver##_module
105#if defined(WITH_APACHE20) 133#if defined(WITH_APACHE20)
134# define LOGSQL_MODULE_FORWARD(driver) module AP_MODULE_DECLARE_DATA LOGSQL_MODULE(driver)
106# define LOGSQL_REGISTER(driver) \ 135# define LOGSQL_REGISTER(driver) \
107 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s); \ 136 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s); \
108 static void register_hooks(apr_pool_t *p) { \ 137 static void register_hooks(apr_pool_t *p) { \
109 ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_REALLY_FIRST); \ 138 ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_REALLY_FIRST); \
110 } \ 139 } \
111 \ 140 \
112 module AP_MODULE_DECLARE_DATA log_sql_##driver##_module = { \ 141 LOGSQL_MODULE_FORWARD(driver) = { \
113 STANDARD20_MODULE_STUFF, \ 142 STANDARD20_MODULE_STUFF, \
114 NULL, NULL, NULL, NULL, NULL, register_hooks }; \ 143 NULL, NULL, NULL, NULL, NULL, register_hooks }; \
115 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) 144 static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
116#elif defined(WITH_APACHE13) 145#elif defined(WITH_APACHE13)
146# define LOGSQL_MODULE_FORWARD(driver) module MODULE_VAR_EXPORT LOGSQL_MODULE(driver)
117# define LOGSQL_REGISTER(driver) \ 147# define LOGSQL_REGISTER(driver) \
118 static void module_init(server_rec *s, apr_pool_t *p); \ 148 static void module_init(server_rec *s, apr_pool_t *p); \
119 module MODULE_VAR_EXPORT log_sql_##driver##_module = { \ 149 LOGSQL_MODULE_FORWARD(driver) = { \
120 STANDARD_MODULE_STUFF, module_init }; \ 150 STANDARD_MODULE_STUFF, module_init }; \
121 static void module_init(server_rec *s, apr_pool_t *p) 151 static void module_init(server_rec *s, apr_pool_t *p)
122#endif 152#endif
123 153
124#if defined(WITH_APACHE20) 154#if defined(WITH_APACHE20)
125# define LOGSQL_SHUTDOWN \ 155# define LOGSQL_SHUTDOWN \
126 static 156 static
127#endif 157#endif
128 158
129 159
130#if defined(WITH_APACHE20) 160#if defined(WITH_APACHE20)
131#define LOGSQL_REGISTER_RETURN return OK; 161#define LOGSQL_REGISTER_RETURN log_sql_register_finish(s); return OK;
132#elif defined(WITH_APACHE13) 162#elif defined(WITH_APACHE13)
133#define LOGSQL_REGISTER_RETURN 163#define LOGSQL_REGISTER_RETURN log_sql_register_finish(s);
134#endif 164#endif
135 165
136#endif /* MOD_LOG_SQL_H */ 166#endif /* MOD_LOG_SQL_H */
diff --git a/mod_log_sql_logio.c b/mod_log_sql_logio.c
index 95d1763..ed69acf 100644
--- a/mod_log_sql_logio.c
+++ b/mod_log_sql_logio.c
@@ -21,6 +21,8 @@
21 21
22#include "mod_log_sql.h" 22#include "mod_log_sql.h"
23 23
24#include "http_connection.h"
25
24module AP_MODULE_DECLARE_DATA log_sql_logio_module; 26module AP_MODULE_DECLARE_DATA log_sql_logio_module;
25 27
26// From apachge 2.2's mod_logio.c to provide logging ACTUAL incoming and outgoing bytes 28// From apachge 2.2's mod_logio.c to provide logging ACTUAL incoming and outgoing bytes
@@ -96,7 +98,7 @@ static apr_status_t logio_out_filter(ap_filter_t *f,
96} 98}
97 99
98static int logio_pre_conn(conn_rec *c, void *csd) { 100static int logio_pre_conn(conn_rec *c, void *csd) {
99 logio_config_t *cf = apr_pcalloc(c->pool, sizeof(*cf)); 101 logio_config_t *cf = apr_pcalloc(c->pool, sizeof(logio_config_t));
100 102
101 ap_set_module_config(c->conn_config, &log_sql_logio_module, cf); 103 ap_set_module_config(c->conn_config, &log_sql_logio_module, cf);
102 104
@@ -108,10 +110,21 @@ static int logio_pre_conn(conn_rec *c, void *csd) {
108 110
109static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) 111static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
110{ 112{
111 log_sql_register_item(s,p,'i', log_bytes_in, "bytes_in", 0, 0); 113 log_sql_register_function(p, "bytes_in", log_bytes_in, LOGSQL_FUNCTION_REQ_FINAL);
112 log_sql_register_item(s,p,'o', log_bytes_out, "bytes_out", 0, 0); 114 log_sql_register_function(p, "bytes_out", log_bytes_out, LOGSQL_FUNCTION_REQ_FINAL);
115
116 log_sql_register_alias(s,p,'i', "bytes_in");
117 log_sql_register_alias(s,p,'o', "bytes_out");
118
119 log_sql_register_field(p, "bytes_in", "bytes_in", NULL,
120 "bytes_in", LOGSQL_DATATYPE_INT, 0);
121 log_sql_register_field(p, "bytes_out", "bytes_out", NULL,
122 "bytes_out", LOGSQL_DATATYPE_INT, 0);
123
124 log_sql_register_finish(s);
113 return OK; 125 return OK;
114} 126}
127
115static void register_hooks(apr_pool_t *p) { 128static void register_hooks(apr_pool_t *p) {
116 static const char *pre[] = { "mod_log_sql.c", NULL }; 129 static const char *pre[] = { "mod_log_sql.c", NULL };
117 130
diff --git a/mod_log_sql_ssl.c b/mod_log_sql_ssl.c
index d94a79f..47bba8b 100644
--- a/mod_log_sql_ssl.c
+++ b/mod_log_sql_ssl.c
@@ -9,7 +9,7 @@
9#endif 9#endif
10 10
11#ifdef HAVE_CONFIG_H 11#ifdef HAVE_CONFIG_H
12/* Undefine these to prevent conflicts between Apache ap_config_auto.h and 12/* Undefine these to prevent conflicts between Apache ap_config_auto.h and
13 * my config.h. Only really needed for Apache < 2.0.48, but it can't hurt. 13 * my config.h. Only really needed for Apache < 2.0.48, but it can't hurt.
14 */ 14 */
15#undef PACKAGE_BUGREPORT 15#undef PACKAGE_BUGREPORT
@@ -52,7 +52,7 @@ static const char *extract_ssl_keysize(request_rec *r, char *a)
52static const char *extract_ssl_maxkeysize(request_rec *r, char *a) 52static const char *extract_ssl_maxkeysize(request_rec *r, char *a)
53{ 53{
54 char *result = NULL; 54 char *result = NULL;
55 if (TEST_SSL(r) != NULL) 55 if (TEST_SSL(r) != NULL)
56 { 56 {
57 result = header_ssl_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_ALGKEYSIZE"); 57 result = header_ssl_lookup(r->pool, r->server, r->connection, r, "SSL_CIPHER_ALGKEYSIZE");
58 log_error(APLOG_MARK,APLOG_DEBUG,0, r->server,"SSL_ALGKEYSIZE: %s", result); 58 log_error(APLOG_MARK,APLOG_DEBUG,0, r->server,"SSL_ALGKEYSIZE: %s", result);
@@ -84,9 +84,21 @@ static const char *extract_ssl_cipher(request_rec *r, char *a)
84 84
85LOGSQL_REGISTER(ssl) 85LOGSQL_REGISTER(ssl)
86{ 86{
87 log_sql_register_item(s,p,'q', extract_ssl_keysize, "ssl_keysize", 0, 1); 87 log_sql_register_function(p, "ssl_keysize", extract_ssl_keysize, LOGSQL_FUNCTION_REQ_FINAL);
88 log_sql_register_item(s,p,'Q', extract_ssl_maxkeysize, "ssl_maxkeysize", 0, 1); 88 log_sql_register_function(p, "ssl_maxkeysize", extract_ssl_maxkeysize, LOGSQL_FUNCTION_REQ_FINAL);
89 log_sql_register_item(s,p,'z', extract_ssl_cipher, "ssl_cipher", 0, 1); 89 log_sql_register_function(p, "ssl_cipher", extract_ssl_cipher, LOGSQL_FUNCTION_REQ_FINAL);
90
91 log_sql_register_alias(s,p,'q', "ssl_keysize");
92 log_sql_register_alias(s,p,'Q', "ssl_maxkeysize");
93 log_sql_register_alias(s,p,'z', "ssl_cipher");
94
95 log_sql_register_field(p, "ssl_keysize", "ssl_keysize", NULL,
96 "ssl_keysize", LOGSQL_DATATYPE_VARCHAR, 0);
97 log_sql_register_field(p, "ssl_maxkeysize", "ssl_maxkeysize", NULL,
98 "ssl_maxkeysize", LOGSQL_DATATYPE_VARCHAR, 0);
99 log_sql_register_field(p, "ssl_cipher", "ssl_cipher", NULL,
100 "ssl_cipher", LOGSQL_DATATYPE_VARCHAR, 0);
101
90#if defined(WITH_APACHE20) 102#if defined(WITH_APACHE20)
91 header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup); 103 header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
92#endif 104#endif