Re: compilation failure workaround (RH 5.2 / 2.22.10)

From: Matthew D. Langston (langston@SLAC.stanford.edu)
Date: Mon Aug 09 1999 - 07:09:50 MEST


Hi Jeff,

I now have a fix which allows ROOT 2.22.10 to build cleanly on RedHat
Linux 5.2 Intel.

Jeff Templon wrote:
> 
> 1) how does this solve my problem?  I was getting a fatal internal
> compiler error.  Nowhere do I see how you modify the source code so
> how will this stop the internal compiler error.

You are absolutely right.  I did not read your e-mail carefully enough,
and did not initially send you a patch which fixes your specific problem
on RedHat Linux 5.2 Intel.  I am sorry for the oversight.

I found the bug in egcs 1.0.3 which was causing your problem, and I have
included with this e-mail a patch to ROOT which will "fix" it.  This
patch will allow ROOT 2.22.10 to build cleanly on RedHat Linux 5.2
Intel.

I also found another buglet in `Makefile.linuxegcs' which prevented
h2root and g2root from building.  My patch fixes this also.  FYI, I will
also submit complete RedHat Linux 5.2 Intel build instructions to the
roottalk list just to get them into the archives.

Rene, you will probably want to include my patch into the ROOT sources
for the next release.  Other than my patch, I can think of no other
simple way to work around this bug (other than asking RedHat Linux 5.2
Intel users to upgrade their C++ compilers).  The bug is rather
complicated to describe it here, but I would be happy to discuss it
offline with you further if you wish.

> 2) you state that there is no way that the ROOT team can supply a
> binary tarball which will work for RedHat X.X unconditionally, even if
> users begin from the exact same CD.  But if I were to do the
> following:
> 
> 1) specify a version of redhat
> 2) specify dependencies (which packages of redhat must be installed)
> 3) specify that errata must be applied up til some date
> 4) specify that none of dependencies should be upgraded above the
>    redhat "stock+erratum" level
> 
> then what is the mechanism for failure of the ROOT tarball to work?
> Many other packages work just fine like this.

Although this idea would work in theory, I don't believe that it would
work in practice.  The majority of users use their computers for many
other things besides running ROOT.  It would be an unreasonable burden
on users to force them to maintain a particular configuration just so
that they could run ROOT.  A software package should serve its users,
not vice versa.

--
Matthew D. Langston
SLD, Stanford Linear Accelerator Center
langston@SLAC.Stanford.EDU


--- Makefile.linuxegcs.orig	Wed Jul 28 01:48:50 1999
+++ Makefile.linuxegcs	Sun Aug  8 21:42:26 1999
@@ -13,17 +13,17 @@
 OPT           = -O
 NOOPT         =
 LD            = g++
-LDFLAGS       = $(OPT)
+LDFLAGS       = $(OPT) -Wl,-rpath,$(ROOTSYS)/lib
 SOFLAGS       = -shared -Wl,-soname,
 SOEXT         = so
 SYSLIBS       = -lm -ldl -rdynamic
 SYSXLIBS      = -L/usr/X11R6/lib -lX11 -lm -ldl -rdynamic
-XLIBS         = $(ROOTSYS)/lib/libXpm.a -L/usr/X11R6/lib -lX11
+XLIBS         = -L/usr/X11R6/lib -lXpm -lX11
 CILIBS        = -lm -ltermcap -lbsd -ldl -rdynamic
 CRYPTLIBS     = -lcrypt
 F77           = g77
 F77FLAGS      = $(OPT)
-F77LIBS       = -lg2c
+F77LIBS       = -lf2c
 
 VPATH         = $(ROOTSYS)/include
 

--- RConfig.h.orig	Tue Feb  9 06:51:20 1999
+++ RConfig.h	Sun Aug  8 21:10:52 1999
@@ -106,9 +106,18 @@
 #ifdef __GNUG__
 #   define R__GNU
 #   define ANSICPP
-#   if __GNUC_MINOR__ >= 90   /* egcs 1.0.3 */
-#      define R__VECNEWDELETE    /* supports overloading of new[] and delete[] */
-#      define R__PLACEMENTDELETE /* supports overloading placement delete */
+
+#   if __GNUC_MINOR__ >= 90     /* egcs 1.0.3 */
+/*
+ * Defining R__PLACEMENTDELETE on RedHat Linux 5.2 Intel generates an
+ * internal compiler error for egcs 1.0.3 when compiling
+ * EG_Generator.cxx.
+ * 1999-08-08  Matthew D. Langston  <langston@SLAC.Stanford.EDU>
+ */
+#     if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+#        define R__VECNEWDELETE    /* supports overloading of new[] and delete[] */
+#        define R__PLACEMENTDELETE /* supports overloading placement delete */
+#     endif
 #   endif
 #   if __GNUC_MINOR__ >= 91   /* egcs 1.1 */
 #      define R__ANSISTREAM      /* ANSI C++ Standard Library conformant */



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:37 MET