<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 7, 2017 at 5:35 PM, Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 08/08/2017 00:38, Joel Sherrill wrote:<br>
> Hi<br>
><br>
> Taking a private discussion public. Aditya is implementing the POSIX<br>
> method confstr() next. This email is my current set of thoughts on the<br>
> implementation of this method for RTEMS.<br>
><br>
> First, I think confstr() belongs in the RTEMS source tree. It<br>
> is very similar to sysconf() but has to take the following "names" as<br>
> those to be able to retrieve:<br>
><br>
> _CS_PATH<br>
> _CS_POSIX_V7_ILP32_OFF32_<wbr>CFLAGS<br>
> _CS_POSIX_V7_ILP32_OFF32_<wbr>LDFLAGS<br>
> _CS_POSIX_V7_ILP32_OFF32_LIBS<br>
> _CS_POSIX_V7_ILP32_OFFBIG_<wbr>CFLAGS<br>
> _CS_POSIX_V7_ILP32_OFFBIG_<wbr>LDFLAGS<br>
> _CS_POSIX_V7_ILP32_OFFBIG_LIBS<br>
> _CS_POSIX_V7_LP64_OFF64_CFLAGS<br>
> _CS_POSIX_V7_LP64_OFF64_<wbr>LDFLAGS<br>
> _CS_POSIX_V7_LP64_OFF64_LIBS<br>
> _CS_POSIX_V7_LPBIG_OFFBIG_<wbr>CFLAGS<br>
> _CS_POSIX_V7_LPBIG_OFFBIG_<wbr>LDFLAGS<br>
> _CS_POSIX_V7_LPBIG_OFFBIG_LIBS<br>
> _CS_POSIX_V7_THREADS_CFLAGS<br>
> _CS_POSIX_V7_THREADS_LDFLAGS<br>
> _CS_POSIX_V7_WIDTH_RESTRICTED_<wbr>ENVS<br>
> _CS_V7_ENV<br>
><br>
> This is per <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/confstr.html" rel="noreferrer" target="_blank">http://pubs.opengroup.org/<wbr>onlinepubs/9699919799/<wbr>functions/confstr.html</a><br>
><br>
<br>
</div></div>Does the Open Group define the purpose for each of these values? It looks x86<br>
and Linux specific, ie how to build a 32bit app.<br></blockquote><div><br></div><div>Agreed. I think we return an empty string for all of those but they were in</div><div>the POSIX standard. :(</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
What is the purpose of 'POSIX_V7' in the label? I see FreeBSD 11.1 has<br>
'_CS_POSIX_V6_ILP32_OFF32_<wbr>CFLAGS' etc and the Linux page you provided has<br>
'_CS_XBS5_ILP32_OFF32_CFLAGS' and I think glibc has 'POSIX_V7'.<br>
<br></blockquote><div><br></div><div>V6 and V7 refer to the POSIX standard version. The rest if architecture</div><div>specific uselessness.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Looking at the rationale and playing with the command on FreeBSD I see:<br>
<br>
$ command -p getconf _CS_PATH<br>
getconf: no such configuration parameter `_CS_PATH'<br>
$ command -p getconf PATH<br>
/usr/bin:/bin:/usr/sbin:/sbin<br>
$ command -p getconf POSIX_V6_LPBIG_OFFBIG_CFLAGS<br>
unsupported programming environment<br>
$ command -p getconf POSIX_V6_WIDTH_RESTRICTED_ENVS<br>
_POSIX_V6_LP64_OFF64<br>
$ command -p getconf _POSIX_V6_LP64_OFF64<br>
<br>
<br>
<br>
<br>
1<br>
<br>
I find this a little confusing.<br>
<span class=""><br>
> The value for those #define's should likely match what is in the Linux Software<br>
> Base: <a href="https://refspecs.linuxfoundation.org/LSB_1.2.0/gLSB.html" rel="noreferrer" target="_blank">https://refspecs.<wbr>linuxfoundation.org/LSB_1.2.0/<wbr>gLSB.html</a> That much goes<br>
> in newlib.<br>
<br>
</span>For the numbering I see:<br>
<br>
$ uname<br>
FreeBSD<br>
$ grep -r _CS_PATH /usr/include/<br>
/usr/include/unistd.h:#define   _CS_PATH                1       /* default value<br>
of PATH */<br>
<br>
I would prefer we follow the FreeBSD lead here for numbering.<br>
<span class=""><br></span></blockquote><div><br></div><div>Doesn't matter to me.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
><br>
> The confstr() implementation will be a switch on those values and<br>
> I honestly don't even know what most of those should be in an<br>
> RTEMS environment.<br>
><br>
> But those are the names and we have to answer the question of what<br>
> is the appropriate value to return. A first implementation could return<br>
> something like getenv("PATH") for __CS_PATH, and take a swing at<br>
> the "obvious ones".<br>
><br>
> The ones with CFLAGS, LDFLAGS, and LIBS would first have<br>
> to evaluated to see if the name makes sense to provide a value<br>
> for. And then return the value. I am tending to lean to returning<br>
> empty string for all of those.<br>
><br>
> Looks like Linux doesn't support most of them:<br>
><br>
> <a href="http://man7.org/linux/man-pages/man3/confstr.3.html" rel="noreferrer" target="_blank">http://man7.org/linux/man-<wbr>pages/man3/confstr.3.html</a><br>
><br>
> I don't think this is a commonly used method so I would be perfectly<br>
> happy to support it in a minimal, but compliant manner.<br>
><br>
> Any other thoughts?<br>
><br>
<br>
</span>If no one has a common set of names I wonder how it is to be managed in a<br>
portable way?<br></blockquote><div><br></div><div>The names are consistent but vary based on the supported POSIX version.</div><div><br></div><div>Deciding on the set of names is definitely a Cygwin discussion. </div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Chris<br>
</font></span></blockquote></div><br></div></div>