>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