From d6e703cc9d76c0317941597bcc103ca277b71d52 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Thu, 25 Jun 2009 09:39:47 +0000 Subject: [PATCH] Mass commit of all the changes made between version 2.1 and 2.2.5. See ChangeLog for more details. --- CONTRIBUTORS | 1 + ChangeLog | 131 +- Makefile.in | 2 + README | 9 +- authfail.c | 38 +- cfgaux/compile | 99 + cfgaux/config.guess | 1370 ++++++++++--- cfgaux/config.rpath | 548 ++++++ cfgaux/config.sub | 938 ++++++++- cfgaux/depcomp | 411 ++++ cfgaux/install-sh | 3 +- cfgaux/ll.novo | 0 cfgaux/missing | 283 +++ cfgaux/mkinstalldirs | 40 + charset.c | 48 +- configure | 1710 ++++++++++++++--- configure.in | 19 +- css.c | 81 +- dansguardian_log.c | 24 +- dansguardian_report.c | 38 +- datafile.c | 25 +- denied.c | 39 +- download.c | 28 +- email.c | 16 +- exclude.c | 56 +- fonts/DejaVuSans.ttf | Bin 0 -> 479440 bytes fonts/FreeSans.ttf | Bin 264075 -> 264071 bytes fonts/README | 3 +- getconf.c | 108 +- grepday.c | 22 +- html.c | 29 +- include/conf.h | 14 +- include/info.h | 2 +- index.c | 132 +- languages/Bulgarian_windows1251 | 2 + languages/Catalan | 2 + languages/Czech | 2 + languages/Czech_UTF8 | 131 ++ languages/Dutch | 2 + languages/English | 4 +- languages/French | 34 +- languages/German | 2 + languages/Greek | 2 + languages/Hungarian | 2 + languages/Indonesian | 2 + languages/Italian | 2 + languages/Japanese | 2 + languages/Latvian | 2 + languages/Polish | 2 + languages/Portuguese | 4 +- languages/Romanian | 2 + languages/Russian_UTF-8 | 2 + languages/Russian_koi8 | 42 +- languages/Russian_windows1251 | 42 +- languages/Serbian | 2 + languages/Slovak | 2 + languages/Spanish | 2 + languages/Turkish | 2 + languages/Ukrainian_windows1251 | 2 + log.c | 288 ++- realtime.c | 67 +- repday.c | 51 +- report.c | 153 +- sarg-php/LANGUAGES | 6 +- sarg-php/language.php | 8 +- sarg-php/locale/en_EN/LC_MESSAGES/messages.mo | Bin 0 -> 373 bytes sarg-php/locale/en_EN/LC_MESSAGES/messages.po | 49 + sarg-php/locale/fr/LC_MESSAGES/messages.mo | Bin 0 -> 821 bytes sarg-php/locale/fr/LC_MESSAGES/messages.po | 43 + sarg-php/locale/pt_BR/LC_MESSAGES/messages.mo | Bin 0 -> 850 bytes sarg-php/locale/pt_BR/LC_MESSAGES/messages.po | 49 + sarg-php/locale/ru/LC_MESSAGES/messages.mo | Bin 0 -> 812 bytes sarg-php/locale/ru/LC_MESSAGES/messages.po | 49 + sarg-php/sarg-block-it.php | 4 +- sarg-php/sarg-squidguard-block.php | 6 +- sarg-php/sarg-squidguard-block2.php | 4 +- sarg-php/style.php | 4 +- sarg-php/translate.this | 4 +- sarg.conf | 25 +- siteuser.c | 85 +- smartfilter.c | 62 +- sort.c | 5 + squidguard_log.c | 82 +- squidguard_report.c | 36 +- topsites.c | 72 +- topuser.c | 187 +- totday.c | 4 +- totger.c | 26 +- usage.c | 2 +- useragent.c | 87 +- util.c | 278 +-- 91 files changed, 6398 insertions(+), 1900 deletions(-) create mode 100755 cfgaux/compile create mode 100755 cfgaux/config.rpath create mode 100755 cfgaux/depcomp delete mode 100755 cfgaux/ll.novo create mode 100755 cfgaux/missing create mode 100755 cfgaux/mkinstalldirs create mode 100644 fonts/DejaVuSans.ttf create mode 100644 languages/Czech_UTF8 create mode 100755 sarg-php/locale/en_EN/LC_MESSAGES/messages.mo create mode 100755 sarg-php/locale/en_EN/LC_MESSAGES/messages.po create mode 100755 sarg-php/locale/fr/LC_MESSAGES/messages.mo create mode 100755 sarg-php/locale/fr/LC_MESSAGES/messages.po create mode 100755 sarg-php/locale/pt_BR/LC_MESSAGES/messages.mo create mode 100755 sarg-php/locale/pt_BR/LC_MESSAGES/messages.po create mode 100755 sarg-php/locale/ru/LC_MESSAGES/messages.mo create mode 100755 sarg-php/locale/ru/LC_MESSAGES/messages.po diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 225739a..3fae467 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -49,3 +49,4 @@ Andreu Sanchez Joe Cooper Guilherme Veloso Neves Oliveira Filippo Grassilli +l4teral@gmail.com diff --git a/ChangeLog b/ChangeLog index 4107633..8b075df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,134 @@ SARG ChangeLog +Mar-03-2008 Version 2.2.5 + - new fix to the script insertion vulnerability via user-agent + report. javascript can still be executed via e.g. the "" scheme + Thanks to Alin Rad Pop, Security Specialist, Secunia, Denmark + +Mar-02-2008 version 2.2.4 + - security issues can be exploited to execute arbitrary code when sarg + is used with malicious input files. + The vulnerability within the processing of the useragent.log is rather + critical, as this can be exploited by passing a long user agent string + when browsing via a squid proxy. the manipulated GET request in the + access log would not be accepted by squid, so that file has to be specially crafted. + Thank you to L4teral l4teral@gmail.com + + - French language fixed. + Thanks to Nicod + - Fixed: Segfault in x86_64 + +Jan-02-2007 version 2.2.3.1 + - fixed -m option to show all the used tags + - date period invalid in download reports + - wrong results when userid contain '%20' character + - previous reports info wrong in index.html + +Dez/23/2006 Version 2.2.3 + - gd graph font change from FreeSans.ttf to DejaVuSans.ttf + - minor fixes when only denied records in access.log file. + - ulimit tag changed. If you run sarg with a low privilege user, + set to 'none' to disable ulimit. + Thanks to Jorge Morgado + - Russian_UTF-8 language fixed by Igor Ageikin + - realtime_unauthenticated_records tag changed to show by default. + - chmod 755 in sarg-php due to errors in rpmbuild. + Thanks to Davide Madrisan + - when the keyword "anonymous" is used in squidGuard.conf, Sarg does + not find the log-files anymore. + Thanks to Daniel Vogel + - after reading the squidGuard configuration, the data read from the + usertab file was corrupted. + Thanks to Daniel Vogel + - milisec values showed as bytes. Thanks to Carlos + - with squidGuard, you can log groups in only one log file. + We must parse each log files only one time. + Thanks to Christophe BADINA + - error message(removetmp) Cannot open /tmp/sarg_tmp/../general + when sending report by email. Thanks to Peter Volkov + - incorrect off_t size in printf. In FreeBSD off_t is 64bit long long, + but sarg always use %d to display off_t in log processing. This cause garbage + while reading log files on a freebsd, and possible crash. + Thanks to Alex Samorukov + - squid24 on/off tag added in sarg.conf to implement compatibility if using + squid <= 2.4 and using squid common logs. + Thanks to Valter Dal Bo + - exclude_hosts and some code errors fixed by + Alexander Kozlov . Many thanks. + - temporary file names changed to sarg-... to avoid conflicts + with usernames. Thanks to Ukrainian Elephant + - SARG support Japanese wordset but not support charset. + submited by anonymous at sourceforge.net Many thanks. + - support for utf-8 character set added by Peter Warasin + . Many thanks. + - if all the data is at the hour each day, totaliza_day() treates it all as being + on the last day. This is observed for users which only download via a cron job + at the same time each day. Now the date and time will be + checked to see if changed. + Thanks to Ian Dall + - greport_day() doesn't add the volume for the first hour of each day to the total. + Thanks to Ian Dall + - Russian_koi8 and Russian_windows1251 languages updated by + Stas Degteff . Many thanks + - realtime reporting is sorted by URL, and not by Date/Time. + Thanks tp Puce-Xcit + +Aug/29/2006 Version 2.2.2 + - malloc test implemented to avoid high-memory consuming. + Thanks to Rodrigo Rubira Branco + - Czech UTF8 language added by Josef Karliak + - fixed: parsed mismatch in realtime_access_log_lines and + access_log_lines tags. + Thanks to Kuznetsov Andrey + - changed: realtime report sort changed by date/time + Thanks to Leonardo Buonsanti + - GD minor fixes added. + - bug fixed. *** buffer overflow detected ***: sarg terminated + in Fedora Core 5 when using -D FORTIFY_SOURCE in gcc or in kernel. + +May/19/2006 Version 2.2.1 + - iconv problems fixed in Freebsd and Slackware. + Thanks to Grigory Trenin . + - new word added to languages: Topuser + - missing fclose fp-in in css.c + Thanks to Renato Botelho . + - index.c fixed. Missing -r in reverse sort. + Thanks to Fernando Lemes da Silva + - wrong values in columns in-cache and out-cache. + Thanks to Hugo P S Costa + +May/17/2006 Version 2.2 + - sarg ported to 64 bits. + Thanks to Antonio F. Zago + to share your Fedora Core 5 64 bits with me. + - fixed conflict types for 'saverecs2' in .configure + - fixed no index.html when lastlog tag is greather then 0, + caused by some debug messages. + - removed some development debug message + - user_limit_block script added to block users when limit exceeded + - fixed wrong sort in index.html + - removed '+' argument to sort utility. + Thanks to Julio Cesar Covolato + - fixed "file too long" messages when using long_url + Thanks to Fabio Lo Votrico + - fixes and improvements from Oleg - Tanks. + . fprintf faster than sprintf+fputs (fixed in some places); + . strcpy+strcat is faster than sprintf (fixed in some places); + . unused variables removed; + . fixed headers look and feel (); + . fixed word 'BYTES' localisation for datetime user report; + . fixed corrupted top header on index, denied, download and tt-reports; + . fixed "No" table header in topsites; + . fixed user report table look; + . fixed floating point exception on long url (added checks + for division by zero); + . fixed incorrect long url view; + . fixed too wide table entries in user report by adding url_limit + internal parameter in html.c (default 40); + . fixed charset.c file (was in MS-DOS text format); + . also included all previous fixes by other people (from + datafile.patch and lastlog.patch files). + Nov/29/2005 version 2.1 - index_tree tag added. Look at TAG: index_tree in sarg.conf file @@ -33,7 +162,7 @@ Nov/29/2005 version 2.1 in url when using datafile tag. Thanks to Calvin Muller - wronk link point in Generated by sarg-2.. Thanks to Markus Hoffmann - - Russian_UFT-8 language added by Alex Deiter + - Russian_UTF-8 language added by Alex Deiter Aug/04/2005 version 2.0.9 - dansguardian_report_limit missing in sarg.conf file. diff --git a/Makefile.in b/Makefile.in index 7ddebcb..711bcfd 100644 --- a/Makefile.in +++ b/Makefile.in @@ -9,6 +9,7 @@ HTMLDIR = @HTMLDIR@ ISYSCONFDIR = -DSYSCONFDIR=\"@SYSCONFDIR@\" IHTMLDIR = -DHTMLDIR=\"@HTMLDIR@\" CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ DEFS = @DEFS@ LIBS = @LIBS@ @@ -76,6 +77,7 @@ install: all fi cp -r ./languages $(SYSCONFDIR); cp ./exclude_codes $(SYSCONFDIR); + cp ./user_limit_block $(SYSCONFDIR); cp -r ./images $(SYSCONFDIR); cp -r ./sarg-php $(SYSCONFDIR); cp -r ./fonts $(SYSCONFDIR); diff --git a/README b/README index b1d9e0f..2688d30 100644 --- a/README +++ b/README @@ -32,13 +32,14 @@ Antonis Maglaras - Greek language Dusan Woletz - Slovak Language Jose Luis Hernandez - Spanish language fix Theo kastermans - Dutch language fix -Alex Deiter - Russian UFT-8 language added - +Alex Deiter - Russian UTF-8 language +Josef Karliak - Czech UTF-8 +Igor Ageikin - Russian UTF-8 fix Translating . Copy include/English to YourLanguage . Translate YourLanguage - . Send YourLanguage to orso@penguintech.com.br to be implemented. + . Send YourLanguage to pedro.orso@gmail.com to be implemented. If you use native squid log format, the elapsed time will be in reports (emulate_httpd_log off). @@ -75,4 +76,4 @@ Usage: sarg -h Source: http://www.sarg-squid.org -Any suggests and/or comments, please: orso@penguintech.com.br +Any suggests and/or comments, please: pedro.orso@gmail.com diff --git a/authfail.c b/authfail.c index 0950520..469f7eb 100644 --- a/authfail.c +++ b/authfail.c @@ -31,12 +31,11 @@ void authfail_report() FILE *fp_in = NULL, *fp_ou = NULL; char url[MAXLEN]; - char html[MAXLEN]; char html2[MAXLEN]; char authfail_in[MAXLEN]; char per[MAXLEN]; char report[MAXLEN]; - char periodo[100]; + char period[100]; char ip[MAXLEN]; char oip[MAXLEN]; char user[MAXLEN]; @@ -44,7 +43,6 @@ void authfail_report() char ouser2[MAXLEN]; char data[15]; char hora[15]; - char ftime[128]; char *str; int z=0; int count=0; @@ -61,7 +59,7 @@ void authfail_report() } sprintf(authfail_in,"%s/authfail.log",TempDir); - sprintf(per,"%s/periodo",dirname); + sprintf(per,"%s/sarg-period",dirname); sprintf(report,"%s/authfail.html",dirname); sprintf(csort,"sort -b -T %s -k 3,3 -k 5,5 -o '%s' '%s'", TempDir, authfail_in, tmp4); @@ -73,7 +71,7 @@ void authfail_report() exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); if((fp_in=fopen(authfail_in,"r"))==NULL) { @@ -86,30 +84,12 @@ void authfail_report() exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(url,"\n",FontFace); - fputs(url,fp_ou); - } - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); @@ -119,9 +99,9 @@ void authfail_report() sprintf(url,"%s\n",Title); fputs(url,fp_ou); - sprintf(url,"%s: %s\n",text[89],periodo); + sprintf(url,"%s: %s\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"%s %s\n",text[117],text[55]); + sprintf(url,"%s\n",text[117]); fputs(url,fp_ou); fputs("
\n",fp_ou); diff --git a/cfgaux/compile b/cfgaux/compile new file mode 100755 index 0000000..9bb997a --- /dev/null +++ b/cfgaux/compile @@ -0,0 +1,99 @@ +#! /bin/sh + +# Wrapper for compilers which do not understand `-c -o'. + +# Copyright 1999, 2000 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Usage: +# compile PROGRAM [ARGS]... +# `-o FOO.o' is removed from the args passed to the actual compile. + +prog=$1 +shift + +ofile= +cfile= +args= +while test $# -gt 0; do + case "$1" in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we do something ugly here. + ofile=$2 + shift + case "$ofile" in + *.o | *.obj) + ;; + *) + args="$args -o $ofile" + ofile= + ;; + esac + ;; + *.c) + cfile=$1 + args="$args $1" + ;; + *) + args="$args $1" + ;; + esac + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$prog" $args +fi + +# Name of file we expect compiler to create. +cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir $lockdir > /dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir $lockdir; exit 1" 1 2 15 + +# Run the compile. +"$prog" $args +status=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +fi + +rmdir $lockdir +exit $status diff --git a/cfgaux/config.guess b/cfgaux/config.guess index b0f5dca..f32079a 100755 --- a/cfgaux/config.guess +++ b/cfgaux/config.guess @@ -1,7 +1,11 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. -# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-01-23' + # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or @@ -14,88 +18,327 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. -# Written by Per Bothner . -# The master version of this file is at the FSF in /home/gd/gnu/lib. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you -# don't specify an explicit system type (host/target name). -# -# Only a few systems have been added to this list; please add others -# (but try to keep the structure clean). -# +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 8/24/94.) +# (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 - # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` - exit 0 ;; + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 - exit 0 ;; + exit ;; Amiga*:UNIX_System_V:4.0:*) - echo m68k-cbm-sysv4 - exit 0;; - amiga:NetBSD:*:*) - echo m68k-cbm-netbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-cbm-openbsd${UNAME_RELEASE} - exit 0 ;; + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi - exit 0 ;; - NILE:*:*:dcosx) + exit ;; + NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 - exit 0 ;; + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) @@ -104,46 +347,78 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; + exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - atari*:NetBSD:*:*) - echo m68k-atari-netbsd${UNAME_RELEASE} - exit 0 ;; - atari*:OpenBSD:*:*) - echo m68k-atari-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3*:NetBSD:*:*) - echo m68k-sun-netbsd${UNAME_RELEASE} - exit 0 ;; - sun3*:OpenBSD:*:*) - echo m68k-sun-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:NetBSD:*:*) - echo m68k-apple-netbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-apple-openbsd${UNAME_RELEASE} - exit 0 ;; + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; + exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 - exit 0 ;; + exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >dummy.c - int main (argc, argv) int argc; char **argv; { + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); @@ -158,62 +433,83 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit (-1); } EOF - ${CC-cc} dummy.c -o dummy \ - && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix - exit 0 ;; + exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 - exit 0 ;; + exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 - exit 0 ;; + exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ - -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then echo m88k-dg-dgux${UNAME_RELEASE} - else + else echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi - else echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 - exit 0 ;; + exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 - exit 0 ;; + exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 - exit 0 ;; + exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd - exit 0 ;; + exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; + exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i?86:AIX:*:*) + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) echo i386-ibm-aix - exit 0 ;; + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >dummy.c + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #include main() @@ -224,17 +520,21 @@ EOF exit(0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - echo rs6000-ibm-aix3.2.5 + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi - exit 0 ;; - *:AIX:*:4) - if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -242,43 +542,120 @@ EOF if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=4.${UNAME_RELEASE} + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; + exit ;; *:AIX:*:*) echo rs6000-ibm-aix - exit 0 ;; + exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 + exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx - exit 0 ;; + exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 - exit 0 ;; + exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd - exit 0 ;; + exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[3478]??:HP-UX:*:*) + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; - 9000/8?? ) HP_ARCH=hppa1.0 ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; esac - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >dummy.c + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c #include int main () @@ -303,224 +680,491 @@ EOF exit (0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 - exit 0 ;; + exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd - exit 0 ;; + exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd - exit 0 ;; + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf - exit 0 ;; + exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf - exit 0 ;; - i?86:OSF1:*:*) + exit ;; + i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi - exit 0 ;; + exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites - exit 0 ;; + exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit 0 ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit 0 ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit 0 ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit 0 ;; - CRAY*X-MP:*:*:*) - echo xmp-cray-unicos - exit 0 ;; + exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} - exit 0 ;; + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ - exit 0 ;; + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} - exit 0 ;; - CRAY-2:*:*:*) - echo cray2-cray-unicos - exit 0 ;; - F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - F301:UNIX_System_V:*:*) - echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` - exit 0 ;; - hp3[0-9][05]:NetBSD:*:*) - echo m68k-hp-netbsd${UNAME_RELEASE} - exit 0 ;; - hp3[0-9][05]:OpenBSD:*:*) - echo m68k-hp-openbsd${UNAME_RELEASE} - exit 0 ;; - i?86:BSD/386:*:* | *:BSD/OS:*:*) + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:NetBSD:*:*) - echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - exit 0 ;; + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; i*:CYGWIN*:*) - echo i386-pc-cygwin32 - exit 0 ;; + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin32 - exit 0 ;; + echo powerpcle-unknown-cygwin + exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; + exit ;; *:GNU:*:*) - echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` - if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then - echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then - echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then - echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then - echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then - echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 - elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then - echo "powerpc-unknown-linux-gnu" ; exit 0 - elif test "${UNAME_MACHINE}" = "alpha" ; then - echo alpha-unknown-linux-gnu ; exit 0 - elif test "${UNAME_MACHINE}" = "sparc" ; then - echo sparc-unknown-linux-gnu ; exit 0 + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu else - # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us - # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout. - test ! -d /usr/lib/ldscripts/. \ - && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 - # Determine whether the default compiler is a.out or elf - cat >dummy.c <$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif EOF - ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy - fi ;; -# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions -# are messed up and put the nodename in both sysname and nodename. - i?86:DYNIX/ptx:4*:*) + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. echo i386-sequent-sysv4 - exit 0 ;; - i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi - exit 0 ;; - i?86:*:3.2:*) + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` - (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi - exit 0 ;; + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 - exit 0 ;; + exit ;; paragon:*:*:*) echo i860-intel-osf1 - exit 0 ;; + exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi - exit 0 ;; + exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv - exit 0 ;; - M68*:*:R3V[567]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:*) + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 - exit 0 ;; - i?86:LynxOS:2.*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + exit ;; + rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 - exit 0 ;; + exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` @@ -528,39 +1172,165 @@ EOF else echo ns32k-sni-sysv fi - exit 0 ;; + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 - exit 0 ;; + exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 - exit 0 ;; + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi - exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - news*:NEWS-OS:[56].*:*) - echo mips-sony-newsos${UNAME_RELEASE} - exit 0 ;; + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -cat >dummy.c <$dummy.c < # include @@ -585,7 +1355,7 @@ main () #endif #if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); + printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) @@ -598,7 +1368,10 @@ main () #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif @@ -643,11 +1416,24 @@ main () #endif #if defined (vax) -#if !defined (ultrix) - printf ("vax-dec-bsd\n"); exit (0); -#else - printf ("vax-dec-ultrix\n"); exit (0); -#endif +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif #endif #if defined (alliant) && defined (i860) @@ -658,12 +1444,12 @@ main () } EOF -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) @@ -672,25 +1458,69 @@ then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd - exit 0 ;; + exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit 0 ;; + exit ;; c34*) echo c34-convex-bsd - exit 0 ;; + exit ;; c38*) echo c38-convex-bsd - exit 0 ;; + exit ;; c4*) echo c4-convex-bsd - exit 0 ;; + exit ;; esac fi -#echo '(Unable to guess system type)' 1>&2 +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/cfgaux/config.rpath b/cfgaux/config.rpath new file mode 100755 index 0000000..4db13e5 --- /dev/null +++ b/cfgaux/config.rpath @@ -0,0 +1,548 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2003 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $CC in + icc|ecc) + wl='-Wl,' + ;; + ccc) + wl='-Wl,' + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = yes; then + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi4*) + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + hardcode_direct=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10* | hpux11*) + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + sco3.2v5*) + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4.2uw2*) + hardcode_direct=yes + hardcode_minus_L=no + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + ;; + sysv5*) + hardcode_libdir_flag_spec= + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi4*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + freebsd*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case "$host_cpu" in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux*) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + sco3.2v5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + ;; + sysv4*MP*) + ;; + uts4*) + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. @@ -45,30 +54,75 @@ # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -if [ x$1 = x ] -then - echo Configuration name missing. 1>&2 - echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 - echo "or $0 ALIAS" 1>&2 - echo where ALIAS is a recognized configuration type. 1>&2 - exit 1 -fi +me=`echo "$0" | sed -e 's,.*/,,'` -# First pass through any local machine types. -case $1 in - *local*) - echo $1 - exit 0 - ;; - *) - ;; +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - linux-gnu*) + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -94,15 +148,37 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple) + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco5) - os=sco3.2v5 + os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) @@ -117,10 +193,17 @@ case $os in # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -143,25 +226,84 @@ case $os in -psos*) os=-psos ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \ - | arme[lb] | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ - | alpha | we32k | ns16k | clipper | i370 | sh \ - | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \ - | pdp11 | mips64el | mips64orion | mips64orionel \ - | sparc | sparclet | sparclite | sparc64) + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. - i[3456]86) + i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. @@ -170,23 +312,94 @@ case $basic_machine in exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ - | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \ - | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* | f301-* | iE86-*) + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; alliant | fx80) basic_machine=fx80-alliant ;; @@ -197,25 +410,35 @@ case $basic_machine in basic_machine=a29k-none os=-bsd ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) - basic_machine=m68k-cbm + basic_machine=m68k-unknown ;; - amigados) - basic_machine=m68k-cbm - os=-amigados + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos ;; amigaunix | amix) - basic_machine=m68k-cbm + basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; aux) basic_machine=m68k-apple os=-aux @@ -224,6 +447,18 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -244,27 +479,45 @@ case $basic_machine in basic_machine=c38-convex os=-bsd ;; - cray | ymp) - basic_machine=ymp-cray + cray | j90) + basic_machine=j90-cray os=-unicos ;; - cray2) - basic_machine=cray2-cray - os=-unicos + craynv) + basic_machine=craynv-cray + os=-unicosmp ;; - [ctj]90-cray) - basic_machine=c90-cray - os=-unicos + cr16) + basic_machine=cr16-unknown + os=-elf ;; crds | unos) basic_machine=m68k-crds ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola @@ -273,6 +526,10 @@ case $basic_machine in basic_machine=m88k-motorola os=-sysv3 ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx @@ -292,6 +549,10 @@ case $basic_machine in encore | umax | mmax) basic_machine=ns32k-encore ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; fx2800) basic_machine=i860-alliant ;; @@ -302,6 +563,10 @@ case $basic_machine in basic_machine=tron-gmicro os=-sysv ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -310,6 +575,14 @@ case $basic_machine in basic_machine=h8300-hitachi os=-hms ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; harris) basic_machine=m88k-harris os=-sysv3 @@ -325,13 +598,30 @@ case $basic_machine in basic_machine=m68k-hp os=-hpux ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) @@ -340,27 +630,42 @@ case $basic_machine in hppa-next) os=-nextstep3 ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; i370-ibm* | ibm*) basic_machine=i370-ibm - os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[3456]86v32) + i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[3456]86v4*) + i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[3456]86v) + i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[3456]86sol2) + i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -375,12 +680,17 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; - mab-next) - os=-nextstep3 - ;; magnum | m3230) basic_machine=mips-mips os=-sysv @@ -389,19 +699,58 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; miniframe) basic_machine=m68000-convergent ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos @@ -414,6 +763,10 @@ case $basic_machine in basic_machine=mips-sony os=-newsos ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; next | m*-next ) basic_machine=m68k-next case $os in @@ -439,9 +792,39 @@ case $basic_machine in basic_machine=i960-intel os=-nindy ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; np1) basic_machine=np1-gould ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -450,59 +833,123 @@ case $basic_machine in basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5) - basic_machine=i586-intel + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro | p6) - basic_machine=i686-intel + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc ;; - pentium-* | p5-*) + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-*) + pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - k5) - # We don't have specific support for AMD's K5 yet, so just call it a Pentium - basic_machine=i586-amd + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - nexen) - # We don't have specific support for Nexgen yet, so just call it a Pentium - basic_machine=i586-nexgen + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; - power) basic_machine=rs6000-ibm + power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown - ;; + ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown - ;; + ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; ps2) basic_machine=i386-ibm ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; sequent) basic_machine=i386-sequent ;; @@ -510,6 +957,16 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; sps7) basic_machine=m68k-bull os=-sysv2 @@ -517,6 +974,13 @@ case $basic_machine in spur) basic_machine=spur-unknown ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; sun2) basic_machine=m68000-sun ;; @@ -557,13 +1021,55 @@ case $basic_machine in sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; symmetry) basic_machine=i386-sequent os=-dynix ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; tower | tower-32) basic_machine=m68k-ncr ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; udi29k) basic_machine=a29k-amd os=-udi @@ -572,6 +1078,10 @@ case $basic_machine in basic_machine=a29k-nyu os=-sym1 ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; vaxv) basic_machine=vax-dec os=-sysv @@ -580,9 +1090,9 @@ case $basic_machine in basic_machine=vax-dec os=-vms ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; vxworks960) basic_machine=i960-wrs os=-vxworks @@ -595,13 +1105,29 @@ case $basic_machine in basic_machine=a29k-wrs os=-vxworks ;; - xmp) - basic_machine=xmp-cray - os=-unicos + w65*) + basic_machine=w65-wdc + os=-none ;; - xps | xps100) + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) basic_machine=xps100-honeywell ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -609,28 +1135,44 @@ case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. - mips) - basic_machine=mips-mips + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; + mmix) + basic_machine=mmix-knuth + ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; - sparc) + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -639,6 +1181,15 @@ case $basic_machine in orion105) basic_machine=clipper-highlevel ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -671,9 +1222,12 @@ case $os in -solaris) os=-solaris2 ;; - -unixware* | svr4*) + -svr4*) os=-sysv4 ;; + -unixware*) + os=-sysv4.2uw + ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; @@ -684,17 +1238,53 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -linux-gnu* | -uxpv*) + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; @@ -704,6 +1294,15 @@ case $os in -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; -osfrose*) os=-osfrose ;; @@ -719,11 +1318,26 @@ case $os in -acis*) os=-aos ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; -ctix* | -uts*) os=-sysv ;; + -nova*) + os=-rtmk-nova + ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 + ;; + -nsk*) + os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) @@ -732,6 +1346,9 @@ case $os in -sinix*) os=-sysv4 ;; + -tpf*) + os=-tpf + ;; -triton*) os=-sysv3 ;; @@ -750,9 +1367,27 @@ case $os in # This must come after -sysvr4. -sysv*) ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; -xenix) os=-xenix ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; -none) ;; *) @@ -775,13 +1410,29 @@ else # system, and we'll never get to this point. case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; *-acorn) os=-riscix1.2 ;; + arm*-rebel) + os=-linux + ;; arm*-semi) os=-aout ;; - pdp11-*) + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) os=-none ;; *-dec | vax-*) @@ -799,15 +1450,48 @@ case $basic_machine in # default. # os=-sunos4 ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; *-ibm) os=-aix ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; *-hp) os=-hpux ;; @@ -818,7 +1502,7 @@ case $basic_machine in os=-sysv ;; *-cbm) - os=-amigados + os=-amigaos ;; *-dg) os=-dgux @@ -850,27 +1534,39 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; - f301-fujitsu) + f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; *) os=-none ;; @@ -892,9 +1588,15 @@ case $basic_machine in -aix*) vendor=ibm ;; + -beos*) + vendor=be + ;; -hpux*) vendor=hp ;; + -mpeix*) + vendor=hp + ;; -hiux*) vendor=hitachi ;; @@ -910,21 +1612,47 @@ case $basic_machine in -genix*) vendor=ns ;; - -mvs*) + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; - -vxsim* | -vxworks*) + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/cfgaux/depcomp b/cfgaux/depcomp new file mode 100755 index 0000000..6589965 --- /dev/null +++ b/cfgaux/depcomp @@ -0,0 +1,411 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. This file always lives in the current directory. + # Also, the AIX compiler puts `$object:' at the start of each line; + # $object doesn't have directory information. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 AIX compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + + tmpdepfile1="$object.d" + tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` + if test "$libtool" = yes; then + "$@" -Wc,-MD + else + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + test -z "$dashmflag" && dashmflag=-M + ( IFS=" " + case " $* " in + *" --mode=compile "*) # this is libtool, let us make it quiet + for arg + do # cycle over the arguments + case "$arg" in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + # X makedepend + ( + shift + cleared=no + for arg in "$@"; do + case $cleared in no) + set ""; shift + cleared=yes + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift;; + -*) + ;; + *) + set fnord "$@" "$arg"; shift;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tail +3 "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/cfgaux/install-sh b/cfgaux/install-sh index ebc6691..e9de238 100755 --- a/cfgaux/install-sh +++ b/cfgaux/install-sh @@ -1,4 +1,4 @@ -#! /bin/sh +#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). @@ -118,6 +118,7 @@ if [ x"$dir_arg" != x ]; then if [ -d $dst ]; then instcmd=: + chmodcmd="" else instcmd=mkdir fi diff --git a/cfgaux/ll.novo b/cfgaux/ll.novo deleted file mode 100755 index e69de29..0000000 diff --git a/cfgaux/missing b/cfgaux/missing new file mode 100755 index 0000000..0a7fb5a --- /dev/null +++ b/cfgaux/missing @@ -0,0 +1,283 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing 0.3 - GNU automake" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then + # We have makeinfo, but it failed. + exit 1 + fi + + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + fi + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar ${1+"$@"} && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar ${1+"$@"} && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" ${1+"$@"} && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" ${1+"$@"} && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/cfgaux/mkinstalldirs b/cfgaux/mkinstalldirs new file mode 100755 index 0000000..4a06bf3 --- /dev/null +++ b/cfgaux/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.1 2009-06-25 09:39:47 fmarchal Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/charset.c b/charset.c index 8d1f6cd..d5d94ee 100644 --- a/charset.c +++ b/charset.c @@ -27,40 +27,18 @@ void ccharset() { - - if(strcmp(CharSet,"Latin2") == 0) - strcpy(CharSet,"ISO-8859-2"); - - if(strcmp(CharSet,"Latin3") == 0) - strcpy(CharSet,"ISO-8859-3"); - - if(strcmp(CharSet,"Latin4") == 0) - strcpy(CharSet,"ISO-8859-4"); - - if(strcmp(CharSet,"Cyrillic") == 0) - strcpy(CharSet,"ISO-8859-5"); - - if(strcmp(CharSet,"Arabic") == 0) - strcpy(CharSet,"ISO-8859-6"); - - if(strcmp(CharSet,"Greek") == 0) - strcpy(CharSet,"ISO-8859-7"); - - if(strcmp(CharSet,"Hebrew") == 0) - strcpy(CharSet,"ISO-8859-8"); - - if(strcmp(CharSet,"Latin5") == 0) - strcpy(CharSet,"ISO-8859-9"); - - if(strcmp(CharSet,"Latin6") == 0) - strcpy(CharSet,"ISO-8859-10"); - - if(strcmp(CharSet,"Windows-1251") == 0) - strcpy(CharSet,"Windows-1251"); - - if(strcmp(CharSet,"Koi8-r") == 0) - strcpy(CharSet,"KOI8-R"); - + if(strcmp(CharSet,"Latin2") == 0) strcpy(CharSet,"ISO-8859-2"); + else if(strcmp(CharSet,"Latin3") == 0) strcpy(CharSet,"ISO-8859-3"); + else if(strcmp(CharSet,"Latin4") == 0) strcpy(CharSet,"ISO-8859-4"); + else if(strcmp(CharSet,"Cyrillic") == 0) strcpy(CharSet,"ISO-8859-5"); + else if(strcmp(CharSet,"Arabic") == 0) strcpy(CharSet,"ISO-8859-6"); + else if(strcmp(CharSet,"Greek") == 0) strcpy(CharSet,"ISO-8859-7"); + else if(strcmp(CharSet,"Hebrew") == 0) strcpy(CharSet,"ISO-8859-8"); + else if(strcmp(CharSet,"Latin5") == 0) strcpy(CharSet,"ISO-8859-9"); + else if(strcmp(CharSet,"Latin6") == 0) strcpy(CharSet,"ISO-8859-10"); + else if(strcmp(CharSet,"Windows-1251") == 0) strcpy(CharSet,"Windows-1251"); + else if(strcmp(CharSet,"Japan") == 0) strcpy(CharSet,"EUC-JP"); + else if(strcmp(CharSet,"Koi8-r") == 0) strcpy(CharSet,"KOI8-R"); + else if(strcmp(CharSet,"UTF-8") == 0) strcpy(CharSet,"UTF-8"); return; - } diff --git a/configure b/configure index 5b213d6..cb1d227 100755 --- a/configure +++ b/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP BINDIR MANDIR SYSCONFDIR HTMLDIR LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP LIBICONV LTLIBICONV BINDIR MANDIR SYSCONFDIR HTMLDIR LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -844,6 +844,7 @@ if test -n "$ac_init_help"; then Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-rpath do not hardcode runtime library paths --enable-bindir=bindir Select bindir --enable-mandir=mandir @@ -857,6 +858,9 @@ Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-gcc use CC to compile + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir Some influential environment variables: CC C compiler command @@ -3095,6 +3099,798 @@ _ACEOF fi + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${acl_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + echo "$as_me:$LINENO: result: $LD" >&5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${acl_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6 +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + echo "$as_me:$LINENO: checking for shared library run path origin" >&5 +echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6 +if test "${acl_cv_rpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 +echo "${ECHO_T}$acl_cv_rpath" >&6 + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath or --disable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval="$enable_rpath" + : +else + enable_rpath=yes +fi; + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" + + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi; + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + echo "$as_me:$LINENO: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBICONV" >&5 +echo "${ECHO_T}$LIBICONV" >&6 + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + echo "$as_me:$LINENO: checking for iconv declaration" >&5 +echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6 + if test "${am_cv_proto_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_proto_iconv_arg1="" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_proto_iconv_arg1="const" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + echo "$as_me:$LINENO: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +echo "${ECHO_T}${ac_t:- + }$am_cv_proto_iconv" >&6 + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + +if test -n "$LIBICONV" ; then + LIBS="$LIBS $LIBICONV" +fi + # On IRIX 5.3, sys/types and inttypes.h are conflicting. @@ -3105,13 +3901,320 @@ fi -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + + + + + + + + + + + + + + + + +for ac_header in stdio.h stdlib.h string.h strings.h sys/time.h time.h unistd.h sys/dirent.h \ + dirent.h sys/socket.h netdb.h arpa/inet.h sys/types.h netinet/in.h sys/stat.h \ + ctype.h gd.h gdfontl.h gdfontt.h gdfonts.h gdfontmb.h gdfontg.h iconv.h \ + errno.h sys/resource.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the AC_PACKAGE_NAME lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +echo "$as_me:$LINENO: checking for gdImagePng in -lgd" >&5 +echo $ECHO_N "checking for gdImagePng in -lgd... $ECHO_C" >&6 +if test "${ac_cv_lib_gd_gdImagePng+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgd $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gdImagePng (); +int +main () +{ +gdImagePng (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_gd_gdImagePng=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_gd_gdImagePng=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_gd_gdImagePng" >&5 +echo "${ECHO_T}$ac_cv_lib_gd_gdImagePng" >&6 +if test $ac_cv_lib_gd_gdImagePng = yes; then + LIBS="-lgd ${LIBS}"; HAVE_GD="yes" +else + HAVE_GD="" +fi + + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF @@ -3120,9 +4223,60 @@ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -3146,52 +4300,46 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" + ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -eval "$as_ac_Header=no" +ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const _ACEOF fi -done - -for ac_header in stdio.h stdlib.h string.h strings.h sys/time.h time.h unistd.h sys/dirent.h \ - dirent.h sys/socket.h netdb.h arpa/inet.h sys/types.h netinet/in.h sys/stat.h \ - ctype.h gd.h gdfontl.h gdfontt.h gdfonts.h gdfontmb.h gdfontg.h errno.h \ - sys/resource.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then +echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 +if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> +#include +#include + +int +main () +{ +struct tm *tp; tp->tm_sec; + ; + return 0; +} _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 @@ -3215,142 +4363,156 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_header_compiler=yes + ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_header_compiler=no +ac_cv_struct_tm=sys/time.h fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6 +if test $ac_cv_struct_tm = sys/time.h; then -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + + +echo "$as_me:$LINENO: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include <$ac_header> +$ac_includes_default +int +main () +{ +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; + ; + return 0; +} _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - +ac_cv_type_off_t=no fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 -done - - -echo "$as_me:$LINENO: checking for gdImagePng in -lgd" >&5 -echo $ECHO_N "checking for gdImagePng in -lgd... $ECHO_C" >&6 -if test "${ac_cv_lib_gd_gdImagePng+set}" = set; then +echo "$as_me:$LINENO: checking size of off_t" >&5 +echo $ECHO_N "checking size of off_t... $ECHO_C" >&6 +if test "${ac_cv_sizeof_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgd $LIBS" + if test "$ac_cv_type_off_t" = yes; then + # The cast to unsigned long works around a bug in the HP C Compiler + # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects + # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. + # This bug is HP SR number 8606223364. + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gdImagePng (); +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default int main () { -gdImagePng (); +static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 @@ -3364,93 +4526,83 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' + { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_lib_gd_gdImagePng=yes + ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_gd_gdImagePng=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gd_gdImagePng" >&5 -echo "${ECHO_T}$ac_cv_lib_gd_gdImagePng" >&6 -if test $ac_cv_lib_gd_gdImagePng = yes; then - LIBS="-lgd ${LIBS}"; HAVE_GD="yes" +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + done else - HAVE_GD="" -fi - + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF +cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ - +$ac_includes_default int main () { -/* FIXME: Include the comments suggested by Paul. */ -#ifndef __cplusplus - /* Ultrix mips cc rejects this. */ - typedef int charset[2]; - const charset x; - /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; - /* NEC SVR4.0.2 mips cc rejects this. */ - struct point {int x, y;}; - static struct point const zero = {0,0}; - /* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in - an arm of an if-expression whose if-part is not a constant - expression */ - const char *g = "string"; - ccp = &g + (g ? g-g : 0); - /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; - { /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; +static int test_array [1 - 2 * !(((long) (sizeof (off_t))) < 0)]; +test_array [0] = 0 - *t++ = 0; - } - { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; - } - { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; - } - { /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; - } - { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; - } -#endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= $ac_mid)]; +test_array [0] = 0 ; return 0; @@ -3478,43 +4630,45 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_c_const=yes + ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_c_const=no +ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 -if test $ac_cv_c_const = no; then - -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF + done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 +ac_lo= ac_hi= fi - -echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 -echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 -if test "${ac_cv_struct_tm+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ -#include -#include - +$ac_includes_default int main () { -struct tm *tp; tp->tm_sec; +static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)]; +test_array [0] = 0 + ; return 0; } @@ -3541,25 +4695,125 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then - ac_cv_struct_tm=time.h + ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_struct_tm=sys/time.h +ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) ac_cv_sizeof_off_t=$ac_lo;; +'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (off_t), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } ;; +esac +else + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +long longval () { return (long) (sizeof (off_t)); } +unsigned long ulongval () { return (long) (sizeof (off_t)); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + exit (1); + if (((long) (sizeof (off_t))) < 0) + { + long i = longval (); + if (i != ((long) (sizeof (off_t)))) + exit (1); + fprintf (f, "%ld\n", i); + } + else + { + unsigned long i = ulongval (); + if (i != ((long) (sizeof (off_t)))) + exit (1); + fprintf (f, "%lu\n", i); + } + exit (ferror (f) || fclose (f) != 0); + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_sizeof_off_t=`cat conftest.val` +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +{ { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute sizeof (off_t), 77 +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi -echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 -echo "${ECHO_T}$ac_cv_struct_tm" >&6 -if test $ac_cv_struct_tm = sys/time.h; then +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +rm -f conftest.val +else + ac_cv_sizeof_off_t=0 +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5 +echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6 +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF_T $ac_cv_sizeof_off_t +_ACEOF + + +if test $ac_cv_sizeof_off_t = "4"; then cat >>confdefs.h <<\_ACEOF -#define TM_IN_SYS_TIME 1 +#define OFFSET_STRING "%d" _ACEOF -fi +elif test $ac_cv_sizeof_off_t = "8"; then + +cat >>confdefs.h <<\_ACEOF +#define OFFSET_STRING "%lli" +_ACEOF +else + { { echo "$as_me:$LINENO: error: can not detect the size of your system\'s off_t type" >&5 +echo "$as_me: error: can not detect the size of your system\'s off_t type" >&2;} + { (exit 1); exit 1; }; } +fi # Check whether fopen64 is available and whether _LARGEFILE64_SOURCE # needs to be defined for it @@ -4391,6 +5645,8 @@ s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t +s,@LIBICONV@,$LIBICONV,;t t +s,@LTLIBICONV@,$LTLIBICONV,;t t s,@BINDIR@,$BINDIR,;t t s,@MANDIR@,$MANDIR,;t t s,@SYSCONFDIR@,$SYSCONFDIR,;t t diff --git a/configure.in b/configure.in index 9a9afc5..f8737d1 100644 --- a/configure.in +++ b/configure.in @@ -38,9 +38,16 @@ dnl Check for headers AC_HEADER_DIRENT AC_HEADER_STDC +dnl Check for iconv +AM_ICONV +if test -n "$LIBICONV" ; then + LIBS="$LIBS $LIBICONV" +fi + AC_CHECK_HEADERS(stdio.h stdlib.h string.h strings.h sys/time.h time.h unistd.h sys/dirent.h \ dirent.h sys/socket.h netdb.h arpa/inet.h sys/types.h netinet/in.h sys/stat.h \ - ctype.h gd.h gdfontl.h gdfontt.h gdfonts.h gdfontmb.h gdfontg.h iconv.h errno.h) + ctype.h gd.h gdfontl.h gdfontt.h gdfonts.h gdfontmb.h gdfontg.h iconv.h \ + errno.h sys/resource.h) AC_CHECK_LIB(gd, gdImagePng,LIBS="-lgd ${LIBS}"; HAVE_GD="yes", HAVE_GD="") @@ -48,6 +55,16 @@ dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_STRUCT_TM +dnl check for the off_t size +AC_CHECK_SIZEOF(off_t) +if test $ac_cv_sizeof_off_t = "4"; then + AC_DEFINE(OFFSET_STRING, "%d", [Offset string]) +elif test $ac_cv_sizeof_off_t = "8"; then + AC_DEFINE(OFFSET_STRING, "%lli", [Offset string]) +else + AC_ERROR(can not detect the size of your system\'s off_t type) +fi + # Check whether fopen64 is available and whether _LARGEFILE64_SOURCE # needs to be defined for it AC_MSG_CHECKING([for fopen64]) diff --git a/css.c b/css.c index 4469190..bf4e0af 100644 --- a/css.c +++ b/css.c @@ -25,66 +25,41 @@ #include "include/conf.h" -int css(FILE *fp_css) +void css(FILE *fp_css) { - FILE *fp_in, *fp_ou; - char csstext[512]; + FILE *fp_in; - fp_ou = fp_css; if(strlen(ExternalCSSFile) > 0) { if((fp_in=fopen(ExternalCSSFile,"r"))==NULL) { fprintf(stderr, "SARG: (css) %s: %s\n",text[45],ExternalCSSFile); exit(1); } - fputs("\n",fp_ou); + fputs("\n",fp_css); return; } - fputs("\n",fp_ou); - - return; -;} + fprintf(fp_css,"\n", FontFace, FontSize); +} diff --git a/dansguardian_log.c b/dansguardian_log.c index ce690b8..bcabde9 100644 --- a/dansguardian_log.c +++ b/dansguardian_log.c @@ -45,28 +45,28 @@ int dansguardian_log() bzero(year, 5); if(strcmp(df,"e") == 0) { - strncpy(day,periodo,2); - strncpy(mon,periodo+2,3); - strncpy(year,periodo+5,4); + strncpy(day,period,2); + strncpy(mon,period+2,3); + strncpy(year,period+5,4); conv_month(mon); sprintf(warea,"%s%s%s",year,mon,day); dfrom=atoi(warea); - strncpy(day,periodo+10,2); - strncpy(mon,periodo+12,3); - strncpy(year,periodo+15,4); + strncpy(day,period+10,2); + strncpy(mon,period+12,3); + strncpy(year,period+15,4); conv_month(mon); sprintf(warea,"%s%s%s",year,mon,day); duntil=atoi(warea); } else { - strncpy(day,periodo+7,2); - strncpy(mon,periodo+4,3); - strncpy(year,periodo,4); + strncpy(day,period+7,2); + strncpy(mon,period+4,3); + strncpy(year,period,4); conv_month(mon); sprintf(warea,"%s%s%s",year,mon,day); dfrom=atoi(warea); - strncpy(day,periodo+17,2); - strncpy(mon,periodo+14,3); - strncpy(year,periodo+10,4); + strncpy(day,period+17,2); + strncpy(mon,period+14,3); + strncpy(year,period+10,4); conv_month(mon); sprintf(warea,"%s%s%s",year,mon,day); duntil=atoi(warea); diff --git a/dansguardian_report.c b/dansguardian_report.c index d87b8e9..a3c85d4 100644 --- a/dansguardian_report.c +++ b/dansguardian_report.c @@ -37,7 +37,7 @@ void dansguardian_report() char dansguardian_ou[MAXLEN]; char per[MAXLEN]; char report[MAXLEN]; - char periodo[100]; + char period[100]; char ip[MAXLEN]; char rule[255]; char oip[MAXLEN]; @@ -59,7 +59,7 @@ void dansguardian_report() return; } - sprintf(per,"%s/periodo",dirname); + sprintf(per,"%s/sarg-period",dirname); sprintf(report,"%s/dansguardian.html",dirname); if ((fp_in = fopen(per, "r")) == 0) { @@ -67,7 +67,7 @@ void dansguardian_report() exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); if((fp_in=fopen(dansguardian_in,"r"))==NULL) { @@ -80,31 +80,13 @@ void dansguardian_report() exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(url,"\n",FontFace); - fputs(url,fp_ou); - } - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } - + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); + if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); else @@ -113,9 +95,9 @@ void dansguardian_report() sprintf(url,"%s\n",Title); fputs(url,fp_ou); - sprintf(url,"%s: %s\n",text[89],periodo); + sprintf(url,"%s: %s\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"%s %s\n",text[128],text[55]); + sprintf(url,"%s\n",text[128]); fputs(url,fp_ou); fputs("
\n",fp_ou); diff --git a/datafile.c b/datafile.c index e2b2ef3..f8533dd 100644 --- a/datafile.c +++ b/datafile.c @@ -34,13 +34,12 @@ void data_file(char *tmp) FILE *fp_in; char accdia[11], acchora[9], accuser[MAXLEN], accip[MAXLEN], accurl[MAXLEN], accbytes[12], accelap[10]; - char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN], wdir[MAXLEN], per1[MAXLEN]; + char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN]; char dirname[MAXLEN], wdirname[MAXLEN], oldurl[MAXLEN], oldaccuser[MAXLEN]; char olduser[MAXLEN], oldmsg[50], acccode[50], oldaccelap[10], oldacccode[50]; char ipantes[MAXLEN], nameantes[MAXLEN]; char accsmart[MAXLEN]; char Msg[MAXLEN]; - int smartfilter=0; char wcrc[50]; char crc2[50]; char wdname[MAXLEN]; @@ -53,7 +52,6 @@ void data_file(char *tmp) long long int rtotal=0; long long int incache=0; long long int oucache=0; - char *s; ipantes[0]='\0'; nameantes[0]='\0'; @@ -94,7 +92,8 @@ void data_file(char *tmp) strcpy(ipantes,accip); ip2name(accip); strcpy(nameantes,accip); - } else strcpy(accip,nameantes); + } + else strcpy(accip,nameantes); } if(!rtotal){ @@ -110,8 +109,7 @@ void data_file(char *tmp) if(strcmp(oldurl,accurl) != 0 || strcmp(oldaccuser,accuser) != 0){ strcpy(oldmsg,"OK"); - if(strstr(oldacccode,"DENIED") != 0) - sprintf(oldmsg,"%s",text[46]); + if(strstr(oldacccode,"DENIED") != 0) strcpy(oldmsg,text[46]); strcpy(wdirname,dirname); gravatmp(oldaccuser,wdirname,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache); strcpy(wdirname,dirname); @@ -121,8 +119,7 @@ void data_file(char *tmp) nelap=0; incache=0; oucache=0; - if(strcmp(oldaccuser,accuser) != 0) - ind2=0; + if(strcmp(oldaccuser,accuser) != 0) ind2=0; } nacc++; @@ -132,9 +129,8 @@ void data_file(char *tmp) strcpy(wcrc,acccode); getword(crc2,wcrc,'/'); - if(strstr(crc2,"MISS") != 0) - oucache+=my_atoll(accbytes); - else incache+=my_atoll(accbytes); + if(strstr(crc2,"MISS") != 0) oucache+=my_atoll(accbytes); + else incache+=my_atoll(accbytes); strcpy(oldurl,accurl); strcpy(oldaccuser,accuser); @@ -153,7 +149,6 @@ void data_file(char *tmp) sprintf(Msg,"Datafile %s successfully",DataFile); debuga(Msg); } - return; } void saverecs(char *dirname, char *user, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache) @@ -187,8 +182,7 @@ void saverecs(char *dirname, char *user, long long int nacc, char *url, long lon } if(strstr(DataFileFields,"url") != 0) { strcpy(name,url); - if (strcmp(DataFileUrl,"ip") == 0) - name2ip(name); + if (strcmp(DataFileUrl,"ip") == 0) name2ip(name); strncat(reg,name,strlen(name)); strncat(reg,DataFileDelimiter,1); } @@ -217,7 +211,4 @@ void saverecs(char *dirname, char *user, long long int nacc, char *url, long lon fputs(reg,fp_ou); fclose(fp_ou); - - return; - } diff --git a/denied.c b/denied.c index 651f634..7610f70 100644 --- a/denied.c +++ b/denied.c @@ -31,13 +31,11 @@ void gen_denied_report() FILE *fp_in = NULL, *fp_ou = NULL; char url[MAXLEN]; - char html[MAXLEN]; char html2[MAXLEN]; char denied_in[MAXLEN]; - char denied_ou[MAXLEN]; char per[MAXLEN]; char report[MAXLEN]; - char periodo[100]; + char period[100]; char ip[MAXLEN]; char oip[MAXLEN]; char user[MAXLEN]; @@ -45,7 +43,6 @@ void gen_denied_report() char ouser2[MAXLEN]; char data[15]; char hora[15]; - char ftime[128]; char *str; int z=0; int count=0; @@ -58,7 +55,7 @@ void gen_denied_report() return; } - sprintf(per,"%s/periodo",dirname); + sprintf(per,"%s/sarg-period",dirname); sprintf(report,"%s/denied.html",dirname); if ((fp_in = fopen(per, "r")) == 0) { @@ -66,7 +63,7 @@ void gen_denied_report() exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); if((fp_in=fopen(denied_in,"r"))==NULL) { @@ -79,45 +76,29 @@ void gen_denied_report() exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - fputs("
\n",fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); else show_sarg(fp_ou, ".."); + + fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); - sprintf(url,"\n",text[89],periodo); + sprintf(url,"\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"\n",text[46],text[55]); + sprintf(url,"\n",text[46]); fputs(url,fp_ou); fputs("
%s
%s: %s
%s: %s
%s %s
%s
\n",fp_ou); fputs("
\n",fp_ou); fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); sprintf(url,"\n",text[98],text[111],text[110],text[91]); fputs(url,fp_ou); diff --git a/download.c b/download.c index 72506a1..e8f9387 100644 --- a/download.c +++ b/download.c @@ -34,10 +34,9 @@ void download_report() char html[MAXLEN]; char html2[MAXLEN]; char report_in[MAXLEN]; - char report_ou[MAXLEN]; char wdirname[MAXLEN]; char report[MAXLEN]; - char periodo[100]; + char period[100]; char ip[MAXLEN]; char oip[MAXLEN]; char user[MAXLEN]; @@ -45,7 +44,6 @@ void download_report() char ouser2[MAXLEN]; char data[15]; char hora[15]; - char ftime[128]; char *str; int z=0; int count=0; @@ -59,14 +57,14 @@ void download_report() strcpy(wdirname,dirname); sprintf(report,"%s/download.html",wdirname); strcat(wdirname,"/"); - strcat(wdirname,"periodo"); + strcat(wdirname,"sarg-period"); if ((fp_in = fopen(wdirname, "r")) == 0) { fprintf(stderr, "SARG: (download) %s: %s\n",text[45],wdirname); exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); if((fp_in=fopen(report_in,"r"))==NULL) { @@ -89,33 +87,25 @@ void download_report() sprintf(url,"\n",BgColor,TxColor,BgImage); fputs(url,fp_ou); - fputs("
%s%s%s%s
\n",fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); else show_sarg(fp_ou, ".."); + + fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); - sprintf(url,"\n",text[89],periodo); + sprintf(url,"\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"\n",text[125],text[55]); + sprintf(url,"\n",text[125]); fputs(url,fp_ou); fputs("
%s
%s: %s
%s: %s
%s %s
%s
\n",fp_ou); fputs("
\n",fp_ou); fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); sprintf(url,"\n",text[98],text[111],text[110],text[91]); fputs(url,fp_ou); @@ -125,7 +115,7 @@ void download_report() getword(user,buf,' '); getword(ip,buf,' '); getword(url,buf,' '); - + if((str=(char *) strstr(user, "_")) != (char *) NULL ) { if((str=(char *) strstr(str+1, "_")) != (char *) NULL ) fixip(user); diff --git a/email.c b/email.c index 1606799..7f5d718 100644 --- a/email.c +++ b/email.c @@ -34,7 +34,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha float perc=0.00; float perc2=0.00; int posicao=0; - char olduser[MAXLEN], csort[MAXLEN], periodo[MAXLEN], arqper[MAXLEN]; + char olduser[MAXLEN], csort[MAXLEN], period[MAXLEN], arqper[MAXLEN]; char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[1024], preg[MAXLEN], tusr[MAXLEN]; char ip[MAXLEN], hora[9], data[11], elap[15], user2[MAXLEN], wperc[8], wperc2[8]; char strip1[MAXLEN], strip2[MAXLEN], strip3[MAXLEN], strip4[MAXLEN], strip5[MAXLEN], strip6[MAXLEN], strip7[MAXLEN]; @@ -48,11 +48,11 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha strcpy(top2,dirname); strcpy(top3,dirname); strcpy(tusr,dirname); - strcat(wger,"/geral"); + strcat(wger,"/sarg-general"); strcat(top1,"/top"); strcat(top2,"/top.tmp"); strcat(top3,"/report"); - strcat(tusr,"/users"); + strcat(tusr,"/sarg-users"); if((fp_in=fopen(wger,"r"))==NULL) { fprintf(stderr, "SARG: (email) %s: %s\n",text[45],wger); @@ -172,18 +172,18 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha } /* - * Obtem o periodo + * Obtem o period */ strcpy(arqper,dirname); - strcat(arqper,"/periodo"); + strcat(arqper,"/sarg-period"); if ((fp_in = fopen(arqper, "r")) == 0){ fprintf(stderr, "SARG: (email) %s: %s\n",text[45],arqper); exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); sprintf(strip1,"%s",text[88]); @@ -198,7 +198,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha sprintf(strip1,"%s",text[89]); strip_latin(strip1); - sprintf(preg,"%s %s\n\n",strip1,periodo); + sprintf(preg,"%s %s\n\n",strip1,period); fputs(preg,fp_top3); sprintf(strip1,"%s",text[100]); @@ -316,7 +316,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha system(buf); } - sprintf(csort,"rm -r %s/sarg_tmp",TempDir); + sprintf(csort,"rm -rf %s/sarg",TempDir); system(csort); return (0); diff --git a/exclude.c b/exclude.c index d1ff83d..9c9afc3 100644 --- a/exclude.c +++ b/exclude.c @@ -25,39 +25,53 @@ #include "include/conf.h" -int vhexclude(char *excludefile, char *ip) +int vhexclude(char *excludefile, char *url) { char whost[1024]; - char wip1[1024], wip2[1024]; - char sn1[4], sn2[4], sn3[4]; - char str[strlen(excludefile)]; + char *str; + char *wurl; + int len = strlen(excludefile); + if((str=(char *) malloc(len+1))==NULL) { + fprintf(stderr, "SARG: %s (%ld):\n",text[59], len); + exit(1); + } + len = strlen(url); + if((wurl=(char *) malloc(len+1))==NULL) { + fprintf(stderr, "SARG: %s (%ld):\n",text[59], len); + exit(1); + } whost[0]='\0'; strcpy(str,excludefile); + strcpy(wurl,url); + getword(whost,str,' '); - while(strcmp(whost,"*FIM*") != 0) { - if(strcmp(ip,whost) ==0) - return(0); - - strcpy(wip1,ip); - getword(sn1,wip1,'.'); - getword(sn2,wip1,'.'); - getword(sn3,wip1,'.'); - - sprintf(wip1,"%s.%s.%s.0",sn1,sn2,sn3); - sprintf(wip2,"%s.%s.0.0",sn1,sn2); - - if(strstr(whost,wip1) !=0) - return(0); + if(strchr(wurl,':') != 0) { + getword(warea,wurl,':'); + strcpy(wurl,warea); + } - if(strstr(whost,wip2) !=0) + while(strcmp(whost,"*END*") != 0) { + if(strcmp(wurl,whost) == 0) { + free(wurl); + free(str); return(0); - + } + if(strchr(whost,'*') != 0) { + getword(warea,whost,'.'); + getword(warea,wurl,'.'); + if(strcmp(wurl,whost) == 0) { + free(wurl); + free(str); + return(0); + } + } getword(whost,str,' '); } - + free(wurl); + free(str); return(1); } diff --git a/fonts/DejaVuSans.ttf b/fonts/DejaVuSans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..62f2d9b49b14bcd24678826493ccb19fc7be1650 GIT binary patch literal 479440 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�=Z6n+JhcJ36e3zu#S!qY3~W@XKvN4NLt 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

L{ZcQ=|mvAOG1#A3ZVr5h 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%0A9+ZMU)8+U@N2b_cto-N{a|kGDJ9UF@!Q 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 Oe=6Mo>0fFo+5ZK5%CbNJ literal 0 Hc-jL100001 diff --git a/fonts/FreeSans.ttf b/fonts/FreeSans.ttf index 46f5532d307c3c7bb61710de841ea3a606cf9d57..457314573e8722ea148043e579152f73ffab670a 100644 GIT binary patch delta 23 ec-rgk7ijMnXlP+o?rlHun0f^ delta 27 hc-m|47wGO6XlP+k#6 diff --git a/fonts/README b/fonts/README index cd9ee10..ff23ad2 100644 --- a/fonts/README +++ b/fonts/README @@ -1,3 +1,4 @@ # Note from the author -FreeSans.ttf is a GPL font and comes from http://savannah.gnu.org/ +FreeSans.ttf is a GPL font and comes from http://savannah.gnu.org +DejaVuSans.ttf is a GPL font and comes from http://dejavu.sourceforge.net diff --git a/getconf.c b/getconf.c index 0718add..2d75530 100644 --- a/getconf.c +++ b/getconf.c @@ -30,43 +30,7 @@ extern numlist hours, weekdays; char wbuf[MAXLEN]; char Msg[255]; -void getconf() -{ - - FILE *fp_in; - char buf[MAXLEN]; - - if(debug) { - sprintf(Msg,"Loading configuration from: %s",ConfigFile); - debuga(Msg); - } - - if ((fp_in = fopen(ConfigFile, "r")) == NULL) { - fprintf(stderr, "SARG: (getconf) Cannot open file: %s\n",ConfigFile); - exit(1); - } - - while (fgets(buf, MAXLEN, fp_in) != NULL) { - if(strstr(buf,"\n") != 0) - buf[strlen(buf)-1]='\n'; - - if(debugm) - printf("SYSCONFDIR %s",buf); - - if(strncmp(buf,"#",1) == 0) - continue; - - parmtest(buf); - - } - - fclose(fp_in); - language_load(language); - return; -} - - -int parmtest(char *buf) +void parmtest(char *buf) { if(strstr(buf,"background_color") != 0) { @@ -226,7 +190,7 @@ int parmtest(char *buf) if(strstr(buf,"date_format") != 0) { getword(wbuf,buf,' '); - strcpy(DateFormat,buf); + strncpy(DateFormat,buf,1); fixnone(DateFormat); return; } @@ -262,10 +226,12 @@ int parmtest(char *buf) } if(strstr(buf,"access_log") != 0) { - getword(wbuf,buf,' '); - strcpy(AccessLog,buf); - fixnone(AccessLog); - return; + if(strstr(buf,"realtime_access_log_lines") == 0) { + getword(wbuf,buf,' '); + strcpy(AccessLog,buf); + fixnone(AccessLog); + return; + } } if(strstr(buf,"useragent_log") != 0) { @@ -557,6 +523,13 @@ int parmtest(char *buf) return; } + if(strstr(buf,"bytes_in_sites_users_report") != 0) { + getword(wbuf,buf,' '); + strcpy(BytesInSitesUsersReport,buf); + fixnone(BytesInSitesUsersReport); + return; + } + if(strstr(buf,"user_report_fields") != 0) { getword(wbuf,buf,' '); strcpy(UserReportFields,buf); @@ -564,10 +537,10 @@ int parmtest(char *buf) return; } - if(strstr(buf,"site_user_time_date_type") != 0) { + if(strstr(buf,"bytes_in_sites_users_report") != 0) { getword(wbuf,buf,' '); - strcpy(SiteUserTimeDateType,buf); - fixnone(SiteUserTimeDateType); + strcpy(BytesInSitesUsersReport,buf); + fixnone(BytesInSitesUsersReport); return; } @@ -803,6 +776,11 @@ int parmtest(char *buf) return; } + if(strstr(buf,"squid24") != 0) { + squid24++; + return; + } + if(strstr(buf,"byte_cost") != 0) { getword(wbuf,buf,' '); cost=atol(buf); @@ -810,6 +788,42 @@ int parmtest(char *buf) nocost=my_atoll(buf); return; } - - return; +} + +void getconf() +{ + + FILE *fp_in; + char buf[MAXLEN]; + + if(debug) { + sprintf(Msg,"Loading configuration from: %s",ConfigFile); + debuga(Msg); + } + + if ((fp_in = fopen(ConfigFile, "r")) == NULL) { + fprintf(stderr, "SARG: (getconf) Cannot open file: %s\n",ConfigFile); + exit(1); + } + + while (fgets(buf, MAXLEN, fp_in) != NULL) { + if(strstr(buf,"\n") != 0) + buf[strlen(buf)-1]='\0'; + + if(debugm) + printf("SYSCONFDIR %s",buf); + + if(strncmp(buf,"#",1) == 0 || strlen(buf) < 1) + continue; + + if(debugz) + printf("SARG: TAG: %s\n",buf); + + parmtest(buf); + + } + + fclose(fp_in); + language_load(language); + return; } diff --git a/grepday.c b/grepday.c index 5e53679..3c5596b 100644 --- a/grepday.c +++ b/grepday.c @@ -36,16 +36,16 @@ int gray; int silver; int black; int x1; -char *font1 = SYSCONFDIR"/fonts/FreeSans.ttf"; +//char *font1 = SYSCONFDIR"/fonts/FreeSans.ttf"; +char *font1 = SYSCONFDIR"/fonts/DejaVuSans.ttf"; char s[15]; -#ifdef HAVE_ICONV_H +#if defined(HAVE_GD) && defined(HAVE_ICONV_H) && defined(gdFTEX_Unicode) #include #define SARGgdImageStringFT I18NgdImageStringFT -BGD_DECLARE(char *) I18NgdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist, - double ptsize, double angle, int x, int y, - char *string) +char * I18NgdImageStringFT (gdImage * im, int *brect, int fg, char *fontlist, + double ptsize, double angle, int x, int y, char *string) { iconv_t localtoutf; char *sstring, *str, *sstr, *retval; @@ -59,7 +59,7 @@ BGD_DECLARE(char *) I18NgdImageStringFT (gdImage * im, int *brect, int fg, char sstr = (char *) sstring; localtoutf = iconv_open ("UTF-8", CharSet); - iconv (localtoutf, &str, &slen, &sstr, &sslen); + iconv (localtoutf, (ICONV_CONST char **)&str, &slen, &sstr, &sslen); iconv_close (localtoutf); retval = gdImageStringFTEx (im, brect, fg, fontlist, ptsize, angle, x, y, sstring, gdFTEX_Unicode); @@ -77,7 +77,6 @@ void *bar(long long int *n) gdPoint points[4]; int brect[8]; int val=0, x; - float f=0; long long int lim, num; char v[15]; @@ -232,7 +231,7 @@ void *bar(long long int *n) void greport_day(char *user, int *iprel, int *ipuser) { FILE *fp_in, *pngout; - int x, y, z; + int x, y; int brect[8]; char wdirname[MAXLEN]; char graph[MAXLEN]; @@ -329,7 +328,7 @@ void greport_day(char *user, int *iprel, int *ipuser) SARGgdImageStringFT(im,&brect[0],darkblue,font1,7,0.0,620,470,ftime); if(strcmp(ShowSargInfo,"yes") == 0) SARGgdImageStringFT(im,&brect[0],darkblue,font1,10,0.0,257,15,"SARG, "); SARGgdImageStringFT(im,&brect[0],darkblue,font1,10,0.0,300,15,Title); - sprintf(warea,"%s: %s",text[89],periodo); + sprintf(warea,"%s: %s",text[89],period); SARGgdImageStringFT(im,&brect[0],darkblue,font1,9,0.0,300,27,warea); sprintf(warea,"%s: %s",text[90],name); SARGgdImageStringFT(im,&brect[0],darkblue,font1,9,0.0,300,38,warea); @@ -438,8 +437,8 @@ void greport_day(char *user, int *iprel, int *ipuser) bar(tot); strcpy(oday,day); tot=0; - } else - tot=tot+my_atoll(bytes); + } + tot=tot+my_atoll(bytes); } if(tot) { @@ -456,5 +455,6 @@ void greport_day(char *user, int *iprel, int *ipuser) unlink(tmp5); #endif + return; } diff --git a/html.c b/html.c index de74596..678fb68 100644 --- a/html.c +++ b/html.c @@ -36,7 +36,7 @@ void htmlrel() long long int incache=0, oucache=0, tnincache=0, tnoucache=0, twork=0, twork2=0; char arqin[MAXLEN], arqou[MAXLEN], arqper[MAXLEN], arqip[MAXLEN]; char nacc[20], nbytes[20], url[1024], purl[1024], tmsg[50], tmsg2[50], nelap[20], csort[MAXLEN]; - char periodo[MAXLEN], usuario[MAXLEN], wusuario[MAXLEN], u2[MAXLEN], duser[MAXLEN]; + char period[MAXLEN], usuario[MAXLEN], wusuario[MAXLEN], u2[MAXLEN], duser[MAXLEN]; char userbytes[20], userelap[20], userurl[1024], userhora[9], userdia[9]; char user_ip[MAXLEN], olduserip[MAXLEN], tmp2[MAXLEN], tmp3[MAXLEN], incac[20], oucac[20]; char denied_report[255], name2[MAXLEN]; @@ -49,7 +49,6 @@ void htmlrel() char *s; int x, count; - if(indexonly) return; if(strstr(ReportType,"users_sites") == 0) return; strcpy(tmp2,TempDir); @@ -59,18 +58,18 @@ void htmlrel() strcat(tmp3,"/sargtmp.log"); strcpy(arqper,dirname); - strcat(arqper,"/periodo"); + strcat(arqper,"/sarg-period"); if ((fp_in = fopen(arqper, "r")) == 0){ fprintf(stderr, "SARG: (html1) %s: %s\n",text[45],arqper); exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); strcpy(arqper,dirname); - strcat(arqper,"/geral"); + strcat(arqper,"/sarg-general"); if ((fp_in = fopen(arqper, "r")) == 0){ fprintf(stderr, "SARG: (html2) %s: %s\n",text[45],arqper); @@ -232,7 +231,7 @@ void htmlrel() strcpy(name2,str2); } - sprintf(html,"

\n",text[89],periodo); + sprintf(html,"\n",text[89],period); fputs(html,fp_ou); sprintf(html,"\n",text[90],name2); fputs(html,fp_ou); @@ -243,7 +242,7 @@ void htmlrel() fputs("\n",fp_ou); fputs("
%s%s%s%s
%s: %s
%s: %s
%s: %s
\n",fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); if(strlen(denied_report) > 0) { sprintf(html,"\n",denied_report,text[116],text[55]); @@ -335,7 +334,7 @@ void htmlrel() twork=my_atoll(nacc); sprintf(wwork1,"%s",fixnum(twork,1)); sprintf(wwork2,"%s",fixnum(nnbytes,1)); - sprintf(wwork3,"%s",fixnum(nnelap,1)); + sprintf(wwork3,"%s",fixnum2(nnelap,1)); if(strcmp(LongUrl,"yes") != 0) { getword(warea,url,'/'); @@ -545,7 +544,7 @@ void htmlrel() sprintf(wwork1,"%s",fixnum(tnacc,1)); sprintf(wwork2,"%s",fixnum(tnbytes,1)); - sprintf(wwork3,"%s",fixnum(tnelap,1)); + sprintf(wwork3,"%s",fixnum2(tnelap,1)); sprintf(val2,"%s%s",href2,ltext110); sprintf(val3,"%3.2f%%",perc); @@ -640,8 +639,14 @@ void htmlrel() } } +// if(indexonly) { +// unlink(arqou); +// continue; +// } + + if (strstr(ReportType,"topuser") != 0) { strcpy(arqper,dirname); - strcat(arqper,"/users"); + strcat(arqper,"/sarg-users"); if ((fp_in = fopen(arqper, "r")) == 0){ fprintf(stderr, "SARG: (html11) %s: %s\n",text[45],arqper); @@ -669,7 +674,7 @@ void htmlrel() sprintf(wwork1,"%s",fixnum(twork,1)); sprintf(wwork2,"%s",fixnum(totbytes2,1)); - sprintf(wwork3,"%s",fixnum(totelap2,1)); + sprintf(wwork3,"%s",fixnum2(totelap2,1)); sprintf(val6,"%s",buildtime(totelap2)); sprintf(val7,"%3.2f%%",perc2); @@ -706,7 +711,7 @@ void htmlrel() sprintf(html,"\n",hbc6,text[96],hbc1,wwork1,hbc2,wwork2,hbc4,val6,hbc3,wwork3,hbc5,val7); fputs(html,fp_ou); } - +} /* added */ tnacc=0; tnbytes=0; tnelap=0; diff --git a/include/conf.h b/include/conf.h index dfd534a..2cb9510 100755 --- a/include/conf.h +++ b/include/conf.h @@ -96,15 +96,18 @@ char buf[MAXLEN]; char url[MAXLEN]; char urly[MAXLEN]; char user[MAXLEN]; -char periodo[MAXLEN]; +char period[MAXLEN]; char msg[1024]; char per_hour[128]; +char code[MAXLEN]; +char code2[MAXLEN]; char tmp[MAXLEN]; char tmp2[MAXLEN]; char tmp3[MAXLEN]; char tmp4[MAXLEN]; char tmp5[MAXLEN]; char tmp6[MAXLEN]; +char tmp7[MAXLEN]; char parse_out[MAXLEN]; char arqtt[MAXLEN]; char html[MAXLEN]; @@ -127,6 +130,7 @@ char RemoveTempFiles[4]; char ReplaceIndex[256]; char Index[20]; char OverwriteReport[4]; +char u2[255]; char RecordsWithoutUser[20]; char UseComma[4]; char MailUtility[6]; @@ -142,6 +146,7 @@ char name[MAXLEN]; char LongUrl[20]; char Ip2Name[20]; char language[255]; +char bufy[MAXLEN]; char AccessLog[MAXLEN]; char Title[MAXLEN]; char BgColor[MAXLEN]; @@ -204,6 +209,7 @@ char SquidGuardLogFormat[MAXLEN]; char SquidGuardLogAlternate[MAXLEN]; char SquidguardIgnoreDate[10]; char ShowSargInfo[5]; +char BytesInSitesUsersReport[10]; char ShowSargLogo[5]; char ParsedOutputLog[MAXLEN]; char ParsedOutputLogCompress[255]; @@ -315,6 +321,12 @@ int realtime_access_log_lines; int realt; int x, y; int rc; +int ntopsites; +int nsitesusers; +int nrepday; +int ndownload; +int ntopuser; +int squid24; long l1, l2; float perc; diff --git a/include/info.h b/include/info.h index e0b4b0a..2f266d5 100755 --- a/include/info.h +++ b/include/info.h @@ -1,3 +1,3 @@ -#define VERSION "2.1 Nov-29-2005" +#define VERSION "2.2.5 Mar-03-2008" #define PGM "sarg" #define URL "http://sarg.sourceforge.net" diff --git a/index.c b/index.c index 32e39f3..7a4adf8 100644 --- a/index.c +++ b/index.c @@ -49,8 +49,7 @@ void make_index() char day[4], mon[4], year[6], hour[10]; char h[3], m[3], s[3]; - if(LastLog[0] != '\0') - mklastlog(outdir,debug); + if(LastLog[0] != '\0') mklastlog(outdir,debug); sprintf(wdir,"%sindex.html",outdir); sprintf(wdir_tmp,"%sindex.unsort",outdir); @@ -58,20 +57,17 @@ void make_index() strcpy(hbc1,"class=\"header\""); if(strcmp(Index,"no") == 0) { - if(access(wdir, R_OK) == 0) - unlink(wdir); + if(access(wdir, R_OK) == 0) unlink(wdir); return; } - if(debug) - debuga(text[53]); + if(debug) debuga(text[53]); // Root dir dirp = opendir(outdir); while ((direntp = readdir( dirp )) != NULL) { if(strcmp(IndexTree,"date") == 0) { - if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) - continue; + if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) continue; if(strlen(direntp->d_name) > 4) { bzero(y1,5); bzero(y2,5); @@ -98,18 +94,12 @@ void make_index() conv_month(m2); } sprintf(val1,"%s%s",outdir,y1); - if(access(val1, R_OK) != 0) - mkdir(val1,0755); - if(strcmp(m1,m2) != 0) - sprintf(val2,"%s/%s-%s",val1,m1,m2); - else - sprintf(val2,"%s/%s",val1,m1); - if(access(val2, R_OK) != 0) - mkdir(val2,0755); - if(strcmp(d1,d2) != 0) - sprintf(val3,"%s/%s-%s",val2,d1,d2); - else - sprintf(val3,"%s/%s",val2,d1); + if(access(val1, R_OK) != 0) mkdir(val1,0755); + if(strcmp(m1,m2) != 0) sprintf(val2,"%s/%s-%s",val1,m1,m2); + else sprintf(val2,"%s/%s",val1,m1); + if(access(val2, R_OK) != 0) mkdir(val2,0755); + if(strcmp(d1,d2) != 0) sprintf(val3,"%s/%s-%s",val2,d1,d2); + else sprintf(val3,"%s/%s",val2,d1); sprintf(val4,"%s%s",outdir,direntp->d_name); rename(val4,val3); sprintf(val5,"%s/images",val2); @@ -118,20 +108,17 @@ void make_index() system(val5); } } else { - if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) - continue; + if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) continue; if(strlen(direntp->d_name) == 4) { strcpy(y1,direntp->d_name); sprintf(val1,"%s%s",outdir,direntp->d_name); dirp2 = opendir(val1); while ((direntp2 = readdir( dirp2 )) != NULL) { - if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1])) - continue; + if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1])) continue; sprintf(val2,"%s/%s",val1,direntp2->d_name); dirp3 = opendir(val2); while ((direntp3 = readdir( dirp3 )) != NULL) { - if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1])) - continue; + if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1])) continue; bzero(newname,512); strcpy(warea,direntp2->d_name); if(strstr(warea,"-") != 0) { @@ -152,10 +139,8 @@ void make_index() strcpy(d1,warea); strcpy(d2,warea); } - if(strcmp(df,"u") == 0) - sprintf(val4,"%s%s%s%s-%s%s%s",outdir,y1,m1,d1,y1,m2,d2); - else if(strcmp(df,"e") == 0) - sprintf(val4,"%s%s%s%s-%s%s%s",outdir,d1,m1,y1,d2,m2,y1); + if(strcmp(df,"u") == 0) sprintf(val4,"%s%s%s%s-%s%s%s",outdir,y1,m1,d1,y1,m2,d2); + else if(strcmp(df,"e") == 0) sprintf(val4,"%s%s%s%s-%s%s%s",outdir,d1,m1,y1,d2,m2,y1); sprintf(val5,"%s%s/%s/%s",outdir,y1,direntp2->d_name,direntp3->d_name); if(rename(val5,val4)) { fprintf(stderr, "SARG: (index) rename error - %s\n",strerror(errno)); @@ -183,14 +168,11 @@ void make_index() dirp = opendir(outdir); while ((direntp = readdir( dirp )) != NULL) { if(strcmp(IndexTree,"date") == 0) { - if(strlen(direntp->d_name) > 4 || !isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) - continue; - sprintf(warea,"%s %s\n",direntp->d_name,get_size(outdir,direntp->d_name)); - fputs(warea, fp_tmp); + if(strlen(direntp->d_name) > 4 || !isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1])) continue; + fprintf(fp_tmp,"%s %s\n",direntp->d_name,get_size(outdir,direntp->d_name)); continue; } else { - if(strstr(direntp->d_name,"-") == 0) - continue; + if(strstr(direntp->d_name,"-") == 0) continue; bzero(newname, 512); if(strcmp(df,"u") == 0) { strncat(newname,direntp->d_name,4); @@ -202,10 +184,8 @@ void make_index() month[3]='\0'; conv_month(month); strcat(newname,month); - if(strcmp(df,"u") == 0) - strncat(newname,direntp->d_name+7,2); - else - strncat(newname,direntp->d_name,2); + if(strcmp(df,"u") == 0) strncat(newname,direntp->d_name+7,2); + else strncat(newname,direntp->d_name,2); obtdate(outdir,direntp->d_name,data); obtuser(outdir,direntp->d_name,tuser); obttotal(outdir,direntp->d_name,tbytes,tuser,media); @@ -221,8 +201,7 @@ void make_index() getword(m,html,':'); strcpy(s,html); buildymd(day,mon,year,ftime); - sprintf(warea,"%s%s%s%s;%s;%s;%s;%s;%s;%s\n",ftime, h, m, s, direntp->d_name, data, tuser, tbytes, media,newname); - fputs(warea, fp_tmp); + fprintf(fp_tmp,"%s%s%s%s;%s;%s;%s;%s;%s;%s\n",ftime, h, m, s, direntp->d_name, data, tuser, tbytes, media,newname); continue; } } @@ -234,10 +213,8 @@ void make_index() } if(strcmp(IndexTree,"date") == 0) { - if(strcmp(IndexSortOrder,"A") == 0) - sprintf(warea,"sort -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); - else - sprintf(warea,"sort -r -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); + if(strcmp(IndexSortOrder,"A") == 0) sprintf(warea,"sort -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); + else sprintf(warea,"sort -r -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); system(warea); unlink(wdir_tmp); if((fp_tmp=fopen(wdir_tmp2,"r"))==NULL) { @@ -249,12 +226,10 @@ void make_index() exit(1); } write_html_header(fp_ou, "."); - sprintf(html,"\n",hbc1,text[130],hbc1,text[132]); - fputs(html,fp_ou); + fprintf(fp_ou,"\n",hbc1,text[130],hbc1,text[132]); while(fgets(wwork1,MAXLEN,fp_tmp)!=NULL) { getword(tmp4,wwork1,' '); - sprintf(html,"\n",tmp4,tmp4,wwork1); - fputs(html,fp_ou); + fprintf(fp_ou,"\n",tmp4,tmp4,wwork1); sprintf(tmp2,"%s%s",outdir,tmp4); sprintf(tmp3,"%s%s/index.unsort",outdir,tmp4); // Year dir @@ -264,19 +239,15 @@ void make_index() } dirp2 = opendir(tmp2); while ((direntp2 = readdir( dirp2 )) != NULL) { - if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1])) - continue; - sprintf(warea,"%s\n",direntp2->d_name); - fputs(warea,fp_ou2); + if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1])) continue; + fprintf(fp_ou2,"%s\n",direntp2->d_name); } if(fp_ou2) fclose(fp_ou2); (void)rewinddir(dirp2); (void)closedir(dirp2); sprintf(wdir_tmp3,"%s%s/index.sort",outdir,tmp4); - if(strcmp(IndexSortOrder,"A") == 0) - sprintf(csort,"sort -n '%s' -o '%s'", tmp3, wdir_tmp3); - else - sprintf(csort,"sort -n -r '%s' -o '%s'", tmp3, wdir_tmp3); + if(strcmp(IndexSortOrder,"A") == 0) sprintf(csort,"sort -n '%s' -o '%s'", tmp3, wdir_tmp3); + else sprintf(csort,"sort -n -r '%s' -o '%s'", tmp3, wdir_tmp3); system(csort); unlink(tmp3); if((fp_tmp2=fopen(wdir_tmp3,"r"))==NULL) { @@ -289,8 +260,7 @@ void make_index() exit(1); } write_html_header(fp_ou2,".."); - sprintf(html,"\n",hbc1,text[130],text[131]); - fputs(html,fp_ou2); + fprintf(fp_ou2,"\n",hbc1,text[130],text[131]); while(fgets(wwork1,MAXLEN,fp_tmp2)!=NULL) { wwork1[strlen(wwork1)-1]='\0'; strcpy(tmp5,wwork1); @@ -304,8 +274,7 @@ void make_index() strcpy(nmonth,tmp5); name_month(nmonth); } - sprintf(html,"\n",wwork1,tmp4,nmonth); - fputs(html,fp_ou2); + fprintf(fp_ou2,"\n",wwork1,tmp4,nmonth); sprintf(val1,"%s%s/%s",outdir,tmp4,wwork1); sprintf(tmp5,"%s%s/%s/index.unsort",outdir,tmp4,wwork1); @@ -316,21 +285,16 @@ void make_index() // month dir dirp3 = opendir(val1); while ((direntp3 = readdir( dirp3 )) != NULL) { - if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1])) - continue; - sprintf(warea,"%s\n",direntp3->d_name); - fputs(warea,fp_ou3); - + if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1])) continue; + fprintf(fp_ou3,"%s\n",direntp3->d_name); } if(fp_ou3) fclose(fp_ou3); (void)rewinddir(dirp3); (void)closedir(dirp3); unlink(wdir_tmp3); sprintf(tmp6,"%s%s/%s/index.sort",outdir,tmp4,wwork1); - if(strcmp(IndexSortOrder,"A") == 0) - sprintf(csort,"sort -n '%s' -o '%s'", tmp5, tmp6); - else - sprintf(csort,"sort -n -r '%s' -o '%s'", tmp5, tmp6); + if(strcmp(IndexSortOrder,"A") == 0) sprintf(csort,"sort -n '%s' -o '%s'", tmp5, tmp6); + else sprintf(csort,"sort -n -r '%s' -o '%s'", tmp5, tmp6); system(csort); unlink(tmp5); sprintf(val2,"%s%s/%s/index.html",outdir,tmp4,wwork1); @@ -345,12 +309,10 @@ void make_index() exit(1); } write_html_header(fp_ou3,"../.."); - sprintf(html,"\n",hbc1,text[130],text[131],text[127]); - fputs(html,fp_ou3); + fprintf(fp_ou3,"\n",hbc1,text[130],text[131],text[127]); while(fgets(warea,MAXLEN,fp_tmp3)!=NULL) { warea[strlen(warea)-1]='\0'; - sprintf(html,"\n",warea,tmp4,nmonth,warea); - fputs(html,fp_ou3); + fprintf(fp_ou3,"\n",warea,tmp4,nmonth,warea); } if(fp_tmp3) fclose(fp_tmp3); if(fp_ou3) fclose(fp_ou3); @@ -368,10 +330,8 @@ void make_index() unlink(tmp6); unlink(wdir_tmp2); } else { - if(strcmp(IndexSortOrder,"A") == 0) - sprintf(warea,"sort -t';' +6.5n +6.2M +6.0n '%s' -o '%s'", wdir_tmp, wdir_tmp2); - else - sprintf(warea,"sort -t';' +6.5nr +6.2Mr +6.0nr '%s' -o '%s'", wdir_tmp, wdir_tmp2); + if(strcmp(IndexSortOrder,"A") == 0) sprintf(warea,"sort -t';' -k 7,7 -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); + else sprintf(warea,"sort -r -t';' -k 7,7 -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2); system(warea); unlink(wdir_tmp); if((fp_ou=fopen(wdir,"w"))==NULL) { @@ -379,8 +339,7 @@ void make_index() exit(1); } write_html_header(fp_ou,"."); - sprintf(html,"\n",hbc1,text[101],hbc1,text[102],hbc1,text[103],hbc1,text[93],hbc1,text[96]); - fputs(html,fp_ou); + fprintf(fp_ou,"\n",hbc1,text[101],hbc1,text[102],hbc1,text[103],hbc1,text[93],hbc1,text[96]); if((fp_tmp2=fopen(wdir_tmp2,"r"))==NULL) { fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp2); exit(1); @@ -392,22 +351,17 @@ void make_index() getword(tuser,buf,';'); getword(tbytes,buf,';'); getword(media,buf,';'); - sprintf(html,"\n",period,ReplaceIndex,period,data,tuser,tbytes,media); - fputs(html,fp_ou); + fprintf(fp_ou,"\n",period,ReplaceIndex,period,data,tuser,tbytes,media); } if(fp_tmp2) fclose(fp_tmp2); unlink(wdir_tmp2); } - strcpy(html,"
%s %s
%s%s%s%s%s%s
%s%s
%s%s
%s%s
%s%s
%s/%s
%s/%s
%s %s
%s %s
%s/%s/%s
%s/%s/%s
%s %s %s
%s %s %s
%s%s%s%s%s
%s%s%s%s%s
%s%s%s%s%s
%s%s%s%s%s
"); - fputs(html,fp_ou); + fputs("
",fp_ou); zdate(ftime, DateFormat); show_info(fp_ou); - strcpy(html,"\n\n"); - fputs(html,fp_ou); - - return; + fputs("\n\n",fp_ou); } diff --git a/languages/Bulgarian_windows1251 b/languages/Bulgarian_windows1251 index dbd61da..c5cc69f 100644 --- a/languages/Bulgarian_windows1251 +++ b/languages/Bulgarian_windows1251 @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Catalan b/languages/Catalan index 1e32cc3..3e3365d 100644 --- a/languages/Catalan +++ b/languages/Catalan @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Czech b/languages/Czech index 3f7a6c8..591bcaf 100644 --- a/languages/Czech +++ b/languages/Czech @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Czech_UTF8 b/languages/Czech_UTF8 new file mode 100644 index 0000000..79c0608 --- /dev/null +++ b/languages/Czech_UTF8 @@ -0,0 +1,131 @@ +# by Josef Karliak +"Ano" +"Ne" +"ČeÅ¡tina" +"Volba" +"vyžaduje argument" +"Inicializace" +"Čtu přístupový žurnál" +"Nemohu otevřít žurnál" +"Nemohu otevřít přechodný soubor" +"Záznamů přečteno" +"zapsáno" +"Žurnál má smíchané oba žurnálové formáty (obecný a squid žurnál)" +"Obecný formát žurnálu" +"Squid formát žurnálu" +"Žurnál s neplatným formátem" +"NenaÅ¡el jsem žádné záznamy" +"Období" +"použil jsem" +"jako přechodný adresář" +"Třídím soubor" +"Konec" +"Parametry" +"Jméno hostitele nebo IP adresa" +"Datum od-do" +"Formát data" +"Evropa" +"USA" +"IP zpráva" +"Použij IP Adresu místo ID uživatele" +"NavÅ¡tívený server" +"Čas" +"Uživatel" +"verze Squidu" +"Dočasnný adresář" +"Ladicí zprávy" +"Zprávy o zpracování" +"Vstupní žurnál" +"Výstupní adresář" +"Použití" +"volby" +"Emailová adresa, na kterou se mají poslat přehledy" +"stdout pro konzolu" +"Přehledy podle uživatele a IP adresy" +"přehledy" +"Nemohu otevřít soubor" +"Zakázáno" +"Přehled úspěšně generován" +"Přehled úspěšně generován a odeslán na adresu" +"Vytvářím soubor" +"Vytvářím soubor období" +"Soubor" +"už existuje, přesouvám do" +"Vytvářím index.html" +"Třídím soubor" +"Přehled" +"Squid není na tomto počítači instalován" +"Prosíme použijte volbu -v pro definování verze Squidu" +"Načítám konfiguraci z" +"chyba malloc" +"Načítám heslo ze souboru" +"Vytvářím zprávu" +"Rozbaluji žurnálový soubor" +"Balím žurnálový soubor" +"Soubor nenalezen" +"Převádí IP adresu na jméno" +"Čtu žurnál s přehledem klientů" +"Načítám soubor vyjímek z" +"vyjmuto" +"Soubor vyjímek" +"Konfigurační soubor" +"Žurnál s přehledem klientů" +"Vytvářím přehled o klientech" +"verze" +"limit překročen" +"Přidáno do souboru" +"Převede soubor access.log na správné datum" +"Rozdělí žurnálový soubor podle data v parametru -d" +", napsal" +"obráceně" +"normálně" +"Odstraňuji starý soubor s přehledem" +"Odstraňuji přechodný soubor" +"Nejlepších" +"serverů" +"Týdny" +"Loading User table" +"Cannot load. Memory fault" +"Přehled o využití Squidu podle uživatelů" +"Období" +"Uživatel" +"NAVÅ TÍVENÝ SERVER" +"SPOJENÍ" +"BYTÅ®" +"POUŽITÝ ČAS" +"MILISEC" +"PRÅ®MĚR" +"Klesající přístup (bytů)" +"ID UŽIVATELE" +"ČAS" +"POŘADÍ" +"SOUBOR/OBDOBÍ" +"DATUM VZNIKU" +"UŽIVATELÉ" +"Třídění" +"Přehled o použitých klientech pro Squid" +"KLIENT" +"CELKEM" +"Generoval" +"dne" +"datum/čas" +"IP/JMÉNO" +"VÝSTUP" +"VSTUP" +"CACHE" +"ServeryUživatelé" +"SmartFilter" +"Authentication failures" +"Denied" +"Topsites" +"SQUIDGUARD" +"RULE" +"squidGuard" +"Sarg parsed log saved as" +"Sarg log format" +"Downloads" +"Graphic" +"DAYS" +"DansGuardian" +"CAUSE" +"pre-sorting files" diff --git a/languages/Dutch b/languages/Dutch index 7ac2075..b68d9d5 100644 --- a/languages/Dutch +++ b/languages/Dutch @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/English b/languages/English index 7241a66..68d88ea 100644 --- a/languages/English +++ b/languages/English @@ -1,4 +1,4 @@ -# by Pedro Lineu Orso +# by Pedro Lineu Orso "Yes" "No" "English" @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/French b/languages/French index ffe7de3..88a68a9 100644 --- a/languages/French +++ b/languages/French @@ -1,4 +1,4 @@ -# by Fred Pacquier +# by Nicod "Oui" "Non" "Français" @@ -84,8 +84,8 @@ "Les" "sites les plus accédés" "Semaines" -"Loading User table" -"Cannot load. Memory fault" +"Chargement de la table des utilisateurs" +"Chargement impossible. Erreur mémoire" "Statistiques des accès utilisateurs de Squid" "Période" "Utilisateur" @@ -115,23 +115,25 @@ "CACHE" "SitesUsers" "SmartFilter" -"Authentication Failures" -"Denied" +"Echecs d'identification" +"Interdit" "Topsites" "SQUIDGUARD" "RULE" "squidGuard" -"Sarg parsed log saved as" -"Sarg log format" -"Downloads" -"Graphic" -"DAYS" +"Journal analyé par Sarg, sauvegardé sous" +"Format de journal Sarg" +"Téléchargements" +"Graphismes" +"JOURS" "DansGuardian" "CAUSE" -"YEAR" -"MONTH" -"SIZE" -"January,February,March,April,May,June,July,August,September,October,November,December" -"Realtime" +"ANNEE" +"MOIS" +"TAILLE" +"Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Decembre" +"Heure réelle" "TYPE" -"Auto refresh" +"Actualisation automatique" +"Topuser" +"Pré triage des fichiers" diff --git a/languages/German b/languages/German index c24a0e7..0ea6cc1 100644 --- a/languages/German +++ b/languages/German @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Greek b/languages/Greek index 9d4e9cd..6785f44 100644 --- a/languages/Greek +++ b/languages/Greek @@ -133,3 +133,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Hungarian b/languages/Hungarian index 3e72cc3..5053deb 100644 --- a/languages/Hungarian +++ b/languages/Hungarian @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Indonesian b/languages/Indonesian index 3ce1cf8..687be1b 100644 --- a/languages/Indonesian +++ b/languages/Indonesian @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Italian b/languages/Italian index 5533f3b..d71a93a 100644 --- a/languages/Italian +++ b/languages/Italian @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Japanese b/languages/Japanese index c64e5bf..788a493 100644 --- a/languages/Japanese +++ b/languages/Japanese @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Latvian b/languages/Latvian index efc41dd..7100482 100644 --- a/languages/Latvian +++ b/languages/Latvian @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Polish b/languages/Polish index 3dc4ff1..a4075bc 100644 --- a/languages/Polish +++ b/languages/Polish @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Portuguese b/languages/Portuguese index a8cb008..8b8a58d 100644 --- a/languages/Portuguese +++ b/languages/Portuguese @@ -1,4 +1,4 @@ -# by Pedro Lineu Orso +# by Pedro Lineu Orso "Sim" "Nao" "Portuguese" @@ -135,3 +135,5 @@ "Realtime" "TIPO" "Auto refresh" +"Topuser" +"pre-classificando arquivos" diff --git a/languages/Romanian b/languages/Romanian index 15cd411..740c7e0 100644 --- a/languages/Romanian +++ b/languages/Romanian @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Russian_UTF-8 b/languages/Russian_UTF-8 index 1596305..9add4ea 100755 --- a/languages/Russian_UTF-8 +++ b/languages/Russian_UTF-8 @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Russian_koi8 b/languages/Russian_koi8 index e2b6493..a8a19b9 100644 --- a/languages/Russian_koi8 +++ b/languages/Russian_koi8 @@ -1,4 +1,4 @@ -# by Andrew Okhmat +# Russian language file (codepage koi8-r) for the SARG by Palamarchuk Eugen and Dima I. Allaverdov Updated for SARG 2.9.0 by Stas Degteff "äÁ" "îÅÔ" "Russian" @@ -21,13 +21,13 @@ "óÏÒÔÉÒÏ×ËÁ ÆÁÊÌÏ×" "úÁ×ÅÒÛÅÎÏ" "ðÁÒÁÍÅÔÒÙ" -"éÍÑ ÉÌÉ IP-ÁÄÒÅÓ" +"éÍÑ ÉÌÉ ÁÄÒÅÓ IP" "äÁÔÁ ÏÔ-ÄÏ" "æÏÒÍÁÔ ÄÁÔÙ" "å×ÒÏÐÁ" "áÍÅÒÉËÁ" "IP ÏÔÞÅÔ" -"éÓÐÏÌØÚÏ×ÁÔØ Ip-ÁÄÒÅÓ ×ÍÅÓÔÏ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ" +"éÓÐÏÌØÚÏ×ÁÔØ ÁÄÒÅÓ IP ×ÍÅÓÔÏ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ" "áÄÒÅÓÁ" "÷ÒÅÍÑ" "éÍÑ" @@ -57,7 +57,7 @@ "Squid ÎÅ ÕÓÔÁÎÏ×ÌÅÎ ÎÁ ÜÔÏÊ ÍÁÛÉÎÅ" "ðÏÖÁÌÕÊÓÔÁ, ÉÓÐÏÌØÚÕÊÔÅ ÐÁÒÁÍÅÔÒ -v ÄÌÑ ÚÁÄÁÎÉÑ ×ÅÒÓÉÉ Squid" "úÁÇÒÕÚËÁ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÚ" -"ÏÛÉÂËÁ malloc" +"ÏÛÉÂËÁ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ malloc" "úÁÇÒÕÚËÁ ÆÁÊÌÁ ÐÁÒÏÌÅÊ ÉÚ" "óÏÚÄÁÎÉÅ ÏÔÞÅÔÁ" "òÁÓÐÁËÏ×ËÁ ÆÁÊÌÁ ÖÕÒÎÁÌÁ" @@ -75,7 +75,7 @@ "ÌÉÍÉÔ ÐÒÅ×ÙÛÅÎ" "äÏÂÁ×ÌÅÎÏ × ÆÁÊÌ" "ëÏ×ÅÒÔÉÒÕÊÔÅ ÆÁÊÌ access.log, ÞÔÏÂÙ ÄÁÔÁ ÂÙÌÁ ÐÏÎÑÔÎÏÊ" -"òÁÚÄÅÌÉÔÅ log ÆÁÊÌ ÐÏ ÄÁÔÅ, ÉÓÐÏÌØÚÕÑ ÐÁÒÁÍÅÔÒ -d" +"òÁÚÄÅÌÉÔÅ ÌÏÇÆÁÊÌ ÐÏ ÄÁÔÅ, ÉÓÐÏÌØÚÕÑ ÐÁÒÁÍÅÔÒ -d" "ÐÏ" "× ÏÂÒÁÔÎÏÍ ÐÏÒÑÄËÅ" "× ÏÂÙÞÎÏÍ ÐÏÒÑÄËÅ" @@ -90,7 +90,7 @@ "ðÅÒÉÏÄ" "ðÏÌØÚÏ×ÁÔÅÌØ" "áÄÒÅÓÁ" -"ðÏÄËÌÀÞÅÎÉÊ" +"úÁÐÒÏÓÏ×" "âÁÊÔ" "ïÂÝÅÅ ×ÒÅÍÑ" "íÉÌÌÉÓÅË." @@ -103,29 +103,29 @@ "äÁÔÁ ÓÏÚÄÁÎÉÑ" "ðÏÌØÚÏ×ÁÔÅÌÅÊ" "ïÔÓÏÒÔÉÒÏ×ÁÎÏ" -"ïÔÞÅÔ Squid ÐÏ ÂÒÏÕÚÅÒÁÍ" -"âÒÏÕÚÅÒ" +"ïÔÞÅÔ Squid ÐÏ ÂÒÁÕÚÅÒÁÍ" +"âÒÁÕÚÅÒ" "÷ÓÅÇÏ" "óÇÅÎÅÒÉÒÏ×ÁÎ" "ÎÁ" "äÁÔÁ/÷ÒÅÍÑ" "IP/éÍÑ" -"OUT" -"IN" -"CACHE" -"SitesUsers" +"ÍÉÍÏ" +"ËÜÛ" +"ÉÚ" +"óÁÊÔÙ+ðÏÌØÚÏ×ÁÔÅÌÉ" "SmartFilter" -"Authentication Failures" -"Denied" -"Topsites" +"ïÛÉÂËÉ ÁÕÔÅÎÔÉÆÉËÁÃÉÉ" +"úÁÐÒÅÝÅÎÏ" +"ðÏÐÕÌÑÒÎÙÅ óÁÊÔÙ" "SQUIDGUARD" -"RULE" +"ðòá÷éìï" "squidGuard" -"Sarg parsed log saved as" -"Sarg log format" -"Downloads" +"ìÏÇ, ÏÂÒÁÂÏÔÁÎÎÙÊ Sarg, ÓÏÈÒÁΣΠËÁË" +"æÏÒÍÁÔ ÌÏÇÁ Sarg" +"úÁÇÒÕÚËÉ" "Graphic" -"DAYS" +"äîé" "DansGuardian" "CAUSE" "YEAR" @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Russian_windows1251 b/languages/Russian_windows1251 index ceecb74..4c30c4b 100644 --- a/languages/Russian_windows1251 +++ b/languages/Russian_windows1251 @@ -1,4 +1,4 @@ -# by Palamarchuk Eugen and Dima I. Allaverdov +# Russian language file (codepage 1251) for the SARG by Palamarchuk Eugen and Dima I. Allaverdov Updated for SARG 2.9.0 by Stas Degteff "Äà" "Íåò" "Russian" @@ -21,13 +21,13 @@ "Ñîðòèðîâêà ôàéëîâ" "Çàâåðøåíî" "Ïàðàìåòðû" -"Èìÿ èëè IP-àäðåñ" +"Èìÿ èëè àäðåñ IP" "Äàòà îò-äî" "Ôîðìàò äàòû" "Åâðîïà" "Àìåðèêà" "IP îò÷åò" -"Èñïîëüçîâàòü Ip-àäðåñ âìåñòî èìåíè ïîëüçîâàòåëÿ" +"Èñïîëüçîâàòü àäðåñ IP âìåñòî èìåíè ïîëüçîâàòåëÿ" "Àäðåñà" "Âðåìÿ" "Èìÿ" @@ -57,7 +57,7 @@ "Squid íå óñòàíîâëåí íà ýòîé ìàøèíå" "Ïîæàëóéñòà, èñïîëüçóéòå ïàðàìåòð -v äëÿ çàäàíèÿ âåðñèè Squid" "Çàãðóçêà êîíôèãóðàöèè èç" -"îøèáêà malloc" +"îøèáêà âûäåëåíèÿ ïàìÿòè malloc" "Çàãðóçêà ôàéëà ïàðîëåé èç" "Ñîçäàíèå îò÷åòà" "Ðàñïàêîâêà ôàéëà æóðíàëà" @@ -75,7 +75,7 @@ "ëèìèò ïðåâûøåí" "Äîáàâëåíî â ôàéë" "Êîâåðòèðóéòå ôàéë access.log, ÷òîáû äàòà áûëà ïîíÿòíîé" -"Ðàçäåëèòå log ôàéë ïî äàòå, èñïîëüçóÿ ïàðàìåòð -d" +"Ðàçäåëèòå ëîãôàéë ïî äàòå, èñïîëüçóÿ ïàðàìåòð -d" "ïî" "â îáðàòíîì ïîðÿäêå" "â îáû÷íîì ïîðÿäêå" @@ -90,7 +90,7 @@ "Ïåðèîä" "Ïîëüçîâàòåëü" "Àäðåñà" -"Ïîäêëþ÷åíèé" +"Çàïðîñîâ" "Áàéò" "Îáùåå âðåìÿ" "Ìèëëèñåê." @@ -103,29 +103,29 @@ "Äàòà ñîçäàíèÿ" "Ïîëüçîâàòåëåé" "Îòñîðòèðîâàíî" -"Îò÷åò Squid ïî áðîóçåðàì" -"Áðîóçåð" +"Îò÷åò Squid ïî áðàóçåðàì" +"Áðàóçåð" "Âñåãî" "Ñãåíåðèðîâàí" "íà" "Äàòà/Âðåìÿ" "IP/Èìÿ" -"OUT" -"IN" -"CACHE" -"SitesUsers" +"ìèìî" +"êýø" +"èç" +"Ñàéòû+Ïîëüçîâàòåëè" "SmartFilter" -"Authentication Failures" -"Denied" -"Topsites" +"Îøèáêè àóòåíòèôèêàöèè" +"Çàïðåùåíî" +"Ïîïóëÿðíûå Ñàéòû" "SQUIDGUARD" -"RULE" +"ÏÐÀÂÈËÎ" "squidGuard" -"Sarg parsed log saved as" -"Sarg log format" -"Downloads" +"Ëîã, îáðàáîòàííûé Sarg, ñîõðàí¸í êàê" +"Ôîðìàò ëîãà Sarg" +"Çàãðóçêè" "Graphic" -"DAYS" +"ÄÍÈ" "DansGuardian" "CAUSE" "YEAR" @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Serbian b/languages/Serbian index b2e2bed..a163549 100644 --- a/languages/Serbian +++ b/languages/Serbian @@ -136,3 +136,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Slovak b/languages/Slovak index 8e11ced..c199e32 100644 --- a/languages/Slovak +++ b/languages/Slovak @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Spanish b/languages/Spanish index ba75182..c56ca91 100644 --- a/languages/Spanish +++ b/languages/Spanish @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Turkish b/languages/Turkish index e9c16c5..4690627 100644 --- a/languages/Turkish +++ b/languages/Turkish @@ -135,3 +135,5 @@ "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/languages/Ukrainian_windows1251 b/languages/Ukrainian_windows1251 index 5e40284..5359a36 100644 --- a/languages/Ukrainian_windows1251 +++ b/languages/Ukrainian_windows1251 @@ -135,3 +135,5 @@ DansGuardian" "Realtime" "TYPE" "Auto refresh" +"Topuser" +"pre-sorting files" diff --git a/log.c b/log.c index e6d84d5..335b102 100644 --- a/log.c +++ b/log.c @@ -73,8 +73,6 @@ int main(argc,argv) char tam[255]; char fun[255]; char wuser[MAXLEN]; - char code[MAXLEN]; - char code2[MAXLEN]; char smartfilter[MAXLEN]; char dia[128]; char wdata[128]; @@ -102,8 +100,7 @@ int main(argc,argv) int common_log=0; int squid_log=0; int ch; - int d; - int x, l, i; + int x, l; int errflg=0; int puser=0; int fhost=0; @@ -140,13 +137,13 @@ int main(argc,argv) code[0]='\0'; LastLog[0]='\0'; UserIp[0]='\0'; - MaxElapsed[0]='\0'; ReportType[0]='\0'; UserTabFile[0]='\0'; BlockIt[0]='\0'; ExternalCSSFile[0]='\0'; SquidGuardLogFormat[0]='\0'; SquidGuardLogAlternate[0]='\0'; + arq[0]='\0'; strcpy(AccessLog,"/usr/local/squid/var/logs/access.log"); sprintf(ExcludeCodes,"%s/exclude_codes",SYSCONFDIR); @@ -163,7 +160,7 @@ int main(argc,argv) strcpy(LogoTextColor,"#006699"); strcpy(FontSize,"9px"); strcpy(TempDir,"/tmp"); - strcpy(OutputDir,"/usr/local/etc/httpd/htdocs/squid-reports"); + strcpy(OutputDir,"/var/www/html/squid-reports"); strcpy(Ip2Name,"no"); strcpy(DateFormat,"u"); strcpy(OverwriteReport,"no"); @@ -184,7 +181,7 @@ int main(argc,argv) strcpy(LongUrl,"no"); strcpy(language,"English"); strcpy(FontFace,"Verdana,Tahoma,Arial"); - strcpy(datetimeby,"bytes"); + strcpy(datetimeby,"elap"); strcpy(CharSet,"ISO-8859-1"); strcpy(Privacy,"no"); strcpy(PrivacyString,"***.***.***.***"); @@ -214,10 +211,12 @@ int main(argc,argv) strcpy(NtlmUserFormat,"domainname+username"); strcpy(IndexTree,"file"); strcpy(RealtimeTypes,"GET,PUT,CONNECT"); - strcpy(RealtimeUnauthRec,"ignore"); + strcpy(RealtimeUnauthRec,"show"); strcpy(SquidguardIgnoreDate,"off"); strcpy(DansguardianIgnoreDate,"off"); strcpy(DataFileUrl,"ip"); + strcpy(MaxElapsed,"28800000"); + strcpy(BytesInSitesUsersReport,"no"); dia[0]='\0'; mes[0]='\0'; @@ -274,6 +273,8 @@ int main(argc,argv) realtime_access_log_lines=1000; cost=0.01; nocost=50000000; + ndownload=0; + squid24=0; bzero(IncludeUsers, MAXLEN); bzero(ExcludeString, MAXLEN); @@ -405,65 +406,23 @@ int main(argc,argv) exit(2); } - if(debug) - debuga("Init"); + if(debug) debuga("Init"); - if(ConfigFile[0] == '\0') - sprintf(ConfigFile,"%s/sarg.conf",SYSCONFDIR); - else { - if(access(ConfigFile, R_OK) != 0) { - sprintf(msg,"Cannot open config file: %s - %s",ConfigFile,strerror(errno)); - debuga(msg); - exit(1); - } - } + if(ConfigFile[0] == '\0') sprintf(ConfigFile,"%s/sarg.conf",SYSCONFDIR); + else if(access(ConfigFile, R_OK) != 0) { + sprintf(msg,"Cannot open config file: %s - %s",ConfigFile,strerror(errno)); + debuga(msg); + exit(1); + } if(access(ConfigFile, R_OK) == 0) - getconf(debugm, ConfigFile, AccessLog, debug, BgColor, TxColor, TxBgColor, TiColor, LogoImage, LogoText, LogoTextColor, Width, Height, Title, BgImage, FontFace, HeaderColor, HeaderBgColor, FontSize, PasswdFile, TempDir, OutputDir, OutputEmail, Ip2Name, TopuserSortField, UserSortField, TopuserSortOrder, UserSortOrder, UserAgentLog, ExcludeHosts, DateFormat, ExcludeUsers, PerUserLimitFile, PerUserLimit, UserIp, MaxElapsed); + getconf(); if(realt) { realtime(); exit(0); } - if(debugz) { - fprintf(stderr, "SARG: ConfigFile.........= %s\n",ConfigFile); - fprintf(stderr, "SARG: AccessLog..........= %s\n",AccessLog); - fprintf(stderr, "SARG: BgColor............= %s\n",BgColor); - fprintf(stderr, "SARG: TxColor............= %s\n",TxColor); - fprintf(stderr, "SARG: TxBgColor..........= %s\n",TxBgColor); - fprintf(stderr, "SARG: TiColor............= %s\n",TiColor); - fprintf(stderr, "SARG: LogoImage..........= %s\n",LogoImage); - fprintf(stderr, "SARG: LogoText...........= %s\n",LogoText); - fprintf(stderr, "SARG: LogoTextColor......= %s\n",LogoTextColor); - fprintf(stderr, "SARG: Width..............= %s\n",Width); - fprintf(stderr, "SARG: Height.............= %s\n",Height); - fprintf(stderr, "SARG: Title..............= %s\n",Title); - fprintf(stderr, "SARG: BgImage............= %s\n",BgImage); - fprintf(stderr, "SARG: FontFace...........= %s\n",FontFace); - fprintf(stderr, "SARG: HeaderColor........= %s\n",HeaderColor); - fprintf(stderr, "SARG: HeaderBgColor......= %s\n",HeaderBgColor); - fprintf(stderr, "SARG: FontSize...........= %s\n",FontSize); - fprintf(stderr, "SARG: PasswdFile.........= %s\n",PasswdFile); - fprintf(stderr, "SARG: TempDir............= %s\n",TempDir); - fprintf(stderr, "SARG: OutputDir..........= %s\n",OutputDir); - fprintf(stderr, "SARG: Ip2Name............= %s\n",Ip2Name); - fprintf(stderr, "SARG: TopuserSortField.........= %s\n",TopuserSortField); - fprintf(stderr, "SARG: UserSortField.........= %s\n",UserSortField); - fprintf(stderr, "SARG: TopuserSortOrder.........= %s\n",TopuserSortOrder); - fprintf(stderr, "SARG: UserSortOrder.........= %s\n",UserSortOrder); - fprintf(stderr, "SARG: UserAgentLog.......= %s\n",UserAgentLog); - fprintf(stderr, "SARG: ExcludeHosts.......= %s\n",ExcludeHosts); - fprintf(stderr, "SARG: DateFormat.........= %s\n",DateFormat); - fprintf(stderr, "SARG: ExcludeUsers.......= %s\n",ExcludeUsers); - fprintf(stderr, "SARG: PerUserLimitFile...= %s\n",PerUserLimitFile); - fprintf(stderr, "SARG: PerUserLimit.......= %s\n",PerUserLimit); - fprintf(stderr, "SARG: UserIp.............= %s\n",UserIp); - fprintf(stderr, "SARG: MaxElapsed.........= %s\n",MaxElapsed); - fprintf(stderr, "SARG: LastLog............= %s\n",LastLog); - fprintf(stderr, "SARG:\n"); - } - if(strcmp(IndexTree,"file") == 0) strcpy(ImageFile,"../images"); else @@ -534,60 +493,45 @@ int main(argc,argv) if(strstr(excludeuser,"indexonly") != 0) indexonly++; } - if(strcmp(ExcludeUsers,"indexonly") == 0) - indexonly++; - if(strcmp(Index,"only") == 0) - indexonly++; + if(strcmp(ExcludeUsers,"indexonly") == 0) indexonly++; + if(strcmp(Index,"only") == 0) indexonly++; - if(dns) - strcpy(Ip2Name,"yes"); + if(dns) strcpy(Ip2Name,"yes"); - if(strcmp(UserIp,"yes") == 0) - userip++; + if(strcmp(UserIp,"yes") == 0) userip++; - if(strlen(MaxElapsed)>1) - max_elapsed=atol(MaxElapsed); + if(strlen(MaxElapsed)>1) max_elapsed=atol(MaxElapsed); - if(strlen(outdir)<1) - strcpy(outdir,OutputDir); + if(strlen(outdir)<1) strcpy(outdir,OutputDir); strcat(outdir,"/"); - if(arq[0] == '\0') - strcpy(arq,AccessLog); + if(arq[0] == '\0') strcpy(arq,AccessLog); - if(uagent[0] == '\0') - strcpy(uagent,UserAgentLog); + if(uagent[0] == '\0') strcpy(uagent,UserAgentLog); - if(tmp[0] == '\0') - strcpy(tmp,TempDir); - else - strcpy(TempDir,tmp); + if(tmp[0] == '\0') strcpy(tmp,TempDir); + else strcpy(TempDir,tmp); - if(df[0] == '\0') - strcpy(df,DateFormat); - else - strcpy(DateFormat,df); + if(df[0] == '\0') strcpy(df,DateFormat); + else strcpy(DateFormat,df); if(df[0] == '\0') { strcpy(df,"u"); strcpy(DateFormat,"u"); } - if(strlen(email)<1){ - if(strlen(OutputEmail)>0) - strcpy(email,OutputEmail); - } + if(strlen(email)<1 && strlen(OutputEmail)>0) strcpy(email,OutputEmail); strcpy(tmp2,tmp); if(strlen(email) > 0) { - sprintf(wtemp2,"%s/sarg_tmp",tmp2); + sprintf(wtemp2,"%s/sarg",tmp2); my_mkdir(wtemp2); - strcat(tmp2,"/sarg_tmp"); + strcat(tmp2,"/sarg"); strcpy(outdir,tmp2); strcat(outdir,"/"); - } + } strcat(tmp2,"/sarg.log"); @@ -697,31 +641,36 @@ int main(argc,argv) sprintf(msg,"sarg %s: %s",text[73],VERSION); debuga(msg); } -#if defined(RLIMIT_NOFILE) - getrlimit (RLIMIT_NOFILE, &rl); -#else #if defined(RLIMIT_OFILE) - getrlimit (RLIMIT_OFILE, &rl); -#endif - l1 = rl.rlim_cur; - l2 = rl.rlim_max; - rl.rlim_cur = atol(Ulimit); - rl.rlim_max = atol(Ulimit); + if (strlen(Ulimit) > 0) { #if defined(RLIMIT_NOFILE) - if(setrlimit (RLIMIT_NOFILE, &rl) == -1) { + getrlimit (RLIMIT_NOFILE, &rl); #else #if defined(RLIMIT_OFILE) - if(setrlimit (RLIMIT_OFILE, &rl) == -1) { + getrlimit (RLIMIT_OFILE, &rl); #endif - sprintf(msg,"setrlimit error - %s\n",strerror(errno)); - debuga(msg); - } + l1 = rl.rlim_cur; + l2 = rl.rlim_max; + + if(Ulimit[0] != '\0') { + rl.rlim_cur = atol(Ulimit); + rl.rlim_max = atol(Ulimit); + #if defined(RLIMIT_NOFILE) + if(setrlimit (RLIMIT_NOFILE, &rl) == -1) { + #else #if defined(RLIMIT_OFILE) + if(setrlimit (RLIMIT_OFILE, &rl) == -1) { + #endif + sprintf(msg,"setrlimit error - %s\n",strerror(errno)); + debuga(msg); + } + } - if(debug) { - sprintf(msg,"Maximum file descriptor: cur=%ld max=%ld, changed to cur=%ld max=%ld",l1,l2,rl.rlim_cur,rl.rlim_max); - debuga(msg); + if(debug) { + sprintf(msg,"Maximum file descriptor: cur=%ld max=%ld, changed to cur=%ld max=%ld",l1,l2,rl.rlim_cur,rl.rlim_max); + debuga(msg); + } } - if(UserTabFile[0] != '\0') { + if (UserTabFile[0] != '\0') { if(debug) { sprintf(msg,"%s: %s",text[86],UserTabFile); debuga(msg); @@ -740,21 +689,20 @@ int main(argc,argv) strncat(userfile,":",1); z1=0; z2=1; - while(fgets(buf,MAXLEN,fp_usr)!=NULL){ - buf[strlen(buf)-1]='\0'; - if(strstr(buf,"\r") != 0) - buf[strlen(buf)-1]='\0'; - getword(bufy,buf,' '); - for(z1=0; z1<=strlen(bufy); z1++) { - userfile[z2]=bufy[z1]; - z2++; - } - strncat(userfile,":",1); - for(z1=0; z1<=strlen(buf); z1++) { - userfile[z2]=buf[z1]; - z2++; - } - strncat(userfile,":",1); + while(fgets(buf,MAXLEN,fp_usr)!=NULL) { + buf[strlen(buf)-1]='\0'; + if(strstr(buf,"\r") != 0) buf[strlen(buf)-1]='\0'; + getword(bufy,buf,' '); + for(z1=0; z1<=strlen(bufy); z1++) { + userfile[z2]=bufy[z1]; + z2++; + } + strncat(userfile,":",1); + for(z1=0; z1<=strlen(buf); z1++) { + userfile[z2]=buf[z1]; + z2++; + } + strncat(userfile,":",1); } fclose(fp_usr); } @@ -782,16 +730,14 @@ int main(argc,argv) exit(1); } fgets(bufz,sizeof(bufz),fp_in); - if(!isalog) { - if(strncmp(bufz,"#Software: Mic",14) == 0) - isalog++; - } + if(!isalog && strncmp(bufz,"#Software: Mic",14) == 0) isalog++; + if(strncmp(bufz,"*** SARG Log ***",16) == 0) { getword(val2,arqtt,'-'); getword(val2,arqtt,'_'); getword(val3,arqtt,'-'); getword(val3,arqtt,'_'); - sprintf(periodo,"%s-%s",val2,val3); + sprintf(period,"%s-%s",val2,val3); sarglog=1; } else lseek(fileno(fp_in), 0, 0); @@ -829,21 +775,19 @@ int main(argc,argv) rewind(fp_in); recs1=0; recs2=0; - while( fgets(bufz,sizeof(bufz),fp_in) != NULL ) - recs1++; - rewind(fp_in); - printf("SARG: Records in file: %d, reading: %3.2f%%\r",recs1,(float) 0); + while( fgets(bufz,sizeof(bufz),fp_in) != NULL ) recs1++; + rewind(fp_in); + printf("SARG: Records in file: " OFFSET_STRING ", reading: %3.2f%%\r",recs1,(float) 0); fflush( stdout ) ; } - while(fgets(bufz,sizeof(bufz),fp_in)!=NULL) { recs2++; if( bool_ShowReadStatistics && ! --OutputNonZero) { perc = recs2 * 100 ; perc = perc / recs1 ; - printf("SARG: Records in file: %d, reading: %3.2f%%\r",recs1,perc); + printf("SARG: Records in file: " OFFSET_STRING ", reading: %3.2f%%\r",recs1,perc); fflush (stdout); OutputNonZero = REPORT_EVERY_X_LINES ; } @@ -896,8 +840,13 @@ int main(argc,argv) if((str=(char *) strstr(str+1, ".")) != (char *) NULL ) { strcpy(ip,data); strcpy(elap,"0"); - getword(none,bufz,' '); - getword(user,bufz,' '); + if(squid24) { + getword(user,bufz,' '); + getword(none,bufz,' '); + } else { + getword(none,bufz,' '); + getword(user,bufz,' '); + } getword(data,bufz,']'); getword(fun,bufz,'"'); getword(fun,bufz,' '); @@ -905,6 +854,8 @@ int main(argc,argv) getword(code2,bufz,' '); getword(code2,bufz,' '); getword(tam,bufz,' '); + + if((str=(char *) strstr(bufz, " ")) != (char *) NULL ) getword(code,bufz,' '); else strcpy(code,bufz); @@ -930,6 +881,10 @@ int main(argc,argv) getword(tam,bufz,' '); getword(fun,bufz,' '); getword(url,bufz,' '); +// while (strstr(bufz,"%20") != 0) { +// getword(warea,bufz,' '); +// strcat(url,warea); +// } getword(user,bufz,' '); squid_log=1; } @@ -988,6 +943,11 @@ int main(argc,argv) sprintf(data," %s/%s/%s:%s",dia,mes,ano,hora); } + if(strlen(user) > 150) { + totregsx++; + continue; + } + // include_users if(strlen(IncludeUsers) > 0) { sprintf(val1,":%s:",user); @@ -1005,7 +965,12 @@ int main(argc,argv) if(testvaliduserchar(user)) continue; - while(strstr(user,"%5c") != 0 || strstr(user,"%20") != 0) { + if(strstr(user,"%20") != 0) { + getword(w,user,'%'); + strcpy(user,w); + } + + while(strstr(user,"%5c") != 0) { getword(w,user,'%'); strcpy(wuser,user+2); sprintf(user,"%s.%s",w,wuser); @@ -1169,12 +1134,14 @@ int main(argc,argv) strcpy(user,"everybody"); } + if(dotinuser) { + str2=(char *)subs(user,"_","."); + strcpy(user,str2); + dotinuser=0; + } + if(puser) { sprintf(wuser,":%s:",user); - if(dotinuser && strstr(wuser,"_")) { - str2=(char *)subs(wuser,"_","."); - strcpy(wuser,str2); - } if(strstr(userfile, wuser) == 0) continue; } @@ -1215,7 +1182,7 @@ int main(argc,argv) #else if((fp_ou=fopen(tmp3,"a"))==NULL) { #endif - fprintf(stderr, "%s: (log) %s: %s - %s\n",argv[0],text[9],tmp3,strerror(errno)); + fprintf(stderr, "%s: (zzzlog) %s: %s - %s\n",argv[0],text[9],tmp3,strerror(errno)); exit(1); } fputs(bufz,fp_ou); @@ -1247,8 +1214,9 @@ int main(argc,argv) #endif totregsg++; - if(download_flag) { - sprintf(bufz, "%s %s %s %s %s\n",dia,hora,user,ip,download_url); + if(download_flag && strstr(code,"DENIED") == 0) { + ndownload = 1; + sprintf(bufz, "%s %s %s %s %s %s\n",dia,hora,user,ip,download_url); #ifdef LEGACY_WRITE_DOWNLOAD sprintf(tmp3,"%s/sarg/download.unsort",tmp); @@ -1293,13 +1261,13 @@ int main(argc,argv) if(!totper && !sarglog){ totper++; - sprintf(periodo,"%s-",tbuf); + sprintf(period,"%s-",tbuf); sprintf(per_hour,"%s-",tbuf2); if(strlen(date)>0) - fixper(tbuf, periodo, cduntil); + fixper(tbuf, period, cduntil); if(debugz){ debugaz("tbuf",tbuf); - debugaz("periodo",periodo); + debugaz("period",period); } } } @@ -1318,7 +1286,7 @@ int main(argc,argv) } } if( bool_ShowReadStatistics ) - printf("SARG: Records in file: %d, reading: %3.2f%%\n",recs1, (float) 100 ); + printf("SARG: Records in file: " OFFSET_STRING ", reading: %3.2f%%\n",recs1, (float) 100 ); } if ( fp_Download_Unsort ) @@ -1377,18 +1345,18 @@ int main(argc,argv) } if(date[0] == '\0' && !sarglog) { - strcat(periodo,tbuf); + strcat(period,tbuf); strcat(per_hour,tbuf2); } if(debugz){ debugaz("data",dia); debugaz("tbuf",tbuf); - debugaz("periodo",periodo); + debugaz("period",period); } if(debug){ - sprintf(msg, "%s: %s",text[17],periodo); + sprintf(msg, "%s: %s",text[17],period); debuga(msg); } @@ -1401,7 +1369,7 @@ int main(argc,argv) if(strcmp(ParsedOutputLog, "no") != 0 && !sarglog) { fclose(fp_log); - strcpy(val1,periodo); + strcpy(val1,period); getword(val2,val1,'-'); getword(val3,per_hour,'-'); sprintf(val4,"%s/sarg-%s_%s-%s_%s.log",ParsedOutputLog,val2,val3,val1,per_hour); @@ -1441,11 +1409,10 @@ int main(argc,argv) recomp(arq, zip); } // else unlink(arq); - if(debug) - debuga(text[21]); - - sprintf(csort,"rm -rf %s",tmp); - system(csort); + if(strcmp(tmp,"/tmp") != 0) { + sprintf(tmp4,"rm -rf %s",tmp); + system(tmp4); + } if(excludecode) free(excludecode); @@ -1456,6 +1423,9 @@ int main(argc,argv) if(excludeuser) free(excludeuser); + if(debug) + debuga(text[21]); + exit(0); } @@ -1492,7 +1462,7 @@ void getusers(char *pwdfile, int debug) bzero(userfile,nreg); sprintf(userfile,":"); - while(fgets(buf,255,fp_usr)!=NULL){ + while(fgets(buf,255,fp_usr)!=NULL) { getword(user,buf,':'); strncat(userfile,user,strlen(user)); strncat(userfile,":",1); @@ -1540,7 +1510,7 @@ void gethexclude(char *hexfile, int debug) strcat(excludefile," "); } - strcat(excludefile,"*FIM* "); + strcat(excludefile,"*END* "); fclose(fp_ex); @@ -1584,7 +1554,7 @@ void getuexclude(char *uexfile, int debug) strcat(excludeuser," "); } - strcat(excludeuser,"*FIM* "); + strcat(excludeuser,"*END* "); fclose(fp_ex); diff --git a/realtime.c b/realtime.c index 4078669..db4e86d 100755 --- a/realtime.c +++ b/realtime.c @@ -46,12 +46,49 @@ realtime(int argc, char *argv[]) void getlog() { - FILE *tmp, *fp; + FILE *tmp, *fp, *fp_usr; char template1[255]="/var/tmp/sargtpl1.XXXXXX"; char template2[255]="/var/tmp/sargtpl2.XXXXXX"; char cmd[512]; char buf[512]; - int fd1,fd2; + int fd1,fd2,nreg; + + if(UserTabFile[0] != '\0') { + if(debug) { + sprintf(msg,"%s: %s",text[86],UserTabFile); + debuga(msg); + } + if((fp_usr=fopen(UserTabFile,"r"))==NULL) { + fprintf(stderr, "SARG: (realtime) %s: %s - %s\n",text[45],UserTabFile,strerror(errno)); + exit(1); + } + nreg = lseek(fileno(fp_usr), 0, SEEK_END); + lseek(fileno(fp_usr), 0, 0); + if((userfile=(char *) malloc(nreg+100))==NULL){ + fprintf(stderr, "SARG ERROR: %s",text[87]); + exit(1); + } + bzero(userfile,nreg+100); + strncat(userfile,":",1); + z1=0; + z2=1; + while(fgets(buf,MAXLEN,fp_usr)!=NULL){ + buf[strlen(buf)-1]='\0'; + if(strstr(buf,"\r") != 0) buf[strlen(buf)-1]='\0'; + getword(bufy,buf,' '); + for(z1=0; z1<=strlen(bufy); z1++) { + userfile[z2]=bufy[z1]; + z2++; + } + strncat(userfile,":",1); + for(z1=0; z1<=strlen(buf); z1++) { + userfile[z2]=buf[z1]; + z2++; + } + strncat(userfile,":",1); + } + fclose(fp_usr); + } fd1 = mkstemp(template1); fd2 = mkstemp(template2); @@ -68,7 +105,7 @@ void getlog() pclose(fp); fclose(tmp); - sprintf(cmd,"sort -k 4,4 -k 5,5 -o %s %s",template2,template1); + sprintf(cmd,"sort -r -k 1,1 -k 2,2 -o %s %s",template2,template1); system(cmd); unlink(template1); datashow(template2); @@ -139,7 +176,29 @@ void datashow(char *tmp) if(strcmp(ouser,user) == 0 && strcmp(ourl,url) == 0) continue; - printf("%s %s%s%s%s%s\n",dat,tim,ip,user,typ,url,url); + strcpy(u2,user); + if(strcmp(Ip2Name,"yes") == 0) + ip2name(u2); + if(UserTabFile[0] != '\0') { + sprintf(warea,":%s:",u2); + if((str=(char *) strstr(userfile,warea)) != (char *) NULL ) { + z1=0; + str2=(char *) strstr(str+1,":"); + str2++; + bzero(name, MAXLEN); + while(str2[z1] != ':') { + name[z1]=str2[z1]; + z1++; + } + } else strcpy(name,u2); + } else strcpy(name,u2); + + if(dotinuser && strstr(name,"_")) { + str2=(char *)subs(name,"_","."); + strcpy(name,str2); + } + + printf("%s %s%s%s%s%s\n",dat,tim,ip,name,typ,url,url); strcpy(ouser,user); strcpy(ourl,url); } diff --git a/repday.c b/repday.c index 02562e6..9195780 100644 --- a/repday.c +++ b/repday.c @@ -33,28 +33,22 @@ void report_day(char *user, int *iprel, int *ipuser) FILE *fp_in, *fp_ou; char data[20]; - char dia[3]; - char mes[3]; - char ano[3]; char odata[20]; - char hora[20]; + char hour[20]; char elap[20]; char oelap[20]; - char whora[3]; char html[8000]; char arqout[MAXLEN]; char wdirname[MAXLEN]; char wuser[255]; char c[ 24 ][20]; int count=0; - int ihora=0; - long long int telap=0; + int ihour=0; long long int v[ 24 ] = { 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L }; long long int t[ 24 ] = { 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L }; long long int tt=0, ttt=0; - char ftime[128]; int i; sprintf(arqout,"%s/%s/d%s.html",dirname,user,user); @@ -73,30 +67,12 @@ void report_day(char *user, int *iprel, int *ipuser) exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(html,"\n",FontFace); - fputs(html,fp_ou); - } - - sprintf(html,"\n",BgColor,TxColor,BgImage); - fputs(html,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(html,"\n",LogoImage,Width,Height,LogoText); - fputs(html,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../../.."); @@ -110,7 +86,7 @@ void report_day(char *user, int *iprel, int *ipuser) fputs("
\n",fp_ou); fputs("
\n",fp_ou); - sprintf(html,"\n",text[89],periodo); + sprintf(html,"\n",text[89],period); fputs(html,fp_ou); strcpy(wuser,user); @@ -142,7 +118,7 @@ void report_day(char *user, int *iprel, int *ipuser) strcpy(name,str2); } - sprintf(html,"\n",text[90],name); + sprintf(html,"\n",text[90],name); fputs(html,fp_ou); fputs("\n",fp_ou); @@ -153,7 +129,7 @@ void report_day(char *user, int *iprel, int *ipuser) fputs( "\n", fp_ou ); if(strcmp(datetimeby,"bytes") == 0) - strcpy( html, "BYTES" ); + strcpy( html, text[93] ); else strcpy( html, "H:M:S" ); @@ -170,7 +146,7 @@ void report_day(char *user, int *iprel, int *ipuser) count++; } - getword(hora,buf,' '); + getword(hour,buf,' '); getword(elap,buf,' '); elap[strlen(elap)-1]='\0'; @@ -198,11 +174,11 @@ void report_day(char *user, int *iprel, int *ipuser) strcpy(elap,oelap); } - ihora=atoi(hora); + ihour=atoi(hour); - v[ ihora ]+=my_atoll(elap); + v[ ihour ]+=my_atoll(elap); tt+=my_atoll(elap); - t[ ihora ]+=my_atoll(elap); + t[ ihour ]+=my_atoll(elap); ttt+=my_atoll(elap); } @@ -238,6 +214,5 @@ void report_day(char *user, int *iprel, int *ipuser) fclose(fp_in); fclose(fp_ou); - return; } diff --git a/report.c b/report.c index 116b2fa..bf04bd4 100644 --- a/report.c +++ b/report.c @@ -29,7 +29,7 @@ void gerarel() { - FILE *fp_in, *fp_ou; + FILE *fp_in; char accdia[11], acchora[9], accuser[MAXLEN], accip[MAXLEN], accurl[MAXLEN], accbytes[12], accelap[10]; char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN], wdir[MAXLEN], per1[MAXLEN]; @@ -39,7 +39,6 @@ void gerarel() char accsmart[MAXLEN]; char wcrc[50]; char crc2[50]; - char u2[255]; long long int nbytes=0; long long int nelap=0; long long int nacc=0; @@ -54,9 +53,9 @@ void gerarel() nameantes[0]='\0'; smartfilter=0; - sprintf(dirname, "%s%s", outdir, periodo); - sprintf(wdir, "%s%s", outdir, periodo); - strcpy(per1,periodo); + sprintf(dirname, "%s%s", outdir, period); + sprintf(wdir, "%s%s", outdir, period); + strcpy(per1,period); vrfydir(wdir, per1, addr, site, us, email); if(debugz){ @@ -65,27 +64,23 @@ void gerarel() } strcpy(wdirname,dirname); - gperiodo(); + gperiod(); - if(strlen(UserAgentLog) > 0 && email[0] == '\0') - useragent(); + if(strlen(UserAgentLog) > 0 && email[0] == '\0') useragent(); olduser[0]='\0'; strncat(tmp,"/sarg",5); dirp = opendir(tmp); while ((direntp = readdir( dirp )) != NULL ) { - if(strstr(direntp->d_name,".log") == 0) + if((strstr(direntp->d_name,".log") == 0) || + (strncmp(direntp->d_name,"download.log",12) == 0) || + (strncmp(direntp->d_name,"denied.log",10) == 0) || + (strncmp(direntp->d_name,"authfail.log.unsort",19) == 0)) continue; - if(strncmp(direntp->d_name,"download.log",12) == 0) - continue; - if(strncmp(direntp->d_name,"denied.log",10) == 0) - continue; - if(strncmp(direntp->d_name,"authfail.log.unsort",19) == 0) - continue; - sprintf(tmp3,"%s/%s",tmp,direntp->d_name); - if((fp_in=fopen(tmp3,"r"))==NULL){ - fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp); + sprintf(tmp3,"%s/%s",tmp,direntp->d_name); + if((fp_in=fopen(tmp3,"r"))==NULL){ + fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp); exit(1); } @@ -114,8 +109,7 @@ void gerarel() getword(accurl,buf,' '); getword(accbytes,buf,' '); getword(acccode,buf,' '); - if(strncmp(acccode,"TCP_DENIED/407",14) == 0) - continue; + if(strncmp(acccode,"TCP_DENIED/407",14) == 0) continue; getword(accelap,buf,' '); getword(accsmart,buf,' '); getword(accsmart,buf,'"'); @@ -225,35 +219,19 @@ void gerarel() *s=tolower(*s); } - fputs("\n",fp_tt); - fputs("\n",fp_tt); - fputs("\n",fp_tt); - sprintf(html," \n",CharSet); - fputs(html,fp_tt); + fprintf(fp_tt, "\n\n\n \n",CharSet); css(fp_tt); fputs("\n",fp_tt); - - sprintf(html,"\n",BgColor,TxColor,BgImage); - fputs(html,fp_tt); - - fputs("
%s: %s
%s: %s
%s: %s
%s: %s
\n",fp_tt); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_tt); - sprintf(html,"\n",LogoImage,Width,Height,LogoText); - fputs(html,fp_tt); - fputs("\n",fp_tt); - fputs("
 %s
\n",fp_tt); - } + fprintf(fp_tt,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_tt, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_tt, "../../../.."); else show_sarg(fp_tt, "../.."); - sprintf(html,"%s\n",Title); - fputs(html,fp_tt); + fputs("
\n",fp_tt); + fprintf(fp_tt,"\n",Title); strcpy(u2,user); if(strcmp(Ip2Name,"yes") == 0) @@ -277,24 +255,17 @@ void gerarel() strcpy(name,str2); } - sprintf(html,"\n",text[89],periodo); - fputs(html,fp_tt); - sprintf(html,"\n",text[90],name); - fputs(html,fp_tt); - sprintf(html,"\n",text[104],UserSortField,UserSortOrder); - fputs(html,fp_tt); - sprintf(html,"\n",text[32],text[55]); - fputs(html,fp_tt); + fprintf(fp_tt,"\n",text[89],period); + fprintf(fp_tt,"\n",text[90],name); + fprintf(fp_tt,"\n",text[104],UserSortField,UserSortOrder); + fprintf(fp_tt,"\n",text[32]); fputs("
%s
%s: %s
%s: %s
%s: %s, %s
%s %s
%s: %s
%s: %s
%s: %s, %s
%s
\n",fp_tt); fputs("
\n",fp_tt); fputs("",fp_tt); bzero(tmp4, MAXLEN); - bzero(tmp5, MAXLEN); strncpy(tmp4,text[110],4); - strncpy(tmp5,text[110]+5,4); - sprintf(html,"\n",text[91],tmp4,tmp5); - fputs(html,fp_tt); + fprintf(fp_tt,"\n",text[91],tmp4,text[110]+5); } sprintf(html,"\n",accurl,accdia,acchora); @@ -302,9 +273,7 @@ void gerarel() if(strcmp(html,html_old) != 0) fputs(html,fp_tt); strcpy(html_old, html); - } else { - bzero(ltext110, 50); - } + } else bzero(ltext110, 50); strcpy(wcrc,acccode); getword(crc2,wcrc,'/'); @@ -317,7 +286,7 @@ void gerarel() if(strcmp(accuser,oldaccuser) != 0) { strcpy(wdirname,dirname); - totaliza_day(tmp,oldaccuser,indexonly); + day_totalize(tmp,oldaccuser,indexonly); } strcpy(oldaccuser,accuser); @@ -337,11 +306,13 @@ void gerarel() if(strstr(oldacccode,"DENIED") != 0) sprintf(oldmsg,"%s",text[46]); strcpy(wdirname,dirname); + if(strlen(oldaccuser) == 0) + strcpy(oldaccuser,accuser); gravatmpf(oldaccuser,wdirname,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache); strcpy(wdirname,dirname); gravager(wdirname,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache); strcpy(wdirname,dirname); - totaliza_day(tmp,oldaccuser,indexonly); + day_totalize(tmp,oldaccuser,indexonly); tmpsort(); @@ -349,8 +320,7 @@ void gerarel() totalger(wdirname, debug, outdir); if(strlen(email) == 0) { - if(strstr(ReportType,"downloads") != 0) - download_report(); + if(strstr(ReportType,"downloads") != 0) download_report(); if(strlen(DansGuardianConf) > 0) { strcpy(wdirname,dirname); @@ -363,39 +333,31 @@ void gerarel() strcpy(wdirname,dirname); topuser(); - if(strstr(ReportType,"topsites") != 0) - topsites(); + if(strstr(ReportType,"topsites") != 0) topsites(); - if(strstr(ReportType,"sites_users") != 0) - siteuser(); + if(strstr(ReportType,"sites_users") != 0) siteuser(); gen_denied_report(); strcpy(wdirname,dirname); authfail_report(); - if(smartfilter) - smartfilter_report(); + if(smartfilter) smartfilter_report(); - if(strlen(DansGuardianConf) > 0) - dansguardian_report(); + if(strlen(DansGuardianConf) > 0) dansguardian_report(); squidguard_report(); - if(strstr(ReportType,"users_sites") != 0) - htmlrel(); + if(strstr(ReportType,"users_sites") != 0) htmlrel(); make_index(); - if(strncmp(SuccessfulMsg,"yes",3) == 0) - fprintf(stderr, "SARG: %s %s\n",text[47],dirname); + if(strncmp(SuccessfulMsg,"yes",3) == 0) fprintf(stderr, "SARG: %s %s\n",text[47],dirname); } else { strcpy(wdirname,dirname); geramail(wdirname, debug, outdir, userip, email, TempDir); - if(strcmp(email,"stdout") != 0) { - if(strncmp(SuccessfulMsg,"yes",3) == 0) + if((strcmp(email,"stdout") != 0) && (strncmp(SuccessfulMsg,"yes",3) == 0)) fprintf(stderr, "SARG: %s %s\n",text[48],email); - } } if(indexonly) { @@ -403,7 +365,8 @@ void gerarel() index_only(wdirname, debug); } - removetmp(dirname); + if(strlen(email) < 0) + removetmp(dirname); return; } @@ -469,7 +432,6 @@ void gravatmp(char *oldaccuser, char *dirname, char *oldurl, long long int nacc, FILE *fp_ou; - char reg[MAXLEN]; char wdirname[MAXLEN]; if(indexonly) return; @@ -490,8 +452,7 @@ void gravatmp(char *oldaccuser, char *dirname, char *oldurl, long long int nacc, my_lltoa(nelap,val3,15); my_lltoa(incache,val4,15); my_lltoa(oucache,val5,15); - sprintf(reg,"%s %s %s %s %s %s %s\n",val1,val2,oldurl,oldmsg,val3,val4,val5); - fputs(reg,fp_ou); + fprintf(fp_ou,"%s %s %s %s %s %s %s\n",val1,val2,oldurl,oldmsg,val3,val4,val5); fclose(fp_ou); ttopen=0; @@ -512,11 +473,9 @@ void gravatmp_hora(char *dirname, char *user, char *data, char *hora, char *elap FILE *fp_ou; - char reg[MAXLEN]; char wdirname[MAXLEN]; - if(indexonly) return; - if(strstr(ReportType,"users_sites") == 0) return; + if(indexonly || (strstr(ReportType,"users_sites") == 0)) return; strcpy(wdirname,tmp); strcat(wdirname,"/"); @@ -528,10 +487,8 @@ void gravatmp_hora(char *dirname, char *user, char *data, char *hora, char *elap exit(1); } - if(strcmp(datetimeby,"bytes") == 0) - sprintf(reg,"%s %s %s\n",data,hora,bytes); - else sprintf(reg,"%s %s %s\n",data,hora,elap); - fputs(reg,fp_ou); + if(strcmp(datetimeby,"bytes") == 0) fprintf(fp_ou,"%s %s %s\n",data,hora,bytes); + else fprintf(fp_ou,"%s %s %s\n",data,hora,elap); fclose(fp_ou); @@ -544,11 +501,9 @@ void gravaporuser(char *user, char *dirname, char *url, char *ip, char *data, ch FILE *fp_ou; - char reg[MAXLEN]; char wdirname[MAXLEN]; - if(indexonly) return; - if(strstr(ReportType,"users_sites") == 0) return; + if(indexonly || (strstr(ReportType,"users_sites") == 0)) return; strcpy(wdirname,tmp); strcat(wdirname,"/"); @@ -560,8 +515,7 @@ void gravaporuser(char *user, char *dirname, char *url, char *ip, char *data, ch exit(1); } - sprintf(reg,"%s %s %s %s %s %s\n",ip,url,data,hora,tam,elap); - fputs(reg,fp_ou); + fprintf(fp_ou,"%s %s %s %s %s %s\n",ip,url,data,hora,tam,elap); fclose(fp_ou); @@ -575,11 +529,9 @@ void gravatmpf(char *oldaccuser, char *dirname, char *oldurl, long long int nacc FILE *fp_ou; - char reg[MAXLEN]; char wdirname[MAXLEN]; - if(indexonly) return; - if(strstr(ReportType,"users_sites") == 0) return; + if(indexonly || (strstr(ReportType,"users_sites") == 0)) return; strcpy(wdirname,tmp); strcat(wdirname,"/"); @@ -596,8 +548,7 @@ void gravatmpf(char *oldaccuser, char *dirname, char *oldurl, long long int nacc my_lltoa(nelap,val3,15); my_lltoa(incache,val4,15); my_lltoa(oucache,val5,15); - sprintf(reg,"%s %s %s %s %s %s %s\n",val1,val2,oldurl,oldmsg,val3,val4,val5); - fputs(reg,fp_ou); + fprintf(fp_ou,"%s %s %s %s %s %s %s\n",val1,val2,oldurl,oldmsg,val3,val4,val5); fclose(fp_ou); ttopen=0; @@ -618,10 +569,9 @@ void gravager(char *dirname, char *user, long long int nacc, char *url, long lon { FILE *fp_ou; - char reg[MAXLEN]; strcat(dirname,"/"); - strcat(dirname,"geral"); + strcat(dirname,"sarg-general"); if((fp_ou=fopen(dirname,"a"))==NULL){ fprintf(stderr, "SARG: (report) %s: %s\n",text[45],dirname); @@ -633,8 +583,7 @@ void gravager(char *dirname, char *user, long long int nacc, char *url, long lon my_lltoa(nelap,val3,15); my_lltoa(incache,val4,15); my_lltoa(oucache,val5,15); - sprintf(reg,"%s %s %s %s %s %s %s %s %s %s\n",user,val1,val2,url,ip,hora,dia,val3,val4,val5); - fputs(reg,fp_ou); + fprintf(fp_ou,"%s %s %s %s %s %s %s %s %s %s\n",user,val1,val2,url,ip,hora,dia,val3,val4,val5); fclose(fp_ou); return; @@ -646,7 +595,6 @@ void grava_SmartFilter(char *dirname, char *user, char *ip, char *data, char *ho FILE *fp_ou; - char reg[MAXLEN]; char wdirname[MAXLEN]; sprintf(wdirname,"%s/smartfilter.unsort",dirname); @@ -656,8 +604,7 @@ void grava_SmartFilter(char *dirname, char *user, char *ip, char *data, char *ho exit(1); } - sprintf(reg,"%s %s %s %s %s %s\n",user,data,hora,ip,url,smart); - fputs(reg,fp_ou); + fprintf(fp_ou,"%s %s %s %s %s %s\n",user,data,hora,ip,url,smart); fputs("\n\n",fp_tt); fclose(fp_ou); diff --git a/sarg-php/LANGUAGES b/sarg-php/LANGUAGES index b71e69e..2602df1 100644 --- a/sarg-php/LANGUAGES +++ b/sarg-php/LANGUAGES @@ -1,8 +1,8 @@ This PHP modules is under i18n. Available languages: - English Pedro Orso - Brazilian_Portuguese Pedro Orso + English Pedro Orso + Brazilian_Portuguese Pedro Orso French Jacques GRILLOT Russian Michael Stepanenko @@ -12,5 +12,5 @@ If you want to traslate, follow this steps: 1. edit translation.this file 2. translate every msgid sentence in msgstr tag -3. send to orso@brturbo.com to implement +3. send to pedro.orso@gmail.com to implement * plase send your name and email address. diff --git a/sarg-php/language.php b/sarg-php/language.php index f5bc8b9..8ab44a9 100755 --- a/sarg-php/language.php +++ b/sarg-php/language.php @@ -1,8 +1,8 @@ =PxUAFW3agTX;h9##t%6A`Sj^Fzv&j zs1?aLj@H;a3Q%}$TDTjuhssG2t;z}(geveL+^c|6OyYP7aSF*qB#BJ;eG$hj!W!R< z|IeGUw^TkrMaue41xHe>uq7v!#^NAK@=jbiuD3OXfoeBy-1dfttR9p`s8DUC$gJ*+ z-$X@TWc#ajS1g, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sarg-squidGuard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-08-12 11:14-0300\n" +"PO-Revision-Date: 2004-08-12 11:14-0400\n" +"Last-Translator: Pedro Lineu Orso \n" +"Language-Team: English\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: sarg-squidguard-block2.php:10 +msgid "Could not open the file" +msgstr "" + +#: sarg-squidguard-block2.php:19 +msgid "Write error" +msgstr "" + +#: sarg-squidguard-block2.php:23 +msgid "Done!" +msgstr "" + +#: sarg-squidguard-block2.php:27 +msgid "Return" +msgstr "" + +#: sarg-squidguard-block2.php:30 +msgid " to Sarg." +msgstr "" + +#: sarg-squidguard-block.php:29 +msgid "Sarg-SquidGuard - URL Blocking" +msgstr "" + +#: sarg-squidguard-block.php:33 +msgid "Choose the rule set where" +msgstr "" + +#: sarg-squidguard-block.php:36 +msgid "will by added" +msgstr "" diff --git a/sarg-php/locale/fr/LC_MESSAGES/messages.mo b/sarg-php/locale/fr/LC_MESSAGES/messages.mo new file mode 100755 index 0000000000000000000000000000000000000000..7dafa130f0254d2e2fa219750c9de890fe382364 GIT binary patch literal 821 zc-n=M&2AGh5XYTRz5*QJ079ZL6$cQK!=_cGbomf!np8mzt&$YZ?(THgWovK8c1n2< zUIKCAF?a|BHzXvEoS97`azSFGzkaekGdmyq^~TZ%!FHK-hn2Ffu|A2JeVf01XWeG~ zWZhz&ud$fR%nQu>%)87-%qz@(ZI)-B*<&TFi+uiApT&P>E;GN>XL)|qXYaq5_n5z# z*O@oZ32~MAkXf78Qdt$lF4LGxtfl!qyG`r)Yv3)66lG1($*pw=K1ZNXAUO1Jnj@j; z*ifWktOr}7nR*=R0>zd!xFUw=0~t{zk)xBK)9s)r1qu7Z9oQ^v@>ZKnydmuokjRoa z)kOgZXQ0v)Q?W<(2oo>+seFy(v^6ofDw$g(Yc-?B5KBv54qT>FxfwDi$2Nw>-tJg- z2$knRxurbDuo^|{GFp|b2%?R6Et1h%6tSZm;zYau`Ryp@<(QOlh4PkSc&U<;fDX2a z>*gUmonJKP7cVlhp+rh`GqK0dIf2Q7%219`9mmikG)dkV^atHVgH=NvYdjkM)>+BL zczov{mxa>i2_(599{;ocXjit|>l?DQaIOkFM3P;T*pw$5L;FDch5$9)W3@)^(K&n% zg#yBiSIL7EuMkQM9!llFh6!ncqS|AUYb4QA+OG)02^vlR*k!dxZVA!{yj9U9!a#h$ Sgx4DQ7jZ}m)R7GyQTzdth0?76 literal 0 Hc-jL100001 diff --git a/sarg-php/locale/fr/LC_MESSAGES/messages.po b/sarg-php/locale/fr/LC_MESSAGES/messages.po new file mode 100755 index 0000000..0cf5405 --- /dev/null +++ b/sarg-php/locale/fr/LC_MESSAGES/messages.po @@ -0,0 +1,43 @@ +msgid "" +msgstr "" +"Project-Id-Version: sarg-squidGuard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2005-02-10 09:30-0300\n" +"PO-Revision-Date: 2005-02-10 09:30-0300\n" +"Last-Translator: Jacques Grillot \n" +"Language-Team: French\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: sarg-squidguard-block2.php:10 +msgid "Could not open the file" +msgstr "Ne peut pas ouvrir le fichier" + +#: sarg-squidguard-block2.php:19 +msgid "Write error" +msgstr "Erreur d'ecriture" + +#: sarg-squidguard-block2.php:23 +msgid "Done!" +msgstr "Fait!" + +#: sarg-squidguard-block2.php:27 +msgid "Return" +msgstr "revenir" + +#: sarg-squidguard-block2.php:30 +msgid " to Sarg." +msgstr " a Sarg" + +#: sarg-squidguard-block.php:29 +msgid "Sarg-SquidGuard - URL Blocking" +msgstr "Sarg-SquidGuard - Blocage d'URL" + +#: sarg-squidguard-block.php:33 +msgid "Choose the rule set where" +msgstr "Choisissez la regle qui" + +#: sarg-squidguard-block.php:36 +msgid "will by added" +msgstr "sera ajoutee" diff --git a/sarg-php/locale/pt_BR/LC_MESSAGES/messages.mo b/sarg-php/locale/pt_BR/LC_MESSAGES/messages.mo new file mode 100755 index 0000000000000000000000000000000000000000..468f7090f575f8d678e13446e50bef32bd147f71 GIT binary patch literal 850 zc-nYx15OqrV3gUv05QvW{NIf9ABn70fr3fVr5UHh6n$jb3*3*q)>q*CUOZgxC z3y%B|{s4kACvF^>O)7FhVx+fkWzW2s@%wgV@spCcD7Y!Gg3E%>Y8Ky5?|ulb3w{c& z3C`98!ncIa3EvaGEqq`2l5np!)7ce%CCCNmE8T@zpD)69gugD#>VGZF?tcp}RgKRm zbwlW`@Kxb;;o9jeRaCttby{;luy}edX;Zzw0g+(GaIvB~W1@f%#|WHCgn$u_$H=HU zlu8SpBG3f=G-KbDs5Z#sk{V!4>{TVAcMg-YFOy*l8g>Vp&@L%|?|h;5*hK_nCRWF; zEMas4##*$h&-4!SsC!nwK@N_52B8uQbFt=1qdve1anxI(a8|cd5%iEUsQ0&ry2EIq z6zUBVF@x1cRx5SLNA%L| zWFq54{16{ZO5^+*e-T;PNEH+^0S^;_4m^?*X1LyNnRE+uqfqL9M literal 0 Hc-jL100001 diff --git a/sarg-php/locale/pt_BR/LC_MESSAGES/messages.po b/sarg-php/locale/pt_BR/LC_MESSAGES/messages.po new file mode 100755 index 0000000..aa9bda0 --- /dev/null +++ b/sarg-php/locale/pt_BR/LC_MESSAGES/messages.po @@ -0,0 +1,49 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sarg-squidGuard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-08-12 11:14-0300\n" +"PO-Revision-Date: 2004-08-12 11:14-0300\n" +"Last-Translator: Pedro Lineu Orso \n" +"Language-Team: Brazilian_Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: sarg-squidguard-block2.php:10 +msgid "Could not open the file" +msgstr "Não pode abrir o arquivo" + +#: sarg-squidguard-block2.php:19 +msgid "Write error" +msgstr "Erro na escrita do arquivo" + +#: sarg-squidguard-block2.php:23 +msgid "Done!" +msgstr "Feito!" + +#: sarg-squidguard-block2.php:27 +msgid "Return" +msgstr "Retorna" + +#: sarg-squidguard-block2.php:30 +msgid " to Sarg." +msgstr "ao Sarg" + +#: sarg-squidguard-block.php:29 +msgid "Sarg-SquidGuard - URL Blocking" +msgstr "Sarg-SquidGuard - Bloqueio de URL" + +#: sarg-squidguard-block.php:33 +msgid "Choose the rule set where" +msgstr "Escolha uma regra onde a URL" + +#: sarg-squidguard-block.php:36 +msgid "will by added" +msgstr "será incluida" diff --git a/sarg-php/locale/ru/LC_MESSAGES/messages.mo b/sarg-php/locale/ru/LC_MESSAGES/messages.mo new file mode 100755 index 0000000000000000000000000000000000000000..7e996b89712890b10b8677cd711d6632f84df1d8 GIT binary patch literal 812 zc-n1|O=}ZD7{{lvzC~2 z^GhToLQKroG&OA%Q4l-`_1LS=W=jj=13&(=v;XI1X1-k-ea$G&5?2Y2I8VG|Nqj&2 z_k*}X{3b3FCr1dKCiD>k zw6In|gDj^*-vgyB=qjqAV_EvhrnSN`RzMpX#o{7-;bkbjC!sJNa9AwN!IZB{D^iu& zb0aMR8lw$clfDm28z4LnJvMLj3oKba>+xr30;!b?L0l|2F6NA9(gmz)V|hL(OOH>5 z<$xEp3+ef%MV>P#EG6=3VbO(&Oy&;HWVtf|j^jGCp3G#($P4&N2LJdRhdWtt?z)rC zt)XvD1eO<#P=PP3HZJ64sUpya1&dXoP_1Zquqp#9OOH2%@^F3JgpVjql|xZRUPQ6# zLLm$SDO5T?o1Zy8SA33~Ru&bt*r?JB7T4|VsxPFv57frctv_7RGRw`eF`i`^4WCgZ z?a^hrkX@2C&0sKmI(D#IZ}yt~CUk4{s0W+9+Mv~e_I9HdzX98C4x+t}(dTXiQNP{W z?eD<*+J_GN74@S*G{z2^z3z5@XY12{-mu<@+O1wRXeXuqd}-BbxmVk4ZM9f^yV2}J MBdXU1oo1K)1, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sarg-squidGuard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2004-08-12 11:14-0300\n" +"PO-Revision-Date: 2004-11-18 17:31+0300\n" +"Last-Translator: Michael Stepanenko \n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-r\n" +"Content-Transfer-Encoding: 8bit\n" + +#: sarg-squidguard-block2.php:10 +msgid "Could not open the file" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ" + +#: sarg-squidguard-block2.php:19 +msgid "Write error" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ" + +#: sarg-squidguard-block2.php:23 +msgid "Done!" +msgstr "çÏÔÏ×Ï!" + +#: sarg-squidguard-block2.php:27 +msgid "Return" +msgstr "÷ÅÒÎÕÔØÓÑ" + +#: sarg-squidguard-block2.php:30 +msgid " to Sarg." +msgstr " × Sarg" + +#: sarg-squidguard-block.php:29 +msgid "Sarg-SquidGuard - URL Blocking" +msgstr "Sarg-SquidGuard - ÂÌÏËÉÒÏ×ËÁ URL" + +#: sarg-squidguard-block.php:33 +msgid "Choose the rule set where" +msgstr "÷ÙÂÅÒÅÔÅ ÎÁÂÏÒ ÐÒÁ×ÉÌ ËÕÄÁ URL" + +#: sarg-squidguard-block.php:36 +msgid "will by added" +msgstr "ÂÕÄÅÔ ÄÏÂÁ×ÌÅÎ" diff --git a/sarg-php/sarg-block-it.php b/sarg-php/sarg-block-it.php index 925b827..20efb9a 100755 --- a/sarg-php/sarg-block-it.php +++ b/sarg-php/sarg-block-it.php @@ -1,8 +1,8 @@ \n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(url,"\n",FontFace); - fputs(url,fp_ou); - } - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
%s%s%s
%s%s%s
%s%s%s
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); @@ -110,21 +97,22 @@ void siteuser() sprintf(url,"%s\n",Title); fputs(url,fp_ou); - sprintf(url,"%s: %s\n",text[89],periodo); + sprintf(url,"%s: %s\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"%s\n",text[85]); + sprintf(url,"%s\n",text[85]); fputs(url,fp_ou); fputs("
\n",fp_ou); fputs("
\n",fp_ou); fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(url,"\n",text[100],text[91],text[103]); + if(strncmp(strlow(BytesInSitesUsersReport),"yes",3) == 0) + sprintf(url,"\n",text[100],text[91],text[93],text[103]); + else sprintf(url,"\n",text[100],text[91],text[103]); fputs(url,fp_ou); user[0]='\0'; ourl[0]='\0'; + obytes[0]='\0'; if((users=(char *) malloc(204800))==NULL){ fprintf(stderr, "SARG: ERROR: %s",text[87]); @@ -165,11 +153,13 @@ void siteuser() ip2name(user); getword(nacc,buf,' '); + if (atoi(nacc) > 0) nsitesusers = 1; getword(nbytes,buf,' '); getword(url,buf,' '); if(!regs) { strcpy(ourl,url); + strcpy(obytes,nbytes); regs++; } @@ -193,21 +183,28 @@ void siteuser() sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,ourl); else BlockImage[0]='\0'; - if(strcmp(url,ourl) != 0) { - sprintf(html,"\n",regs,BlockImage,ourl,ourl,users); + if(strcmp(url,ourl) != 0 && nsitesusers) { + if(strncmp(strlow(BytesInSitesUsersReport),"yes",3) == 0) { + llbytes=my_atoll(obytes); + sprintf(wwork2,"%s",fixnum(llbytes,1)); + sprintf(html,"\n",regs,BlockImage,ourl,ourl,wwork2,users); + } else sprintf(html,"\n",regs,BlockImage,ourl,ourl,users); fputs(html,fp_ou); regs++; ucount=0; strcpy(users,name); strcat(users," "); strcpy(ourl,url); + strcpy(obytes,nbytes); } } - sprintf(html,"\n",regs,ourl,ourl,users); - fputs(html,fp_ou); + if(nsitesusers) { + sprintf(html,"\n",regs,ourl,ourl,users); + fputs(html,fp_ou); + } - unlink(geral2); + unlink(general2); fputs("
%s%s%s
%s%s%s%s
%s%s%s
%d%s%s%s
%d%s%s%s%s
%d%s%s%s
%d%s%s
%d%s%s
\n",fp_ou); diff --git a/smartfilter.c b/smartfilter.c index c38c9ac..50f9e46 100644 --- a/smartfilter.c +++ b/smartfilter.c @@ -39,7 +39,7 @@ void smartfilter_report() char per[MAXLEN]; char sites[MAXLEN]; char report[MAXLEN]; - char periodo[100]; + char period[100]; char ip[MAXLEN]; char user[MAXLEN]; char ouser[MAXLEN]; @@ -58,9 +58,9 @@ void smartfilter_report() strup(smartheader); sprintf(smart_in,"%s/smartfilter.unsort",dirname); - sprintf(sites,"%s/sites",dirname); + sprintf(sites,"%s/sarg-sites",dirname); sprintf(smart_ou,"%s/smartfilter.log",dirname); - sprintf(per,"%s/periodo",dirname); + sprintf(per,"%s/sarg-period",dirname); sprintf(report,"%s/smartfilter.html",dirname); if ((fp_in = fopen(per, "r")) == 0) { @@ -68,7 +68,7 @@ void smartfilter_report() exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); sprintf(csort,"sort -n -k 1,1 -k 2,2 -k 3,3 -o '%s' '%s'",smart_ou,smart_in); @@ -85,47 +85,23 @@ void smartfilter_report() exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(url,"\n",FontFace); - fputs(url,fp_ou); - } - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); fputs("
\n",fp_ou); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } - - sprintf(url,"%s\n",TiColor,Title); - fputs(url,fp_ou); - - sprintf(url,"%s: %s\n",HeaderBgColor,FontSize,text[89],periodo); - fputs(url,fp_ou); - sprintf(url,"%s %s\n",HeaderBgColor,FontSize,text[116],text[55]); - fputs(url,fp_ou); + fprintf(fp_ou,"%s\n",TiColor,Title); + fprintf(fp_ou,"%s: %s\n",HeaderBgColor,FontSize,text[89],period); + fprintf(fp_ou,"%s\n",HeaderBgColor,FontSize,text[116]); fputs("
\n",fp_ou); fputs("
\n",fp_ou); fputs("\n",fp_ou); fputs("\n",fp_ou); fputs("\n",fp_ou); - sprintf(url,"\n",HeaderBgColor,FontSize,text[98],HeaderBgColor,FontSize,text[111],HeaderBgColor,FontSize,text[110],HeaderBgColor,FontSize,text[91],HeaderBgColor,FontSize,smartheader); - fputs(url,fp_ou); + fprintf(fp_ou,"\n",HeaderBgColor,FontSize,text[98],HeaderBgColor,FontSize,text[111],HeaderBgColor,FontSize,text[110],HeaderBgColor,FontSize,text[91],HeaderBgColor,FontSize,smartheader); while(fgets(buf,sizeof(buf),fp_in)!=NULL) { getword(user,buf,' '); @@ -175,16 +151,10 @@ void smartfilter_report() sprintf(html2,"\n",BgColor,TxColor,BgImage); fputs(html2,fp_user); fputs("
%s%s%s%s%s
%s%s%s%s%s
\n",fp_user); - if(strlen(LogoImage) > 0) { - sprintf(html2,"\n",TiColor,Title); - fputs(html2,fp_user); - sprintf(html2,"\n",HeaderBgColor,FontSize,text[89],periodo); - fputs(html2,fp_user); - sprintf(html2,"\n",HeaderBgColor,FontSize,text[90],FontSize,user); - fputs(html2,fp_user); + if(strlen(LogoImage) > 0) fprintf(fp_user,"\n",TiColor,Title); + fprintf(fp_user,"\n",HeaderBgColor,FontSize,text[89],period); + fprintf(fp_user,"\n",HeaderBgColor,FontSize,text[90],FontSize,user); fputs("
%s\n",LogoImage,Width,Height,LogoTextColor,LogoText); - fputs(html2,fp_user); - } - sprintf(html2,"
%s
%s: %s
%s: %s
%s\n",LogoImage,Width,Height,LogoTextColor,LogoText); + fprintf(fp_user,"
%s
%s: %s
%s: %s
\n",fp_user); fputs("
\n",fp_user); fputs("\n",fp_user); diff --git a/sort.c b/sort.c index 736968b..4813a66 100644 --- a/sort.c +++ b/sort.c @@ -118,6 +118,11 @@ void sort_users_log(char *tmp, int debug) char wname2[MAXLEN]; char wdname[MAXLEN]; + if(debug) { + sprintf(msg,"%s",text[138]); + debuga(msg); + } + sprintf(wtmp,"%s/sarg",tmp); dirp = opendir(wtmp); diff --git a/squidguard_log.c b/squidguard_log.c index bf5eb11..59e378c 100644 --- a/squidguard_log.c +++ b/squidguard_log.c @@ -25,6 +25,10 @@ #include "include/conf.h" +static char **files_done = NULL; +static int nfiles_done = 0; + + void read_log(char *wentp, FILE *fp_ou) { FILE *fp_in = NULL; @@ -34,6 +38,7 @@ void read_log(char *wentp, FILE *fp_ou) char list[MAXLEN]; char wdata[127]; int idata=0; + int i; if(debug) { strcpy(buf,text[7]); @@ -42,6 +47,44 @@ void read_log(char *wentp, FILE *fp_ou) sprintf(msg,"%s squidGuard %s: %s",urly,buf,wentp); debuga(msg); } + + /* With squidGuard, you can log groups in only one log file. + We must parse each log files only one time. Example : + dest porn { + domainlist porn/domains + urllist porn/urls + log file1.log + } + dest aggressive { + domainlist aggressive/domains + urllist aggressive/urls + log file2.log + } + dest audio-video { + domainlist audio-video/domains + urllist audio-video/urls + log file1.log + } + */ + for (i=0; i\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - if(strlen(FontFace) > 0) { - sprintf(url,"\n",FontFace); - fputs(url,fp_ou); - } - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou, "../../.."); @@ -113,9 +95,9 @@ void squidguard_report() sprintf(url,"%s\n",Title); fputs(url,fp_ou); - sprintf(url,"%s: %s\n",text[89],periodo); + sprintf(url,"%s: %s\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"%s %s\n",text[120],text[55]); + sprintf(url,"%s\n",text[120]); fputs(url,fp_ou); fputs("
\n",fp_ou); diff --git a/topsites.c b/topsites.c index 0cf74a0..3f2eed0 100644 --- a/topsites.c +++ b/topsites.c @@ -40,14 +40,13 @@ void topsites() char ttnbytes[20]; char ttntime[20]; char csort[255]; - char geral[MAXLEN]; - char geral2[MAXLEN]; - char geral3[MAXLEN]; + char general[MAXLEN]; + char general2[MAXLEN]; + char general3[MAXLEN]; char per[MAXLEN]; char sites[MAXLEN]; char report[MAXLEN]; - char periodo[100]; - char ftime[128]; + char period[100]; char sortf[10]; char sortt[10]; long long int tnacc=0; @@ -56,12 +55,14 @@ void topsites() long long int twork1=0, twork2=0, twork3=0; int regs=0; + if(strcmp(Privacy,"yes") == 0) + return; - sprintf(geral,"%s/geral",dirname); - sprintf(sites,"%s/sites",dirname); - sprintf(geral2,"%s/geral2",dirname); - sprintf(geral3,"%s/geral3",dirname); - sprintf(per,"%s/periodo",dirname); + sprintf(general,"%s/sarg-general",dirname); + sprintf(sites,"%s/sarg-sites",dirname); + sprintf(general2,"%s/sarg-general2",dirname); + sprintf(general3,"%s/sarg-general3",dirname); + sprintf(per,"%s/sarg-period",dirname); if (strstr(ReportType,"topusers") == 0) sprintf(report,"%s/index.html",dirname); @@ -73,19 +74,19 @@ void topsites() exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); - sprintf(csort,"sort -k 4,4 -o '%s' '%s'",geral2,geral); + sprintf(csort,"sort -k 4,4 -o '%s' '%s'",general2,general); system(csort); - if((fp_in=fopen(geral2,"r"))==NULL) { - fprintf(stderr, "SARG: (topsite) %s: %s\n",text[8],geral2); + if((fp_in=fopen(general2,"r"))==NULL) { + fprintf(stderr, "SARG: (topsite) %s: %s\n",text[8],general2); exit(1); } - if((fp_ou=fopen(geral3,"w"))==NULL) { - fprintf(stderr, "SARG: (topsite) %s: %s\n",text[8],geral3); + if((fp_ou=fopen(general3,"w"))==NULL) { + fprintf(stderr, "SARG: (topsite) %s: %s\n",text[8],general3); exit(1); } @@ -135,7 +136,7 @@ void topsites() fclose(fp_in); fclose(fp_ou); - unlink(geral2); + unlink(general2); strlow(TopsitesSortField); strlow(TopsitesSortType); @@ -149,11 +150,11 @@ void topsites() if(strcmp(TopsitesSortType,"d") == 0) strcpy(sortt,"-r"); - sprintf(csort,"sort %s -k %s -o '%s' '%s'",sortt,sortf,sites,geral3); + sprintf(csort,"sort %s -k %s -o '%s' '%s'",sortt,sortf,sites,general3); system(csort); - unlink(geral2); - unlink(geral3); + unlink(general2); + unlink(general3); if((fp_in=fopen(sites,"r"))==NULL) { fprintf(stderr, "SARG: (topsite) %s: %s\n",text[8],sites); @@ -167,25 +168,11 @@ void topsites() regs=0; - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); + fprintf(fp_ou, "\n\n\n \n",CharSet); css(fp_ou); fputs("\n",fp_ou); - - sprintf(url,"\n",BgColor,TxColor,BgImage); - fputs(url,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(url,"\n",LogoImage,Width,Height,LogoText); - fputs(url,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ou,"../../.."); @@ -196,26 +183,29 @@ void topsites() sprintf(url,"%s\n",Title); fputs(url,fp_ou); - sprintf(url,"%s: %s\n",text[89],periodo); + sprintf(url,"%s: %s\n",text[89],period); fputs(url,fp_ou); - sprintf(url,"%s %s %s\n",text[83],TopSitesNum,text[84]); + sprintf(url,"%s %s %s\n",text[83],TopSitesNum,text[84]); fputs(url,fp_ou); fputs("
\n",fp_ou); fputs("
\n",fp_ou); fputs("\n",fp_ou); - sprintf(url," \ + sprintf(url," \ \ \n", \ text[100],text[91],text[92],text[93],text[99]); fputs(url,fp_ou); regs=1; + ntopsites = 0; while(fgets(buf,sizeof(buf),fp_in)!=NULL) { if(regs>atoi(TopSitesNum)) break; getword(nacc,buf,' '); + if (atoi(nacc) == 0) continue; + getword(nbytes,buf,' '); getword(ntime,buf,' '); getword(url,buf,' '); @@ -226,7 +216,7 @@ void topsites() sprintf(wwork1,"%s",fixnum(twork1,1)); sprintf(wwork2,"%s",fixnum(twork2,1)); - sprintf(wwork3,"%s",fixnum(twork3,1)); + sprintf(wwork3,"%s",fixtime(twork3,1)); if(strlen(BlockIt) > 0) sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url); diff --git a/topuser.c b/topuser.c index 55a9795..829c912 100644 --- a/topuser.c +++ b/topuser.c @@ -36,15 +36,14 @@ int topuser() float perc2=0.00; float inperc=0.00, ouperc=0.00; int posicao=0; - char olduser[MAXLEN], csort[MAXLEN], periodo[MAXLEN], arqper[MAXLEN]; + char olduser[MAXLEN], csort[MAXLEN], period[MAXLEN], arqper[MAXLEN]; char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN]; char user[MAXLEN], nacc[20], nbytes[20], preg[MAXLEN], tusr[MAXLEN]; - char ip[MAXLEN], hora[9], data[11], elap[15], incac[15], oucac[15], html[MAXLEN]; + char ip[MAXLEN], time[30], date[30], elap[30], incac[30], oucac[30]; char ipantes[MAXLEN], nameantes[MAXLEN]; char sfield[10]="2,2"; char order[255]="-r"; char wheader[512]=""; - char ftime[128]; int totuser=0; int topcount=0; char *s; @@ -57,12 +56,13 @@ int topuser() strcpy(top2,dirname); strcpy(top3,dirname); strcpy(tusr,dirname); - strcat(wger,"/geral"); + strcat(wger,"/sarg-general"); strcat(top1,"/top"); strcat(top2,"/top.tmp"); - strcat(tusr,"/users"); + strcat(tusr,"/sarg-users"); strcat(top3,"/index.html"); + ntopuser = 0; if((fp_in=fopen(wger,"r"))==NULL) { fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],wger); exit(1); @@ -73,16 +73,7 @@ int topuser() exit(1); } - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); + fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac); strcpy(olduser,user); totuser=1; @@ -119,16 +110,7 @@ int topuser() tnincache+=my_atoll(incac); tnoucache+=my_atoll(oucac); - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); + fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac); if(strcmp(user,"TOTAL") == 0) continue; @@ -199,107 +181,55 @@ int topuser() */ strcpy(arqper,dirname); - strcat(arqper,"/periodo"); + strcat(arqper,"/sarg-period"); if ((fp_in = fopen(arqper, "r")) == 0) { fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],arqper); exit(1); } - fgets(periodo,sizeof(periodo),fp_in); + fgets(period,sizeof(period),fp_in); fclose(fp_in); - fputs("\n",fp_top3); - fputs("\n",fp_top3); - fputs("\n",fp_top3); - sprintf(html," \n",CharSet); - fputs(html,fp_top3); + fprintf(fp_top3, "\n\n\n \n",CharSet); fputs("\n",fp_top3); - css(fp_top3); - - sprintf(preg,""); - fputs(preg,fp_top3); - - if(strlen(LogoImage) > 0) { - fputs("
%s%s
%s%s%s%s%s
\n",fp_top3); - sprintf(preg,"\n",LogoImage,Width,Height,LogoText); - fputs(preg,fp_top3); - fputs("\n",fp_top3); - fputs("
 %s
\n",fp_top3); - } + fprintf(fp_top3,""); + if(strlen(LogoImage) > 0) fprintf(fp_top3, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_top3, "../../.."); else show_sarg(fp_top3, ".."); fputs("
\n",fp_top3); - sprintf(preg,"\n",Title); - fputs(preg,fp_top3); + fprintf(fp_top3,"\n",Title); - sprintf(preg,"\n",text[89],periodo); - fputs(preg,fp_top3); + fprintf(fp_top3,"\n",text[89],period); strcat(wheader,(char *)text[104]); strcat(wheader,": "); strcat(wheader,TopuserSortField); strcat(wheader,", "); strcat(wheader,TopuserSortOrder); - sprintf(preg,"\n",wheader); - fputs(preg,fp_top3); - sprintf(preg,"\n",text[55]); - fputs(preg,fp_top3); + fprintf(fp_top3,"\n",wheader); + fprintf(fp_top3,"\n",text[137]); fputs("
%s
%s
%s: %s
%s: %s
%s
Topuser %s
%s
%s
\n",fp_top3); fputs("
\n",fp_top3); fputs("\n",fp_top3); - if(strstr(ReportType,"topsites") != 0) { - sprintf(preg,"\n",text[119],text[55]); - fputs(preg,fp_top3); - } - - if(strstr(ReportType,"sites_users") != 0) { - sprintf(preg,"\n",text[85],text[55]); - fputs(preg,fp_top3); - } - - if(dansguardian_count) { - sprintf(preg,"\n",text[128],text[55]); - fputs(preg,fp_top3); - } - - if(squidguard_count) { - sprintf(preg,"\n",text[122],text[55]); - fputs(preg,fp_top3); - } - - if (strstr(ReportType,"downloads") != 0 && download_count) { - sprintf(preg,"\n",text[125],text[55]); - fputs(preg,fp_top3); - } - - if (strstr(ReportType,"denied") != 0 && denied_count) { - sprintf(preg,"\n",text[118],text[55]); - fputs(preg,fp_top3); - } - - if (strstr(ReportType,"auth_failures") != 0 && authfail_count) { - sprintf(preg,"\n",text[117],text[55]); - fputs(preg,fp_top3); - } - - if(smartfilter) { - sprintf(preg,"\n",text[116],text[55]); - fputs(preg,fp_top3); - } - strcpy(preg,"\n"); - fputs(preg,fp_top3); + if(strstr(ReportType,"topsites") != 0 && strcmp(Privacy,"yes") != 0) fprintf(fp_top3,"\n",text[119]); + if(strstr(ReportType,"sites_users") != 0 && strcmp(Privacy,"yes") != 0) fprintf(fp_top3,"\n",text[85]); + if(dansguardian_count) fprintf(fp_top3,"\n",text[128]); + if(squidguard_count) fprintf(fp_top3,"\n",text[122]); + if (strstr(ReportType,"downloads") != 0 && download_count && strcmp(Privacy,"yes") != 0 && ndownload) fprintf(fp_top3,"\n",text[125]); + if (strstr(ReportType,"denied") != 0 && denied_count && strcmp(Privacy,"yes") != 0) fprintf(fp_top3,"\n",text[118]); + if (strstr(ReportType,"auth_failures") != 0 && authfail_count && strcmp(Privacy,"yes") != 0) fprintf(fp_top3,"\n",text[117]); + if(smartfilter) fprintf(fp_top3,"\n",text[116]); + fputs("\n",fp_top3); if (strstr(ReportType,"topuser") == 0) { fputs("\n\n",fp_top3); - if (fp_top3) - fclose (fp_top3); + if (fp_top3) fclose (fp_top3); return; } strcpy(val1,text[100]); @@ -364,18 +294,16 @@ int topuser() bzero(hbc8, 30); } - sprintf(preg,"\n",hbc1,val1,hbc1,hbc2,val2,hbc3,val3,hbc4,val4,hbc9,val11,hbc5,val9,val5,val10,hbc6,val6,hbc7,val7,hbc8,val8); + fprintf(fp_top3,"\n",hbc1,val1,hbc1,hbc2,val2,hbc3,val3,hbc4,val4,hbc9,val11,hbc5,val9,val5,val10,hbc6,val6,hbc7,val7,hbc8,val8); - fputs(preg,fp_top3); - - fscanf(fp_top1,"%s",user); - fscanf(fp_top1,"%s",nbytes); - fscanf(fp_top1,"%s",nacc); - fscanf(fp_top1,"%s",elap); - fscanf(fp_top1,"%s",incac); - fscanf(fp_top1,"%s",oucac); + ntopuser = 0; + fscanf(fp_top1,"%s%s%s%s%s%s",user,nbytes,nacc,elap,incac,oucac); while(!feof(fp_top1)) { + if(atoi(nacc) < 1) { + fscanf(fp_top1,"%s%s%s%s%s%s",user,nbytes,nacc,elap,incac,oucac); + continue; + } else ntopuser = 1; if(atoi(TopUsersNum) > 0 && topcount >= atoi(TopUsersNum)) goto final; strcpy(user2,user); tnbytes=my_atoll(nbytes); @@ -445,7 +373,8 @@ int topuser() unlink(val1); } - if(UserTabFile[0] != '\0' && strstr(user2,".") != 0) { +// if(UserTabFile[0] != '\0' && strstr(user2,".") != 0) { + if(UserTabFile[0] != '\0' && strcmp(user2,"TOTAL") != 0) { sprintf(warea,":%s:",user2); if((str=(char *) strstr(userfile,warea)) != (char *) NULL ) { z1=0; @@ -459,24 +388,22 @@ int topuser() } else strcpy(name,user2); } else strcpy(name,user2); - if(strcmp(Ip2Name,"yes") == 0) { - if((str=(char *) strstr(name, ".")) != (char *) NULL) { - if((str=(char *) strstr(str+1, ".")) != (char *) NULL) + if((strcmp(Ip2Name,"yes") == 0) && + ((str=(char *) strstr(name, ".")) != (char *) NULL) && + ((str=(char *) strstr(str+1, ".")) != (char *) NULL)) ip2name(name); - } - } twork=my_atoll(nacc); my_lltoa(twork,nacc,0); sprintf(wwork1,"%s",fixnum(twork,1)); sprintf(wwork2,"%s",fixnum(tnbytes,1)); - sprintf(wwork3,"%s",fixnum(tnelap,1)); + sprintf(wwork3,"%s",fixnum2(tnelap,1)); sprintf(val1,"%d",posicao); #ifdef HAVE_GD - sprintf(val2,"%s %s\n",href3,ImageFile,text[126],text[55],href2,ImageFile,ltext110,text[55]); + sprintf(val2,"%s %s\n",href3,ImageFile,text[126],href2,ImageFile,ltext110,text[55]); #else - sprintf(val2,"%s\n",href2,ImageFile,ltext110,text[55]); + sprintf(val2,"%s\n",href2,ImageFile,ltext110); #endif sprintf(val3,"%3.2f%%",perc); @@ -516,6 +443,7 @@ int topuser() bzero(val3, 255); bzero(hbc5, 30); } + if(strstr(TopUserFields,"IN-CACHE-OUT") == 0) { bzero(val4, 255); bzero(hbc6, 30); @@ -562,7 +490,7 @@ int topuser() sprintf(wwork1,"%s",fixnum(ttnacc,1)); sprintf(wwork2,"%s",fixnum(ttnbytes,1)); - sprintf(wwork3,"%s",fixnum(ttnelap,1)); + sprintf(wwork3,"%s",fixnum2(ttnelap,1)); strcpy(hbc1,"class=\"header2\""); strcpy(hbc2,"class=\"header2\""); @@ -614,23 +542,17 @@ int topuser() topcount++; - fscanf(fp_top1,"%s",user); - fscanf(fp_top1,"%s",nbytes); - fscanf(fp_top1,"%s",nacc); - fscanf(fp_top1,"%s",elap); - fscanf(fp_top1,"%s",incac); - fscanf(fp_top1,"%s",oucac); + fscanf(fp_top1,"%s%s%s%s%s%s",user,nbytes,nacc,elap,incac,oucac); } - if(ttnbytes) { - tnbytes=ttnbytes / totuser; - } else tnbytes=0; + if(ttnbytes) tnbytes=ttnbytes / totuser; + else tnbytes=0; twork=ttnacc/totuser; twork2=ttnelap/totuser; sprintf(wwork1,"%s",fixnum(twork,1)); sprintf(wwork2,"%s",fixnum(tnbytes,1)); - sprintf(wwork3,"%s",fixnum(twork2,1)); + sprintf(wwork3,"%s",fixnum2(twork2,1)); if(strstr(TopUserFields,"CONNECT") == 0) { bzero(wwork1, 255); @@ -655,12 +577,9 @@ int topuser() bzero(hbc6, 30); } - if((strstr(ReportType,"date_time") != 0 && strstr(TopUserFields,"AVERAGE") != 0)) { - sprintf(preg,"\n",hbc10,text[96],hbc1,wwork1,hbc2,wwork2,hbc3,buildtime(ttnelap/totuser),hbc4,wwork3); - fputs(preg,fp_top3); - } else if(strstr(TopUserFields,"AVERAGE") != 0) { - sprintf(preg,"\n",hbc10,text[96],hbc1,wwork1,hbc2,wwork2,hbc3,buildtime(ttnelap/totuser),hbc4,wwork3); - fputs(preg,fp_top3); + if(ntopuser) { + if((strstr(ReportType,"date_time") != 0 && strstr(TopUserFields,"AVERAGE") != 0)) fprintf(fp_top3,"\n",hbc10,text[96],hbc1,wwork1,hbc2,wwork2,hbc3,buildtime(ttnelap/totuser),hbc4,wwork3); + else if(strstr(TopUserFields,"AVERAGE") != 0) fprintf(fp_top3,"\n",hbc10,text[96],hbc1,wwork1,hbc2,wwork2,hbc3,buildtime(ttnelap/totuser),hbc4,wwork3); } if(strlen(UserAgentLog) > 0) { @@ -669,8 +588,7 @@ int topuser() fputs("\n",fp_top3); } - strcpy(preg,"

%s %s
%s %s
%s %s
%s %s
%s %s
%s %s
%s %s
%s %s
%s
%s
%s
%s
%s
%s
%s
%s
%s%s%s%s%s%s%s%s%s%s
%s%s%s%s%s%s%s%s%s%s
%s%s%15s%s%s
%s%s%15s%s%s
%s%s%15s%s%s
%s%s%15s%s%s
Useragent Report
"); - fputs(preg,fp_top3); + fputs("
",fp_top3); show_info(fp_top3); @@ -683,8 +601,7 @@ final: exit(1); } - sprintf(preg,"%d\n",totuser); - fputs(preg,fp_ou); + fprintf(fp_ou,"%d\n",totuser); fputs("\n\n",fp_top3); fclose(fp_top3); diff --git a/totday.c b/totday.c index 476593f..6895b61 100644 --- a/totday.c +++ b/totday.c @@ -25,7 +25,7 @@ #include "include/conf.h" -void totaliza_day(const char *tmp, char *user, int indexonly) +void day_totalize(const char *tmp, char *user, int indexonly) { FILE *fp_in, *fp_ou; @@ -88,7 +88,7 @@ void totaliza_day(const char *tmp, char *user, int indexonly) regs++; } - if(strcmp(hora,ohora) != 0) { + if(strcmp(hora,ohora) != 0 || strcmp(data,odata) != 0) { if(tused > telap) tused=telap; diff --git a/totger.c b/totger.c index a6fed1b..5334d48 100644 --- a/totger.c +++ b/totger.c @@ -40,23 +40,14 @@ int totalger(const char *dirname, int debug, const char *outdir) char incac[15], oucac[15]; strcpy(wger,dirname); - strcat(wger,"/geral"); + strcat(wger,"/sarg-general"); if((fp_in=fopen(wger,"r"))==NULL) { fprintf(stderr, "SARG: (totger) %s: %s\n",text[45],wger); exit(1); } - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); + fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,hora,data,elap,incac,oucac); while(!feof(fp_in)) { @@ -66,22 +57,13 @@ int totalger(const char *dirname, int debug, const char *outdir) tincache+=my_atoll(incac); toucache+=my_atoll(oucac); - fscanf(fp_in,"%s",user); - fscanf(fp_in,"%s",nacc); - fscanf(fp_in,"%s",nbytes); - fscanf(fp_in,"%s",url); - fscanf(fp_in,"%s",ip); - fscanf(fp_in,"%s",hora); - fscanf(fp_in,"%s",data); - fscanf(fp_in,"%s",elap); - fscanf(fp_in,"%s",incac); - fscanf(fp_in,"%s",oucac); + fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,hora,data,elap,incac,oucac); } fclose(fp_in); strcpy(wger,dirname); - strcat(wger,"/geral"); + strcat(wger,"/sarg-general"); if((fp_ou=fopen(wger,"a"))==NULL) { fprintf(stderr, "SARG: (totger) %s: %s\n",text[45],wger); diff --git a/usage.c b/usage.c index cadea24..3a7620d 100644 --- a/usage.c +++ b/usage.c @@ -49,7 +49,7 @@ void usage(char *prog) fprintf(stderr, "%5s-z %s\n"," ",text[35]); fprintf(stderr, "%5s-convert %s\n"," ",text[76]); fprintf(stderr, "%5s-split %s\n"," ",text[77]); - fprintf(stderr, "\n\t%s-%s %s Pedro Lineu Orso - orso@penguintech.com.br\n",PGM,VERSION,text[78]); + fprintf(stderr, "\n\t%s-%s %s Pedro Lineu Orso - pedro.orso@gmail.com\n",PGM,VERSION,text[78]); fprintf(stderr, "\thttp://sarg.sourceforge.net\n"); fprintf(stderr, "\n\tPease donate to the sarg project:"); fprintf(stderr, "\n\t\thttp://sarg.sourceforge.net/donations.php\n\n"); diff --git a/useragent.c b/useragent.c index bbb7a53..fe6dfbd 100644 --- a/useragent.c +++ b/useragent.c @@ -29,20 +29,14 @@ void useragent() { FILE *fp_in = NULL, *fp_ou = NULL, *fp_ht = NULL; - char tmp[MAXLEN], tmp2[MAXLEN]; - char ip[MAXLEN], data[255], agent[255], user[255]; - char ipantes[MAXLEN], nameantes[MAXLEN]; - char tagent[7]; - char csort[120]; - char msg[255]; - char ftime[128]; - char user_old[255]="$#%0a3bc6"; - char agent_old[255]="$#%0a3bc6"; - char html[255]; + char ip[MAXLEN], data[MAXLEN], agent[MAXLEN], user[MAXLEN]; + char ipbefore[MAXLEN], namebefore[MAXLEN]; + char tagent[MAXLEN]; + char user_old[MAXLEN]="$#%0a3bc6"; + char agent_old[MAXLEN]="$#%0a3bc6"; char hfile[MAXLEN]; char idate[MAXLEN], fdate[MAXLEN]; int agentot=0, agentot2=0, agentdif=0, cont=0; - float perc=0; unsigned long totregsl=0; ip[0]='\0'; @@ -51,12 +45,12 @@ void useragent() user[0]='\0'; user_old[0]='\0'; agent_old[0]='\0'; - ipantes[0]='\0'; - nameantes[0]='\0'; + ipbefore[0]='\0'; + namebefore[0]='\0'; - sprintf(hfile,"%s/%s/useragent.html", outdir,periodo); + sprintf(hfile,"%s/%s/useragent.html", outdir,period); - sprintf(tmp,"%s/squagent.unsort",TempDir); + sprintf(tmp3,"%s/squagent.unsort",TempDir); sprintf(tmp2,"%s/squagent.log",TempDir); if((fp_in=fopen(UserAgentLog,"r"))==NULL) { @@ -64,8 +58,8 @@ void useragent() exit(1); } - if((fp_ou=fopen(tmp,"w"))==NULL) { - fprintf(stderr, "SARG: (email) %s: %s\n",text[45],tmp); + if((fp_ou=fopen(tmp3,"w"))==NULL) { + fprintf(stderr, "SARG: (email) %s: %s\n",text[45],tmp3); exit(1); } @@ -84,6 +78,11 @@ void useragent() getword(agent,buf,'"'); getword(agent,buf,'"'); + strcpy(warea,agent); + strup(warea); + if(strstr(warea,"SCRIPT") != 0 || strstr(warea,"ONLOAD") != 0) + baddata(); + if(strlen(buf)) { getword(user,buf,' '); getword(user,buf,'\n'); @@ -118,10 +117,10 @@ void useragent() debuga(msg); } - sprintf(csort,"sort -n -t '\\' -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o '%s' '%s'",tmp2,tmp); + sprintf(csort,"sort -n -t '\\' -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o '%s' '%s'",tmp2,tmp3); system(csort); - unlink(tmp); + unlink(tmp3); if((fp_in=fopen(tmp2,"r"))==NULL) { fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp2); @@ -136,29 +135,11 @@ void useragent() if(debug) debuga(text[72]); - fputs("\n",fp_ht); - fputs("\n",fp_ht); - fputs("\n",fp_ht); - sprintf(html," \n",CharSet); - fputs(html,fp_ht); + fprintf(fp_ht, "\n\n\n \n",CharSet); fputs("\n",fp_ht); - - if(strlen(FontFace) > 0) { - sprintf(html,"\n",FontFace); - fputs(html,fp_ht); - } - - sprintf(html,"\n",BgColor,TxColor,BgImage); - fputs(html,fp_ht); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ht); - sprintf(html,"\n",LogoImage,Width,Height,LogoText); - fputs(html,fp_ht); - fputs("\n",fp_ht); - fputs("
 %s
\n",fp_ht); - } + if(strlen(FontFace) > 0) fprintf(fp_ht,"\n",FontFace); + fprintf(fp_ht,"\n",BgColor,TxColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ht, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); if(strcmp(IndexTree,"date") == 0) show_sarg(fp_ht, "../../.."); @@ -187,11 +168,11 @@ void useragent() getword(ip,buf,'\\'); if(strcmp(Ip2Name,"yes") == 0) { - if(strcmp(ip,ipantes) != 0) { - strcpy(ipantes,ip); + if(strcmp(ip,ipbefore) != 0) { + strcpy(ipbefore,ip); ip2name(ip); - strcpy(nameantes,ip); - } else strcpy(ip,nameantes); + strcpy(namebefore,ip); + } else strcpy(ip,namebefore); } getword(data,buf,'\\'); @@ -216,13 +197,13 @@ void useragent() fclose(fp_in); fclose(fp_ou); - sprintf(csort,"sort -n -t '\\' -k 3,3 -o '%s' '%s'",tmp,tmp2); + sprintf(csort,"sort -n -t '\\' -k 3,3 -o '%s' '%s'",tmp3,tmp2); system(csort); unlink(tmp2); - if((fp_in=fopen(tmp,"r"))==NULL) { - fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp); + if((fp_in=fopen(tmp3,"r"))==NULL) { + fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp3); exit(1); } @@ -262,15 +243,15 @@ void useragent() fclose(fp_in); fclose(fp_ou); - unlink(tmp); + unlink(tmp3); - sprintf(csort,"sort -n -r -k 1,1 -o '%s' '%s'",tmp,tmp2); + sprintf(csort,"sort -n -r -k 1,1 -o '%s' '%s'",tmp3,tmp2); system(csort); unlink(tmp2); - if((fp_in=fopen(tmp,"r"))==NULL) { - fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp); + if((fp_in=fopen(tmp3,"r"))==NULL) { + fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp3); exit(1); } @@ -306,7 +287,7 @@ void useragent() fclose(fp_in); fclose(fp_ht); - unlink(tmp); + unlink(tmp3); return; diff --git a/util.c b/util.c index 0eace43..f4c1941 100644 --- a/util.c +++ b/util.c @@ -31,43 +31,61 @@ static char mtab1[12][4]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; static char mtab2[12][3]={"01","02","03","04","05","06","07","08","09","10","11","12"}; +/*void fgetword(char *word, char *line, int stop) +{ + //VARIANT N1 + int x; + + for (x=0; line[x] && (line[x] != stop); x++) word[x] = line[x]; + word[x] = '\0'; + + //VARIANT N2 + char *tchar; + int difflen; + + tchar = strchr(line, stop); + if (tchar == NULL) strcpy(word, line); + else + { + difflen = tchar - line; + strncpy(word, line, difflen); + word[difflen] = '\0'; + } +}*/ + void getword(char *word, char *line, int stop) { - int x = 0,y; - int loop=0; + int x = 0, y = 0; int limit=10000; char wline[MAXLEN]; - strcpy(wline,line); + //strcpy(wline,line); if(strlen(line) < 3) { word[0]='\0'; return; } - for(x=0;((line[x]) && (line[x] != stop ));x++) { - loop++; - if(loop>=limit) { - printf("SARG: getword loop detected.\n"); - printf("SARG: Record=\"%s\"\n",wline); - printf("SARG: searching for \'x%x\'\n",stop); - printf("SARG: Maybe you have a broken record or garbage in your access.log file.\n"); - word[0]='\0'; - exit(1); - } - word[x] = line[x]; + for(x=0; line[x] && (line[x] != stop ) && x\n" , line ) ; - for(x=0;((line[x]) && (line[x] != stop && limit ));x++ , limit-- ) { - word[x] = line[x]; - } + for(x=0;((line[x]) && (line[x] != stop && limit ));x++ , limit-- ) word[x] = line[x]; if( ! limit) { printf("SARG: getword2 loop detected.\n"); printf("SARG: Buffer=\"%s\"\n",line); @@ -95,14 +111,11 @@ char * getword2(char *word, char *line, int stop) void getword3(char *word, char *line, int stop) { - int x = 0,y; - int loop=0; + int x = 0, y = 0; - for(x=0;((line[x]) && (line[x] != stop ));x++) - word[x] = line[x]; + for(x=0;(line[x] && (line[x] != stop ));x++) word[x] = line[x]; word[x] = '\0'; if(line[x]) ++x; - y=0; while((line[y++] = line[x++])); } @@ -322,7 +335,7 @@ void name_month(char *month) } -void fixper(char *tbuf, char *periodo, char *duntil) +void fixper(char *tbuf, char *period, char *duntil) { char warea[50]; @@ -348,7 +361,7 @@ void fixper(char *tbuf, char *periodo, char *duntil) if(strcmp(df,"u") == 0) sprintf(warea,"%s%s%s",ano,mes,dia); - strcat(periodo,warea); + strcat(period,warea); } @@ -396,14 +409,13 @@ void fixip(char *ip) char *fixnum(long long int value, int n) -#define MAXIMO 1024 +#define MAXLEN 1024 { - char num[MAXIMO]; - char buf[MAXIMO * 2]; + char num[MAXLEN]; + char buf[MAXLEN * 2]; char *pbuf; - char ret[MAXIMO * 2]; + static char ret[MAXLEN * 2]; char *pret; - float perc=0; register int i, j, k; static char abbrev[30]; @@ -458,7 +470,7 @@ char *fixnum(long long int value, int n) return(abbrev); } - bzero(buf, MAXIMO*2); + bzero(buf, MAXLEN*2); pbuf = buf; pret = ret; @@ -489,6 +501,50 @@ char *fixnum(long long int value, int n) } +char *fixnum2(long long int value, int n) +#define MAXLEN 1024 +{ + char num[MAXLEN]; + char buf[MAXLEN * 2]; + char *pbuf; + static char ret[MAXLEN * 2]; + char *pret; + register int i, j, k; + static char abbrev[30]; + + my_lltoa(value, num, 0); + bzero(buf, MAXLEN*2); + + pbuf = buf; + pret = ret; + k = 0; + + for ( i = strlen(num) - 1, j = 0 ; i > -1; i--) { + if ( k == 2 && i != 0 ) { + k = 0; + pbuf[j++] = num[i]; + if(strcmp(UseComma,"yes") == 0) + pbuf[j++] = ','; + else pbuf[j++] = '.'; + continue; + } + pbuf[j] = num[i]; + j++; + k++; + } + + pret[0]='\0'; + + for ( i = strlen(pbuf) - 1, j = 0 ; i > -1; i--, j++) + pret[j] = pbuf[i]; + + pret[j] = '\0'; + + return pret; +} + + + void buildhref(char * href) { char whref[MAXLEN]; @@ -538,10 +594,13 @@ void obtdate(char *dirname, char *name, char *data) FILE *fp_in; char wdir[MAXLEN]; - sprintf(wdir,"%s%s/date",dirname,name); + sprintf(wdir,"%s%s/sarg-date",dirname,name); if ((fp_in = fopen(wdir, "r")) == 0) { - data[0]='\0'; - return; + sprintf(wdir,"%s%s/date",dirname,name); + if ((fp_in = fopen(wdir, "r")) == 0) { + data[0]='\0'; + return; + } } fgets(data,80,fp_in); @@ -559,10 +618,13 @@ void obtuser(char *dirname, char *name, char *tuser) FILE *fp_in; char wdir[MAXLEN]; - sprintf(wdir,"%s%s/users",dirname,name); - if((fp_in=fopen(wdir,"r"))==NULL){ - tuser[0]='\0'; - return; + sprintf(wdir,"%s%s/sarg-users",dirname,name); + if((fp_in=fopen(wdir,"r"))==NULL) { + sprintf(wdir,"%s%s/users",dirname,name); + if((fp_in=fopen(wdir,"r"))==NULL) { + tuser[0]='\0'; + return; + } } fgets(tuser,20,fp_in); @@ -582,11 +644,13 @@ void obttotal(char *dirname, char *name, char *tbytes, char *tuser, char *media) long long int med=0; long long int wtuser=0; - sprintf(wdir,"%s%s/geral",dirname,name); - + sprintf(wdir,"%s%s/sarg-general",dirname,name); if ((fp_in = fopen(wdir, "r")) == 0) { - tbytes=0; - return; + sprintf(wdir,"%s%s/general",dirname,name); + if ((fp_in = fopen(wdir, "r")) == 0) { + tbytes=0; + return; + } } while(fgets(buf,sizeof(buf),fp_in)!=NULL) { @@ -615,8 +679,8 @@ void obttotal(char *dirname, char *name, char *tbytes, char *tuser, char *media) } -//void gperiodo(char *dirname, const char *periodo) -void gperiodo() +//void gperiod(char *dirname, const char *period) +void gperiod() { FILE *fp_ou; @@ -625,14 +689,14 @@ void gperiodo() strcpy(wdirname,dirname); strcat(wdirname,"/"); - strcat(wdirname,"periodo"); + strcat(wdirname,"sarg-period"); if((fp_ou=fopen(wdirname,"w"))==NULL){ fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname); exit(1); } - fputs(periodo,fp_ou); + fputs(period,fp_ou); fclose(fp_ou); if(debug) @@ -650,7 +714,6 @@ void vrfydir(char *dir, char *per1, char *addr, char *site, char *us, char *form char wdir[MAXLEN]; char per2[MAXLEN]; char dirname2[MAXLEN]; - char buffer[1024]; char images[512]; DIR *dirp; struct dirent *direntp; @@ -663,19 +726,19 @@ void vrfydir(char *dir, char *per1, char *addr, char *site, char *us, char *form bzero(m1,4); bzero(m2,4); if(strncmp(df,"u",1) == 0) { - strncpy(y1,periodo,4); - strncpy(y2,periodo+10,4); - strncpy(m1,periodo+4,3); - strncpy(m2,periodo+14,3); - strncpy(d1,periodo+7,2); - strncpy(d2,periodo+17,2); + strncpy(y1,period,4); + strncpy(y2,period+10,4); + strncpy(m1,period+4,3); + strncpy(m2,period+14,3); + strncpy(d1,period+7,2); + strncpy(d2,period+17,2); } else if(strncmp(df,"e",1) == 0) { - strncpy(d1,periodo+0,2); - strncpy(d2,periodo+10,2); - strncpy(m1,periodo+2,3); - strncpy(m2,periodo+12,3); - strncpy(y1,periodo+5,4); - strncpy(y2,periodo+15,4); + strncpy(d1,period+0,2); + strncpy(d2,period+10,2); + strncpy(m1,period+2,3); + strncpy(m2,period+12,3); + strncpy(y1,period+5,4); + strncpy(y2,period+15,4); } conv_month(m1); conv_month(m2); @@ -781,7 +844,7 @@ void vrfydir(char *dir, char *per1, char *addr, char *site, char *us, char *form sprintf(images,"%simages",outdir); mkdir(images,0755); - sprintf(wdir,"date >%s/%s",dirname,"date"); + sprintf(wdir,"date >%s/%s",dirname,"sarg-date"); system(wdir); sprintf(per2,"%s/images",SYSCONFDIR); @@ -966,7 +1029,13 @@ char *subs(char *str, char *from, char *to) return (char *) str; ss = strlen(str); st = strlen(to) + 10; - ret = (char *) malloc(ss + st); + + if((ret=(char *) malloc(ss + st))==NULL) + { + fprintf(stderr, "SARG: %s (%d):\n",text[59],ss+st); + exit(1); + } + bzero(ret,ss+st); tmp = strstr(str, from); @@ -989,12 +1058,12 @@ void removetmp(char *outdir) return; } else { if(debug) { - sprintf(msg,"%s: geral, periodo",text[82]); + sprintf(msg,"%s: sarg-general, sarg-period",text[82]); debuga(msg); } - sprintf(warea,"%s/geral",outdir); + sprintf(warea,"%s/sarg-general",outdir); if((fp_in=fopen(warea,"r"))==NULL){ - fprintf(stderr, "SARG: (removetmp) %s: %s\n",text[45],warea); + fprintf(stderr, "===SARG: (removetmp) %s: %s\n",text[45],warea); exit(1); } while(fgets(buf,sizeof(buf),fp_in)!=NULL) { @@ -1008,7 +1077,7 @@ void removetmp(char *outdir) } fputs(buf,fp_in); fclose(fp_in); - sprintf(warea,"%s/periodo",outdir); + sprintf(warea,"%s/sarg-period",outdir); unlink(warea); } @@ -1155,24 +1224,14 @@ int getnumlist( char *buf, numlist *list, const int len, const int maxvalue ) void show_info(FILE *fp_ou) { - - if(strcmp(ShowSargInfo,"yes") == 0) { - zdate(ftime, DateFormat); - sprintf(html,"


