[R] [FORGED] Re: tcltk problems

Berwin A Turlach berwin.turlach at gmail.com
Mon Nov 20 11:36:03 CET 2017


G'day Peter,

On Sat, 18 Nov 2017 23:20:25 +0100
peter dalgaard <pdalgd at gmail.com> wrote:

> Hum, missed that bit. Looking at the configure script, the only way I
> can see it failing to look in /usr/lib/tcl8.6 is if ${LIBnn} is not
> "lib". Any chance it might be set to lib64?

Well, yes, in an earlier e-mail Rolf said:

    Then I scanned through BldDir/config.log and found:
    LIBnn='lib64'
    (on line 19901 !!!)

But that seems to be the output of the configuration as determined
by ./configure.

The question is why ${LIBnn} is set to this value.  If not through some
environment variable or config.site, the only way I can see that the relevant 
code snippet[1] (lines 3788-3806 of R 3.4.2's configure, quoted below) sets
${LIBnn} to 'lib64' is if /usr/lib64 exist.

This should not be the case on a 64bit Ubuntu machine.  My machine
has /usr/lib, /usr/lib32 and /usr/libx32.  As far as I know, Ubuntu
(and also Debian? But I have not used Debian for a long time) has always
placed its 64bit libraries into /lib and the 32bit libraries
into e.g. /lib32.  And nowadays, one has also /usr/lib/i386-linux-gnu for
32bit libraries and /usr/lib/x86_64-linux-gnu for 64bit libraries.

As far as I can tell, RedHat used /lib for the 32bit libraries
and /lib64 for the 64bit libraries.  And I believe that most (all?) of
R core that were using linux were using RedHat.  But I could be wrong.
Definitely remember that I always found the multiple-architecture part
in "R Installation and Administration" confusing to read as my linux
system had no /lib64 directories. :)

Finally, if ${LIBnn} is set to 'lib' then the relevant code snippet[2] 
(lines 39527-39543 of R 3.4.2's configure, quoted below), would find
tclConfig.sh; regardless on whether it is in /usr/lib
or /usr/lib/tcl8.6.  Of course, if ${LIBnn} is set to 'lib64',
then ./configure will not find tclConfig.sh on an Ubuntu machine.

So Rolf should probably check whether there is a /usr/lib64 directory
on his machine.  If so, why is it there?  Perhaps some other software
installed from source created it? The contents of the directory might give
some clues.  If a /usr/lib64 exist on Rolf's machine, he should probably use
config.site to set ${LIBnn} to 'lib' (line 146 in R 3.4.2's
config.site) so that ./configure can automagically find tclConfig.sh
again......

Cheers,

	Berwin

PS: Who is now wondering whether his 32bit compile of R is actually
using the 64bit version of TCL/TK on his system....  One day I might
find out... :)

[1]
## We need to establish suitable defaults for a 64-bit OS
libnn=lib
case "${host_os}" in
  linux*)
    ## Not all distros use this: some choose to march out of step
    ## Allow for ppc64le (Debian calls ppc64el), powerpc64le ...
    case "${host_cpu}" in
      x86_64|mips64|ppc64*|powerpc64*|sparc64|s390x)
        if test -d /usr/lib64; then
          libnn=lib64
	fi
      ;;
    esac
    ;;
  solaris*)
    ## libnn=lib/sparcv9 ## on 64-bit only, but that's compiler-specific
    ;;
esac
: ${LIBnn=$libnn}

[2]
if test -z "${TCL_CONFIG}"; then
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tclConfig.sh in library (sub)directories" >&5
$as_echo_n "checking for tclConfig.sh in library (sub)directories... " >&6; }
if ${r_cv_path_TCL_CONFIG+:} false; then :
  $as_echo_n "(cached) " >&6
else
  for ldir in /usr/local/${LIBnn} /usr/${LIBnn} /${LIBnn} /opt/lib /sw/lib /opt/csw/lib /usr/sfw/lib /opt/freeware/lib; do
  for dir in \
      ${ldir} \
      `ls -d ${ldir}/tcl[8-9].[0-9]* 2>/dev/null | sort -r`; do
    if test -f ${dir}/tclConfig.sh; then
      r_cv_path_TCL_CONFIG="${dir}/tclConfig.sh"
      break 2
    fi
  done
done
fi



More information about the R-help mailing list