Error building run2 from source package in win7
David Sastre
d.sastre.medina@gmail.com
Tue May 24 18:38:00 GMT 2011
On Mon, May 23, 2011 at 02:33:56PM -0400, Charles Wilson wrote:
> On 5/23/2011 1:22 PM, Eric Blake wrote:
> > On 05/23/2011 11:17 AM, David Sastre wrote:
> >> cc1: warnings being treated as errors
> >> /usr/src/run2-0.4.0-1-src/run2-0.4.0-1/src/run2-0.4.0/lib/util.c: In function 'run2_strtol':
> >> /usr/src/run2-0.4.0-1-src/run2-0.4.0-1/src/run2-0.4.0/lib/util.c:423:3: error: passing argument 3 of '__assert_func' discards qualifiers from pointer target type
> >> /usr/include/assert.h:41:6: note: expected 'char *' but argument is of type 'const char *'
> >
> > The signature in assert.h uses 'const char *'; I would have to suspect
> > that somewhere in your build process you have a stray:
> >
> > #define const
> >
> > getting in the way,
>
> I think this is the only possibility, because...
>
> > and that this is thus a bug in the run2 sources and
> > not in cygwin headers.
FWIW, I never meant to have found a bug in cygwin nor in the run2 sources.
I'm just failing to build it and I hoped your wisdom might help me.
> ...the code does this:
>
> int
> run2_strtol(char *arg, long *value)
> {
> char *endptr;
> int errno_save = errno;
>
> assert(arg!=NULL);
>
> However, the stringization of the expression 'arg!=NULL' is passed as
> arg #4 (and the expression itself doesn't appear in the argument list of
> __assert_func at all; see definition below). Anyway, the #3 argument of
> __assert_func is __ASSERT_FUNC:
>
> # define assert(__e) ((__e) ? (void)0 : \
> __assert_func (__FILE__, __LINE__, \
> __ASSERT_FUNC, #__e))
>
> and __ASSERT_FUNC is defined as
> __PRETTY_FUNCTION__
> __func__
> or __FUNCTION__
> depending on the compiler and various flags. Now, since these are
> built-ins, the "signature" is fixed: they are all const char*. So the
> only way you could get this warning/error is if assert.h is "messed up"
> somehow...e.g. as Eric suggests, because an earlier header has #defined
> const away before the following decl in assert.h is parsed:
>
> void _EXFUN(__assert_func, (const char *, int, const char *,
> const char *) _ATTRIBUTE ((__noreturn__)));
Thanks both for the educational explanation.
> Now, where could a #define const occur?
>
> $ find ${run2_srcdir} -type f |\
> xargs grep const | grep define | grep '#'
> ./configure:$as_echo "#define const /**/" >>confdefs.h
>
> ...more checking...Ah, this is part of the configure macro AC_C_CONST.
>
> hmm...maybe the OP should check his generated config.h file for the
> offending def. If it's there, a quick look inside config.log should
> tell you why 'checking for an ANSI C-conforming const' is reporting 'no'.
$ grep -nR "define const" run2-0.4.0-1/build/config.h
152:#define const /**/
From the config.log:
configure:12737: checking for an ANSI C-conforming const
configure:12802: gcc -c -Wall -Werror conftest.c >&5
cc1: warnings being treated as errors
conftest.c: In function 'main':
conftest.c:69:10: error: 't' is used uninitialized in this function
conftest.c:85:23: error: 'b' may be used uninitialized in this function
configure:12802: $? = 1
configure: failed program was:
(snipped defines and removed comments)
| int
| main ()
| {
| #ifndef __cplusplus
| typedef int charset[2];
| const charset cs;
| char const *const *pcpcc;
| char **ppc;
| struct point {int x, y;};
| static struct point const zero = {0,0};
| const char *g = "string";
| pcpcc = &g + (g ? g-g : 0);
| ++pcpcc;
| ppc = (char**) pcpcc;
| pcpcc = (char const *const *) ppc;
| {
| char *t;
| char const *s = 0 ? (char *) 0 : (char const *) 0;
|
| *t++ = 0;
| if (s) return 0;
| }
| {
| int x[] = {25, 17};
| const int *foo = &x[0];
| ++foo;
| }
| {
| typedef const int *iptr;
| iptr p = 0;
| ++p;
| }
| {
| "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
| struct s { int j; const int *ap[3]; };
| struct s *b; b->j = 5;
| }
| {
| const int foo = 10;
| if (!foo) return 0;
| }
| return !cs[0] && !zero.x;
| #endif
|
| ;
| return 0;
| }
configure:12809: result: no
--
Huella de clave primaria: AD8F BDC0 5A2C FD5F A179 60E7 F79B AB04 5299 EC56
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 230 bytes
Desc: Digital signature
URL: <http://cygwin.com/pipermail/cygwin/attachments/20110524/7433a4bf/attachment.sig>
More information about the Cygwin
mailing list