public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* ‘SIG_SETMASK’ and -std=c99
@ 2017-08-06  9:04 Marco Atzeri
  2017-08-06  9:44 ` Achim Gratz
  0 siblings, 1 reply; 7+ messages in thread
From: Marco Atzeri @ 2017-08-06  9:04 UTC (permalink / raw)
  To: cygwin

building again hdf5-1.8.18 on latest cygwin I hit

error: ‘SIG_SETMASK’ undeclared

removing  "-std=c99" from CFLAGS solves the issue.

As before the "-std=c99" was not causing any problem , it is not clear 
to me if the current behavior is correct or a side effect of latest
cygwin header reshuffle.

Regards
Marco









--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06  9:04 ‘SIG_SETMASK’ and -std=c99 Marco Atzeri
@ 2017-08-06  9:44 ` Achim Gratz
  2017-08-06 14:52   ` Marco Atzeri
  0 siblings, 1 reply; 7+ messages in thread
From: Achim Gratz @ 2017-08-06  9:44 UTC (permalink / raw)
  To: cygwin

Marco Atzeri writes:
> building again hdf5-1.8.18 on latest cygwin I hit
>
> error: ‘SIG_SETMASK’ undeclared
>
> removing  "-std=c99" from CFLAGS solves the issue.

https://stackoverflow.com/questions/20849917/invalid-signal-processing-library-in-linux

> As before the "-std=c99" was not causing any problem , it is not clear
> to me if the current behavior is correct or a side effect of latest
> cygwin header reshuffle.

The "-std=c*" options are not meant to expose any symbols that are not
defined in the respective C standard.  You almost always want to use
"-std=gnu*" instead if you target POSIX-y systems.


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Waldorf MIDI Implementation & additional documentation:
http://Synth.Stromeko.net/Downloads.html#WaldorfDocs

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06  9:44 ` Achim Gratz
@ 2017-08-06 14:52   ` Marco Atzeri
  2017-08-06 16:16     ` Ken Brown
  0 siblings, 1 reply; 7+ messages in thread
From: Marco Atzeri @ 2017-08-06 14:52 UTC (permalink / raw)
  To: cygwin

On 06/08/2017 11:44, Achim Gratz wrote:
> Marco Atzeri writes:
>> building again hdf5-1.8.18 on latest cygwin I hit
>>
>> error: ‘SIG_SETMASK’ undeclared
>>
>> removing  "-std=c99" from CFLAGS solves the issue.
>
> https://stackoverflow.com/questions/20849917/invalid-signal-processing-library-in-linux

That is not very informative as signal.h is in C99.
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf

however SIG_SETMASK is not
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html

>
>> As before the "-std=c99" was not causing any problem , it is not clear
>> to me if the current behavior is correct or a side effect of latest
>> cygwin header reshuffle.
>
> The "-std=c*" options are not meant to expose any symbols that are not
> defined in the respective C standard.  You almost always want to use
> "-std=gnu*" instead if you target POSIX-y systems.

formally you are right. However it seems that Cygwin is now
more stringent than Linux where this problem does not arise.


> Regards,
> Achim.

Regards
Marco


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06 14:52   ` Marco Atzeri
@ 2017-08-06 16:16     ` Ken Brown
  2017-08-06 17:00       ` Marco Atzeri
  0 siblings, 1 reply; 7+ messages in thread
From: Ken Brown @ 2017-08-06 16:16 UTC (permalink / raw)
  To: cygwin

On 8/6/2017 10:51 AM, Marco Atzeri wrote:
> On 06/08/2017 11:44, Achim Gratz wrote:
>> The "-std=c*" options are not meant to expose any symbols that are not
>> defined in the respective C standard.  You almost always want to use
>> "-std=gnu*" instead if you target POSIX-y systems.
> 
> formally you are right. However it seems that Cygwin is now
> more stringent than Linux where this problem does not arise.

That's not what I see on Linux (Scientific Linux 7.2):

$ cat test.c
#include <signal.h>
#include <stdio.h>

int
main ()
{
#ifdef SIG_SETMASK
   printf ("SIG_SETMASK is defined.\n");
#else
   printf ("SIG_SETMASK is not defined.\n");
#endif
}

$ gcc -o test test.c

$ gcc -std=c99 -o test_c99 test.c

$ ./test
SIG_SETMASK is defined.

$ ./test_c99
SIG_SETMASK is not defined.

Ken

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06 16:16     ` Ken Brown
@ 2017-08-06 17:00       ` Marco Atzeri
  2017-08-06 20:43         ` Ken Brown
  0 siblings, 1 reply; 7+ messages in thread
From: Marco Atzeri @ 2017-08-06 17:00 UTC (permalink / raw)
  To: cygwin

On 06/08/2017 18:16, Ken Brown wrote:
> On 8/6/2017 10:51 AM, Marco Atzeri wrote:
>> On 06/08/2017 11:44, Achim Gratz wrote:
>>> The "-std=c*" options are not meant to expose any symbols that are not
>>> defined in the respective C standard.  You almost always want to use
>>> "-std=gnu*" instead if you target POSIX-y systems.
>>
>> formally you are right. However it seems that Cygwin is now
>> more stringent than Linux where this problem does not arise.
>
> That's not what I see on Linux (Scientific Linux 7.2):
>

thanks Ken for the check.

