tech-toolchain archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Host requirements to build the Tools binaries



    Date:        Thu, 15 Aug 2024 08:20:49 -0400 (EDT)
    From:        Mouse <mouse%Rodents-Montreal.ORG@localhost>
    Message-ID:  <202408151220.IAA15975%Stone.Rodents-Montreal.ORG@localhost>

  | > Indeed, adding a "visibility define" not only ensures that everything
  | > from that spec is present, but that everything not in that spec is
  | > not present.
  |
  | That paradigm makes it impossible to bring in two groups of non-base
  | declarations from the same include file.  If defining GROUP1_SOURCE is
  | suppsoed to mean nothing but base and GROUP1 are present, and s/1/2/
  | for GROUP2_SOURCE, then defining both of them produces a conflict.

Not quite, the actual requirement is that everything not in the spec
is not present, unless requested by some other feature request.

So if the app defines both GROUP1_SOURCE and GROUP2_SOURCE it should get
everything that either one of those makes available, but (without some
other feature request) nothing else.

But do note that all of these feature request macros need to be defined
before any standard header is included - once any one of them has been,
it is too late to make changes, you cannot pick GROUP1_SOURCE features
from <g1.h> and GROUP2_SOURCE features from <g2.h> by defining and
undefining feature macros as each header is included.

I suspect the intent is that every standard header will #include some
system specific header, which will (as usual) no-op itself if it has
been included before, and that header (from the very first standard
header included) will define a whole bunch of system specific macros
depending upon which feature macros had already been defined, which
are then used in various headers to control what is visible.   Once
that's happened, there's no rational way to change it.

We've generally gotten kind of sloppy, as the _NETBSD_SOURCE feature
(which we generally define everywhere, as a default, if nothing else
is defined, and so nothing else ever is) simply means "everything
available".

I'm about to send a much longer message about this issue (with
strptime, and the XSI option) in general.

kre



Home | Main Index | Thread Index | Old Index