smalltalk-3.2: installation failure on glibc system

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

smalltalk-3.2: installation failure on glibc system

Bruno Haible
Hi libtool guys,

I'm trying to install GNU smalltalk 3.2 on a bi-arch (i386, x86_64) system
in 32-bit mode. I used this configure command (already tested with dozens
of GNU packages):

$ ./configure --host=i686-pc-linux-gnu --prefix=/arch/x86-linux/gnu \
  CC="gcc -m32 -march=i586" CXX="g++ -m32 -march=i586" LDFLAGS="-m32" \
  CPPFLAGS=-Wall
...
$ make
...
/bin/sh ../libtool --tag=CC   --mode=link gcc -m32 -march=i586 -fomit-frame-pointer -g -O2 -Wall -Wdeclaration-after-statement -Wno-format -Wpointer-arith -Wno-pointer-sign -Wwrite-strings -Wno-strict-aliasing -Wno-switch -fno-gcse -fstrict-aliasing  -version-info 7:2:0 -no-undefined -export-symbols-regex "^gst_.*" -m32 -o libgst.la -rpath /arch/x86-linux/gnu/lib gstpub.lo files.lo gst-parse.lo lex.lo str.lo tree.lo byte.lo comp.lo sym.lo dict.lo oop.lo opt.lo save.lo cint.lo heap.lo input.lo sysdep.lo callin.lo xlat.lo mpz.lo print.lo alloc.lo security.lo re.lo interp.lo real.lo sockets.lo events.lo ../lib-src/library.la  ../sigsegv/src/libsigsegv.la ../libffi/libffi.la ../snprintfv/snprintfv/libsnprintfvc.la -lreadline   -lgmp -lpthread -lrt -lm
libtool: link: link -dump -symbols  .libs/gstpub.o .libs/files.o .libs/gst-parse.o .libs/lex.o .libs/str.o .libs/tree.o .libs/byte.o .libs/comp.o .libs/sym.o .libs/dict.o .libs/oop.o .libs/opt.o .libs/save.o .libs/cint.o .libs/heap.o .libs/input.o .libs/sysdep.o .libs/callin.o .libs/xlat.o .libs/mpz.o .libs/print.o .libs/alloc.o .libs/security.o .libs/re.o .libs/interp.o .libs/real.o .libs/sockets.o .libs/events.o   ../lib-src/.libs/library.a ../libffi/.libs/libffi.a ../snprintfv/snprintfv/.libs/libsnprintfvc.a |  | /arch/x86_64-linux/gnu/bin/sed 's/.* //' | sort | uniq > .libs/libgst.exp
../libtool: eval: line 950: syntax error near unexpected token `|'
../libtool: eval: line 950: `link -dump -symbols  .libs/gstpub.o .libs/files.o .libs/gst-parse.o .libs/lex.o .libs/str.o .libs/tree.o .libs/byte.o .libs/comp.o .libs/sym.o .libs/dict.o .libs/oop.o .libs/opt.o .libs/save.o .libs/cint.o .libs/heap.o .libs/input.o .libs/sysdep.o .libs/callin.o .libs/xlat.o .libs/mpz.o .libs/print.o .libs/alloc.o .libs/security.o .libs/re.o .libs/interp.o .libs/real.o .libs/sockets.o .libs/events.o   ../lib-src/.libs/library.a ../libffi/.libs/libffi.a ../snprintfv/snprintfv/.libs/libsnprintfvc.a |  | /arch/x86_64-linux/gnu/bin/sed 's/.* //' | sort | uniq > .libs/libgst.exp'
make[3]: *** [libgst.la] Fehler 1
make[3]: quittant le répertoire « /data/bruno/build/smalltalk-3.2/libgst »
make[2]: *** [all] Fehler 2
make[2]: quittant le répertoire « /data/bruno/build/smalltalk-3.2/libgst »
make[1]: *** [all-recursive] Fehler 1
make[1]: quittant le répertoire « /data/bruno/build/smalltalk-3.2 »
make: *** [all] Fehler 2

The only particular thing about this system is that I have a recent version
of GNU coreutils installed, leading to
  $ which link
  /arch/x86-linux/gnu/bin/link
  $ LC_ALL=C link --version | head -n 1
  link (GNU coreutils) 8.4

The designated (generated) libtool script in the top-level directory
has the following settings at the top:


-------------------------------------------------------------------------------

# The names of the tagged configurations supported by this script.
available_tags=""

# ### BEGIN LIBTOOL CONFIG

# Assembler program.
AS=as

# DLL creation program.
DLLTOOL=dlltool

# Object dumper program.
OBJDUMP=objdump

