From andy_liaw at merck.com  Fri May 13 17:00:23 2005
From: andy_liaw at merck.com (Liaw, Andy)
Date: Fri May 13 17:02:31 2005
Subject: [Rd] Implementing R on  IBM p690 cluster Jump
Message-ID: <39B6DDB9048D0F4DAD42CB26AAFF0AFA64E82D@usctmx1106.merck.com>

> From: Kurt Hornik
> 
> >>>>> Brian D Ripley writes:
> 
> > As far as I know R 2.0.1 was built on AIX.  A quick diff
> > gannet% diff ~/R/R-2.0.1/src/modules/X11/Makefile
> > ~/R/R-2.1.0/src/modules/X11/Makefile
> > 54c54
> > <       $(SHLIB_LINK) -o $@ $(R_X11_la_LDFLAGS) $(R_X11_la_OBJECTS)
> > $(R_X11_la_LIBADD) $(LIBS)
> > ---
> >> $(SHLIB_LINK) -o $@ $(R_X11_la_LDFLAGS) $(R_X11_la_OBJECTS)
> > $(R_X11_la_LIBADD)
> > 128c128,129
> > <   ../../../src/include/Rmodules/RX11.h
> > ---
> >> ../../../src/include/Rmodules/RX11.h \
> >> ../../../src/include/Rconnections.h
> 
> > suggests that AIX (alone) required $(LIBS) there.  As it is 
> harmful on
> > some other platforms (the intention is to pick up entry points in
> > R.bin/libR rather than duplicate copies of static 
> libraries) I suspect we
> > need an AIX-specific workaround (in particular the libintl 
> library is not
> > going to be in LIBS).
> 
> > This probably applies to other modules and even shared objects in
> > packages.
> 
> Yes.  It would still be good if someone on AIX could provide 
> us with the
> output of BUILDDIR/libtool --config.
> 
> -k
> 
> > Is there anyone with an AIX machine who is able to work through this
> > and provide appropriate diffs?

Sorry for being dense: could you explain what diff is needed? 

I unpacked R-patched_2005-05-12, and set:

OBJECT_MODE=64
CC=xlc_r
F77=xlf_r
CXX=xlC_r
CFLAGS/FLAGS/CXXFLAGS="-O -qstrict"

Running make gave similar error, namely symbols that should be in libm 
not found.  Below is output from BUILDDIR/libtool --config:

---------------------------------
# Libtool was configured on host hpc2b.merck.com:

# Shell to use when invoking shell scripts.
SHELL="/bin/sh"

# Whether or not to build shared libraries.
build_libtool_libs=yes

# Whether or not to build static libraries.
build_old_libs=no

# Whether or not to add -lc for building shared libraries.
build_libtool_need_lc=yes

# Whether or not to disallow shared libs when runtime libs are static
allow_libtool_libs_with_static_runtimes=no

# Whether or not to optimize for fast installation.
fast_install=yes

# The host system.
host_alias=
host=powerpc-ibm-aix5.1.0.0

# An echo program that does not interpret backslashes.
echo="print -r"

# The archiver.
AR="ar"
AR_FLAGS="cru"

# A C compiler.
LTCC="xlc_r"

# A language-specific compiler.
CC="xlc_r"

# Is the compiler the GNU C compiler?
with_gcc=

# An ERE matcher.
EGREP="grep -E"

# The linker used to build libraries.
LD="/bin/ld"

# Whether we need hard or soft links.
LN_S="ln -s"

# A BSD-compatible nm program.
NM="/bin/nm -B"

# A symbol stripping program
STRIP="strip"

# Used to examine libraries when file_magic_cmd begins "file"
MAGIC_CMD=file

# Used on cygwin: DLL creation program.
DLLTOOL="dlltool"

# Used on cygwin: object dumper.
OBJDUMP="objdump"

# Used on cygwin: assembler.
AS="as"

# The name of the directory that contains temporary libtool files.
objdir=.libs

# How to create reloadable object files.
reload_flag=" -r"
reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs"

# How to pass a linker flag through the compiler.
wl="-Wl,"

# Object file suffix (normally "o").
objext="o"

# Old archive suffix (normally "a").
libext="a"

# Shared library suffix (normally ".so").
shrext_cmds='.so'

# Executable file suffix (normally "").
exeext=""

# Additional compiler flags for building library objects.
pic_flag=" -DPIC"
pic_mode=default

# What is the maximum length of a command?
max_cmd_len=8192

# Does compiler simultaneously support -c and -o options?
compiler_c_o="yes"

# Must we lock files when doing compilation ?
need_locks="no"

# Do we need the lib prefix for modules?
need_lib_prefix=no

# Do we need a version for libraries?
need_version=no

# Whether dlopen is supported.
dlopen_support=unknown

# Whether dlopen of programs is supported.
dlopen_self=unknown

# Whether dlopen of statically linked programs is supported.
dlopen_self_static=unknown

# Compiler flag to prevent dynamic linking.
link_static_flag="-bnso -bI:/lib/syscalls.exp"

# Compiler flag to turn off builtin functions.
no_builtin_flag=""

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec=""

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec=" "

# Compiler flag to generate thread-safe objects.
thread_safe_flag_spec=""

# Library versioning type.
version_type=linux

# Format of library name prefix.
libname_spec="lib\$name"

# List of archive names.  First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME.
library_names_spec="\${libname}\${release}.a \$libname.a"

# The coded name of the library, if different from the real name.
soname_spec="\${libname}\${release}\${shared_ext}\$major"

