diff options
Diffstat (limited to 'www-misc/mergelog')
-rw-r--r-- | www-misc/mergelog/Manifest | 1 | ||||
-rw-r--r-- | www-misc/mergelog/files/mergelog-4.5-asneeded.patch | 32 | ||||
-rw-r--r-- | www-misc/mergelog/files/mergelog-4.5-splitlog.patch | 384 | ||||
-rw-r--r-- | www-misc/mergelog/mergelog-4.5-r2.ebuild | 26 | ||||
-rw-r--r-- | www-misc/mergelog/metadata.xml | 13 |
5 files changed, 456 insertions, 0 deletions
diff --git a/www-misc/mergelog/Manifest b/www-misc/mergelog/Manifest new file mode 100644 index 000000000000..44228d35efba --- /dev/null +++ b/www-misc/mergelog/Manifest @@ -0,0 +1 @@ +DIST mergelog-4.5.tar.gz 39407 SHA256 fd97c5b9ae88fbbf57d3be8d81c479e0df081ed9c4a0ada48b1ab8248a82676d SHA512 f2259cb8981871c1f9d7cadc5414997789aa13eed0e18701673ffbddedc74954e137e282c1357cafaf515e18b39e256f890ec31568a305feefa1089a9347991f WHIRLPOOL 2c4382a3787c47ae5375492850fdb7cefff225537d4331fed2f97bdec76df6f324afae4888c341923709e9ea2b89199df6376ab5d738de974892dddaa722be2a diff --git a/www-misc/mergelog/files/mergelog-4.5-asneeded.patch b/www-misc/mergelog/files/mergelog-4.5-asneeded.patch new file mode 100644 index 000000000000..77573cc60f9e --- /dev/null +++ b/www-misc/mergelog/files/mergelog-4.5-asneeded.patch @@ -0,0 +1,32 @@ +Index: mergelog-4.5/configure.in +=================================================================== +--- mergelog-4.5.orig/configure.in ++++ mergelog-4.5/configure.in +@@ -10,6 +10,7 @@ AC_PROG_INSTALL() + + dnl Checks for programs. + AC_PROG_CC ++AM_PROG_CC_C_O + + dnl Checks for libraries. + dnl Replace `main' with a function in -lz: +Index: mergelog-4.5/src/Makefile.am +=================================================================== +--- mergelog-4.5.orig/src/Makefile.am ++++ mergelog-4.5/src/Makefile.am +@@ -1,7 +1,10 @@ + bin_PROGRAMS=mergelog zmergelog + +-mergelog: mergelog.c +- $(COMPILE) $(LIBS) -DVERSION=\"$(VERSION)\" -Wall mergelog.c -o $@ +- +-zmergelog: mergelog.c +- $(COMPILE) $(LIBS) -DVERSION=\"$(VERSION)\" -Wall -DUSE_ZLIB mergelog.c -o $@ ++# This is a bit of a hack, but it preserves the original design of the ++# upstream Makefile.am in assuming that $VERSION will be defined in the ++# Makefile that is actually fed to make. ++AM_CPPFLAGS=-DVERSION=\"@VERSION@\" ++AM_CFLAGS=-Wall ++mergelog_SOURCES = mergelog.c ++zmergelog_SOURCES = mergelog.c ++zmergelog_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_ZLIB diff --git a/www-misc/mergelog/files/mergelog-4.5-splitlog.patch b/www-misc/mergelog/files/mergelog-4.5-splitlog.patch new file mode 100644 index 000000000000..ddc0348543be --- /dev/null +++ b/www-misc/mergelog/files/mergelog-4.5-splitlog.patch @@ -0,0 +1,384 @@ +Index: mergelog-4.5/configure.in +=================================================================== +--- mergelog-4.5.orig/configure.in ++++ mergelog-4.5/configure.in +@@ -2,7 +2,7 @@ dnl Process this file with autoconf to p + AC_INIT(src/mergelog.c) + + PACKAGE=mergelog +-VERSION=4.5 ++VERSION=4.5-split + AM_INIT_AUTOMAKE($PACKAGE,$VERSION,nosubst) + + AC_ARG_PROGRAM +Index: mergelog-4.5/man/mergelog.1 +=================================================================== +--- mergelog-4.5.orig/man/mergelog.1 ++++ mergelog-4.5/man/mergelog.1 +@@ -1,8 +1,9 @@ +-.TH MERGELOG 1 "22 Jan 2001" ++.TH MERGELOG 1 "20 Jun 2001" + .SH NAME + mergelog \- a fast tool to merge http log files by date + .SH SYNOPSIS + .B mergelog ++.IR [-vh]\ [-o\ outfmt] + .IR logfile1 + .IR logfile2 \ ... + .SH DESCRIPTION +Index: mergelog-4.5/man/zmergelog.1 +=================================================================== +--- mergelog-4.5.orig/man/zmergelog.1 ++++ mergelog-4.5/man/zmergelog.1 +@@ -1,8 +1,9 @@ +-.TH ZMERGELOG 1 "22 Jan 2001" ++.TH ZMERGELOG 1 "20 Jun 2001" + .SH NAME + zmergelog \- a fast tool to merge gzipped http log files by date + .SH SYNOPSIS + .B zmergelog ++.IR [-vh]\ [-o\ outfmt] + .IR logfile1 + .IR logfile2 \ ... + .SH DESCRIPTION +Index: mergelog-4.5/src/mergelog.c +=================================================================== +--- mergelog-4.5.orig/src/mergelog.c ++++ mergelog-4.5/src/mergelog.c +@@ -45,12 +45,16 @@ + #define mygets(a,b,c,d) fast_gzgets(a,b,c,d) + #define myrewind gzrewind + #define myclose gzclose ++#define mywrite(f,b,l) gzwrite((f),(b),(l)) ++#define MYSUFFIX ".gz" + #else + #define myFH FILE + #define myopen fopen + #define mygets(a,b,c,d) fgets(a,b,c) + #define myrewind rewind + #define myclose fclose ++#define mywrite(f,b,l) fwrite((b),1,(l),(f)) ++#define MYSUFFIX + #endif + + +@@ -112,20 +116,141 @@ int main (int argc, char *argv[]) { + char *trans_digits[60]; + char *trans_year[200]; + char months[24]="anebarprayunulugepctovec"; ++ int goc; ++ int goUsage = 0, goVerbose = 0; ++ const char* goOutput = NULL; ++ const char* argv0 = *argv; ++ struct tm gotmFlags; ++ const char* goOutPtr; ++ myFH *outFile = NULL; ++ char outFileName[512]; ++ struct tm outFileTM; ++ char outFileNewName[512]; ++ size_t outBytes; ++ ++ while((goc=getopt(argc,argv,"vho:"))!=-1) { ++ switch(goc) { ++ case 'h': /* -h print usage */ ++ goUsage++; ++ break; ++ case 'v': /* -v verbose */ ++ goVerbose++; ++ break; ++ case 'o': /* -o fmt output specification */ ++ goOutput = optarg; ++ break; ++ default: /* whatever.. but we better print out usage */ ++ goUsage++; ++ break; ++ } ++ } ++ argv = &argv[optind]; ++ argc -= optind; + +- /* +- print usage if necessary +- */ +- if (argc == 1) { +- fprintf(stderr,"usage: %s logfile1 logfile2 ...\nmergelog %s Copyright (C) 2000-2001 Bertrand Demiddelaer\n",argv[0],VERSION); ++ if(argc<1) ++ goUsage++; ++ if(goUsage) { ++ printf( ++ "mergelog " VERSION " Copyright (c) 2000-2001 Bertrand Demiddelaer\n\n" ++ "I have at least %d reason(s) for lending you a helping hand on using the program.\n\n" ++ "Usage: %s [-vh] [-o fmt] logfile1 logfile2 ..\n\n" ++ " -h Print this message\n" ++ " -v Increase verbosity\n" ++ " -o Give template for output file name to write log to\n" ++ " instead of standard output in strftime(3) form.\n" ++ " ( eg. -o %%Y-%%m-%%d-access.log" MYSUFFIX ")\n", ++ goUsage,argv0); + exit(1); + } + ++ /* Analyze output format if given. It's better than trying to ++ * regenerate file name and compare it to the filename currently being ++ * written each time we want to dump one line. */ ++ if(goOutput) { ++ memset(&gotmFlags,0,sizeof(gotmFlags)); ++ for(goOutPtr=goOutput;*goOutPtr;goOutPtr++) { ++ if( (*goOutPtr=='%') && goOutPtr[1]) { ++ switch(*(++goOutPtr)) { ++ case 'a': /* abbreviated weekday */ ++ case 'A': /* full weekday */ ++ case 'u': /* day of week number */ ++ case 'w': /* zerobased weekday number */ ++ gotmFlags.tm_wday = 1; ++ break; ++ case 'b': /* abbreviated month */ ++ case 'h': /* %b */ ++ case 'B': /* full month */ ++ case 'm': /* month number */ ++ gotmFlags.tm_mon = 1; ++ break; ++ case 'C': /* century */ ++ case 'y': /* centuryless year */ ++ case 'Y': /* year with a century */ ++ gotmFlags.tm_year = 1; ++ break; ++ case 'd': /* day of month */ ++ case 'e': /* day of month space padded */ ++ gotmFlags.tm_mday = 1; ++ break; ++ case 'D': /* %m/%d/%y americanism */ ++ gotmFlags.tm_mon = gotmFlags.tm_mday = gotmFlags.tm_year = 1; ++ break; ++ case 'G': /* ISO 8601 year repsesentation. depends on week */ ++ case 'g': /* ISO 8601 year repsesentation without century. depends on week */ ++ case 'U': /* sunday-based week number */ ++ case 'V': /* ISO 8601 week number */ ++ case 'W': /* monday-based week number */ ++ case 'x': /* preferred date representation for locale without the time */ ++ gotmFlags.tm_yday = gotmFlags.tm_year = 1; ++ break; ++ case 'H': /* 24h format hour */ ++ case 'I': /* 12h format hour */ ++ case 'k': /* 24h format hour space padded */ ++ case 'l': /* 12h format hour space padded */ ++ case 'p': /* AM/PM indicator */ ++ case 'P': /* am/pm indicator */ ++ gotmFlags.tm_hour = 1; ++ break; ++ case 'j': /* day of year */ ++ gotmFlags.tm_yday = 1; ++ break; ++ case 'M': /* minute */ ++ gotmFlags.tm_min = 1; ++ break; ++ case 'n': /* newline character */ ++ case 't': /* tab character */ ++ case 'z': /* time zone as an offset from GMT */ ++ case 'Z': /* timezone name or abbreviation */ ++ case '%': /* % character */ ++ break; ++ case 'r': /* %I:%M:%S %p time in am/pm notation*/ ++ case 'T': /* %H:%M:%S time in 24h notation */ ++ case 'X': /* preferred time representation for locale without the date */ ++ gotmFlags.tm_hour = gotmFlags.tm_min = gotmFlags.tm_sec = 1; ++ break; ++ case 'R': /* %H:%M time in 24h notation without seconds */ ++ gotmFlags.tm_hour = gotmFlags.tm_min = 1; ++ break; ++ case 'S': /* second */ ++ gotmFlags.tm_sec = 1; ++ break; ++ case 'c': /* preferred date and time representation for locale */ ++ case 'E': /* weird modifier */ ++ case 'O': /* weird modifier */ ++ case 's': /* number of seconds since epoch */ ++ case '+': /* date and time in date(1) format */ ++ memset(&gotmFlags,0xFF,sizeof(gotmFlags)); ++ break; ++ } ++ } ++ } ++ } ++ + #ifdef USE_ZLIB + /* + check if there are enough gunzip buffers + */ +- if(argc>MAX_FILES) { ++ if(argc>=MAX_FILES) { + fputs("too many gzipped log files, aborting\n",stderr); + exit(1); + } +@@ -134,9 +259,9 @@ int main (int argc, char *argv[]) { + /* + open log files + */ +- for (i=1;i<argc;i++) { +- log_file[i-1]=myopen(argv[i],"r"); +- if (log_file[i-1] == NULL) { ++ for (i=0;i<argc;i++) { ++ log_file[i]=myopen(argv[i],"r"); ++ if (log_file[i] == NULL) { + fprintf(stderr,"can't open %s, aborting\n",argv[i]); + exit(1); + } +@@ -174,8 +299,8 @@ int main (int argc, char *argv[]) { + /* + init things for each log file and get the older date to start with + */ +- nb_files=argc-1; +- for (i=0;i<argc-1;i++) { ++ nb_files=argc; ++ for (i=0;i<argc;i++) { + + #ifdef USE_ZLIB + /* +@@ -230,7 +355,7 @@ int main (int argc, char *argv[]) { + */ + log_date=memchr(log_scan[i],'[',SCAN_SIZE); + if (log_date == NULL) { +- fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i],log_buffer[i]); + exit(1); + } + +@@ -239,7 +364,7 @@ int main (int argc, char *argv[]) { + */ + for (j=0;((j == 12)&&(memcmp(months+2*j,log_date+5,2) != 0));j++); + if (j == 12) { +- fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i],log_buffer[i]); + exit(1); + } + memcpy(log_month[i],trans_digits[j],2); +@@ -255,7 +380,7 @@ int main (int argc, char *argv[]) { + extract the date of this first line + */ + if (sscanf(log_date+1,"%d/%3c/%d:%d:%d:%d",&day,month,&year,&hour,&minut,&second) < 6) { +- fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i],log_buffer[i]); + exit(1); + } + +@@ -270,7 +395,7 @@ int main (int argc, char *argv[]) { + date->tm_isdst=-1; + for (j=0;((j<12)&&(memcmp(months+2*j,month+1,2) != 0));j++); + if (j == 12) { +- fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"abort due to a problem with %s:\n%s\n",argv[i],log_buffer[i]); + exit(1); + } + date->tm_mon=j; +@@ -303,6 +428,8 @@ int main (int argc, char *argv[]) { + exit if we have only empty files + */ + if (nb_files == 0) { ++ if(outFile) ++ myclose(outFile); + exit(0); + } + +@@ -323,7 +450,7 @@ int main (int argc, char *argv[]) { + /* + start to compute since this date + */ +- nb_files_orig=argc-1; ++ nb_files_orig=argc; + for(;;) { + + /* +@@ -377,7 +504,55 @@ int main (int argc, char *argv[]) { + write the log line + faster than a puts and we are sure to find a '\0' in log_buffer[i] + */ +- write(1,log_buffer[i],(size_t)((char *)memchr(log_buffer[i],0,BUFFER_SIZE)-log_buffer[i])); ++ if(goOutput) { ++ /* Check whether any of the date/time components concerned ++ * have changes or if we have no output file opened. It ++ * doesn't make much sense to do all the comparinsons in case ++ * we have no output file opened, but it makes even less sense ++ * to check for file handle each time we evaluate date. */ ++ if( ++# define TMCOMPARE(tmpart) ( gotmFlags.tm_##tmpart && (outFileTM.tm_##tmpart!=date->tm_##tmpart) ) ++ TMCOMPARE(sec) || TMCOMPARE(min) || TMCOMPARE(hour) ++ || TMCOMPARE(mday) || TMCOMPARE(mon) || TMCOMPARE(year) ++ || TMCOMPARE(wday) || TMCOMPARE(yday) ++ || !outFile ++# undef TMCOMPARE ++ ) { ++ if(!strftime(outFileNewName,sizeof(outFileNewName)-1,goOutput,date)) { ++ fprintf(stderr,"abort due to a failed attempt to generate output file name\n"); ++ if(outFile) ++ myclose(outFile); ++ exit(1); ++ } ++ if( (!outFile) || strcmp(outFileName,outFileNewName) ) { ++ /* okay, we're about to change output file or start ++ * writing first file */ ++ if(outFile) { ++ myclose(outFile); ++ } ++ if(goVerbose) ++ fprintf(stderr, "Writing to \"%s\"..\n",outFileNewName); ++ outFile = myopen(outFileNewName,"a"); ++ if(!outFile) { ++ fprintf(stderr, "abort due to a failed attempt to open/create output file %s: %m\n",outFileNewName); ++ exit(1); ++ } ++ memmove(outFileName,outFileNewName,sizeof(outFileName)); ++ memmove(&outFileTM,date,sizeof(outFileTM)); ++ } ++ } ++ /* %Y-%m-%d_%H-%M-%S-access.log */ ++ outBytes = (size_t)((char *)memchr(log_buffer[i],0,BUFFER_SIZE)-log_buffer[i]); ++ if( mywrite(outFile,log_buffer[i],outBytes) != outBytes) { ++ fprintf(stderr,"abort due to a failed write operation on output file %s: %m\n",outFileName); ++ if(outFile) ++ myclose(outFile); ++ exit(1); ++ } ++ }else{ ++ /* do it the way we would do without */ ++ write(1,log_buffer[i],(size_t)((char *)memchr(log_buffer[i],0,BUFFER_SIZE)-log_buffer[i])); ++ } + + /* + is it an end of file ? +@@ -388,7 +563,9 @@ int main (int argc, char *argv[]) { + close all log files and exit if all end of files are reached + */ + if (--nb_files == 0) { +- for (j=0;j<argc-1;j++) { ++ if(outFile) ++ myclose(outFile); ++ for (j=0;j<argc;j++) { + myclose(log_file[j]); + } + exit(0); +@@ -425,7 +602,7 @@ int main (int argc, char *argv[]) { + } else { + for (j=0;((j<12)&&(memcmp(months+2*j,log_date+5,2) != 0));j++); + if (j == 12) { +- fprintf(stderr,"problem with %s:\n%s\ncontinuing...\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"problem with %s:\n%s\ncontinuing...\n",argv[i],log_buffer[i]); + } else { + memcpy(log_month[i],trans_digits[j],2); + memcpy(log_month[i]+2,months+2*j,2); +@@ -439,7 +616,7 @@ int main (int argc, char *argv[]) { + } + } + } else { +- fprintf(stderr,"problem with %s:\n%s\ncontinuing...\n",argv[i+1],log_buffer[i]); ++ fprintf(stderr,"problem with %s:\n%s\ncontinuing...\n",argv[i],log_buffer[i]); + } + } + } +@@ -451,3 +628,7 @@ int main (int argc, char *argv[]) { + */ + exit(1); + } ++/* vim:set textwidth=72: */ ++/* vim:set cindent smartindent: */ ++/* vim:set formatoptions-=t formatoptions+=croql: */ ++/* vim:set expandtab shiftwidth=2: */ diff --git a/www-misc/mergelog/mergelog-4.5-r2.ebuild b/www-misc/mergelog/mergelog-4.5-r2.ebuild new file mode 100644 index 000000000000..fb51b5b73ba0 --- /dev/null +++ b/www-misc/mergelog/mergelog-4.5-r2.ebuild @@ -0,0 +1,26 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=4 + +AUTOTOOLS_AUTORECONF=1 +inherit autotools-utils eutils + +DESCRIPTION="A utility to merge apache logs in chronological order" +SRC_URI="mirror://sourceforge/mergelog/${P}.tar.gz" +HOMEPAGE="http://mergelog.sourceforge.net" + +IUSE="" +SLOT="0" +LICENSE="GPL-2" +KEYWORDS="amd64 ppc x86" + +RDEPEND="sys-libs/zlib" +DEPEND="${DEPEND}" + +DOCS=( AUTHORS ChangeLog README) +PATCHES=( + "${FILESDIR}"/${P}-splitlog.patch + "${FILESDIR}"/${P}-asneeded.patch +) diff --git a/www-misc/mergelog/metadata.xml b/www-misc/mergelog/metadata.xml new file mode 100644 index 000000000000..1958abb71792 --- /dev/null +++ b/www-misc/mergelog/metadata.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer> + <email>maintainer-needed@gentoo.org</email> + </maintainer> + <longdescription> +The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows NT. The goal of this project is to provide a secure, efficient and extensible server that provides HTTP services in sync with the current HTTP standards. +</longdescription> + <upstream> + <remote-id type="sourceforge">mergelog</remote-id> + </upstream> +</pkgmetadata> |