pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/44735: pkgsrc 2010Q4 Solaris 2.{8,10} lang/gcc3 build failed (libtool problem ?)
>Number: 44735
>Category: pkg
>Synopsis: pkgsrc 2010Q4 Solaris 2.{8,10} lang/gcc3 build failed (libtool
>problem ?)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Mar 17 13:40:00 +0000 2011
>Originator: Dr. Wolfgang Stukenbrock
>Release: NetBSD 4.0
>Organization:
Dr. Nagler & Company GmbH
>Environment:
System: NetBSD test-s0 4.0 NetBSD 4.0 (NSW-WS) #0: Tue Aug 17 17:28:09 CEST
2010 wgstuken@test-s0:/usr/src/sys/arch/amd64/compile/NSW-WS amd64
Architecture: x86_64
Machine: amd64
>Description:
I'm trying to use pkgsrc-2010Q4 on Solaris 2.8 and/or 2.10.
I want to build only 64-Bit binaries on the system.
I perfer the sunstudio compilers as default for Solaris, so
I bootstrap with sunstudio11 (on 2.8) and sunstudio12.1 (on 2.10).
remark: the 12.1 does not work on our 2.8 system due to libc problems.
boottrapping works fine with the method described
"env CC=/opt/.. SUNWSPROBASE=/opt/... ./bootstrap -abi=64
The resulting /usr/pkg/etc/mk.conf accedently than needs some tuning,
because some packages (e.g. automake) will not be prepared for 64 bit
so "MACHINE_GNU_PLATFORM= sparc64-sun-solaris2" must be added to it.
Next gcc3-c will compile with the sunpro compiler fine, but gcc3-c++
requires a setup with gcc as pkgsrc-compiler.
There are also some other packages that does not compile with the
sunpro compiler due to syntax/semantic problems in C or C++.
(up to now I know fonts/fontconfig and print/poppler, but I'm shure
there
are more ...)
Therefore I've added a 'switch' to support this.
Here my mk.conf for Solaris 2.10 follows:
# Example /usr/pkg/etc/mk.conf file produced by bootstrap-pkgsrc
# Wed Mar 16 14:27:24 CET 2011
.ifdef BSD_PKG_MK # begin pkgsrc settings
ABI= 64
.ifdef NC_PKG_GCC
PKGSRC_COMPILER= gcc
CC= /usr/pkg/gcc3/bin/gcc
CXX= /usr/pkg/gcc3/bin/g++
CPP= /usr/pkg/gcc3/bin/cpp
.else
PKGSRC_COMPILER= sunpro
CC= cc
CXX= CC
CPP= ${CC} -E
SUNWSPROBASE= /opt/sunstudio12.1
.endif
# some ABI 64 settings - required by some tools like automake and gmp ..
MACHINE_GNU_PLATFORM= sparc64-sun-solaris2
PKG_DBDIR= /var/db/pkg
LOCALBASE= /usr/pkg
VARBASE= /var
PKG_TOOLS_BIN= /usr/pkg/sbin
PKGMANDIR= man
TOOLS_PLATFORM.install?= /usr/pkg/bin/install-sh
TOOLS_PLATFORM.sh?= /usr/pkg/bin/pdksh
TOOLS_PLATFORM.ksh?= /usr/pkg/bin/pdksh
TOOLS_PLATFORM.awk?= /usr/pkg/bin/nawk
TOOLS_PLATFORM.sed?= /usr/pkg/bin/nbsed
# added by us
TOOLS_PLATFORM.tar?= /usr/pkg/bin/bsdtar
.endif # end pkgsrc settings
The TOOLS_PLATFORM.tar has been added to avoid possible portabiliy
problems with the original sun tar that is not 100% compartible with
gnutar and bsdtar.
Next problem with gcc3 is that gcc-c++ will run into an endless loop
with configure. OK normaly this gets "fixed" by setting
GNU_CONFIGURE=yes
in the Makefile. This is not done for some reasons.
If I add the following to lang/gcc3/Makefile.common the endless loop
disapears and everything compiles corretly.
GNU_CONFIGURE= yes
USE_GNU_CONFIGURE_HOST= no
CONFIGURE_HAS_INFODIR= no
CONFIGURE_HAS_MANDIR= no
GNU_CONFIGURE_PREFIX= ${GCC_PREFIX}
.if empty(PKGNAME:M*-c-*)
NC_PKG_GCC=1
.endif
The optional setting of NC_PKG_GCC switches to gcc mode
for all parts of gcc3 other than gcc3-c.
Due to the fact, that the --host parameter is added on the configure
command line in another way, you need to disable the automatic
parameter setup by disabling USE_GNU_CONFIGURE_HOST.
I've disabled the additional two CONFIGURE_HAS_INFODIR and
CONFIGURE_HAS_MANDIR.
You need to set GNU_CONFIGURE_PREFIX to the correct path /usr/pkg/gcc3,
because this is added on the command line too. It is there twice now,
but
that does not hurt configure ...
This setup compiles now, but gcc3-c++ still fails to install.
The problem is the "libtool" - I hate this "stupid" tool ...
In
lang/gcc3-c++/work/gcc-3.3.6/sparc64-sun-solaris2/sparcv7/libstdc++-v3
there is a libtool script that is called during installation and that is
the cause of the problem.
For installation it gets called many times with arguments like the
following:
/usr/pkg/bin/pdksh
/export/opt/NC-src/pkgsrc-2010Q4/lang/gcc3-c++/work/gcc-3.3.6/install-sh -c -m
644 ${file} /usr/pkg/gcc3/include/c++/3.3.6/./ext
This works fine, because the last path points to a directory.
But it also gets called the following way:
/usr/pkg/bin/pdksh ../libtool --mode=install /usr/pkg/bin/pdksh
/export/opt/NC-src/pkgsrc-2010Q4/lang/gcc3-c++/work/gcc-3.3.6/install-sh -c
libsupc++.la /usr/pkg/gcc3/lib/./libsupc++.la
remark: this is the case in the libsupc++ subdir of the directory
mentioned
above.
Here we have a "file" to "file" install.
The problem is that the libtool script does not detect
"/usr/pkg/bin/pdksh"
as a shell. The implementation is the following (part of the libtool
script):
# There may be an optional sh(1) argument at the beginning of
# install_prog (especially on Windows NT).
if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
# Allow the use of GNU shtool's install command.
$echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
# Aesthetically quote it.
arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
esac
install_prog="$arg "
arg="$1"
shift
else
install_prog=
arg="$nonopt"
fi
In nonopt there is /usr/pkg/bin/pdksh.
Accedently the variable SHELL is forced to /bin/sh some lines above.
So this does not match and the number of files to installed is not
correctly calculated. This results in an error message without calling
the specified command line - very very bad ....
If libtool would try the command line, it would succeed.
I've tried to set SHELL to /usr/pkg/bin/pdksh prior starting compilation
without any effect. (of cause I removed the work directoy for that)
I simply fail to install gcc3-c++ till now due to the stupid libtool
script.
Up to now I've no idea where the information for setting SHELL=/bin/sh
comes from.
help ...
remark:
you cannot build gcc3-c with "PKGSRC_COMPILER=gcc", because this
tries to build gcc-2.x and that does not support a 64 bit setup.
So you need the sunpro compiler for 64-Bit setup for gcc3-c.
>How-To-Repeat:
Setup a Solaris 2.{8,10} system to use the sunpro compiler,
do the "modification" described above to /usr/pkg/etc/mk.conf
and /usr/pkgsrc/lang/gcc2/Makefile.common and try to install it.
It will install gcc correctly bur fails with g++.
>Fix:
still not known - sorry
The libtool scripts are not in the gcc-3.3.6.tar.bz2 file.
They are genereated during configuration of the package.
I've modified the libtool scripts by hand and set
SHELL=/usr/pkg/bin/pdksh
to get it installing, but this is no real sollution ...
(this must be done for libstdc++ sparv9 subdir too ....)
I'm open for additional ideas ....
I'm not shure where the fixed setting SHELL=/bin/sh comes from.
Perhaps this goes away if I set SHELL when building libtool-base.
If it comes from there, than libtool-base should use the value from
TOOLS_PLATFORM.sh for this setup. If this is a gcc3 "internal" problem,
TOOLS_PLATFORM.sh should also be used or the libtool scripts should get
patched to use the corresponding value.
A simular problem happend in gcc3-f77. The "bad" SHELL setting triggers
another error message - not excatly the same.
But setting SHELL=/usr/pkg/bin/pdksh will fix the problem there too.
I think there may be much more situations where libtool will fail if
TOOLS_PLATFORM.sh is set to something different than /bin/sh.
>Unformatted:
Home |
Main Index |
Thread Index |
Old Index