# Commands used to build and install an old-style archive.
RANLIB="ranlib"
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB
\$oldlib"
old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib"
old_postuninstall_cmds=""

# Create an old-style archive from a shared archive.
old_archive_from_new_cmds=""

# Create a temporary old-style archive to link instead of a shared archive.
old_archive_from_expsyms_cmds=""

# Commands used to build and install a shared archive.
archive_cmds=""
archive_expsym_cmds="\$CC \${wl}-bM:SRE -o \$output_objdir/\$soname
\$libobjs \$deplibs \$compiler_flags \${wl}-bE:\$export_symbols
\${wl}-bnoentry\${allow_undefined_flag}~\$AR \$AR_FLAGS
\$output_objdir/\$libname\$release.a \$output_objdir/\$soname"
postinstall_cmds=""
postuninstall_cmds=""

# Commands used to build a loadable module (assumed same as above if empty)
module_cmds=""
module_expsym_cmds=""

# Commands to strip libraries.
old_striplib=""
striplib=""

# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects=""

# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects=""

# Dependencies to place before the objects being linked to create a
# shared library.
predeps=""

# Dependencies to place after the objects being linked to create a
# shared library.
postdeps=""

# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=""

# Method to check whether dependent libraries are shared objects.
deplibs_check_method="pass_all"

# Command to use when deplibs_check_method == file_magic.
file_magic_cmd="\$MAGIC_CMD"

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag=" \${wl}-berok"

# Flag that forces no undefined symbols.
no_undefined_flag=" \${wl}-bernotok"

# Commands used to finish a libtool library installation in a directory.
finish_cmds=""

# Same as above, but a single script fragment to be evaled but not shown.
finish_eval=""

# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe="sed -n -e 's/^.*[ 	]\\([BCDT][BCDT]*\\)[ 	][
]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'"

# Transform the output of nm in a proper C declaration
global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'"

# Transform the output of nm in a C name address pair
global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/
{\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/
{\"\\2\", (lt_ptr) \\&\\2},/p'"

# This is the shared library runtime path variable.
runpath_var=

# This is the shared library path variable.
shlibpath_var=LIBPATH

# Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=unknown

# How to hardcode a shared library path into an executable.
hardcode_action=immediate

# Whether we should hardcode library paths into libraries.
hardcode_into_libs=yes

# Flag to hardcode $libdir into a binary during linking.
# This must work even if $libdir does not exist.
hardcode_libdir_flag_spec="\${wl}-blibpath:\$libdir:/usr/local/lib:/usr/lpp/
xlopt:/usr/lib/threads:/usr/lib:/lib
"

# If ld is used when linking, flag to hardcode $libdir into
# a binary during linking. This must work even if $libdir does
# not exist.
hardcode_libdir_flag_spec_ld=""

# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator=":"

# Set to yes if using DIR/libNAME during linking hardcodes DIR into the
# resulting binary.
hardcode_direct=yes

# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L=no

# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
# the resulting binary.
hardcode_shlibpath_var=unsupported

# Set to yes if building a shared library automatically hardcodes DIR into
the library
# and all subsequent libraries and executables linked against it.
hardcode_automatic=no

# Variables whose values should be saved in libtool wrapper scripts and
# restored at relink time.
variables_saved_for_relink="PATH  "

# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=yes

# Compile-time system search path for libraries
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"

# Run-time system search path for libraries
sys_lib_dlsearch_path_spec="/lib /usr/lib"

# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path=""

# Set to yes if exported symbols are required.
always_export_symbols=yes

# The commands to list exported symbols.
export_symbols_cmds="\$NM -BCpg \$libobjs \$convenience | awk '{ if (((\\\$2
== \\\"T\\\") || (\\\$2 == \\\"D\\\") || (\\\$2 == \\\"B\\\")) &&
(substr(\\\$3,1,1) != \\\".\\\")) { print \\\$3 } }' | sort -u >
\$export_symbols"

# The commands to extract the exported symbol list from a shared archive.
extract_expsyms_cmds=""

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_"

# Symbols that must always be exported.
include_expsyms=""
-------------------------------





> 
> > On Thu, 12 May 2005, Bill Northcott wrote:
> 
> >> On 11/05/2005, at 11:26 PM, Kurt Hornik wrote:
> >> >> There seem to be problems in the autoconf stuff.  cos 
> and sin are
> >> >> being located in libm but the link line you show has no 
> '-lm' which
> >> >> accounts for 6 of the 7 missing symbols.  Also gettext 
> seems to have
> >> >> been located by the configure script, but there is no 
> option on the
> >> >> link line to include it in the link. Also search 
> configure.in for
> >> >> strings like powerpc-ibm-aix to see what stuff is being done
> >> >> specifically for AIX.  It may be out of date in relation to your
> >> >> system.
> >> >>
> >> >
> >> >
> >> >> If it was my problem, I would have look at those bits of the
> >> >> configure
> >> >> script and the sections of configure.in that generated 
> them.  Then I
> >> >> would compare the AC_SUBST variables with the makefile.in that
> >> >> generated the link.  It seems there is some non- 
> communication there.
> >> 
> >> > Yes most of the undefined symbols seem to come from 
> libm.  But they
> >> > would also be in libm on all other platforms which have such, and
> >> > we do
> >> > not include it there.  On Linux I get
> >> >
>


[Rd] Implementing R on IBM p690 cluster Jump
Liaw, Andy