Bug #5102 configure probes for vis.h and gets it wrong
Submitted: 18 Aug 2004 23:47 Modified: 9 Mar 2005 2:18
Reporter: Alan Burlison Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Compiling Severity:S4 (Feature request)
Version:4.1.3-beta OS:Solaris (Solaris)
Assigned to: Kent Boortz CPU Architecture:Any
Triage: D5 (Feature request)

[18 Aug 2004 23:47] Alan Burlison
Description:
I'm using the Forte 5.5 compiler on Solaris sparc to try to build 4.1.3-beta:

cc: Sun C 5.5 Patch 112760-07 2004/02/03

and 'make' is failing when trying to build cmd-line-utils/libedit/history.c:

Making all in libedit
gmake[3]: Entering directory `/home1/tonic/infrastructure/bld/mysql-4.1.3-beta/cmd-line-utils/libedit'
source='history.c' object='history.o' libtool=no \
depfile='.deps/history.Po' tmpdepfile='.deps/history.TPo' \
depmode=none /bin/bash ../../depcomp \
cc -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR -I. -I. -I../.. -I../../include -I./../.. -I..    -O -DDBUG_OFF -mt -mr -xO3 -xildoff -xspace -xstrconst -DBIG_TABLES   -DHAVE_RWLOCK_T -c `test -f 'history.c' || echo './'`history.c
"history.c", line 617: warning: implicit function declaration: strunvis
"history.c", line 655: warning: implicit function declaration: strvis
"history.c", line 655: undefined symbol: VIS_WHITE
cc: acomp failed for history.c

The same combination builds just fine on Solaris x86, and it turns out that the problem is caused by configure's probe for the file vis.h (line 29804 onwards of configure).  Unfortunately on sparc there is a vis.h shipped with the compiler as $COMPILER_ROOT/prod/include/cc/vis.h, to support the sparc VIS instructions (which serve the same purpose as the Intel MMX instructions).  The configure probe is finding this file instead of the one it expects, and then it subsequently blows up when building history.h.  The vis.h file isn't shipped with the Solaris x86 Forte compiler, so the problem isn't seen there.
 

How to repeat:
configure; make

Suggested fix:
Probe for one of the symbols provided by the vis.h file instead of the file itself.
[19 Aug 2004 6:32] Matthew Lord
Hi,

I'm unable to repeat the problem using forte 5.4 on solaris 9.  Unfortunately I don't have 5.5 
available on any development machine.  I also tried the upcoming 4.1.4 version which was pulled
from bitkeeper.

If I make this version available on ftp.mysql.com would you be willing to try and build it to see if 
your problem has been addressed?

Best Regards
[19 Aug 2004 11:10] Alan Burlison
Sure I'd be happy to test it, although I'm away on holiday for a week as of tomorrow (20/08/2004)
[31 Aug 2004 11:11] Alan Burlison
Hi Matthew, I'm back from hols and ready to give 4.1.4 a try if you can point me to the download.
[1 Oct 2004 5:54] Krzysztof Raczkowski
got the same problem here with mysql-4.1.5-gamma:

cc -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR -I. -I. -I../.. -I../../include -I./../.. -I..     -O -DDBUG_OFF    -D_FILE_OFFSET_BITS=64 -DHAVE_RWLOCK_T -c `test -f 'el.c' || echo './'`el.c
"el.c", line 44: warning: syntax error:  empty declaration
source='history.c' object='history.o' libtool=no \
depfile='.deps/history.Po' tmpdepfile='.deps/history.TPo' \
depmode=none /bin/bash ../../depcomp \
cc -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR -I. -I. -I../.. -I../../include -I./../.. -I..     -O -DDBUG_OFF    -D_FILE_OFFSET_BITS=64 -DHAVE_RWLOCK_T -c `test -f 'history.c' || echo './'`history.c
"history.c", line 44: warning: syntax error:  empty declaration
"history.c", line 685: warning: implicit function declaration: strunvis
"history.c", line 734: warning: implicit function declaration: strvis
"history.c", line 734: undefined symbol: VIS_WHITE
cc: acomp failed for history.c
*** Error code 2
make: Fatal error: Command failed for target `history.o'

got solaris 9 here:
SunOS lilo 5.9 Generic_117171-09 sun4u sparc SUNW,Sun-Fire-V210 

cc: Sun C 5.5 Patch 112760-13 2004/08/10
usage: cc [ options] files.  Use 'cc -flags' for details
[1 Oct 2004 11:20] Matthew Lord
Hi,

