[R] compiling R-0.90.0 on alpha-dec-osf4.0

Kurt Hornik Kurt.Hornik@ci.tuwien.ac.at
Wed, 1 Dec 1999 13:25:32 +0100 (CET)


>>>>> Albrecht Gebhardt writes:

> On Sun, 28 Nov 1999, Kurt Hornik wrote:
>> >>>>> Prof Brian D Ripley writes:
>> 
>> > On Fri, 26 Nov 1999, Kurt Hornik wrote:
>> >> Albrecht Gebhardt had the same bug report a few days ago.  I don't quite
>> >> understand what is going on.  configure checks (via AC_C_CONST) whether
>> >> `const' works fine.  If not, it defines const as empty in Rdefines.h.
>> >> This in turn gets included in all of our source files.  So how can it
>> >> happen that const is empty in one place and not in another?
>> 
>> > Look in gram.c:
>> 
>> > #ifndef __cplusplus
>> > #ifndef __STDC__
>> > #define const
>> > #endif
>> > #endif
>> 
>> > comes before the forward declaration and the definition. We have ANSI
>> > compilers, so this does not happen to us.
>> 
>> > I don't know how to tell bison to behave!
>> 
>> I know :-)
>> 
>> In bison-xy/src/output.c, replace the unconditional
>> 
>> /* Make "const" do nothing if not in ANSI C.  */
>> fprintf (ftable, "#ifndef __cplusplus\n#ifndef __STDC__\n#define const\n#endif
>> \n#endif\n\n");
>> 
>> by something more useful :-)
>> 
>> But seriously, what is going on here?  Autoconf says
>> 
>> - Macro: AC_C_CONST
>> If the C compiler does not fully support the keyword `const',
>> define `const' to be empty.  Some C compilers that do not define
>> `__STDC__' do support `const'; some compilers that define
>> `__STDC__' do not completely support `const'.  Programs can simply
>> use `const' as if every C compiler supported it; for those that
>> don't, the `Makefile' or configuration header file will define it
>> as empty.
>> 
>> so how can we deal with the situation where __STDC__ is not defined by
>> the compiler but `const' still works?
>> 
>> One solution would be to mimic Bison's rule in addition to the autoconf
>> magic, so that we define const as empty when __STDC__ is not defined,
>> even if const works.
>> 

> Wouldn't it be better to force CPPFLAGS to contain "-std" or "-std1"
> for CC=cc on alpha? We compile most of our freeware stuff (kde,...)
> for Tru64 with this option ("std1") (From time to time I forget about
> it ;(, this happened with R-0.65/90)

> I just compiled 0.90.0 successful with "-std1".

After peeking at Octave, I think I'd prefer reverting to something close
to the orginal suggestion.  Would

#ifdef const
# define yyconst const
#else
# define yyconst
#endif

SEXP            mkString(yyconst char *);

...

work?

-k

(The #ifdef part would go in after the #include statements in gram.y.)
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._