[Rd] Compiling R (1.3.0) on AIX (4.3) fails (PR#1034)

Kurt Hornik Kurt.Hornik@ci.tuwien.ac.at
Thu, 2 Aug 2001 08:19:35 +0200


>>>>> Thomas J Vogels writes:

> Excerpt from email by Kurt Hornik:
>>>> On second thought: the comment in tkConfig.sh says
>>>> 
>>>> # String to pass to linker to pick up the Tk library from its
>>>> # installed directory.
>>>> TK_LIB_SPEC='@TK_LIB_SPEC@'
>>>> 
>>>> so maybe this assumes to be called by ld directly ...

> I think you're right with this assumption, but sadly, the current
> devel release for tcl/tk 8.4a2 is broken--even the maintainers of
> tcl/tk don't know how they want to handle TK_LIB_SPEC, TK_LIBS and
> friends!  When I tried to compile Tk it failed for 'wish'.  I'll check
> out how to file bug reports against tcl/tk...

[Well getting AIX right is not that easy.  Fortunately, R has Tom Vogels
to help ...]

>>>> 
>>>> What happens if we omit TK_LIB_SPEC from TCLTK_LIBS?
>> 
>>> hell breaks loose.  TK_LIB_SPEC contains '-bI/some/path/libtk8.3.exp'
>>> which is needed badly when linking on AIX.
>> 
>> Argh.  After sinking some more time into this ... here's what happens.
>> 
>> Assuming that both tclConfig.sh and tkConfig.sh are found, we do
>> 
>> TCLTL_LIBS="${TCL_LIB_SPEC} ${TK_LIB_SPEC} ${TK_LIBS}"
>> 
>> Using tcl8.4a1 and tk8.4a1 one gets for a shared build on AIX from the
>> TclTk configure code:
>> 
>> if test "$using_gcc" = "yes" ; then
>> TCL_BUILD_LIB_SPEC="-Wl,-bI:`pwd`/${TCL_BUILD_EXP_FILE} -L`pwd`"
>> TCL_LIB_SPEC="-Wl,-bI:${exec_prefix}/lib/${TCL_EXP_FILE} -L`pwd`"

> ... which is wrong, BTW:  TCL_LIB_SPEC should refer to
> ${exec_prefix}/lib not `pwd` ...

You mean in the `-L' part?  Certainly correct ...

>> else
>> TCL_BUILD_LIB_SPEC="-bI:`pwd`/${TCL_BUILD_EXP_FILE}"
>> TCL_LIB_SPEC="-bI:${exec_prefix}/lib/${TCL_EXP_FILE}"
>> fi
>> 
>> TK_LIB_SPEC="-bI:${exec_prefix}/lib/${TK_EXP_FILE}"
>> 
>> So the TclTk maintainers in their infinite wisdom have caught the gcc
>> case for tcl but not for tk.

> That would explain why Tcl/Tk compiles with Aix's cc but not gcc.

Yep.

>> 
>> I therefore suggest the following.
>> 
>> * Can you try replacing
>> 
>> TCLTK_LIBS="${TCLTK_LIBS} ${TK_LIB_SPEC} ${TK_LIBS}"
>> 
>> in m4/R.m4 by
>> 
>> TCLTK_LIBS="${TCLTK_LIBS} ${wl}${TK_LIB_SPEC} ${TK_LIBS}"
>> 
>> and see if that works?  (You will have to configure using
>> --enable-maintainer-mode to get configure rebuilt.  Or, you could
>> simply edit configure.)  By `works' I mean under both gcc and cc.

> I changed configure since I don't have autoconf etc. installed.  Your
> solution works when compiling with gcc! I haven't tried cc yet but
> will do so tomorrow.

Ok, great.  My assumption/hope is that this should work ...

>> * If so, this is the short-term fix we could go for.  If not, we may
>> need to infer wl for non-gcc from libtool, which is doable.
>> 
>> * It may be useful to report the discrepancy to the TclTk maintainers.

> I'll try to compile tcl and tk with gcc and send in reports.

>> * Provided they fix the problem, we need to think about better
>> strategies.  (Something like if wl is not the empty string and
>> TK_LIB_SPEC does not start with it then add it as prefix.)  But let us
>> not worry about this now.

> Do you really want to go this way?  Is AIX the only OS where you can
> run into this kind of trouble?  If so, why not add a compilation of a
> little test program in configure in case you have os==AIX, that would
> use the same flags that you'll use in library/src/tcltk.c?  If that
> fails, it's flagged early on and directly points to the tcl/tk
> installation (and not to R).

I think I want to go this way.  Reason: the current situation is a
mixture of an R bug and a Tk inconsistency.  The R bug is that I had not
realized that the LIB_SPECs are meant as flags to ld.  The Tk problem is
that this is not true.

The whole thing is a bit tricky, and it might be interesting to see how
e.g. GNOME projects deal with this in their -config scripts.  As this is
hidden inside libtool could you maybe try compiling libxml2 on your AIX
system and see what xml2-config --libs does?

Also, what does
	./libtool --config | grep ^wl
give for configuration with native cc?

In general, the portable way would be to have package config scripts use
$wl or alike.  But that will not do in general: someone could have gcc
but a native C++ compiler and $wl might be different between these ...

-k
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._