Jason Merrill <ja...@redhat.com> writes:

> On 10/18/24 11:21 AM, Patrick Palka wrote:
>> On Fri, 18 Oct 2024, Jason Merrill wrote:
>>>
>>> Is it useful for std.cc to live in a subdirectory of c++23 as in this 
>>> patch, or
>>> should it be in c++23 itself?  Or elsewhere?
>> IIUC the src/ subdirectory is for stuff that gets compiled into the
>> .so
>> which isn't the case here.
>
> Sure, though I thought that might change once we consider it ABI-stable.
>
>> And if we want to support the std module in
>> C++20 mode as an extension, a c++23 subdirectory might not be ideal either.
>
> My impression has been that the subdirectories are just for organization?
>
>> Maybe libstdc++-v3/modules/ then?
>
> Let's see what Jonathan thinks.
>
> On 10/18/24 12:04 PM, Maciej Cencora wrote:
>> On Fri, 18 Oct 2024, Jason Merrill wrote:
>>> stdc++.h also doesn't include the eternally deprecated <strstream>.  There
>>> are some other deprecated facilities that I notice are included: <codecvt>
>>> and float_denorm_style, at least.  It would be nice for L{E,}WG to clarify
>>> whether module std is intended to include interfaces that were deprecated in
>>> C++23, since ancient code isn't going to be relying on module std.
>> Per P2465r3 Standard Library Modules std and std.compat:
>>> Are deprecated features provided by the Standard Library modules?
>>> Yes. This is implied by the normative wording.
>
> Ah, thanks.
>
>> While doing some light testing, one thing that immediately popped up is that 
>> we need to export __normal_iterator related operators from __gnu_cxx 
>> namespace.
>> Otherwise it is impossible to even use std::vector in range-based for loops.
>
> Ah, good catch.
>
>> But I think a better solution (than exporting such impl details) is to make 
>> these operators hidden friends.
>
> That sounds right to me, and mechanically duplicating the declarations
> as friends seems to work (as attached).
>
>> Another thing - P2465r3 mentions only lerp, byte and related ops as
>> special w.r.t skipping export from global namespace in std.compat,
>> but for some reason Microsoft's impl treats 3-arg hypot as special
>> as well.
>
> Curious. By not declaring it at all when building the module? I don't
> want to mess with that if the standard doesn't require it.
>
> On 10/18/24 12:35 PM, Iain Sandoe wrote:
>>> Currently this installs the sources under $(pkgdata), i.e.
>>> /usr/share/libstdc++/modules.  It could also make sense to install them
>>> under $(gxx_include_dir), i.e. /usr/include/c++/15/modules.  And/or the
>>> subdirectory could be "miu" (module interface unit) instead of "modules".
>
>> I’d think that $(gxx_include_dir)/modules would be a good place, since that
>> allows us to tie it to the GCC version in side-by-side installs.  Presumably 
>> that
>> might also simplify finding the relevant sources?
>
> With side-by-side installs presumably $(prefix) would be different
> between them as well or the libraries would also clash?

We support multiple GCC side-by-side through "slotting".

The configure arguments we use right now are:
--host=x86_64-pc-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr
--bindir=/usr/x86_64-pc-linux-gnu/gcc-bin/15
--includedir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include
--datadir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15
--mandir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/man
--infodir=/usr/share/gcc-data/x86_64-pc-linux-gnu/15/info
--with-gxx-include-dir=/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15

(and so on).

That is, --prefix is the same between them, but the rest is tweaked.

>
> But I'm certainly not opposed to putting them under the include dir,
> that had been my inclination for a while, and with my
> -fsearch-include-path patch would make a simple compile easier without
> needing to teach the driver to parse the json.
>
>> I guess it could be just “module”, but my vote would be for an obvious name
>> like that or “std-module” 
>
> Indeed singular "module" would be more consistent with "include" and "lib".
>
> On 10/19/24 8:08 AM, Florian Weimer wrote:
>>> The build system can find this file with
>>> gcc -print-file-name=libstdc++.modules.json
>> Is it possible to use specs file to redirect this to a different
>> file
>> based on C++ compiler flags, should that become necessary?
>
> Well, the compiler looks up a -print-file-name argument on its library
> search path, which can be added to with -B.  But this is really an
> initial interface pending something more stable.
>
> Jason
>
> [2. text/x-patch; 0001-libstdc-normal_iterator-friends.patch]...

Reply via email to