I should have reported the full error

error: ‘SIG_SETMASK’ undeclared (first use in this function)
      #define HDsigsetjmp(J,N)  sigsetjmp(J,N)


from the macro definition in
/usr/include/machine/setjmp.h

It seems sigsetjmp is export anyway and using SIG_SETMASK

---------------------------------------------------
#ifdef __CYGWIN__
/* Per POSIX, siglongjmp has to be implemented as function.  Cygwin
    provides functions for both, siglongjmp and sigsetjmp since 2.2.0. */
extern void siglongjmp (sigjmp_buf, int) __attribute__ ((__noreturn__));
extern int sigsetjmp (sigjmp_buf, int);
#endif

#if defined(__GNUC__)

#define sigsetjmp(env, savemask) \
             __extension__ \
             ({ \
               sigjmp_buf *_sjbuf = &(env); \
               ((*_sjbuf)[_SAVEMASK] = savemask,\
               __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + 
_SIGMASK)),\
               setjmp (*_sjbuf)); \
             })

#define siglongjmp(env, val) \
             __extension__ \
             ({ \
               sigjmp_buf *_sjbuf = &(env); \
               ((((*_sjbuf)[_SAVEMASK]) ? \
                __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + 
_SIGMASK), 0)\
                : 0), \
                longjmp (*_sjbuf, val)); \
             })

#else /* !__GNUC__ */

#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
                __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + 
_SIGMASK)),\
                setjmp (env))

#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
                __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + 
_SIGMASK), 0):0),\
                longjmp (env, val))

#endif

------------------------------------------------------

hdf5 seems wrong to use sigsetjmp and C99 but Cygwin seems to
have a consistency issue.

Regards
Marco


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06 17:00       ` Marco Atzeri
@ 2017-08-06 20:43         ` Ken Brown
  2017-08-06 21:49           ` Ken Brown
  0 siblings, 1 reply; 7+ messages in thread
From: Ken Brown @ 2017-08-06 20:43 UTC (permalink / raw)
  To: cygwin

On 8/6/2017 12:59 PM, Marco Atzeri wrote:
> hdf5 seems wrong to use sigsetjmp and C99 but Cygwin seems to
> have a consistency issue.

I think you're right that Cygwin shouldn't declare or define sigsetjmp 
under -std=c99.  Here's a simple test:

$ cat test.c
#include <setjmp.h>

int
main ()
{
   sigjmp_buf env;
   sigsetjmp (env, 0);
}

On Cygwin:

$ gcc -std=c99 test.c
In file included from /usr/include/setjmp.h:10:0,
                  from test.c:1:
test.c: In function ‘main’:
test.c:7:3: error: ‘SIG_SETMASK’ undeclared (first use in this function)
    sigsetjmp (env, 0);
    ^

On Linux:

$ gcc -std=c99 test.c
test.c: In function ‘main’:
test.c:6:3: error: unknown type name ‘sigjmp_buf’
    sigjmp_buf env;
    ^
test.c:7:3: warning: implicit declaration of function ‘sigsetjmp’ 
[-Wimplicit-function-declaration]
    sigsetjmp (env, 0);
    ^

Ken

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ‘SIG_SETMASK’ and -std=c99
  2017-08-06 20:43         ` Ken Brown
@ 2017-08-06 21:49           ` Ken Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Ken Brown @ 2017-08-06 21:49 UTC (permalink / raw)
  To: cygwin

On 8/6/2017 4:43 PM, Ken Brown wrote:
> On 8/6/2017 12:59 PM, Marco Atzeri wrote:
>> hdf5 seems wrong to use sigsetjmp and C99 but Cygwin seems to
>> have a consistency issue.
> 
> I think you're right that Cygwin shouldn't declare or define sigsetjmp 
> under -std=c99.  Here's a simple test:
> 
> $ cat test.c
> #include <setjmp.h>
> 
> int
> main ()
> {
>    sigjmp_buf env;
>    sigsetjmp (env, 0);
> }
> 
> On Cygwin:
> 
> $ gcc -std=c99 test.c
> In file included from /usr/include/setjmp.h:10:0,
>                   from test.c:1:
> test.c: In function ‘main’:
> test.c:7:3: error: ‘SIG_SETMASK’ undeclared (first use in this function)
>     sigsetjmp (env, 0);
>     ^
> 
> On Linux:
> 
> $ gcc -std=c99 test.c
> test.c: In function ‘main’:
> test.c:6:3: error: unknown type name ‘sigjmp_buf’
>     sigjmp_buf env;
>     ^
> test.c:7:3: warning: implicit declaration of function ‘sigsetjmp’ 
> [-Wimplicit-function-declaration]
>     sigsetjmp (env, 0);

I've submitted a patch 
(https://cygwin.com/ml/cygwin-patches/2017-q3/msg00014.html) which makes 
the behavior on Cygwin the same as on Linux.

Ken


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-08-06 21:49 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-06  9:04 ‘SIG_SETMASK’ and -std=c99 Marco Atzeri
2017-08-06  9:44 ` Achim Gratz
2017-08-06 14:52   ` Marco Atzeri
2017-08-06 16:16     ` Ken Brown
2017-08-06 17:00       ` Marco Atzeri
2017-08-06 20:43         ` Ken Brown
2017-08-06 21:49           ` Ken Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).