diff options
author | Edward Rudd | 2007-10-20 13:18:20 +0000 |
---|---|---|
committer | Edward Rudd | 2007-10-20 13:18:20 +0000 |
commit | 1415cc4f58be08f90e646096cbf7e229a92faea5 (patch) | |
tree | a4c705e47adbc941e1de5287ef3b67e50e2a2bca | |
parent | fdee18399169716032a052effedf886480590efc (diff) |
updated with new code to allow better dynamic configuration of logged fields
-rw-r--r-- | apache13.h | 11 | ||||
-rwxr-xr-x | config.guess | 1314 | ||||
-rwxr-xr-x | config.sub | 1410 | ||||
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | functions.h | 8 | ||||
-rw-r--r-- | mod_log_sql.c | 618 | ||||
-rw-r--r-- | mod_log_sql.h | 48 | ||||
-rw-r--r-- | mod_log_sql_logio.c | 19 | ||||
-rw-r--r-- | mod_log_sql_ssl.c | 22 |
9 files changed, 542 insertions, 2912 deletions
@@ -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 | ||
80 | void log_error(char *file, int line, int level, apr_status_t status, | 83 | void 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 |
84 | inline | 87 | inline |
85 | #endif | 88 | #endif |
86 | void log_error(char *file, int line, int level, | 89 | void 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 | |||
6 | timestamp='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 | |||
37 | me=`echo "$0" | sed -e 's,.*/,,'` | ||
38 | |||
39 | usage="\ | ||
40 | Usage: $0 [OPTION] | ||
41 | |||
42 | Output the configuration name of the system \`$me' is run on. | ||
43 | |||
44 | Operation 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 | |||
49 | Report bugs and patches to <config-patches@gnu.org>." | ||
50 | |||
51 | version="\ | ||
52 | GNU config.guess ($timestamp) | ||
53 | |||
54 | Originally written by Per Bothner. | ||
55 | Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 | ||
56 | Free Software Foundation, Inc. | ||
57 | |||
58 | This is free software; see the source for copying conditions. There is NO | ||
59 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." | ||
60 | |||
61 | help=" | ||
62 | Try \`$me --help' for more information." | ||
63 | |||
64 | # Parse command line | ||
65 | while 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 | ||
83 | done | ||
84 | |||
85 | if test $# != 0; then | ||
86 | echo "$me: too many arguments$help" >&2 | ||
87 | exit 1 | ||
88 | fi | ||
89 | |||
90 | |||
91 | dummy=dummy-$$ | ||
92 | trap '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 | |||
98 | set_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 ;; | ||
113 | esac' | ||
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) | ||
117 | if (test -f /.attbin/uname) >/dev/null 2>&1 ; then | ||
118 | PATH=$PATH:/.attbin ; export PATH | ||
119 | fi | ||
120 | |||
121 | UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown | ||
122 | UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown | ||
123 | UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown | ||
124 | UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown | ||
125 | |||
126 | # Note: order is significant - the case branches are not exclusive. | ||
127 | |||
128 | case "${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 | ||
192 | main: | ||
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 | ||
207 | EOF | ||
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 | } | ||
416 | EOF | ||
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 | } | ||
497 | EOF | ||
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 | } | ||
598 | EOF | ||
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 | } | ||
636 | EOF | ||
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 | } | ||
877 | EOF | ||
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 ;; | ||
1117 | esac | ||
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 | |||
1122 | cat >$dummy.c <<EOF | ||
1123 | #ifdef _SEQUENT_ | ||
1124 | # include <sys/types.h> | ||
1125 | # include <sys/utsname.h> | ||
1126 | #endif | ||
1127 | main () | ||
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 | } | ||
1234 | EOF | ||
1235 | |||
1236 | eval $set_cc_for_build | ||
1237 | $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 | ||
1238 | rm -f $dummy.c $dummy | ||
1239 | |||
1240 | # Apollos put the system type in the environment. | ||
1241 | |||
1242 | test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } | ||
1243 | |||
1244 | # Convex versions that predate uname can use getsysinfo(1) | ||
1245 | |||
1246 | if [ -x /usr/convex/getsysinfo ] | ||
1247 | then | ||
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 | ||
1268 | fi | ||
1269 | |||
1270 | cat >&2 <<EOF | ||
1271 | $0: unable to guess system type | ||
1272 | |||
1273 | This script, last modified $timestamp, has failed to recognize | ||
1274 | the operating system you are using. It is advised that you | ||
1275 | download the most up to date version of the config scripts from | ||
1276 | |||
1277 | ftp://ftp.gnu.org/pub/gnu/config/ | ||
1278 | |||
1279 | If the version you run ($0) is already up to date, please | ||
1280 | send the following data and any information you think might be | ||
1281 | pertinent to <config-patches@gnu.org> in order to provide the needed | ||
1282 | information to handle your system. | ||
1283 | |||
1284 | config.guess timestamp = $timestamp | ||
1285 | |||
1286 | uname -m = `(uname -m) 2>/dev/null || echo unknown` | ||
1287 | uname -r = `(uname -r) 2>/dev/null || echo unknown` | ||
1288 | uname -s = `(uname -s) 2>/dev/null || echo unknown` | ||
1289 | uname -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 | |||
1294 | hostinfo = `(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 | |||
1301 | UNAME_MACHINE = ${UNAME_MACHINE} | ||
1302 | UNAME_RELEASE = ${UNAME_RELEASE} | ||
1303 | UNAME_SYSTEM = ${UNAME_SYSTEM} | ||
1304 | UNAME_VERSION = ${UNAME_VERSION} | ||
1305 | EOF | ||
1306 | |||
1307 | exit 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 | |||
6 | timestamp='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 | |||
54 | me=`echo "$0" | sed -e 's,.*/,,'` | ||
55 | |||
56 | usage="\ | ||
57 | Usage: $0 [OPTION] CPU-MFR-OPSYS | ||
58 | $0 [OPTION] ALIAS | ||
59 | |||
60 | Canonicalize a configuration name. | ||
61 | |||
62 | Operation 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 | |||
67 | Report bugs and patches to <config-patches@gnu.org>." | ||
68 | |||
69 | version="\ | ||
70 | GNU config.sub ($timestamp) | ||
71 | |||
72 | Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 | ||
73 | Free Software Foundation, Inc. | ||
74 | |||
75 | This is free software; see the source for copying conditions. There is NO | ||
76 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." | ||
77 | |||
78 | help=" | ||
79 | Try \`$me --help' for more information." | ||
80 | |||
81 | # Parse command line | ||
82 | while 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 | ||
106 | done | ||
107 | |||
108 | case $# 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;; | ||
114 | esac | ||
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. | ||
118 | maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` | ||
119 | case $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 | ;; | ||
130 | esac | ||
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. | ||
136 | case $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 | ;; | ||
220 | esac | ||
221 | |||
222 | # Decode aliases for certain CPU-COMPANY combinations. | ||
223 | case $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 | ;; | ||
1012 | esac | ||
1013 | |||
1014 | # Here we canonicalize certain aliases for manufacturers. | ||
1015 | case $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 | ;; | ||
1024 | esac | ||
1025 | |||
1026 | # Decode manufacturer-specific aliases for certain operating systems. | ||
1027 | |||
1028 | if [ x"$os" != x"" ] | ||
1029 | then | ||
1030 | case $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 | ;; | ||
1179 | esac | ||
1180 | else | ||
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 | |||
1192 | case $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 | ;; | ||
1331 | esac | ||
1332 | fi | ||
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. | ||
1336 | vendor=unknown | ||
1337 | case $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 | ;; | ||
1400 | esac | ||
1401 | |||
1402 | echo $basic_machine$os | ||
1403 | exit 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 @@ | |||
1 | dnl Required initializer | 1 | dnl Required initializer |
2 | AC_INIT(mod_log_sql, 1.101) | 2 | AC_INIT(mod_log_sql, 1.102) |
3 | OOO_CONFIG_NICE(config.nice) | 3 | OOO_CONFIG_NICE(config.nice) |
4 | AC_PREREQ(2.53) | 4 | AC_PREREQ(2.53) |
5 | AC_CONFIG_HEADERS(config.h) | 5 | AC_CONFIG_HEADERS(config.h) |
6 | |||
7 | AC_CONFIG_SRCDIR(mod_log_sql.c) | 6 | AC_CONFIG_SRCDIR(mod_log_sql.c) |
8 | 7 | ||
9 | OOO_MAINTAIN_MODE | 8 | OOO_MAINTAIN_MODE |
10 | 9 | ||
11 | dnl Add a test for a compiler. | 10 | dnl Add a test for a compiler. |
12 | AC_PROG_CC | 11 | AC_PROG_CC |
12 | AC_PROG_LIBTOOL | ||
13 | 13 | ||
14 | APACHE20_VERSION=2.0.40 | 14 | APACHE20_VERSION=2.0.40 |
15 | APACHE13_VERSION=1.3.20 | 15 | APACHE13_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 | ||
242 | static 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 | ||
250 | static const char *extract_unique_id(request_rec *r, char *a) | 250 | static 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 | ||
64 | static global_config_t global_config; | 67 | static global_config_t global_config; |
65 | 68 | ||
66 | /* structure to hold helper function info */ | 69 | /* structure to hold helper function info */ |
67 | typedef struct { | 70 | typedef 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 */ | ||
77 | static apr_array_header_t *logsql_function_list; | ||
78 | |||
79 | /* structure to hold sqlfield mappings */ | ||
80 | typedef 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 */ | ||
92 | static 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 | */ | ||
126 | LOGSQL_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); |
103 | static 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); |
108 | LOGSQL_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 | */ | ||
146 | LOGSQL_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 | */ | ||
172 | LOGSQL_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 | */ | ||
200 | LOGSQL_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 | |||
265 | static const char *set_server_string_slot(cmd_parms *cmd, | 375 | static 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 | ||
299 | static const char *set_logformat_slot(cmd_parms *cmd, | 409 | static 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 | ||
313 | static const char *set_server_nmv_string_slot(cmd_parms *parms, | 430 | static 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 | ||
524 | static 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 | |||
537 | static 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 | ||
634 | static 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) |
465 | static int log_sql_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) | 638 | static 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 | |||
467 | static void log_sql_module_init(server_rec *s, apr_pool_t *p) | 640 | static 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 */ | 964 | static 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 | { |
681 | if (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 | ||
717 | static void *log_sql_merge_state(apr_pool_t *p, void *basev, void *addv) | 1011 | static 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 | ||
29 | typedef const char *logsql_item_func(request_rec *r, char *a); | 31 | typedef const char *logsql_item_func(request_rec *r, char *a); |
30 | 32 | ||
31 | LOGSQL_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, | 34 | typedef 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 | |||
39 | LOGSQL_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 | |||
43 | LOGSQL_DECLARE(void) log_sql_register_alias(server_rec *s, apr_pool_t *p, | ||
44 | char key, const char *alias); | ||
45 | |||
46 | typedef 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 | |||
54 | LOGSQL_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 | |||
60 | LOGSQL_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 */ |
36 | typedef struct { | 63 | typedef 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 | |||
24 | module AP_MODULE_DECLARE_DATA log_sql_logio_module; | 26 | module 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 | ||
98 | static int logio_pre_conn(conn_rec *c, void *csd) { | 100 | static 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 | ||
109 | static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) | 111 | static 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 | |||
115 | static void register_hooks(apr_pool_t *p) { | 128 | static 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) | |||
52 | static const char *extract_ssl_maxkeysize(request_rec *r, char *a) | 52 | static 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 | ||
85 | LOGSQL_REGISTER(ssl) | 85 | LOGSQL_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 |