%s %s-%s %s %s
\n",text[108],URL,PGM,VERSION,text[109],ftime); - fputs(html,fp_ou); - } + if(strcmp(ShowSargInfo,"yes") != 0) return; + zdate(ftime, DateFormat); + fprintf(fp_ou,"


%s %s-%s %s %s
\n",text[108],URL,PGM,VERSION,text[109],ftime); } void show_sarg(FILE *fp_ou, char *ind) { - if(strcmp(ShowSargLogo,"yes") == 0) { - fputs("
\n",fp_ou); - sprintf(html,"\n",ind,Title); - fputs(html,fp_ou); - sprintf(html,"\n",Title); - fputs(html,fp_ou); - fputs("
 Squid Analysis Report Generator
 
\n",fp_ou); - } + if(strcmp(ShowSargLogo,"yes") == 0) fprintf(fp_ou,"
\n\n\n
 Squid Analysis Report Generator
 
\n",ind); } get_size(char *path, char *file) @@ -1192,41 +1251,29 @@ get_size(char *path, char *file) void write_html_header(FILE *fp_ou, char * ind) { - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); - fputs("\n",fp_ou); + fprintf(fp_ou, "\n\n\n \n\n",CharSet); css(fp_ou); - sprintf(buf,"\n",FontFace,TitleFontSize,BgColor,BgImage); - fputs(buf,fp_ou); - sprintf(buf,"
\n"); - fputs(buf,fp_ou); - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(html,"\n",LogoImage,Width,Height,LogoText); - fputs(html,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\n",fp_ou); - } + fprintf(fp_ou,"\n",FontFace,TitleFontSize,BgColor,BgImage); + if(strlen(LogoImage) > 0) fprintf(fp_ou, "
\n\n\n
 %s
\n",LogoImage,Width,Height,LogoText); show_sarg(fp_ou, ind); - sprintf(html,"%s\n",Title); - fputs(html,fp_ou); - fputs("
\n",fp_ou); - fputs("
\n",fp_ou); - fputs("\n",fp_ou); - + fprintf(fp_ou,"
\n\n
%s
\n
\n\n",Title); } - -void write_html_trailer(FILE *fp_ou) +void baddata() { - fputs("
\n",fp_ou); - zdate(ftime, DateFormat); - show_info(fp_ou); - fputs("\n\n",fp_ou); + printf("SARG: ------------------------------------------------------------------------------\n"); + printf("SARG: MALICIUS CODE DETECTED.\n"); + printf("SARG: I think someone is trying to execute arbitrary code in your system using sarg.\n"); + printf("SARG: please review your access.log and/or your useragent.log file.\n"); + printf("SARG: process stoped. No actions taken.\n"); + printf("SARG: ------------------------------------------------------------------------------\n"); + + system("rm -rf /tmp/sarg"); + sprintf(tmp4,"rm -rf %s",dirname); + system(tmp4); + system("rm -rf /tmp/sarg"); + + exit(1); } @@ -1253,6 +1300,15 @@ char url_module(char *url, char *w2) return; } + +void write_html_trailer(FILE *fp_ou) +{ + fputs("
\n",fp_ou); + zdate(ftime, DateFormat); + show_info(fp_ou); + fputs("\n\n",fp_ou); +} + void version() { printf("SARG Version: %s\n",VERSION); -- 2.47.2