bug-gnulib
[Top][All Lists]
Advanced

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

Re: MacOSX Leopard gcc-4.2 build problems with coreutils-7.0 and its gnu


From: Bruno Haible
Subject: Re: MacOSX Leopard gcc-4.2 build problems with coreutils-7.0 and its gnulib
Date: Tue, 18 Nov 2008 11:26:44 +0100
User-agent: KMail/1.5.4

Hello scifi,

> I'd like to see how close we can get to having full 32- & 64-bit
> universal binaries

That's currently something that does not work, because autoconf tests
can yield different results in the 32-bit and in the 64-bit case - and
some actually do, see below.

> (0)  I'm building coreutils-7.0 and other GNU projects seemingly
> just fine (regular 'make'), after I learned that we had to pass
> '--disable-dependency-tracking' to configure when building
> so-called 'fat' binaries.

Interesting... We document in INSTALL how to create fat binaries:

     On MacOS X 10.5 and later systems, you can create libraries and
  executables that work on multiple system types--known as "fat" or
  "universal" binaries--by specifying multiple '-arch' options to the
  compiler but only a single '-arch' option to the preprocessor.  Like
  this:

     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
                 CPP="gcc -E" CXXCPP="g++ -E"

I didn't see problems with dependency tracking when using this recipe.
It uses depmode=gcc, and this works fine.

> (1)  Regular 'make' finishes okay, then I'll do 'make check'.
> The first real problem I had here was linking
> coreutils-7.0/gnulib-tests/test-getdate failed because the
> makefiles did not include the libiconv libs determined by
> configure -- missing symbol '_libintl_gettext'.

You mean libintl, not libiconv? This was fixed in gnulib on 2008-10-08.

> (2)  The next problem I had with coreutils-7.0 'make check', and
> I'm _still_ stuck here:
> The compiler bombs when it gets to building
> coreutils-7.0/gnulib-tests/test-stdint:
> […]
> llvm-gcc-4.2 -std=gnu99  -I. -I../lib  -I. -I. -I.. -I./.. -I../lib 
> -I./../lib -I/usr/local/include  -Os -mtune=core2 -march=core2 
> -force_cpusubtype_ALL      -arch i386  -arch x86_64         -c test-stdint.c
> test-stdint.c:263: error: negative width in bit-field 
> ‘verify_error_if_negative_size__’
> test-stdint.c:264: error: negative width in bit-field 
> ‘verify_error_if_negative_size__’
> test-stdint.c:263: error: negative width in bit-field 
> ‘verify_error_if_negative_size__’
> test-stdint.c:264: error: negative width in bit-field 
> ‘verify_error_if_negative_size__’
> […]
> 
> The doubled-up error lines are because the module is
> automatically being compiled twice: once for each -arch.

Now this is a symptom of an autoconf test that produced no result that would
be good for both 32-bit and 64-bit builds. Here's the complete list, that I
got by running
  ./configure CC="gcc -arch i386" CPP="gcc -E"
and
  ./configure CC="gcc -arch x86_64" CPP="gcc -E"
and comparing the results.

Bruno

> The gnulib git snapshot is suffering other problems trying to
> analyze these two problems.  For ex. after using ./gnulib-tool to
> create a tempdir and pull getdate with tests into it, the
> configure & make steps left @LIBINTL@ empty

... which means that on your system, libintl was either not needed or
not available. If in doubt, you can always consult config.log.

> Could we get all the projects at the alpha FTP site that use
> gnulib to be refreshed please so they'll get caught-up to the
> fixes?

The fixes that you want are not yet done.

Bruno


Differences between build32 and build64 on MacOS X:

--- build32/config.h    2008-11-18 10:48:48.000000000 +0100
+++ build64/config.h    2008-11-18 10:53:09.000000000 +0100
@@ -5,13 +5,13 @@
 #define AC_APPLE_UNIVERSAL_BUILD 1
 
 /* Define to the number of bits in type 'ptrdiff_t'. */
-#define BITSIZEOF_PTRDIFF_T 32
+#define BITSIZEOF_PTRDIFF_T 64
 
 /* Define to the number of bits in type 'sig_atomic_t'. */
 #define BITSIZEOF_SIG_ATOMIC_T 32
 
 /* Define to the number of bits in type 'size_t'. */
-#define BITSIZEOF_SIZE_T 32
+#define BITSIZEOF_SIZE_T 64
 
 /* Define to the number of bits in type 'wchar_t'. */
 #define BITSIZEOF_WCHAR_T 32
@@ -388,7 +388,7 @@
 #define HAVE_BTOWC 1
 
 /* Define to 1 if nanosleep mishandles large arguments. */
-/* #undef HAVE_BUG_BIG_NANOSLEEP */
+#define HAVE_BUG_BIG_NANOSLEEP 1
 
 /* Define to 1 if you have the <byteswap.h> header file. */
 /* #undef HAVE_BYTESWAP_H */