# Which release of libtool.m4 was used?
macro_version=2.2.6
macro_revision=1.3012

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

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

# What type of objects to build.
pic_mode=default

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

# The host system.
host_alias=i686-pc-linux-gnu
host=i686-pc-linux-gnu
host_os=linux-gnu

# The build system.
build_alias=
build=x86_64-unknown-linux-gnu
build_os=linux-gnu

# A sed program that does not truncate output.
SED="/arch/x86_64-linux/gnu/bin/sed"

# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="$SED -e 1s/^X//"

# A grep program that handles long lines.
GREP="/arch/x86-linux/gnu/bin/grep"

# An ERE matcher.
EGREP="/arch/x86-linux/gnu/bin/grep -E"

# A literal string matcher.
FGREP="/arch/x86-linux/gnu/bin/grep -F"

# A BSD- or MS-compatible name lister.
NM="link -dump -symbols"

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

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

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

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

# whether the shell understands "unset".
lt_unset=unset

# turn spaces into newlines.
SP2NL="tr \\040 \\012"

# turn newlines into spaces.
NL2SP="tr \\015\\012 \\040\\040"

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

# 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"

# The archiver.
AR="i686-pc-linux-gnu-ar"
AR_FLAGS="cru"

# A symbol stripping program.
STRIP="strip"

# Commands used to install an old-style archive.
RANLIB="ranlib"
old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib"
old_postuninstall_cmds=""

# A C compiler.
LTCC="gcc -m32 -march=i586"

# LTCC compiler flags.
LTCFLAGS="-g -O2 -Wall -Wdeclaration-after-statement -Wno-format -Wpointer-arith -Wno-pointer-sign -Wwrite-strings -Wno-strict-aliasing -Wno-switch -fno-gcse -fstrict-aliasing "

# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe=""

# Transform the output of nm in a proper C declaration.
global_symbol_to_cdecl=""

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

# Transform the output of nm in a C name address pair when lib prefix is needed.
global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/  {\\\"\\1\\\", (void *) 0},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/  {\"\\2\", (void *) \\&\\2},/p' -e 's/^[BCDEGRST]* \\([^ ]*\\) \\([^ ]*\\)\$/  {\"lib\\2\", (void *) \\&\\2},/p'"

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

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

# An echo program that does not interpret backslashes.
ECHO="echo"

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

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

# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
DSYMUTIL=""

# Tool to change global to local symbols on Mac OS X.
NMEDIT=""

# Tool to manipulate fat objects and archives on Mac OS X.
LIPO=""

# ldd/readelf like tool for Mach-O binaries on Mac OS X.
OTOOL=""

# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
OTOOL64=""

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

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

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

# Variables whose values should be saved in libtool wrapper scripts and
# restored at link time.
variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"

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

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

# Library versioning type.
version_type=linux

# Shared library runtime path variable.
runpath_var=LD_RUN_PATH

# Shared library path variable.
shlibpath_var=LD_LIBRARY_PATH

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

# 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}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}"

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

# Command to use after installation of a shared archive.
postinstall_cmds=""

# Command to use after uninstallation of a shared archive.
postuninstall_cmds=""

# Commands used to finish a libtool library installation in a directory.
finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir"

# As "finish_cmds", except a single script fragment to be evaled but
# not shown.
finish_eval=""

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

# Compile-time system search path for libraries.
sys_lib_search_path_spec=""

# Run-time system search path for libraries.
sys_lib_dlsearch_path_spec=""

# Whether dlopen is supported.
dlopen_support=yes

# Whether dlopen of programs is supported.
dlopen_self=yes

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

# Commands to strip libraries.
old_striplib="strip --strip-debug"
striplib="strip --strip-unneeded"


# The linker used to build libraries.
LD="/usr/x86_64-suse-linux/bin/ld"

# Commands used to build an old-style archive.
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib"

# A language specific compiler.
CC="gcc -m32 -march=i586"

# Is the compiler the GNU compiler?
with_gcc=yes

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

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

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

# Compiler flag to prevent dynamic linking.
link_static_flag="-static"

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

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

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

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec="\${wl}--export-dynamic"

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive"

# Whether the compiler copes with passing no objects directly.
compiler_needs_object="no"

# 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 a shared archive.
archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib"
archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~
            cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~
            echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~
            \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib"

# Commands used to build a loadable module if different from building
# a shared archive.
module_cmds=""
module_expsym_cmds=""

# Whether we are building with GNU ld or not.
with_gnu_ld="yes"

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag=""

# Flag that enforces no undefined symbols.
no_undefined_flag=""

# Flag to hardcode $libdir into a binary during linking.
# This must work even if $libdir does not exist
hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir"

# 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${shared_ext} during linking hardcodes
# DIR into the resulting binary.
hardcode_direct=no

# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
# DIR into the resulting binary and the resulting library dependency is
# "absolute",i.e impossible to change by setting ${shlibpath_var} if the
# library is relocated.
hardcode_direct_absolute=no

# 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

# Set to yes if linker adds runtime paths of dependent libraries
# to runtime path list.
inherit_rpath=no

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

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

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

# The commands to list exported symbols.
export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*"

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

# Commands necessary for linking programs (against libraries) with templates.
prelink_cmds=""

# Specify filename containing input files.
file_list_spec=""

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

# ### END LIBTOOL CONFIG
-------------------------------------------------------------------------------

There are two problems here:

1) NM has been set to "link -dump -symbols". This is wrong. This setting should
   only be valid when the --host platform is win32 and the build platform is
   not cygwin. I have an /usr/bin/nm program in $PATH, that works fine for
   both 32-bit and 64-bit object files on my platform.