Could you provide the specific build process being used, compiler, linker and configure options?

If I can not repeat this using the same build process then that will help me narrow it down and 
the next biggest difference I see is the version of Forte.  I will also see if we can get Forte 5.5 on
one of our build machines.

Best Regards
[1 Oct 2004 13:13] Krzysztof Raczkowski
Could you provide the specific build process being used, compiler, linker and
configure options?

i run it with this command:
CFLAGS="-xtarget=ultra3i -xarch=v8plus -xcache=64/32/4:1024/64/4 -s" \
        ./configure --prefix=$INSTALL_DIR --enable-thread-safe-client --enable-assembler \
            --with-mysqld-user=mysql --with-pthread 

but even with no additional compiler/linker/configure options (with pure ./configure and CFLAGS=" and LDFLAGS="" i get the same error
it looks like the problem described above - with wrong header files for history.c .

I also noticed this when running ./configure (i don't think it's supposed to show ;-)):

[...]
checking how to run the C preprocessor... cc -E
cc: Warning: option -- passed to ld
usage: cc [ options] files.  Use 'cc -flags' for details
checking "C Compiler version"... "cc "
CC: Warning: Option --version passed to ld, if ld is invoked, ignored otherwise
/usr/ccs/bin/ld: illegal option -- -
/usr/ccs/bin/ld: illegal option -- v
usage: ld [-6:abc:d:e:f:h:il:mo:p:rstu:z:B:CD:F:GI:L:M:N:P:Q:R:S:VY:?] file(s)
        [-64]           enforce a 64-bit link-edit
        [-a]            create an absolute file
        [-b]            do not do special PIC relocations in a.out
        [-B direct]     specify `direct' bindings for executable when run
        [-B dynamic | static]
                        search for shared libraries|archives
        [-B eliminate]  eliminate unqualified global symbols from the
                        symbol table
        [-B group]      relocate object from within group
        [-B local]      reduce unqualified global symbols to local
        [-B reduce]     process symbol reductions
        [-B symbolic]   bind external references to definitions when creating
                        shared objects
        [-c name]       record configuration file `name'
        [-C]            demangle C++ symbol name diagnostics
        [-d y | n]      operate in dynamic|static mode
        [-D token,...]  print diagnostic messages
        [-e epsym]      use `epsym' as entry point address
        [-f name]       specify library for which this file is an auxiliary
                        filter
        [-F name]       specify library for which this file is a filter
        [-G]            create a shared object
        [-h name]       use `name' as internal shared object identifier
        [-i]            ignore LD_LIBRARY_PATH setting
        [-I name]       use `name' as path of interpreter
        [-l x]          search for libx.so or libx.a
        [-L path]       search for libraries in directory `path'
        [-m]            print memory map
        [-M mapfile]    use processing directives contained in `mapfile'
        [-N string]     create a dynamic dependency for `string'
        [-o outfile]    name the output file `outfile'
        [-p auditlib]   identify audit library to accompany this object
        [-P auditlib]   identify audit library for processing the dependencies
                        of this object
        [-Q y | n]      do|do not place version information in output file
        [-r]            create a relocatable object
        [-R path]       specify a library search path to be used at run time
        [-s]            strip any symbol and debugging information
        [-S supportlib]
                        specify a link-edit support library
        [-t]            do not warn of multiply-defined symbols that have
                        different sizes or alignments
        [-u symname]    create an undefined symbol `symname'
        [-V]            print version information
        [-Y P,dirlist]  use `dirlist' as a default path when searching for
                        libraries
        [-z absexec]    when building an executable absolute symbols
                        referenced in dynamic objects are promoted to
                        the executable
        [-z allextract | defaultextract | weakextract]
                        extract all member files, only members that resolve
                        undefined tor tentative symbols, or allow extraction of
                        archive members to resolvetweak references from
                        archive files
        [-z combreloc]  combine multiple relocation sections
        [-z nocompstrtab]
                        disable compression of string tables
        [-z defs]       disallow undefined symbol references
        [-z direct | nodirect]
                        enable|disable direct binding to shared object
                        dependencies
        [-z endfiltee]  marks a filtee such that it will terminate a filters
                        search
        [-z finiarray=function]
                        name of function to be appended to the .finiarray
        [-z groupperm | nogroupperm]
                        enable|disable setting of group permissions
                        on dynamic dependencies
        [-z ignore | record]
                        ignore|record unused dynamic dependencies
        [-z initarray=function]
                        name of function to be appended to the .initarray
        [-z initfirst]  mark object to indicate that its .init section should
                        be executed before the .init section of any other
                        objects
        [-z interpose]  dynamic object is to be an `interposer' on direct
                        bindings
        [-z lazyload | nolazyload]
                        enable|disable delayed loading of shared object
                        dependencies
        [-z ld32=arg1,arg2,...]
                        define arguments applicable to the 32-bit class of ld(1)
        [-z ld64=arg1,arg2,...]
                        define arguments applicable to the 64-bit class of ld(1)
        [-z loadfltr]   mark filter as requiring immediate loading of its
                        filtees at runtime
        [-z muldefs]    allow multiply-defined symbols
        [-z nodefs]     allow undefined symbol references
        [-z nodefaultlib]
                        mark object to ignore any default library search path
        [-z nodelete]   mark object as non-deletable
        [-z nodlopen]   mark object as non-dlopen()'able
        [-z nodump]     mark object as non-dldump()'able
        [-z nopartial]  expand any partially initialized symbols
        [-z noversion]  don't record any version sections
        [-z now]        mark object as requiring non-lazy binding
        [-z origin]     mark object as requiring $ORIGIN processing
        [-z preinitarray=function]
                        name of function to be appended to the .preinitarray
        [-z redlocsym]  reduce local syms in .symtab to a minimum
        [-z rescan]     rescan archive list until no further member
                        extraction occurs
        [-z text]       disallow output relocations against text
        [-z textoff]    allow output relocations against text
        [-z textwarn]   warn if there are relocations against text
        [-z verbose]    generate warnings for suspicious processings
