Web lists-archives.com

Re: I cannot understand popen/_popen absence




On 2017-01-28 18:16, Пётр Б. wrote:
> Excuse me for vague wording, let me explain it.
> I am trying to build Qt under Cygwin. For some mysterious reason 
> Cygwin compiler does not expose popen with std=c++11 which is
> required for Qt
> BUT
> at the same time the MinGW compiler installed from Cygwin repository 
> does expose popen with same standard flag.
> I did not yet find a convenient way of using MinGW compiler (which
> is prefixed) so I am stuggling to get popen exposed.
> What is the reason for this difference between MinGW and Cygwin?

Different default options selected during build.

> 2017-01-29 3:50 GMT+03:00, Пётр Б. <satnatantas@xxxxxxxxx>:
>> tchar.h: http://pastebin.com/raw/109n342z
>> So I only get popen if _POSIX_ is defined (which is not defined in
>> any header, I searched Cygwin folder with file manager).
>> stdio.h: http://pastebin.com/raw/jrd2dmzP
>> So I only get popen if some conditions which I did not hear about
>> are fullfilled. So, what sorcery should I use to get popen?

$ fgrep popen -C2 /usr/include/stdio.h
#if __MISC_VISIBLE || __POSIX_VISIBLE >= 199209
int     _EXFUN(pclose, (FILE *));
FILE *  _EXFUN(popen, (const char *, const char *));
#endif

$ egrep -B1 '#define\s+__(MISC_VISIBLE\s+1|POSIX_VISIBLE\s+199209)' /usr/include/sys/features.h  
#ifdef _DEFAULT_SOURCE
#define __MISC_VISIBLE          1
--
#elif (_POSIX_C_SOURCE - 0) >= 2 || defined(_XOPEN_SOURCE)
#define __POSIX_VISIBLE         199209

So you have to #define _DEFAULT_SOURCE 1, _XOPEN_SOURCE 1, or 
_POSIX_C_SOURCE 2: some of these may be enabled by using 
-std=gnu++1[14yz] instead of -std=c++...; 
roughly speaking the latter enables only ISO/IEC 9899:yyyy 
standard features and disables POSIX-only features, which 
are enabled by using -std=gnu++...

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

--
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