2) global_symbol_pipe has been set to empty.

When I google for
  "libtool eval" "link -dump -symbols"
I find dozens of reports of libtool errors that were due to the same
problem: NM being set to "link -dump -symbols" on platforms unrelated to win32
(Linux, MacOS, NetBSD etc.).

Bruno


_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: smalltalk-3.2: installation failure on glibc system

Gary V. Vaughan-4
Hi Bruno,

On 3 May 2010, at 01:07, Bruno Haible wrote:

> I'm trying to install GNU smalltalk 3.2 on a bi-arch (i386, x86_64) system
> in 32-bit mode [[...]]
>
> ../snprintfv/snprintfv/.libs/libsnprintfvc.a |  | /arch/x86_64-linux/gnu/bin/sed 's/.* //' | sort | uniq > .libs/libgst.exp
>
> [[...]]
> # Take the output of nm and produce a listing of raw symbols and C names.
> global_symbol_pipe=""
>
> # Transform the output of nm in a proper C declaration.
> global_symbol_to_cdecl=""
>
> [[...]]
>
> # The commands to list exported symbols.
> export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"

Thanks for the report.

> There are two problems here:
>
> 1) NM has been set to "link -dump -symbols". This is wrong. This setting should
>   only be valid when the --host platform is win32 and the build platform is
>   not cygwin. I have an /usr/bin/nm program in $PATH, that works fine for
>   both 32-bit and 64-bit object files on my platform.
> 2) global_symbol_pipe has been set to empty.


_LT_CMD_GLOBAL_SYMBOLS is the macro responsible for setting global_symbol_pipe, and by inspection of that code, it seems that the only way for it to be empty is if the internal test to ensure that it works fails.  Probably this is a symptom of the other problem.

LT_PATH_NM is the macro responsible for setting NM, although it doesn't run if NM has already been set.  Again, by inspection NM is only set to "link -dump -symbols" if the test for a working $NM fails... either because the flag combinations tried by the macro don't produce the expected output, or if NM itself is not set properly.  You can narrow this down by rerunning configure with NM set in the environment to the full path of the nm binary you would have expected libtool to chose.  If it still fails then the macro is not able to find the right flags to make that NM produce output that is useful, otherwise if it starts working then the macro is not finding the NM you set manually in your PATH (or a few other well known locations).

> When I google for
>  "libtool eval" "link -dump -symbols"
> I find dozens of reports of libtool errors that were due to the same
> problem: NM being set to "link -dump -symbols" on platforms unrelated to win32
> (Linux, MacOS, NetBSD etc.).

That seems like a good reason to fail early.  If LT_PATH_NM is unable to find a working nm binary when {,cross-}compiling for an MS target, then we should be causing configure to bail out with an error rather than wait for link-time errors on a badly chosen NM setting.  Although, I'm not sure yet whether NM="garbage" is a showstopper for libtool... probably libtool is still useful for linking libraries with no -export-symbols* flags even in this case. Comments?

Please let us know whether manual NM export works for you (and what value you used, and whether the nm binary you chose was along your command search PATH), so we can figure out where the error is.

Cheers,
--
Gary V. Vaughan ([hidden email])

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: smalltalk-3.2: installation failure on glibc system

Gary V. Vaughan-4
On 3 May 2010, at 10:30, Gary V. Vaughan wrote:
> If LT_PATH_NM is unable to find a working nm binary when {,cross-}compiling for an MS target

s/when/when NOT/

Cheers,
--
Gary V. Vaughan ([hidden email])

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk