From mboxrd@z Thu Jan 1 00:00:00 1970 From: hjl@lucon.org (H.J. Lu) To: skimo@breughel.ufsia.ac.be (Sven Verdoolaege) Cc: egcs@cygnus.com Subject: A new libg++ addon for egcs Date: Wed, 10 Dec 1997 10:58:00 -0000 Message-id: References: <19971210131621.13050@breughel.ufsia.ac.be> X-SW-Source: 1997-12/msg00609.html > I did have a small problem with your libg++ egcs add-on > (libg++-2.8.0b6.3) > > This piece of code in src/configure.in picks up an > absolute path for regex.h . configure later prepends $srcdir to it. > Did you read README.libg++? > > I also needed this: in gperf/src > Here is the patch for libg++-2.8.0b6.3 to bring it to 2.8.0b6.4. libg++-2.8.0b6.4 is at ftp://ftp.yggdrasil.com/private/hjl . H.J. --- diff --new-file -ur egcs.old/README.libg++ egcs.new/README.libg++ --- egcs.old/README.libg++ Wed Nov 5 09:01:41 1997 +++ egcs.new/README.libg++ Wed Dec 10 10:44:29 1997 @@ -1,9 +1,10 @@ -This libg++ and librx are tested with egcs 971023 on linux/x86/libc 5, -linux/x86/glibc 2.1 and linux/alpha/glibc 2.0.5c. Just put libg++ and -librx under the egcs source directory, i.e., +This libg++ and librx are tested with egcs 1.0 on linux/x86/libc 5, +linux/x86/glibc 2.0.5c, linux/x86/glibc 2.1 and linux/alpha/glibc +2.0.5c. Just put libg++ and librx under the egcs source directory, +i.e., # cd src/egcs -# gzip -dc xxxxxx/libg++-2.8.0b6.3.tar.gz | tar xf - +# gzip -dc xxxxxx/libg++-2.8.0b6.4.tar.gz | tar xf - You also need to check configure.in and configure to see if the patch enclosed here is already applied. If not, please do @@ -13,15 +14,17 @@ Then you can configure/build/check/install egcs normally. Now it will include libg++. +libg++-2.8.0b6.3-2.8.0b6.4.diff is the patch for libg++ 2.8.0b6.3. + H.J. Lu hjl@gnu.org -11/04/1997 +12/10/1997 --- Sun Sep 7 14:27:56 1997 H.J. Lu (hjl@gnu.ai.mit.edu) - * configure.in (alpha-*-linux*): Treat alpha-*-linux* as - alpha-*-linux* and alpha-*-*. + * configure.in (alpha*-*-linux*): Treat alpha*-*-linux* as + alpha*-*-linux* and alpha*-*-*. Mon Aug 25 17:31:49 1997 H.J. Lu (hjl@gnu.ai.mit.edu) @@ -39,7 +42,7 @@ alpha*-*-*vms*) noconfigdirs="$noconfigdirs gdb ld target-newlib target-libgloss" ;; -+ alpha-*-linux*) ++ alpha*-*-linux*) + # newlib is not 64 bit ready + noconfigdirs="$noconfigdirs target-newlib target-libgloss" + # linux has rx in libc diff --new-file -ur egcs.old/libg++/etc/benchmarks/foo.cc egcs.new/libg++/etc/benchmarks/foo.cc --- egcs.old/libg++/etc/benchmarks/foo.cc Thu Sep 25 13:48:07 1997 +++ egcs.new/libg++/etc/benchmarks/foo.cc Wed Dec 31 16:00:00 1969 @@ -1,401 +0,0 @@ -#ifdef BUILTIN -typedef int Int; -#else - -#ifdef CALL -#define INLINE -#else -#define INLINE inline -#endif - -#ifndef VIRT -#define VIRTUAL -#else -#define VIRTUAL virtual -#endif - -#ifdef BYVAL -#define REF -#else -#define REF & -#endif - -#ifndef CONVERT -#define EXPLICIT -#endif - -#ifndef RETREF -#define IntR void -#define ReturnIntR -#else -#define IntR Int& -#define ReturnIntr return *this -#endif - -class Int -{ -protected: - int rep; -#ifdef FAKEVPTR - void* fake_vptr; -#endif -public: - INLINE Int (); - INLINE Int (const int b); - INLINE Int (const Int& b); - INLINE VIRTUAL ~Int(); - - INLINE operator int() const; - - INLINE VIRTUAL int val() const; - - INLINE VIRTUAL IntR operator = (const int); - INLINE VIRTUAL IntR operator = (const Int&); - - INLINE VIRTUAL IntR negate(); - INLINE VIRTUAL IntR complement(); - INLINE VIRTUAL IntR operator ++ (); - INLINE VIRTUAL IntR operator -- (); - - INLINE VIRTUAL IntR operator += (const Int REF ); - INLINE VIRTUAL IntR operator -= (const Int REF ); - INLINE VIRTUAL IntR operator *= (const Int REF ); - INLINE VIRTUAL IntR operator /= (const Int REF ); - INLINE VIRTUAL IntR operator %= (const Int REF ); - INLINE VIRTUAL IntR operator |= (const Int REF ); - INLINE VIRTUAL IntR operator &= (const Int REF ); - INLINE VIRTUAL IntR operator ^= (const Int REF ); - INLINE VIRTUAL IntR operator <<=(const Int REF ); - INLINE VIRTUAL IntR operator >>=(const Int REF ); - -#ifdef EXPLICIT - INLINE VIRTUAL IntR operator += (const int); - INLINE VIRTUAL IntR operator -= (const int); - INLINE VIRTUAL IntR operator *= (const int); - INLINE VIRTUAL IntR operator /= (const int); - INLINE VIRTUAL IntR operator %= (const int); - INLINE VIRTUAL IntR operator |= (const int); - INLINE VIRTUAL IntR operator &= (const int); - INLINE VIRTUAL IntR operator ^= (const int); - INLINE VIRTUAL IntR operator <<=(const int); - INLINE VIRTUAL IntR operator >>=(const int); - -#endif -}; - -INLINE int Int::val() const { return rep; } -INLINE Int::operator int() const { return val(); } - -INLINE Int::Int () :rep(0) {} -INLINE Int::Int (const int b) :rep(b) {} -INLINE Int::Int (const Int& b) :rep(b.Int::val()) {} -INLINE Int::~Int() {} - -INLINE IntR Int::operator = (const int b) -{ rep = b; ReturnIntR; } -INLINE IntR Int::operator = (const Int& b) -{ rep = b.Int::val(); ReturnIntR; } - -INLINE IntR Int::complement() -{ rep = ~rep; ReturnIntR; } -INLINE IntR Int::negate() -{ rep = -rep; ReturnIntR; } -INLINE IntR Int::operator ++ () -{ ++rep; ReturnIntR; } -INLINE IntR Int::operator -- () -{ --rep; ReturnIntR; } - -INLINE IntR Int::operator += (const Int REF b) -{ rep += b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator -= (const Int REF b) -{ rep -= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator *= (const Int REF b) -{ rep *= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator /= (const Int REF b) -{ rep /= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator %= (const Int REF b) -{ rep %= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator |= (const Int REF b) -{ rep |= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator &= (const Int REF b) -{ rep &= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator ^= (const Int REF b) -{ rep ^= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator <<=(const Int REF b) -{ rep <<= b.Int::val(); ReturnIntR; } -INLINE IntR Int::operator >>=(const Int REF b) -{ rep >>= b.Int::val(); ReturnIntR; } - -#ifdef EXPLICIT - -INLINE IntR Int::operator += (const int b) -{ rep += b; ReturnIntR; } -INLINE IntR Int::operator -= (const int b) -{ rep -= b; ReturnIntR; } -INLINE IntR Int::operator *= (const int b) -{ rep *= b; ReturnIntR; } -INLINE IntR Int::operator /= (const int b) -{ rep /= b; ReturnIntR; } -INLINE IntR Int::operator %= (const int b) -{ rep %= b; ReturnIntR; } -INLINE IntR Int::operator |= (const int b) -{ rep |= b; ReturnIntR; } -INLINE IntR Int::operator &= (const int b) -{ rep &= b; ReturnIntR; } -INLINE IntR Int::operator ^= (const int b) -{ rep ^= b; ReturnIntR; } -INLINE IntR Int::operator <<=(const int b) -{ rep <<= b; ReturnIntR; } -INLINE IntR Int::operator >>=(const int b) -{ rep >>= b; ReturnIntR; } - - -INLINE int& operator += (int& a, const Int REF b) -{ a += b.Int::val(); return a; } -INLINE int& operator -= (int& a, const Int REF b) -{ a -= b.Int::val(); return a;} -INLINE int& operator *= (int& a, const Int REF b) -{ a *= b.Int::val(); return a;} -INLINE int& operator /= (int& a, const Int REF b) -{ a /= b.Int::val(); return a;} -INLINE int& operator %= (int& a, const Int REF b) -{ a %= b.Int::val(); return a;} -INLINE int& operator |= (int& a, const Int REF b) -{ a |= b.Int::val(); return a;} -INLINE int& operator &= (int& a, const Int REF b) -{ a &= b.Int::val(); return a;} -INLINE int& operator ^= (int& a, const Int REF b) -{ a ^= b.Int::val(); return a;} -INLINE int& operator <<=(int& a, const Int REF b) -{ a <<= b.Int::val(); return a;} -INLINE int& operator >>=(int& a, const Int REF b) -{ a >>= b.Int::val(); return a;} - -#endif - -#ifdef _G_NO_NRV - -INLINE Int operator - (const Int REF a) -{ Int r(a); r.negate(); return r; } -INLINE Int operator ~ (const Int REF a) -{ Int r(a); r.complement(); return r; } - -INLINE Int operator + (const Int REF a, const Int REF b) -{ Int r(a); r += b.Int::val(); return r; } -INLINE Int operator - (const Int REF a, const Int REF b) -{ Int r(a); r -= b.Int::val(); return r; } -INLINE Int operator * (const Int REF a, const Int REF b) -{ Int r(a); r *= b.Int::val(); return r; } -INLINE Int operator / (const Int REF a, const Int REF b) -{ Int r(a); r /= b.Int::val(); return r; } -INLINE Int operator % (const Int REF a, const Int REF b) -{ Int r(a); r %= b.Int::val(); return r; } -INLINE Int operator << (const Int REF a, const Int REF b) -{ Int r(a); r <<= b.Int::val(); return r; } -INLINE Int operator >> (const Int REF a, const Int REF b) -{ Int r(a); r >>= b.Int::val(); return r; } -INLINE Int operator & (const Int REF a, const Int REF b) -{ Int r(a); r &= b.Int::val(); return r; } -INLINE Int operator | (const Int REF a, const Int REF b) -{ Int r(a); r |= b.Int::val(); return r; } -INLINE Int operator ^ (const Int REF a, const Int REF b) -{ Int r(a); r ^= b.Int::val(); return r; } - -INLINE Int operator + (const Int REF a, const int b) -{ Int r(a); r += b; return r; } -INLINE Int operator - (const Int REF a, const int b) -{ Int r(a); r -= b; return r; } -INLINE Int operator * (const Int REF a, const int b) -{ Int r(a); r *= b; return r; } -INLINE Int operator / (const Int REF a, const int b) -{ Int r(a); r /= b; return r; } -INLINE Int operator % (const Int REF a, const int b) -{ Int r(a); r %= b; return r; } -INLINE Int operator << (const Int REF a, const int b) -{ Int r(a); r <<= b; return r; } -INLINE Int operator >> (const Int REF a, const int b) -{ Int r(a); r >>= b; return r; } -INLINE Int operator & (const Int REF a, const int b) -{ Int r(a); r &= b; return r; } -INLINE Int operator | (const Int REF a, const int b) -{ Int r(a); r |= b; return r; } -INLINE Int operator ^ (const Int REF a, const int b) -{ Int r(a); r ^= b; return r; } - -INLINE Int operator + (const int a, const Int REF b) -{ Int r(a); r += b.Int::val(); return r; } -INLINE Int operator - (const int a, const Int REF b) -{ Int r(a); r -= b.Int::val(); return r; } -INLINE Int operator * (const int a, const Int REF b) -{ Int r(a); r *= b.Int::val(); return r; } -INLINE Int operator / (const int a, const Int REF b) -{ Int r(a); r /= b.Int::val(); return r; } -INLINE Int operator % (const int a, const Int REF b) -{ Int r(a); r %= b.Int::val(); return r; } -INLINE Int operator << (const int a, const Int REF b) -{ Int r(a); r <<= b.Int::val(); return r; } -INLINE Int operator >> (const int a, const Int REF b) -{ Int r(a); r >>= b.Int::val(); return r; } -INLINE Int operator & (const int a, const Int REF b) -{ Int r(a); r &= b.Int::val(); return r; } -INLINE Int operator | (const int a, const Int REF b) -{ Int r(a); r |= b.Int::val(); return r; } -INLINE Int operator ^ (const int a, const Int REF b) -{ Int r(a); r ^= b.Int::val(); return r; } - -#else - -INLINE Int operator - (const Int REF a) return r(a) -{ r.negate(); } -INLINE Int operator ~ (const Int REF a) return r(a) -{ r.complement(); } - -INLINE Int operator + (const Int REF a, const Int REF b) return r(a) -{ r += b.Int::val(); } -INLINE Int operator - (const Int REF a, const Int REF b) return r(a) -{ r -= b.Int::val(); } -INLINE Int operator * (const Int REF a, const Int REF b) return r(a) -{ r *= b.Int::val(); } -INLINE Int operator / (const Int REF a, const Int REF b) return r(a) -{ r /= b.Int::val(); } -INLINE Int operator % (const Int REF a, const Int REF b) return r(a) -{ r %= b.Int::val(); } -INLINE Int operator << (const Int REF a, const Int REF b) return r(a) -{ r <<= b.Int::val(); } -INLINE Int operator >> (const Int REF a, const Int REF b) return r(a) -{ r >>= b.Int::val(); } -INLINE Int operator & (const Int REF a, const Int REF b) return r(a) -{ r &= b.Int::val(); } -INLINE Int operator | (const Int REF a, const Int REF b) return r(a) -{ r |= b.Int::val(); } -INLINE Int operator ^ (const Int REF a, const Int REF b) return r(a) -{ r ^= b.Int::val(); } - -INLINE Int operator + (const Int REF a, const int b) return r(a) -{ r += b; } -INLINE Int operator - (const Int REF a, const int b) return r(a) -{ r -= b; } -INLINE Int operator * (const Int REF a, const int b) return r(a) -{ r *= b; } -INLINE Int operator / (const Int REF a, const int b) return r(a) -{ r /= b; } -INLINE Int operator % (const Int REF a, const int b) return r(a) -{ r %= b; } -INLINE Int operator << (const Int REF a, const int b) return r(a) -{ r <<= b; } -INLINE Int operator >> (const Int REF a, const int b) return r(a) -{ r >>= b; } -INLINE Int operator & (const Int REF a, const int b) return r(a) -{ r &= b; } -INLINE Int operator | (const Int REF a, const int b) return r(a) -{ r |= b; } -INLINE Int operator ^ (const Int REF a, const int b) return r(a) -{ r ^= b; } - -INLINE Int operator + (const int a, const Int REF b) return r(a) -{ r += b.Int::val(); } -INLINE Int operator - (const int a, const Int REF b) return r(a) -{ r -= b.Int::val(); } -INLINE Int operator * (const int a, const Int REF b) return r(a) -{ r *= b.Int::val(); } -INLINE Int operator / (const int a, const Int REF b) return r(a) -{ r /= b.Int::val(); } -INLINE Int operator % (const int a, const Int REF b) return r(a) -{ r %= b.Int::val(); } -INLINE Int operator << (const int a, const Int REF b) return r(a) -{ r <<= b.Int::val(); } -INLINE Int operator >> (const int a, const Int REF b) return r(a) -{ r >>= b.Int::val(); } -INLINE Int operator & (const int a, const Int REF b) return r(a) -{ r &= b.Int::val(); } -INLINE Int operator | (const int a, const Int REF b) return r(a) -{ r |= b.Int::val(); } -INLINE Int operator ^ (const int a, const Int REF b) return r(a) -{ r ^= b.Int::val(); } - -#endif - -INLINE int operator ! (const Int REF a) { return !a.Int::val(); } - -INLINE int operator == (const Int REF a, const Int REF b) -{ return a.Int::val() == b.Int::val(); } -INLINE int operator != (const Int REF a, const Int REF b) -{ return a.Int::val() != b.Int::val(); } -INLINE int operator < (const Int REF a, const Int REF b) -{ return a.Int::val() < b.Int::val(); } -INLINE int operator <= (const Int REF a, const Int REF b) -{ return a.Int::val() <= b.Int::val(); } -INLINE int operator > (const Int REF a, const Int REF b) -{ return a.Int::val() > b.Int::val(); } -INLINE int operator >= (const Int REF a, const Int REF b) -{ return a.Int::val() >= b.Int::val(); } - -INLINE int operator == (const Int REF a, const int b) -{ return a.Int::val() == b; } -INLINE int operator != (const Int REF a, const int b) -{ return a.Int::val() != b; } -INLINE int operator < (const Int REF a, const int b) -{ return a.Int::val() < b; } -INLINE int operator <= (const Int REF a, const int b) -{ return a.Int::val() <= b; } -INLINE int operator > (const Int REF a, const int b) -{ return a.Int::val() > b; } -INLINE int operator >= (const Int REF a, const int b) -{ return a.Int::val() >= b; } - -INLINE int operator == (const int a, const Int REF b) -{ return a == b.Int::val(); } -INLINE int operator != (const int a, const Int REF b) -{ return a != b.Int::val(); } -INLINE int operator < (const int a, const Int REF b) -{ return a < b.Int::val(); } -INLINE int operator <= (const int a, const Int REF b) -{ return a <= b.Int::val(); } -INLINE int operator > (const int a, const Int REF b) -{ return a > b.Int::val(); } -INLINE int operator >= (const int a, const Int REF b) -{ return a >= b.Int::val(); } - -#endif -#if 0 -#endif - -typedef Int OneToFifty; - -void Proc0(); -void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut); - - -main() -{ - Proc0(); - exit(0); -} - -void Proc0() -{ - OneToFifty IntLoc1; - OneToFifty IntLoc2; - OneToFifty IntLoc3; - { - - IntLoc1 = 2; - IntLoc2 = 3; - while (IntLoc1 < IntLoc2) - { - IntLoc3 = 5 * IntLoc1 - IntLoc2; - Proc7(IntLoc1, IntLoc2, &IntLoc3); - ++IntLoc1; - } - } - -} - - -void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut) -{ - OneToFifty IntLoc; - - IntLoc = IntParI1 + 2; - *IntParOut = IntParI2 + IntLoc; -} diff --new-file -ur egcs.old/libg++/gperf/src/key-list.cc egcs.new/libg++/gperf/src/key-list.cc --- egcs.old/libg++/gperf/src/key-list.cc Sat Jun 24 14:40:37 1995 +++ egcs.new/libg++/gperf/src/key-list.cc Mon Nov 10 10:42:57 1997 @@ -164,6 +164,7 @@ of characters not from REJECT (borrowed from Henry Spencer's ANSI string package, when GNU libc comes out I'll replace this...). */ +#ifndef strcspn inline int Key_List::strcspn (const char *s, const char *reject) { @@ -184,6 +185,7 @@ return count; } +#endif /* Sets up the Return_Type, the Struct_Tag type and the Array_Type based upon various user Options. */ diff --new-file -ur egcs.old/libg++/gperf/src/key-list.h egcs.new/libg++/gperf/src/key-list.h --- egcs.old/libg++/gperf/src/key-list.h Sat Jun 24 09:45:24 1995 +++ egcs.new/libg++/gperf/src/key-list.h Mon Nov 10 10:41:41 1997 @@ -52,7 +52,9 @@ int total_keys; /* Total number of keys, counting duplicates. */ static int determined[ALPHA_SIZE]; /* Used in function reorder, below. */ static int get_occurrence (List_Node *ptr); +#ifndef strcspn static int strcspn (const char *s, const char *reject); +#endif static int already_determined (List_Node *ptr); static void set_determined (List_Node *ptr); void output_min_max (void); diff --new-file -ur egcs.old/libg++/tests/Makefile.sh egcs.new/libg++/tests/Makefile.sh --- egcs.old/libg++/tests/Makefile.sh Thu Feb 29 11:40:06 1996 +++ egcs.new/libg++/tests/Makefile.sh Sun Nov 23 17:32:12 1997 @@ -91,15 +91,17 @@ # Comment this out if your compiler doesn't handle templates: CHECK_TEMPLATES=check-templates - -tests checktests: clean_tests test_h \ - check-tObstack check-tString check-tInteger \ +CHECKS=check-tObstack check-tString check-tInteger \ check-tRational check-tBitSet check-tBitString \ check-tFix check-tFix16 check-tFix24 check-tGetOpt \ check-tList check-tPlex check-tLList check-tVec \ check-tStack check-tQueue check-tDeque check-tPQ \ check-tSet check-tBag check-tMap $(CHECK_TEMPLATES) + +tests checktests: test_h $(CHECKS) ./test_h + +$(CHECKS): clean_tests check-templates: check-tiLList