This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
A new libg++ addon for egcs
- To: skimo at breughel dot ufsia dot ac dot be (Sven Verdoolaege)
- Subject: A new libg++ addon for egcs
- From: hjl at lucon dot org (H.J. Lu)
- Date: Wed, 10 Dec 1997 10:55:40 -0800 (PST)
- Cc: egcs at cygnus dot com
- Reply-To: egcs at cygnus dot com
> 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