pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/44735 (pkgsrc 2010Q4 Solaris 2.{8,10} lang/gcc3 build failed (libtool problem ?))



Hi again,

just to clarify the "main" problem again to avoid possible confusion.
It is not /usr/pkg/bin/libtool where the wrong shell is in.
It is a generated libtool script inside of the gcc3 tree.
I do not track down till now how it is generated. And the problem only comes up, if the last argument to install is not a directory.


Last "my" current "final" state of mk.conf setup that now seems to compile everything correctly. I know that is not 100% related to the original cause of the PR, but it belongs into the same category from my point of view.

When useing sunstudio compiler most times and use gcc(3) only for packages where syntax problems (or simular) occur. the following "workaround" work for gcc3 and everything required for samba.
(see some additional bug reports on "bad" sources in some packages too.)

I introduce a new make variable to switch between the compilers: NC_PKG_GCC
I set this in the Makefile or Makefile.common for the packages that cannot be build with sunstudio for whatever resons.

mk.conf contents for building packages in pkgsrc.
In addition to the currently reported -G option, gcc doesn't understand
-library=... that needs to be eliminated.
Than "-Qoption ld -R..." need to be transformed to either -R... or -Wl,-R... (I transform it to -R.... below) When -xar is specified we need to change the command from CC to AR and eliminate any additional options that are placed there by libtool from the command line (some -L.., -m64, ...) remark: this is no completet analyses of the options, I just fixed the one that keep the sutff from compiling/installing. The currently available support by the wrappers that can be controlled by setting some variables in the makefile is not abled to support the required modification for -xar and -Qoption. The support to specify additional wrapper script generation code looks imcomplete to me. but perhaps I've haven't got the main point till now.

Now the mk.conf script part for pkgsrc-builds:


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

WRAPPER_TRANSFORM_CMDS+= opt:-G:-shared rm:-library=.*

_WRAP_ARG_PP.CXX=       ${.CURDIR}/work/.wrapper/tmp/arg-pp.CXX

${_WRAP_ARG_PP.CXX}:
        ${RUN} ${MKDIR} ${.TARGET:H}
${RUN} ${ECHO} 'case $$arg in' > ${.TARGET} ${RUN} ${ECHO} '-xar) cmd="/usr/ccs/bin/ar cru"; argmatch=yes; xxx_kill_args=1' >> ${.TARGET} ${RUN} ${ECHO} '# need to kill the following -o option - we know that it is there ...' >> ${.TARGET} ${RUN} ${ECHO} ' pop_queue argbuf arg' >> ${.TARGET} ${RUN} ${ECHO} ' ;;' >> ${.TARGET} ${RUN} ${ECHO} '-Qoption) argmatch=yes' >> ${.TARGET} ${RUN} ${ECHO} '# need to kill the following ld argument - we know that it is there ...' >> ${.TARGET} ${RUN} ${ECHO} ' pop_queue argbuf arg; arg=""' >> ${.TARGET} ${RUN} ${ECHO} ' ;;' >> ${.TARGET} ${RUN} ${ECHO} '-*) if [ -n "$$xxx_kill_args" ]; then' >> ${.TARGET} ${RUN} ${ECHO} '# need to kill the current argument in case it is the last one ...' >> ${.TARGET} ${RUN} ${ECHO} ' arg=""; argmatch=yes; do_transform=no' >> ${.TARGET} ${RUN} ${ECHO} ' fi' >> ${.TARGET} ${RUN} ${ECHO} ' ;;' >> ${.TARGET} ${RUN} ${ECHO} 'esac' >> ${.TARGET}

.else
PKGSRC_COMPILER=        sunpro
CC=                     cc
CXX=                    CC
CPP=                    ${CC} -E
SUNWSPROBASE=           /opt/SUNWspro
.endif

MACHINE_GNU_PLATFORM=   sparc64-sun-solaris2
SPARC_TARGET_ARCH=      sparcv9

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 to avoid possible Solaris tar incomparbilities with "latest" gnutar stuff
TOOLS_PLATFORM.tar?=            /usr/pkg/bin/bsdtar


Perhaps something of this will find it's way into the documentation for The settings for MACHINE_GNU_PLATFORM and SPARC_TARGET_ARCH should be generated by the bootstrap process if ABI=64 is used. It is needed by some packages in a "gcc only" setup too. And The evaluated defaults for theese variables are simply wrong resulting in build errors in the packages.

Best regards

W. Stukenbrock

Tim Zingelman wrote:

On Thu, Mar 24, 2011 at 6:00 AM, Wolfgang Stukenbrock
<Wolfgang.Stukenbrock%nagler-company.com@localhost> wrote:

The following reply was made to PR pkg/44735; it has been noted by GNATS.

I've "TOOLS_PLATFORM.sh?= /usr/pkg/bin/pdksh" in the
/usr/pkg/etc/mk.conf too. It is placed there by the bootstrap process.



I guess I do not understand then how your libtool comes to contain
SHELL=/bin/sh and mine has the correct SHELL=/usr/pkg/bin/pdksh


When I switch to gcc3 for compilation, I run into problems with libtool
again, because libtool was build with sunstudio and there are some
imcompartible options that are hardcoded into /usr/pkg/bin/libtool ...
The main problem here is, that libtool has no support (till now) for
more than one compiler setup. It would be realy great improvement if
libtool would support different compilers in one installation depending
on "whatever" option, compiler name analyses or environment setting.


I think this should be fixed in the compiler specific transforms found
in pkgsrc/mk/wrapper/* the idea being that based on the compiler (or
other tool) in use, all args are converted to match what is needed.  I
am aware that these are currently incomplete, but have not understood
the entire infrastructure sufficiently yet to propose required fixes.


First -G does not work with gcc, so the following line is required to
fix the option:
WRAPPER_TRANSFORM_CMDS+= opt:-G:-shared
There are some -G<num> options for some architectures in gcc, but I hope
this does not hurt - at least for me it works for now.

The next problem is that sunstudio requires CC to be called with -xar to
build .a files from c++ sources. G++ never heard of this ...
This is more problematic, but can be worked around be the following:


I'm not sure I follow the complex solution you suggest, but if the
only requirement is to remove the -xar argument, then
WRAPPER_TRANSFORM_CMDS+= rm:-xar would do that for you.

I'm not a make expert, so perhaps someone else could better answer the
other questions.





Home | Main Index | Thread Index | Old Index