checking "C++ compiler version"... "CC "
[...]
[20 Oct 2004 5:28] Matthew Lord
Hi Alan,

Does this not work if you add -I /usr/platform/sun4u/include/sys/vis.h ?

I ran into a very similar problem when using mwcc on os x.

I will mark this as verified and a feature request, since we should be looking for some of the 
things we need rather than just the file when possible.

Thanks for informing us of this.
[22 Oct 2004 12:41] Krzysztof Raczkowski
Here is an output of my trying to compile 4.1.6-gamma with 
CPPFLAGS="-I /usr/platform/sun4u/include/sys/vis.h" added:

cc -DUNDEF_THREADS_HACK -DHAVE_CONFIG_H -DNO_KILL_INTR -I. -I. -I../.. -I../../include -I./../.. -I..   -I /usr/platform/sun4u/include/sys/vis.h  -O -DDBUG_OFF -xtarget=ultra3i -xarch=v8plus -xcache=64/32/4:1024/64/4 -xO5 -fast -s   -D_FILE_OFFSET_BITS=64 -DHAVE_RWLOCK_T -c `test -f 'history.c' || echo './'`history.c
cc: Warning: -xarch=native has been explicitly specified, or implicitly specified by a macro option, -xarch=native on this architecture implies -xarch=v8plusb which generates code that does not run on pre UltraSPARC III processors
"history.c", line 44: warning: syntax error:  empty declaration
"history.c", line 685: warning: implicit function declaration: strunvis
"history.c", line 734: warning: implicit function declaration: strvis
"history.c", line 734: undefined symbol: VIS_WHITE
cc: acomp failed for history.c
*** Error code 2
make: Fatal error: Command failed for target `history.o'
Current working directory /export/home/raczkow/src/mysql41/src/mysql-4.1.6-gamma/cmd-line-utils/libedit
[3 Nov 2004 9:13] Krzysztof Raczkowski
still the same error on mysql-4.1.7
[3 Nov 2004 17:44] Darin Broady
I have the exact same problem:  Sun Studio 8 (C/C++ 5.5) and configure finding the wrong vis.h.  To temporarily remedy this, I edited config.h & include/my_config.h and undef'ed the HAVE_VIS_H.  This will force history.c to include "np/vis.h", which will then compile correctly.  Hopefully, this workaround will work for you.
[9 Mar 2005 2:18] Kent Boortz
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.

If necessary, you can access the source repository and build the latest
available version, including the bugfix, yourself. More information 
about accessing the source trees is available at
    http://www.mysql.com/doc/en/Installing_source_tree.html

Additional info:

configure now checks not only that the header file exists,
but also that the strvis() function exists before it sets
HAVE_VIS_H.

This also corrects part of bug#6862. It might as well
correct bug#7371, but this is not verified.
[29 Mar 2005 16:44] Boyd GERBER
UnixWare 7.1.X has the same problem.