[tlbuild] texlive-20120521 snapshot build failure on OpenBSD 5.1 i386

Nelson H. F. Beebe beebe at math.utah.edu
Mon May 21 19:15:51 CEST 2012


I'm attempting to build the texlive-20120521 snapshot from earlier
today on OpenBSD 5.1 i386 without using any of the --without-xxx flags.

The attempt fails like this:

    /local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:435:
    undefined reference to `u_strFromUTF32_49'
    gencnvex.o(.text.getToUnicodeValue+0x140):/local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:456:
    undefined reference to `u_strFromUTF32_49'
    /usr/local/lib/libicuuc.so.4.0: undefined reference to `pthread_mutex_unlock'
    /usr/local/lib/libicuuc.so.4.0: undefined reference to `pthread_mutex_destroy'
    /usr/local/lib/libicuuc.so.4.0: undefined reference to `pthread_mutex_lock'
    /usr/local/lib/libicuuc.so.4.0: undefined reference to `pthread_mutex_init'
    collect2: ld returned 1 exit status

Those missing symbols are defined in -lpthread, so I restarted the
make like this:

    % cd source/Work
    % env GNUMAKE=/usr/local/bin/make \
	/usr/local/bin/make LIBS='/usr/local/lib/libfontconfig.a \
	    /usr/lib/libexpat.a /usr/local/lib/libfreetype.a /usr/local/lib/libbz2.a \
	    /usr/lib/libz.a -lpthread -lm' GNUMAKE=/usr/local/bin/make

It gets somewhat farther, than dies again with undefined references:

    /local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:465: \
        undefined reference to `utm_countItems'
    gencnvex.o(.text.CnvExtWrite+0x19a):/local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:371: undefined reference to `utm_alloc'
    gencnvex.o(.text.CnvExtWrite+0x1ad):/local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:372: undefined reference to `utm_alloc'
    gencnvex.o(.text.CnvExtWrite+0x1ed):/local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:377: undefined reference to `utm_countItems'
    gencnvex.o(.text.CnvExtWrite+0x20e):/local/build/bare/texlive-20120521/source/Work/libs/icu/../../../libs/icu/icu-49.1/tools/makeconv/gencnvex.c:693: undefined reference to `utm_alloc'

Further investigation shows that symbols like utm_alloc should be defined
in libicutu.a, and they are, sort of:

    % nm ./libs/icu/icu-build/lib/libicutu.a | grep utm_alloc
    00000000 ? utm_alloc
    00000000 ? utm_allocN

Notice that the symbols are prefixed with ? instead of the expect T;
the "man nm" command makes no mention of the ? symbol type flag.

Further experiments reveal the culprit:

    % g++ -c ~/c/hello.c 
    % nm hello.o
	     U __gxx_personality_v0
    00000000 F hello.c
    00000000 T main
	     U puts

    % g++ -c  -ffunction-sections -fdata-sections ~/c/hello.c
    % nm hello.o
	     U __gxx_personality_v0
    00000000 F hello.c
    00000000 ? main
	     U puts

The flags -ffunction-sections -fdata-sections are evidently the cause
of the ? flags.

Here is the documentation of those flags in the gcc info node
``Optimize Options'':

`-ffunction-sections'
`-fdata-sections'
     Place each function or data item into its own section in the output
     file if the target supports arbitrary sections.  The name of the
     function or the name of the data item determines the section's name
     in the output file.

     Use these options on systems where the linker can perform
     optimizations to improve locality of reference in the instruction
     space.  Most systems using the ELF object format and SPARC
     processors running Solaris 2 have linkers with such optimizations.
     AIX may have these optimizations in the future.

     Only use these options when there are significant benefits from
     doing so.  When you specify these options, the assembler and
     linker will create larger object and executable files and will
     also be slower.  You will not be able to use `gprof' on all
     systems if you specify this option and you may have problems with
     debugging if you specify both this option and `-g'.

It looks like they mainly affect optimization, so it should be
possible to remove them.

Before I attempt a rebuild with those flags removed, does anyone on
this list have prior experience with them, and is willing to make
recommendations?

-------------------------------------------------------------------------------
- Nelson H. F. Beebe                    Tel: +1 801 581 5254                  -
- University of Utah                    FAX: +1 801 581 4148                  -
- Department of Mathematics, 110 LCB    Internet e-mail: beebe at math.utah.edu  -
- 155 S 1400 E RM 233                       beebe at acm.org  beebe at computer.org -
- Salt Lake City, UT 84112-0090, USA    URL: http://www.math.utah.edu/~beebe/ -
-------------------------------------------------------------------------------


More information about the tlbuild mailing list