RE:Re: rootcint problem on Sun-Solaris

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Tue Feb 09 1999 - 14:07:24 MET


Martin,

>we have a large number of #ifdef conditions throughout the code, which
>must work on many platforms (and some of the code on realtime systems
>such as VxWorks.) 

This is not a problem for CINT. CINT can handle #ifdefs without preprocessor.

>In addition, there are situations where actual
>keywords such as inline, const, or static are #define'd to allow
>compilation especially with cross-compilers. 

This one, you are likely needing preprocessor. In many cases, using #define
for inline causes problem.

>Sun-Solaris is the only platform where rootcint has problems; on Linux,
>SGI, and I believe on DEC Unix (where I didn't do the test myself) it
>works fine with the -p option. Now if I had to work around that for the
>benefit of the Sun compiler that would be a lot of work. 

In this case, for Linux, SGI and DEC, you do not have ROOT
special symbols derived from ClassDef. I think it is fine for you. 

Anyway, I understand that you have problem only on Solaris. 

>I wonder. So Cint in the end calls compiled code. But if the
>rootcint-generated glue code uses a different set of header files for
>its thing, isn't there the possibility of a mismatch between how
>rootcint believes a function is prototyped and what the compiler thinks? 
>Maybe I got lucky and rootcint's headers are basically the same for GNU
>on Linux so that it doesn't show? Again, I build the shared libs fine
>with preprocessing there. 

This is completely different issue. You do not have mismatch within a single
platform. Cint sees the same header file for glue code and the real thing.
I do not explain the detail here, this is the magic of rootcint.

>That's the situation... Did I mention that Sun/Solaris is one the two
>main computing platforms in the PHENIX experiment (the other one is
>Linux)? I hope there is a somewhat simple solution. 

My recommendation is as follows.

First, please try to eliminate  #defines uses in place of inline functions 
and string constant. Cint accepts #defines as integer or floating number 
constant. Other #defines are likely to cause some problems. It is the
best practice to avoid such #defines and build dictionary without preprocessor
.

If this is impossible, things can be tricky.  Please send me a part of
preprocessed header file which causes the problem. I'll try to find a solution
.

Masaharu Goto



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