Subject: Re: gcc failed to build
To: None <tech-pkg@NetBSD.org>
From: None <pkgsrc@overbearing.org>
List: tech-pkg
Date: 01/16/2005 21:09:44
Hi guys,



Three months ago I played with pkgsrc a bit to try install some new software.  Grant Beattie was very helpfull and I wanted to thank him and everyone else who helped me on the list.  I now have time to revisit the gcj build problem.  Through trial and error I discovered that I could build a functional GCC with a working GCJ from the tar ball  on the GCC site (gcc-3.3.4.tgz).  Experiments with libtool, LIBRARY_PATH, LD_LIBRARY_PATH, LD_INCLUDE_PATH, crle, etc etc.  seemed to have no effect.  the same error message always occured.


checking for iconv... yes
checking for iconv declaration...
         extern size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking whether getenv is declared... yes
checking whether atol is declared... yes

then later:


checking for iconv... (cached) yes
checking for iconv declaration... (cached)
         extern size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
checking for nl_langinfo and CODESET... yes
checking for LC_MESSAGES... yes





checking for iconv... yes
checking for iconv declaration...
         extern size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
./configure: test: argument expected
gmake: *** [configure-target-libjava] Error 1
*** Error code 2

Stop.
bmake: stopped in /usr/pkgsrc/lang/gcc3-java
*** Error code 1

Stop.
bmake: stopped in /usr/pkgsrc/lang/gcc3-java

The code that gave the trouble was:
#include "confdefs.h"

