Ticket #396 (closed defect: fixed)

Opened 5 months ago

Last modified 5 months ago

Build failure on Mac OS 10.6

Reported by: james Owned by: olly
Priority: normal Milestone: 1.0.16
Component: Build system Version: 1.0.15
Severity: normal Keywords:
Cc: Blocked By:
Operating System: Mac OS X Blocking:

Description (last modified by olly) (diff)

xapian-core has the following build error on Mac OS 10.6 (Snow Leopard):

 g++ -DHAVE_CONFIG_H -I. -I./common -I./include -Wall -W -Wredundant-decls      
-Wpointer-arith -Wcast-qual -Wcast-align -Wno-long-long -Wformat-security       
-fno-gnu-keywords -Woverloaded-virtual -Wundef -Wshadow                         
-Wstrict-null-sentinel -Wshadow -Wstrict-overflow=1 -fvisibility=hidden -g      
-O2 -MT common/getopt.lo -MD -MP -MF common/.deps/getopt.Tpo -c                 
common/getopt.cc  -fno-common -DPIC -o common/.libs/getopt.o                    
In file included from                                                           
/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/os_defines.h:61,         
                 from                                                           
/usr/include/c++/4.2.1/i686-apple-darwin10/x86_64/bits/c++config.h:41,          
                 from /usr/include/c++/4.2.1/cstring:50,                        
                 from common/getopt.cc:164:                                     
common/getopt.cc:84: error: previous declaration of ‘char* optarg’ with         
‘C++’ linkage                                                                   
/usr/include/unistd.h:515: error: conflicts with new declaration with ‘C’       
linkage                                                                         
common/getopt.cc:99: error: previous declaration of ‘int optind’ with ‘C++’     
linkage                                                                         
/usr/include/unistd.h:516: error: conflicts with new declaration with ‘C’       
linkage                                                                         
common/getopt.cc:119: error: previous declaration of ‘int opterr’ with ‘C++’    
linkage                                                                         
/usr/include/unistd.h:516: error: conflicts with new declaration with ‘C’       
linkage                                                                         
common/getopt.cc:125: error: previous declaration of ‘int optopt’ with ‘C++’    
linkage                                                                         
/usr/include/unistd.h:516: error: conflicts with new declaration with ‘C’       
linkage                                                                         
make[2]: *** [common/getopt.lo] Error 1                                         
make[1]: *** [all-recursive] Error 1                                            
make: *** [all] Error 2                                                         

Change History

Changed 5 months ago by gstar

Same problem for me. I managed to make it build by playing around with getopt.cc. I placed an extern "C" block around the communication between getopt and the caller (lines 84-126 in 1.0.15).

Not sure how correct this is, but it works for me for now.

Changed 5 months ago by olly

  • status changed from new to assigned
  • component changed from Other to Build system
  • description modified (diff)
  • milestone set to 1.0.16

It's better to put the extern "C" in the header as that will also work on platforms which don't declare optarg, etc in their system headers.

Fixed in trunk r13431, though not tested as I don't have OS X.

If someone can confirm that fix works for 1.0.x, I'll backport it - the patch to common/gnu_getopt.h applies cleanly to 1.0.x too.

Changed 5 months ago by tommortimer

Tried to build this, but got an error running bootstrap: ... -n Generating src/lang_cfg.h...

echo "char versionString[]=\"1.5.9\";" > src/version.cpp /usr/bin/make -C qtools env TMAKEPATH=/Users/maky/src/build/xapian/BUILD/doxygen-1.5.9/tmake/lib/macosx-c++ /usr/bin/perl /Users/maky/src/build/xapian/BUILD/doxygen-1.5.9/tmake/bin/tmake qtools.pro >Makefile.qtools /usr/bin/make -f Makefile.qtools all c++ -c -pipe -DFreeBSD=6 -DQT_NO_CODECS -DQT_LITE_UNICODE -Wall -W -O2 -I. -o ../objects/qbuffer.o qbuffer.cpp In file included from qiodevice.h:42,

from qbuffer.h:42, from qbuffer.cpp:38:

qglobal.h:90:6: error: #error "This version of Mac OS X is unsupported" make[2]: *** ../objects/qbuffer.o Error 1 make[1]: *** [all] Error 2 make: *** [all] Error 2 Bootstrap failed

Looking into it.

Changed 5 months ago by tommortimer

However, Olly's patch applied to 1.0.15 builds fine.

Changed 5 months ago by olly

  • status changed from assigned to closed
  • resolution set to fixed

The error is doxygen failing to build, which is really someone else's problem - it looks like doxygen uses Qt source code which hard codes a case for each version of OS X it knows about...

It's unfortunate if you can't bootstrap from SVN on OS X at present, but at least we can fix this getopt issue so that releases build out of the box for users.

Backported for 1.0.16 as r13437.

Note: See TracTickets for help on using tickets.