summaryrefslogtreecommitdiffstats
path: root/redhat/extras/htdig
diff options
context:
space:
mode:
Diffstat (limited to 'redhat/extras/htdig')
-rw-r--r--redhat/extras/htdig/htdig.spec17
-rw-r--r--redhat/extras/htdig/patches/drop-bogus-assignment16
-rw-r--r--redhat/extras/htdig/patches/gcc-11370
-rw-r--r--redhat/extras/htdig/patches/gcc-612
-rw-r--r--redhat/extras/htdig/patches/htdig_3.2.0b6-13.diff176
-rw-r--r--redhat/extras/htdig/patches/kfreebsd25
-rw-r--r--redhat/extras/htdig/patches/series6
-rw-r--r--redhat/extras/htdig/patches/sourceforge_logo118
8 files changed, 737 insertions, 3 deletions
diff --git a/redhat/extras/htdig/htdig.spec b/redhat/extras/htdig/htdig.spec
index a2a42e6c6..dab280946 100644
--- a/redhat/extras/htdig/htdig.spec
+++ b/redhat/extras/htdig/htdig.spec
@@ -5,13 +5,19 @@
Summary: A web indexing and searching system for a small domain or intranet
Name: htdig
-Version: 3.2.0b7
+Version: 3.2.0b6_19
Release: 1%{?dist}
License: GPL
Group: Networking/WWW
URL: http://www.htdig.org/
-Source0: htdig-3.2.0b7.tar.gz
+Source0: htdig_3.2.0b6.orig.tar.gz
+
+Patch1: patches/htdig_3.2.0b6-13.diff
+Patch2: patches/gcc-6
+Patch3: patches/sourceforge_logo
+Patch4: patches/drop-bogus-assignment
+Patch5: patches/gcc-11
BuildRequires: flex >= 2.5.4a-13
BuildRequires: libtool
@@ -172,7 +178,12 @@ fi
##########
%prep
-%setup -q
+%setup -q -n htdig-3.2.0b6
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
autoreconf -fiv
diff --git a/redhat/extras/htdig/patches/drop-bogus-assignment b/redhat/extras/htdig/patches/drop-bogus-assignment
new file mode 100644
index 000000000..2328280e3
--- /dev/null
+++ b/redhat/extras/htdig/patches/drop-bogus-assignment
@@ -0,0 +1,16 @@
+--- htdig-3.2.0b6.orig/htdig/Parsable.cc
++++ htdig-3.2.0b6/htdig/Parsable.cc
+@@ -74,7 +74,6 @@ Parsable::addString(Retriever& retriever
+ retriever.got_word(w, wordindex++, slot); // slot for img_alt
+ w = HtWordToken(0);
+ }
+- w = '\0';
+ }
+
+ //*****************************************************************************
+@@ -92,5 +91,4 @@ Parsable::addKeywordString(Retriever& re
+ retriever.got_word(w, wordindex++, 9);
+ w = HtWordToken(0);
+ }
+- w = '\0';
+ }
diff --git a/redhat/extras/htdig/patches/gcc-11 b/redhat/extras/htdig/patches/gcc-11
new file mode 100644
index 000000000..09c974cea
--- /dev/null
+++ b/redhat/extras/htdig/patches/gcc-11
@@ -0,0 +1,370 @@
+Index: b/htword/WordBitCompress.cc
+===================================================================
+--- a/htword/WordBitCompress.cc
++++ b/htword/WordBitCompress.cc
+@@ -29,7 +29,7 @@
+ #include"WordBitCompress.h"
+
+ // ******** HtVector_byte (implementation)
+-#define GType byte
++#define GType byte_t
+ #define HtVectorGType HtVector_byte
+ #include "HtVectorGenericCode.h"
+
+@@ -424,13 +424,13 @@
+ // **************************************************
+
+ void
+-BitStream::put_zone(byte *vals,int n,const char *tag)
++BitStream::put_zone(byte_t *vals,int n,const char *tag)
+ {
+ add_tag(tag);
+ for(int i=0;i<(n+7)/8;i++){put_uint(vals[i],TMin(8,n-8*i),NULL);}
+ }
+ void
+-BitStream::get_zone(byte *vals,int n,const char *tag)
++BitStream::get_zone(byte_t *vals,int n,const char *tag)
+ {
+ check_tag(tag);
+ for(int i=0;i<(n+7)/8;i++){vals[i]=get_uint(TMin(8,n-8*i));}
+@@ -699,16 +699,16 @@
+ if(all){printf("\n");}
+
+ }
+-byte *
++byte_t *
+ BitStream::get_data()
+ {
+- byte *res=(byte *)malloc(buff.size());
++ byte_t *res=(byte_t *)malloc(buff.size());
+ CHECK_MEM(res);
+ for(int i=0;i<buff.size();i++){res[i]=buff[i];}
+ return(res);
+ }
+ void
+-BitStream::set_data(const byte *nbuff,int nbits)
++BitStream::set_data(const byte_t *nbuff,int nbits)
+ {
+ if(buff.size()!=1 || bitpos!=0)
+ {
+@@ -835,7 +835,7 @@
+
+
+ int
+-Compressor::put_fixedbitl(byte *vals,int n,const char *tag)
++Compressor::put_fixedbitl(byte_t *vals,int n,const char *tag)
+ {
+ int cpos=bitpos;
+ int i,j;
+@@ -844,19 +844,19 @@
+ put_uint_vl(n,NBITS_NVALS,"size");
+ if(n==0){return 0;}
+
+- byte maxv=vals[0];
++ byte_t maxv=vals[0];
+ for(i=1;i<n;i++)
+ {
+- byte v=vals[i];
++ byte_t v=vals[i];
+ if(v>maxv){maxv=v;}
+ }
+ int nbits=num_bits(maxv);
+- if(n>=pow2(NBITS_NVALS)){errr("Compressor::put_fixedbitl(byte *) : overflow: nvals>2^16");}
++ if(n>=pow2(NBITS_NVALS)){errr("Compressor::put_fixedbitl(byte_t *) : overflow: nvals>2^16");}
+ put_uint(nbits,NBITS_NBITS_CHARVAL,"nbits");
+ add_tag("data");
+ for(i=0;i<n;i++)
+ {
+- byte v=vals[i];
++ byte_t v=vals[i];
+ for(j=0;j<nbits;j++) {put(v&pow2(j));}
+ }
+ return(bitpos-cpos);
+@@ -887,15 +887,15 @@
+ }
+ }
+ int
+-Compressor::get_fixedbitl(byte **pres,const char *tag/*="BADTAG!"*/)
++Compressor::get_fixedbitl(byte_t **pres,const char *tag/*="BADTAG!"*/)
+ {
+- if(check_tag(tag)==NOTOK){errr("Compressor::get_fixedbitl(byte *): check_tag failed");}
++ if(check_tag(tag)==NOTOK){errr("Compressor::get_fixedbitl(byte_t *): check_tag failed");}
+ int n=get_uint_vl(NBITS_NVALS);
+ if(!n){*pres=NULL;return 0;}
+ int nbits=get_uint(NBITS_NBITS_CHARVAL);
+- if(verbose)printf("get_fixedbitl(byte):n%3d nbits:%2d\n",n,nbits);
++ if(verbose)printf("get_fixedbitl(byte_t):n%3d nbits:%2d\n",n,nbits);
+ int i;
+- byte *res=new byte[n];
++ byte_t *res=new byte_t[n];
+ CHECK_MEM(res);
+ for(i=0;i<n;i++)
+ {
+Index: b/htword/WordBitCompress.h
+===================================================================
+--- a/htword/WordBitCompress.h
++++ b/htword/WordBitCompress.h
+@@ -28,9 +28,9 @@
+ #include"HtVector_int.h"
+ #include"HtMaxMin.h"
+
+-typedef unsigned char byte;
++typedef unsigned char byte_t;
+ // ******** HtVector_byte (header)
+-#define GType byte
++#define GType byte_t
+ #define HtVectorGType HtVector_byte
+ #include "HtVectorGeneric.h"
+
+@@ -123,12 +123,12 @@
+ }
+
+ // gets a bit from the bitstream
+- inline byte get(const char *tag=(char*)NULL)
++ inline byte_t get(const char *tag=(char*)NULL)
+ {
+ // SPEED CRITICAL SECTION
+ if(check_tag(tag)==NOTOK){errr("BitStream::get() check_tag failed");}
+ if(bitpos>=(buff.size()<<3)){errr("BitStream::get reading past end of BitStream!");}
+- byte res=buff[bitpos>>3] & pow2(bitpos & 0x07);
++ byte_t res=buff[bitpos>>3] & pow2(bitpos & 0x07);
+ // printf("get:res:%d bitpos:%5d/%d buff[%3d]=%x\n",res,bitpos,bitpos%8,bitpos/8,buff[bitpos/8]);
+ bitpos++;
+ return(res);
+@@ -139,8 +139,8 @@
+ unsigned int get_uint( int n,const char *tag=(char*)NULL);
+
+ // get/put n bits of data stored in vals
+- void put_zone(byte *vals,int n,const char *tag);
+- void get_zone(byte *vals,int n,const char *tag);
++ void put_zone(byte_t *vals,int n,const char *tag);
++ void get_zone(byte_t *vals,int n,const char *tag);
+
+ //
+ inline void add_tag(const char *tag)
+@@ -167,9 +167,9 @@
+ int buffsize(){return(buff.size());}
+
+ // get a copy of the buffer
+- byte *get_data();
++ byte_t *get_data();
+ // set the buffer from outside data (current buffer must be empty)
+- void set_data(const byte *nbuff,int nbits);
++ void set_data(const byte_t *nbuff,int nbits);
+
+ // use this for reading a BitStream after you have written in it
+ // (generally for debuging)
+@@ -211,7 +211,7 @@
+ #define NBITS_VAL 32
+ // number of bits to code he number of bits used by an unsigned int value
+ #define NBITS_NBITS_VAL 5
+-// number of bits to code the number of bits used by a byte value
++// number of bits to code the number of bits used by a byte_t value
+ #define NBITS_NBITS_CHARVAL 4
+
+ class Compressor : public BitStream
+@@ -240,8 +240,8 @@
+ int get_vals(unsigned int **pres,const char *tag=(char*)"BADTAG!");
+
+ // compress/decompress an array of bytes (very simple)
+- int put_fixedbitl(byte *vals,int n,const char *tag);
+- int get_fixedbitl(byte **pres,const char *tag=(char*)"BADTAG!");
++ int put_fixedbitl(byte_t *vals,int n,const char *tag);
++ int get_fixedbitl(byte_t **pres,const char *tag=(char*)"BADTAG!");
+
+ // compress/decompress an array of unsigned ints (very simple)
+ void get_fixedbitl(unsigned int *res,int n);
+Index: b/htword/WordDBPage.cc
+===================================================================
+--- a/htword/WordDBPage.cc
++++ b/htword/WordDBPage.cc
+@@ -155,7 +155,7 @@
+ Uncompress_main(pin);
+ break;
+ case CMPRTYPE_BADCOMPRESS:// this page did not compress correctly
+- pin->get_zone((byte *)pg,pgsz*8,"INITIALBUFFER");
++ pin->get_zone((byte_t *)pg,pgsz*8,"INITIALBUFFER");
+ break;
+ default:
+ errr("WordDBPage::Uncompress: CMPRTYPE incoherent");
+@@ -181,7 +181,7 @@
+ int *rnum_sizes=new int[nnums];
+ CHECK_MEM(rnum_sizes);
+ // char differences between words
+- byte *rworddiffs=NULL;
++ byte_t *rworddiffs=NULL;
+ int nrworddiffs;
+
+ // *********** read header
+@@ -288,7 +288,7 @@
+ return OK;
+ }
+ void
+-WordDBPage::Uncompress_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums0,byte *rworddiffs,int nrworddiffs)
++WordDBPage::Uncompress_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums0,byte_t *rworddiffs,int nrworddiffs)
+ {
+ int irwordiffs=0;
+ int nfields=WordKey::NFields();
+@@ -405,7 +405,7 @@
+
+ // display
+ void
+-WordDBPage::Uncompress_show_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums0,byte *rworddiffs,int nrworddiffs)
++WordDBPage::Uncompress_show_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums0,byte_t *rworddiffs,int nrworddiffs)
+ {
+ int i,j;
+ if(verbose)
+@@ -464,7 +464,7 @@
+ res->put_uint(COMPRESS_VERSION,NBITS_COMPRESS_VERSION,"COMPRESS_VERSION");
+ res->put_uint(CMPRTYPE_BADCOMPRESS,NBITS_CMPRTYPE,"CMPRTYPE");
+
+- res->put_zone((byte *)pg,pgsz*8,"INITIALBUFFER");
++ res->put_zone((byte_t *)pg,pgsz*8,"INITIALBUFFER");
+ }
+
+ if(verbose)
+@@ -761,7 +761,7 @@
+ printf("compare failed in some unknown place in header:\n");
+ for(i=0;i<(int)(sizeof(PAGE)-sizeof(db_indx_t));i++)
+ {
+- printf("%3d: %3x %3x\n",i,((byte *)pg)[i],((byte *)other.pg)[i]);
++ printf("%3d: %3x %3x\n",i,((byte_t *)pg)[i],((byte_t *)other.pg)[i]);
+ }
+ }
+
+@@ -998,7 +998,7 @@
+ printf("%5d: ",nn);
+ for(j=0;j<20;j++)
+ {
+- printf("%2x ",((byte *)pg)[nn++]);
++ printf("%2x ",((byte_t *)pg)[nn++]);
+ if(nn>=pgsz){break;}
+ }
+ printf("\n");
+Index: b/htword/WordDBPage.h
+===================================================================
+--- a/htword/WordDBPage.h
++++ b/htword/WordDBPage.h
+@@ -65,7 +65,7 @@
+ }
+ }
+ WordDBRecord():WordRecord(){;}
+- WordDBRecord(byte *dat,int len,int rectyp):WordRecord()
++ WordDBRecord(byte_t *dat,int len,int rectyp):WordRecord()
+ {
+ type=(rectyp ? DefaultType() : WORD_RECORD_STATS);
+ Unpack(String((char *)dat,len));
+@@ -118,7 +118,7 @@
+ }
+ else{Unpack(String((char *)nkey->data,nkey->len));}
+ }
+- WordDBKey(byte *data,int len):WordKey()
++ WordDBKey(byte_t *data,int len):WordKey()
+ {
+ key=NULL;
+ if(!data || !len){errr("WordDBKey::WordDBKey(data,len) !data || !len");}
+@@ -207,7 +207,7 @@
+ void *alloc_entry(int size)
+ {
+ size=WORD_ALIGN_TO(size,4);
+- int inp_pos=((byte *)&(pg->inp[insert_indx]))-(byte *)pg;
++ int inp_pos=((byte_t *)&(pg->inp[insert_indx]))-(byte_t *)pg;
+ insert_pos-=size;
+ if(insert_pos<=inp_pos)
+ {
+@@ -216,7 +216,7 @@
+ errr("WordDBPage::alloc_entry: PAGE OVERFLOW");
+ }
+ pg->inp[insert_indx++]=insert_pos;
+- return((void *)((byte *)pg+insert_pos));
++ return((void *)((byte_t *)pg+insert_pos));
+ }
+
+
+@@ -260,11 +260,11 @@
+ ky.Pack(pkey);
+ keylen=pkey.length();
+ }
+- int size=keylen+((byte *)&(bti.data))-((byte *)&bti);// pos of data field in BINTERNAL
++ int size=keylen+((byte_t *)&(bti.data))-((byte_t *)&bti);// pos of data field in BINTERNAL
+ if(empty)
+ {
+ if(verbose){printf("WordDBPage::insert_btikey: empty : BINTERNAL:%d datapos:%d keylen:%d size:%d alligned to:%d\n",(int)sizeof(BINTERNAL),
+- (int)(((byte *)&(bti.data))-((byte *)&bti)),
++ (int)(((byte_t *)&(bti.data))-((byte_t *)&bti)),
+ keylen,size,WORD_ALIGN_TO(size,4));}
+ }
+
+@@ -306,8 +306,8 @@
+ int Uncompress_main(Compressor *pin);
+ void Uncompress_vals_chaged_flags(Compressor &in,unsigned int **pcflags,int *pn);
+ int Uncompress_header(Compressor &in);
+- void Uncompress_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums,byte *rworddiffs,int nrworddiffs);
+- void Uncompress_show_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums,byte *rworddiffs,int nrworddiffs);
++ void Uncompress_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums,byte_t *rworddiffs,int nrworddiffs);
++ void Uncompress_show_rebuild(unsigned int **rnums,int *rnum_sizes,int nnums,byte_t *rworddiffs,int nrworddiffs);
+
+ int TestCompress(int debuglevel);
+ int Compare(WordDBPage &other);
+@@ -326,14 +326,14 @@
+ out.put_uint(btikey(i)->type ,sizeof(btikey(i)->type )*8,label_str("seperatekey_bti_type" ,i));
+ out.put_uint(btikey(i)->pgno ,sizeof(btikey(i)->pgno )*8,label_str("seperatekey_bti_pgno" ,i));
+ out.put_uint(btikey(i)->nrecs,sizeof(btikey(i)->nrecs)*8,label_str("seperatekey_bti_nrecs",i));
+- if(len){out.put_zone((byte *)btikey(i)->data,8*len,label_str("seperatekey_btidata",i));}
++ if(len){out.put_zone((byte_t *)btikey(i)->data,8*len,label_str("seperatekey_btidata",i));}
+ }
+ else
+ {
+ int len=key(i)->len;
+ out.put_uint(len,NBITS_KEYLEN,label_str("seperatekey_len",i));
+ if(verbose){printf("WordDBPage::compress_key: compress(typ5):%d\n",len);}
+- out.put_zone((byte *)key(i)->data,8*len,label_str("seperatekey_data",i));
++ out.put_zone((byte_t *)key(i)->data,8*len,label_str("seperatekey_data",i));
+ }
+ }
+ void compress_data(Compressor &out,int i)
+@@ -341,7 +341,7 @@
+ int len=data(i)->len;
+ out.put_uint(len,NBITS_DATALEN,label_str("seperatedata_len",i));
+ if(verbose){printf("WordDBPage::compress_data: compressdata(typ5):%d\n",len);}
+- out.put_zone((byte *)data(i)->data,8*len,label_str("seperatedata_data",i));
++ out.put_zone((byte_t *)data(i)->data,8*len,label_str("seperatedata_data",i));
+ }
+ WordDBKey uncompress_key(Compressor &in,int i)
+ {
+@@ -360,7 +360,7 @@
+ if(len!=bti.len){errr("WordDBPage::uncompress_key: incoherence: len!=bti.len");}
+ if(len)
+ {
+- byte *gotdata=new byte[len];
++ byte_t *gotdata=new byte_t[len];
+ CHECK_MEM(gotdata);
+ in.get_zone(gotdata,8*len,label_str("seperatekey_btidata",i));
+ res=WordDBKey(gotdata,len);
+@@ -370,7 +370,7 @@
+ }
+ else
+ {
+- byte *gotdata=new byte[len];
++ byte_t *gotdata=new byte_t[len];
+ CHECK_MEM(gotdata);
+ in.get_zone(gotdata,8*len,label_str("seperatekey_data",i));
+ res=WordDBKey(gotdata,len);
+@@ -384,7 +384,7 @@
+ WordDBRecord res;
+ int len=in.get_uint(NBITS_DATALEN,label_str("seperatedata_len",i));
+ if(verbose)printf("uncompressdata:len:%d\n",len);
+- byte *gotdata=new byte[len];
++ byte_t *gotdata=new byte_t[len];
+ CHECK_MEM(gotdata);
+ in.get_zone(gotdata,8*len,label_str("seperatedata_data",i));
+ res=WordDBRecord(gotdata,len,rectyp);
+@@ -488,7 +488,7 @@
+ {
+ init0();
+ pgsz=npgsz;
+- pg=(PAGE *)(new byte[pgsz]);
++ pg=(PAGE *)(new byte_t[pgsz]);
+ CHECK_MEM(pg);
+ insert_pos=pgsz;
+ insert_indx=0;
diff --git a/redhat/extras/htdig/patches/gcc-6 b/redhat/extras/htdig/patches/gcc-6
new file mode 100644
index 000000000..5031ea0c7
--- /dev/null
+++ b/redhat/extras/htdig/patches/gcc-6
@@ -0,0 +1,12 @@
+Description: Fix FTBFS with gcc-6.
+--- htdig-3.2.0b6.orig/htfuzzy/Accents.cc
++++ htdig-3.2.0b6/htfuzzy/Accents.cc
+@@ -43,7 +43,7 @@ extern int debug;
+ | table iso-latin1 "minusculisee" et "de-accentuee" |
+ `--------------------------------------------------*/
+
+-static char MinusculeISOLAT1[256] = {
++static unsigned char MinusculeISOLAT1[256] = {
+ 0, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23,
diff --git a/redhat/extras/htdig/patches/htdig_3.2.0b6-13.diff b/redhat/extras/htdig/patches/htdig_3.2.0b6-13.diff
new file mode 100644
index 000000000..4562e03fe
--- /dev/null
+++ b/redhat/extras/htdig/patches/htdig_3.2.0b6-13.diff
@@ -0,0 +1,176 @@
+Description: complete diff against upstream of version 3.2.0b6
+
+--- htdig-3.2.0b6.orig/db/os_rw.c
++++ htdig-3.2.0b6/db/os_rw.c
+@@ -5,6 +5,13 @@
+ * Sleepycat Software. All rights reserved.
+ */
+
++#define _XOPEN_SOURCE 500
++#include <sys/types.h>
++#include <unistd.h>
++#ifndef u_long
++typedef __u_long u_long;
++#endif
++
+ #include "db_config.h"
+
+ #ifndef lint
+--- htdig-3.2.0b6.orig/htcommon/defaults.cc
++++ htdig-3.2.0b6/htcommon/defaults.cc
+@@ -596,7 +596,7 @@
+ <a href=\"htfuzzy.html\">htfuzzy</a> for more information on the \
+ format of this file. \
+ " }, \
+-{ "endings_root2word_db", "${common_dir}/root2word.db", \
++{ "endings_root2word_db", "${database_dir}/root2word.db", \
+ "string", "htfuzzy htsearch", "", "all", "File Layout", "endings_root2word_db: /var/htdig/r2w.db", " \
+ This attributes specifies the database filename to be \
+ used in the 'endings' fuzzy search algorithm. The \
+@@ -610,7 +610,7 @@
+ This is because this database can be shared with \
+ different search databases. \
+ " }, \
+-{ "endings_word2root_db", "${common_dir}/word2root.db", \
++{ "endings_word2root_db", "${database_dir}/word2root.db", \
+ "string", "htfuzzy htsearch", "", "all", "File Layout", "endings_word2root_db: /var/htdig/w2r.bm", " \
+ This attributes specifies the database filename to be \
+ used in the 'endings' fuzzy search algorithm. The \
+@@ -2426,7 +2426,7 @@
+ that this does not limit the number of documents that \
+ are matched in any way. \
+ " }, \
+-{ "synonym_db", "${common_dir}/synonyms.db", \
++{ "synonym_db", "${database_dir}/synonyms.db", \
+ "string", "htsearch htfuzzy", "", "3.0", "File Layout", "synonym_db: ${database_base}.syn.db", " \
+ Points to the database that <a href=\"htfuzzy.html\"> \
+ htfuzzy</a> creates when the <strong>synonyms</strong> \
+--- htdig-3.2.0b6.orig/htdig/Server.cc
++++ htdig-3.2.0b6/htdig/Server.cc
+@@ -341,6 +341,8 @@
+ {
+ String fullpatt = "^[^:]*://[^/]*(";
+ fullpatt << pattern << ')';
++ if (pattern.length() == 0)
++ fullpatt = "";
+ _disallow.set(fullpatt, config->Boolean("case_sensitive"));
+ }
+ }
+--- htdig-3.2.0b6.orig/htsearch/Collection.h
++++ htdig-3.2.0b6/htsearch/Collection.h
+@@ -36,9 +36,9 @@
+ const char *docExcerpt);
+ ~Collection();
+
+- void Collection::Open();
++ void Open();
+
+- void Collection::Close();
++ void Close();
+
+ char *getWordFile() { return wordFile.get(); }
+ DocumentRef *getDocumentRef(int id);
+--- htdig-3.2.0b6.orig/htsearch/Display.cc
++++ htdig-3.2.0b6/htsearch/Display.cc
+@@ -54,6 +54,7 @@
+
+ #include <math.h>
+ #include <float.h>
++#include <values.h>
+
+ #if !defined(DBL_MAX)
+ # if defined (MAXDOUBLE)
+@@ -137,7 +138,7 @@
+ // Must temporarily stash the message in a String, since
+ // displaySyntaxError will overwrite the static temp used in form.
+
+- String s(form("No such sort method: `%s'", (const char*)config->Find("sort")));
++ String s("Invalid sort method.");
+
+ displaySyntaxError(s);
+ return;
+--- htdig-3.2.0b6.orig/htsearch/htsearch.cc
++++ htdig-3.2.0b6/htsearch/htsearch.cc
+@@ -211,8 +211,7 @@
+ }
+ if (access((char*)configFile, R_OK) < 0)
+ {
+- reportError(form("Unable to read configuration file '%s'",
+- configFile.get()));
++ reportError("Unable to read configuration file");
+ }
+ config->Read(configFile);
+
+--- htdig-3.2.0b6.orig/htsearch/qtest.cc
++++ htdig-3.2.0b6/htsearch/qtest.cc
+@@ -132,8 +132,7 @@
+
+ if (access((char*)configFile, R_OK) < 0)
+ {
+- reportError(form("Unable to find configuration file '%s'",
+- configFile.get()));
++ reportError("Unable to find configuration file");
+ }
+
+ config->Read(configFile);
+--- htdig-3.2.0b6.orig/htword/WordDBPage.cc
++++ htdig-3.2.0b6/htword/WordDBPage.cc
+@@ -82,7 +82,7 @@
+ if(debuglevel>2)printf("TOTAL SIZE: %6d %8f\n",size,size/8.0);
+ // argh! compare failed somthing went wrong
+ // display the compress/decompress sequence and fail
+- if(cmp || size>8*1024*1000000000)
++ if(cmp || size>8*1024)
+ {
+ if(size>8*1024)
+ {
+--- htdig-3.2.0b6.orig/installdir/rundig
++++ htdig-3.2.0b6/installdir/rundig
+@@ -7,17 +7,18 @@
+ #
+ # This is a sample script to create a search database for ht://Dig.
+ #
+-DBDIR=@DATABASE_DIR@
+-COMMONDIR=@COMMON_DIR@
+-BINDIR=@BIN_DIR@
+-conffile=@DEFAULT_CONFIG_FILE@
++DBDIR=/var/lib/htdig
++COMMONDIR=/etc/htdig
++BINDIR=/usr/bin
++conffile=/etc/htdig/htdig.conf
+
+ # To help debug problems, try running rundig -vvv
+ # This will add lots of debugging output to all of the programs
+-stats= opts= alt=
++stats= opts= alt= nohtnotify=
+ while [ "$#" -gt 0 ]
+ do
+ case "$1" in
++ --no-htnotify) nohtnotify="true" ;;
+ -a) alt="$1" ;;
+ -s) stats="$1" ;;
+ -c) shift
+@@ -65,7 +66,11 @@
+ test -f db.words.db.work_weakcmpr &&
+ mv -f db.words.db.work_weakcmpr db.words.db_weakcmpr) ;;
+ esac
+-$BINDIR/htnotify $opts
++if [ "$nohtnotify" = "true" ]; then
++ echo "Skipping htnotify."
++else
++ $BINDIR/htnotify $opts
++fi
+ # If you want to use the soundex and (or) metaphone fuzzy matchings,
+ # Uncomment the following line
+ # $BINDIR/htfuzzy $opts soundex metaphone
+--- htdig-3.2.0b6.orig/libhtdig/ResultFetch.cc
++++ htdig-3.2.0b6/libhtdig/ResultFetch.cc
+@@ -142,7 +142,7 @@
+ // Must temporarily stash the message in a String, since
+ // displaySyntaxError will overwrite the static temp used in form.
+
+- String s(form("No such sort method: `%s'", (const char *) config->Find("sort")));
++ String s("Invalid search method.");
+
+ displaySyntaxError(s);
+ //return;
diff --git a/redhat/extras/htdig/patches/kfreebsd b/redhat/extras/htdig/patches/kfreebsd
new file mode 100644
index 000000000..d30d68be7
--- /dev/null
+++ b/redhat/extras/htdig/patches/kfreebsd
@@ -0,0 +1,25 @@
+From: Steven Chamberlain <steven@pyro.eu.org>
+Subject: only use ETIME if defined
+Bug-Debian: http://bugs.debian.org/765284
+Forwarded: no
+
+ETIME relates to an optional POSIX STREAMS extension not implemented
+on some platforms (such as GNU/kFreeBSD).
+
+Don't check for this return value on platforms that don't define it.
+
+--- htdig-3.2.0b6.orig/db/mut_pthread.c.orig 2002-02-02 18:18:05.000000000 +0000
++++ htdig-3.2.0b6/db/mut_pthread.c 2014-10-14 12:40:53.771737556 +0100
+@@ -201,7 +201,11 @@
+ * call, and Solaris delivers the signal to the wrong
+ * LWP.
+ */
+- if (ret != 0 && ret != ETIME && ret != ETIMEDOUT)
++ if (ret != 0 &&
++#ifdef ETIME
++ ret != ETIME &&
++#endif
++ ret != ETIMEDOUT)
+ return (ret);
+ }
+
diff --git a/redhat/extras/htdig/patches/series b/redhat/extras/htdig/patches/series
new file mode 100644
index 000000000..da0d40c91
--- /dev/null
+++ b/redhat/extras/htdig/patches/series
@@ -0,0 +1,6 @@
+htdig_3.2.0b6-13.diff
+kfreebsd
+gcc-6
+sourceforge_logo
+drop-bogus-assignment
+gcc-11
diff --git a/redhat/extras/htdig/patches/sourceforge_logo b/redhat/extras/htdig/patches/sourceforge_logo
new file mode 100644
index 000000000..dd3d1e719
--- /dev/null
+++ b/redhat/extras/htdig/patches/sourceforge_logo
@@ -0,0 +1,118 @@
+Description: don't remote-link SourceForge's logo
+ This let SourceForge track everyone who reads these docs. As the image is
+ not freely licensed, let's leave only a piece of text.
+--- htdig-3.2.0b6.orig/htdoc/FAQ.html
++++ htdig-3.2.0b6/htdoc/FAQ.html
+@@ -2585,6 +2585,6 @@ find /path/to/your/document/root -type f
+ Last modified: $Date: 2004/05/28 13:15:16 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/author.html
++++ htdig-3.2.0b6/htdoc/author.html
+@@ -34,6 +34,6 @@
+ Last modified: $Date: 2004/05/28 13:15:18 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/bugs.html
++++ htdig-3.2.0b6/htdoc/bugs.html
+@@ -50,6 +50,6 @@
+ Last modified: $Date: 2004/05/28 13:15:18 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/isp.html
++++ htdig-3.2.0b6/htdoc/isp.html
+@@ -81,7 +81,7 @@
+ Last modified: $Date: 2004/05/28 13:15:19 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/mailing.html
++++ htdig-3.2.0b6/htdoc/mailing.html
+@@ -55,6 +55,6 @@
+ Last modified: $Date: 2004/05/28 13:15:19 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/main.html
++++ htdig-3.2.0b6/htdoc/main.html
+@@ -103,6 +103,6 @@
+ Last modified: $Date: 2004/05/28 13:15:19 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/rundig.html
++++ htdig-3.2.0b6/htdoc/rundig.html
+@@ -184,7 +184,7 @@
+ Last modified: $Date: 2004/06/12 13:39:13 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/running.html
++++ htdig-3.2.0b6/htdoc/running.html
+@@ -131,7 +131,7 @@
+ Last modified: $Date: 2004/05/28 13:15:19 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/uses.html
++++ htdig-3.2.0b6/htdoc/uses.html
+@@ -646,7 +646,7 @@
+ Last modified: $Date: 2004/05/28 13:15:19 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/htdoc/where.html
++++ htdig-3.2.0b6/htdoc/where.html
+@@ -121,6 +121,6 @@
+ <br>
+
+ <a href="http://sourceforge.net/">
+-<img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++SourceForge</a>
+ </body>
+ </html>
+--- htdig-3.2.0b6.orig/test/htdocs/set1/bad_local.htm
++++ htdig-3.2.0b6/test/htdocs/set1/bad_local.htm
+@@ -51,7 +51,7 @@
+ Last modified: $Date: 2004/01/18 12:54:15 $
+ <br>
+ <a href="http://sourceforge.net/">
+- <img src="http://sourceforge.net/sflogo.php?group_id=4593&amp;type=1" width="88" height="31" border="0" alt="SourceForge Logo"></a>
++ SourceForge</a>
+
+ </body>
+ </html>