#include <stdlib.h>
#include <iconv.h>
extern
#ifdef __cplusplus
"C"
#endif
#if defined(__STDC__) || defined(__cplusplus)
size_t iconv (iconv_t cd, const char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
#else
size_t iconv();
#endif

int main() {

; return 0; }


I discovered that I could get this to compile cleanly by setting the environment variable:
C_INCLUDE_PATH=/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/include:/usr/pkg/gcc3/include:/usr/pkg/include:/usr/include

The compile now stops at this configure code like so:

configure:4337: checking for iconv
configure:4355: gcc -o conftest -O -I/usr/pkg/include -I/usr/pkg/include -I/usr/pkg/include -L/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-sola
ris2/3.3.4 -Wl,-R/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4 -L/usr/pkg/gcc3/lib -Wl,-R/usr/pkg/gcc3/lib -L/usr/pkg/lib -Wl,-R/
usr/pkg/lib conftest.c  1>&5
Undefined                       first referenced
 symbol                             in file
libiconv_close                      /tmp/ccy5JF8c.o
libiconv_open                       /tmp/ccy5JF8c.o
libiconv                            /tmp/ccy5JF8c.o
ld: fatal: Symbol referencing errors. No output written to conftest
collect2: ld returned 1 exit status
configure: failed program was:
#line 4345 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <iconv.h>
int main() {
iconv_t cd = iconv_open("","");
       iconv(cd,NULL,NULL,NULL,NULL);
       iconv_close(cd);
; return 0; }

In an effort to debug the issue I removed all references to solaris iconv and libiconv from the machine (don't worry I tarred them and will put them back).

The symbols are defined in libintl.a
[root@otto gcc3-java]# nm /usr/pkg/lib/libintl.a | grep iconv
[28]    |         0|       0|NOTY |GLOB |0    |UNDEF  |libiconv_close
[12]    |         0|       0|NOTY |GLOB |0    |UNDEF  |libiconv_open
[46]    |         0|       0|NOTY |GLOB |0    |UNDEF  |libiconv
[root@otto gcc3-java]# nm /usr/lib/libintl.a


/usr/lib/libintl.a[__i_am_empty.o]:

[Index]   Value      Size    Type  Bind  Other Shndx   Name

[3]     |         0|       0|SECT |LOCL |0    |3      |
[2]     |         0|       0|SECT |LOCL |0    |2      |
[4]     |         0|       0|SECT |LOCL |0    |4      |
[5]     |         0|       8|FUNC |GLOB |0    |2      |__do_not_use_me
[1]     |         0|       0|FILE |LOCL |0    |ABS    |__i_am_empty.c

Here we have both the native and the pkgsrc versions.  it looks to me like it is finding the native version first in the path.  Removing the native binary had no effect.  This is the verbose compile for the code above:

[root@otto root]# gcc -v iconv2.c
Reading specs from /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/specs
Configured with: ./configure --prefix=/usr/pkg/gcc3 --host=sparc-sun-solaris2 --enable-shared --enable-languages=c
Thread model: posix
gcc version 3.3.4
 /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=4 -Dsparc -D__sparc__ -D__sparc -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc iconv2.c -quiet -dumpbase iconv2.c -auxbase iconv2 -version -o /var/tmp//ccz2a8gc.s
GNU C version 3.3.4 (sparc-sun-solaris2)
        compiled by GNU C version 3.3.4.
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32768
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/pkg/gcc3/sparc-sun-solaris2/include"
ignoring duplicate directory "/usr/pkg/gcc3/include"
ignoring duplicate directory "/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/include"
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/include
 /usr/pkg/gcc3/include
 /usr/pkg/include
 /usr/include
End of search list.
 /usr/ccs/bin/as -V -Qy -s -o /var/tmp//ccujm1Xa.o /var/tmp//ccz2a8gc.s
/usr/ccs/bin/as: Sun WorkShop 6 update 2 Compiler Common 6.2 Solaris_9_CBE 2001/04/02
 /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/crt1.o /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/crti.o /usr/lib/values-Xa.o /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/crtbegin.o -L/usr/pkg/gcc3/lib -L/usr/pkg/lib -L/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/../../.. -R /usr/pkg/gcc3/lib /var/tmp//ccujm1Xa.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/crtend.o /usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/crtn.o
ld: Software Generation Utilities - Solaris Link Editors: 5.9-1.385
Undefined                       first referenced
 symbol                             in file
libiconv_close                      /var/tmp//ccujm1Xa.o
libiconv_open                       /var/tmp//ccujm1Xa.o
libiconv                            /var/tmp//ccujm1Xa.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status




When I built gcj without errors, the only configure argument I gave was:
--with-libiconv-prefix=/usr/pkg
the command I used to build  was:
make CFLAGS='-O' LIBCFLAGS='-g -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap-lean

My environment is as follows:
ANT_HOME=/usr/local/ant
BASH=/usr/bin/bash
BASH_VERSINFO=([0]="2" [1]="05" [2]="0" [3]="1" [4]="release" [5]="sparc-sun-solaris2.9")
BASH_VERSION=$'2.05.0(1)-release'
CC=gcc
COLUMNS=134
C_INCLUDE_PATH=/usr/pkg/gcc3/lib/gcc-lib/sparc-sun-solaris2/3.3.4/include:/usr/pkg/gcc3/include:/usr/pkg/include:/usr/include
DIRSTACK=()
EUID=0
GROUPS=()
HISTFILE=/root/.bash_history
HISTFILESIZE=50000
HISTSIZE=50000
HOME=/root
HOSTNAME=otto
HOSTTYPE=sparc
HZ=
IFS=$' \t\n'
JAVA_HOME=/usr/java
LD_INCLUDE_PATH=/usr/pkg/include:/usr/include
LIBRARY_PATH=/usr/pkg/gcc3/lib:/usr/pkg/lib:/usr/lib
LINES=70
LOGNAME=root
MACHTYPE=sparc-sun-solaris2.9
MAIL=/var/mail/root
MAILCHECK=60
OLDPWD=/usr/pkgsrc/lang/gcc3-java
OPTERR=1
OPTIND=1
OSTYPE=solaris2.9
OS_PLATFORM=sparc
OS_VERSION=5.9
PATH=/usr/pkg/gcc3/bin:/usr/pkg/bin:/usr/pkg/sbin:/usr/local/bin:/usr/ccs/bin:/usr/dt/bin:/usr/openwin/bin:/usr/sbin:/usr/local/sbin:/usr/bin:/usr/ucb:/etc:/usr/sfw/bin:/usr/local/ant/bin
PIPESTATUS=([0]="0")
PPID=5642
PS1=$'[\\u@\\h \\W]\\$ '
PS2=$'> '
PS4=$'+ '
PWD=/root
SHELL=/sbin/sh
SHELLOPTS=braceexpand:hashall:histexpand:monitor:history:interactive-comments:emacs
SHLVL=1
TERM=xterm
TZ=US/Pacific
UID=0

I have crle as so:
[root@otto root]# crle

Configuration file [version 4]: /var/ld/ld.config
  Default Library Path (ELF):   /usr/pkg/gcc3/lib:/usr/pkg/lib:/usr/lib
  Trusted Directories (ELF):    /usr/lib/secure  (system default)

Command line:
  crle -c /var/ld/ld.config -l /usr/pkg/gcc3/lib:/usr/pkg/lib:/usr/lib



If you have succeded in comiling gcc on  solaris 9 with pkgsrc, could you please post your working configurations, or help me diagnose this problem?


Many Thanks,
-David Wilson