@@ -745,7 +745,7 @@
 
 /* Define to 1 if you have the declaration of `timegm', and to 0 if you don't.
    */
-#define HAVE_DECL_TIMEGM 1
+/* #undef HAVE_DECL_TIMEGM */
 
 /* Define to 1 if you have the declaration of `trunc', and to 0 if you don't.
    */
@@ -1725,7 +1725,7 @@
 #define HAVE_TERMIOS_H 1
 
 /* Define to 1 if you have the `timegm' function. */
-#define HAVE_TIMEGM 1
+/* #undef HAVE_TIMEGM */
 
 /* Define to 1 if you have the `times' function. */
 #define HAVE_TIMES 1
@@ -1993,11 +1993,11 @@
 
 /* Define if the vasnprintf implementation needs special code for 'double'
    arguments. */
-#define NEED_PRINTF_DOUBLE 1
+/* #undef NEED_PRINTF_DOUBLE */
 
 /* Define if the vasnprintf implementation needs special code for surviving
    out-of-memory conditions. */
-#define NEED_PRINTF_ENOMEM 1
+/* #undef NEED_PRINTF_ENOMEM */
 
 /* Define if the vasnprintf implementation needs special code for the ' flag.
    */
@@ -2021,7 +2021,7 @@
 
 /* Define if the vasnprintf implementation needs special code for 'long
    double' arguments. */
-#define NEED_PRINTF_LONG_DOUBLE 1
+/* #undef NEED_PRINTF_LONG_DOUBLE */
 
 /* Define if the vasnprintf implementation needs special code for supporting
    large precisions without arbitrary bounds. */
@@ -2069,7 +2069,7 @@
 
 /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
    'ptrdiff_t'. */
-#define PTRDIFF_T_SUFFIX 
+#define PTRDIFF_T_SUFFIX l
 
 /* If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to
    0. */
@@ -2392,7 +2392,7 @@
 /* #undef memcmp */
 
 /* Define to rpl_mktime if the replacement function should be used. */
-/* #undef mktime */
+#define mktime rpl_mktime
 
 /* Define to `int' if <sys/types.h> does not define. */
 /* #undef mode_t */
--- build32/config.status       2008-11-18 10:48:47.000000000 +0100
+++ build64/config.status       2008-11-18 10:53:08.000000000 +0100
@@ -732,9 +734,9 @@
 S["HAVE_NETINET_IN_H"]=""
 S["NEXT_NETINET_IN_H"]=""
 S["LIB_NANOSLEEP"]=""
-S["REPLACE_TIMEGM"]="0"
+S["REPLACE_TIMEGM"]="1"
 S["REPLACE_STRPTIME"]="0"
-S["REPLACE_NANOSLEEP"]="0"
+S["REPLACE_NANOSLEEP"]="1"
 S["REPLACE_LOCALTIME_R"]="0"
 S["REPLACE_STRSIGNAL"]="0"
 S["REPLACE_STRERROR"]="0"
@@ -813,9 +815,9 @@
 S["ISINF_LIBM"]=""
 S["ISFINITE_LIBM"]=""
 S["INTTYPES_H"]="inttypes.h"
-S["UINT64_MAX_EQ_ULONG_MAX"]="0"
+S["UINT64_MAX_EQ_ULONG_MAX"]="1"
 S["UINT32_MAX_LT_UINTMAX_MAX"]="1"
-S["INT64_MAX_EQ_LONG_MAX"]="0"
+S["INT64_MAX_EQ_LONG_MAX"]="1"
 S["INT32_MAX_LT_INTMAX_MAX"]="1"
 S["PRIPTR_PREFIX"]="\"l\""
 S["NEXT_INTTYPES_H"]="<inttypes.h>"
@@ -833,15 +835,15 @@
 S["WCHAR_T_SUFFIX"]=""
 S["SIZE_T_SUFFIX"]="ul"
 S["SIG_ATOMIC_T_SUFFIX"]=""
-S["PTRDIFF_T_SUFFIX"]=""
+S["PTRDIFF_T_SUFFIX"]="l"
 S["HAVE_SIGNED_WINT_T"]="1"
 S["HAVE_SIGNED_WCHAR_T"]="1"
 S["HAVE_SIGNED_SIG_ATOMIC_T"]="1"
 S["BITSIZEOF_WINT_T"]="32"
 S["BITSIZEOF_WCHAR_T"]="32"
-S["BITSIZEOF_SIZE_T"]="32"
+S["BITSIZEOF_SIZE_T"]="64"
 S["BITSIZEOF_SIG_ATOMIC_T"]="32"
-S["BITSIZEOF_PTRDIFF_T"]="32"
+S["BITSIZEOF_PTRDIFF_T"]="64"
 S["HAVE_SYS_BITYPES_H"]="0"
 S["HAVE_SYS_INTTYPES_H"]="0"
 S["HAVE_STDINT_H"]="1"





reply via email to

[Prev in Thread] Current Thread [Next in Thread]