make[4]: Entering directory `/home/rjones/d/libguestfs/gnulib/lib'
  CC     xstrtol.lo
In file included from xstrtol.h:23,
                 from xstrtol.c:32:
./getopt.h:195: error: redefinition of 'struct option'
In file included from xstrtol.h:23,
                 from xstrtol.c:32:
./getopt.h:241: error: conflicting types for 'getopt_long'
/usr/include/getopt.h:175: note: previous declaration of 'getopt_long' was here
./getopt.h:245: error: conflicting types for 'getopt_long_only'
/usr/include/getopt.h:179: note: previous declaration of 'getopt_long_only' was 
here
make[4]: *** [xstrtol.lo] Error 1

This is a very bizarre error because I have two machines:

 - identical libguestfs from git
 - identical gnulib submodule (74d509383fe30bb5511)
 - identical glibc (glibc-2.12.90-2)

The only difference is that one machine is i686 -- it fails on this
machine.

The other machine is x86_64 and it compiles fine.

'struct option' declaration is completely identical between glibc
and gnulib.

'getopt_long' and 'getopt_long_only' are slightly different (see the
additional _GL_ARG_NONNULL and possibly in whatever
__getopt_argv_const expands to).

In glibc:

#ifndef __need_getopt
extern int getopt_long (int ___argc, char *const *___argv,
                        const char *__shortopts,
                        const struct option *__longopts, int *__longind)
       __THROW;
extern int getopt_long_only (int ___argc, char *const *___argv,
                             const char *__shortopts,
                             const struct option *__longopts, int *__longind)
       __THROW;

#endif

In gnulib:

#ifndef __need_getopt
extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
                        const char *__shortopts,
                        const struct option *__longopts, int *__longind)
       __THROW _GL_ARG_NONNULL ((2, 3));
extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
                             const char *__shortopts,
                             const struct option *__longopts, int *__longind)
       __THROW _GL_ARG_NONNULL ((2, 3));

#endif

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://et.redhat.com/~rjones/libguestfs/
See what it can do: http://et.redhat.com/~rjones/libguestfs/recipes.html

Reply via email to