On Thu, 16 Mar 2023 at 00:34, Ben Beasley wrote:

> Thank you for helping dig into the details. What you’ve written makes
> sense, and is consistent with the comments in absl/base/options.h regarding
> ABSL_OPTION_USE_STD_STRING_VIEW:
>
>     A value of 2 means to detect the C++ version being used to compile
> Abseil,
>     and use an alias only if a working std::string_view is available.  This
>     option is useful when you are building your program from source.  It
> should
>     not be used otherwise -- for example, if you are distributing Abseil
> in a
>     binary package manager -- since in mode 2, absl::string_view will name
> a
>     different type, with a different mangled name and binary layout,
> depending on
>     the compiler flags passed by the end user.  For more info, see
>     https://abseil.io/about/design/dropin-types.
>
>
> https://github.com/abseil/abseil-cpp/blob/c8a2f92586fe9b4e1aff049108f5db8064924d8e/absl/base/options.h#L138
> For completeness, the reason the value of ABSL_OPTION_USE_STD_STRING_VIEW
> changed from 2 to 1 since the previous release is an intentional upstream
> change described as follows:
>
>     Change `absl/base/options.h` at install time to reflect the ABI used
>     to compile the libraries, i.e., if Abseil was compiled with
>     C++ >= 17 then the `ABSL_OPTION_USE_STD_*` macros are set to `1`,
>     because then the C++ 17 types are embedded in the ABI of the installed
>     artifacts.
>
>     Likewise, set the `target_compile_features()` of Abseil libraries
>     to reflect the C++ version used to compile them. If they the Abseil
>     libraries are compiled with C++ >= 17, then all downstream
>     dependencies must also be compiled with C++ >= 17.
>
>
> https://github.com/abseil/abseil-cpp/commit/308bbf300fe9332130f4784c7a91fa2ad707d6e4
>
> So the only way that dependent packages can use C++14 is if we
> intentionally and explicitly downgrade the C++ standard used to compile
> abseil-cpp from C++17 (the default) to C++14.
>
> Given all this, it appears to me that the best course is still to keep
> abseil-cpp on the default C++17 standard and accept that dependent packages
> cannot use C++14. However, I’m pleased to have a much better understanding
> of what is happening, how, and why, and I’m still happy to consider any
> proposals to proceed differently.
>

Agreed. We know why it's needed now, and so can explain it to any
maintainers of packages that need to move to C++17. Thanks for humouring my
curiosity about it!



> On 3/15/23 6:29 PM, Jonathan Wakely wrote:
>
>
>
> On Wed, 15 Mar 2023 at 22:17, Jonathan Wakely <jwak...@redhat.com> wrote:
>
>>
>>
>> On Wed, 15 Mar 2023 at 22:14, Ben Beasley <c...@musicinmybrain.net>
>> wrote:
>>
>>> Thank you for prompting me to look at this more closely. A quick
>>> investigation reveals:
>>>
>>> “Abseil libraries require C++14 as the current minimum standard. When
>>> compiled with C++17 (either because it is the compiler's default or
>>> explicitly requested), then Abseil requires C++17.”
>>>
>>>
>>> https://github.com/abseil/abseil-cpp/blob/20230125.1/CMake/AbseilHelpers.cmake#L291
>>>
>>> The abseil-cpp package in Fedora has been compiled as C++17 for some
>>> time—at first explicitly, but this would also now be the default if the
>>> spec file did not configure a particular standard—so it seems dependent
>>> packages already technically needed C++17, and it is mere happenstance that
>>> this particular release is revealing incompatibilities.
>>>
>>
>> I'm not sure if that's true, see my other email which crossed with yours.
>> In the previous release absl::string_view would work for both C++14 and
>> C++17, because USE_STD_STRING_VIEW was defined to 2, so adapted to the
>> headers that included it.
>>
>> In the new release it is hardcoded to only work for C++17. That seems
>> like a new change in the new version, not something that was already
>> present.
>>
>
> Digging deeper, maybe it was true, and ilbc was just getting away with it
> by chance.
>
> Several member functions of absl::string_view are defined out-of-line in
> abseil-cpp-20220623.1/absl/strings/string_view.cc but if the library is
> built as C++17 then those won't be defined (because absl::string_view is
> just an alias for std::string_view, so all the members come from
> libstdc++). So all clients of abseil-cpp shared libs do need to be compiled
> as C++17 or later. It looks like libilbc.so.3.0.4 doesn't actually use any
> libasbl_*.so libs, so only uses libabsl headers, and that's why it "worked"
> when the header was adaptive w.r.t. the string-view definition. It doesn't
> care that there are no definitions for those string_view member functions,
> because it happens to not use those specific member functions.
>
>
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: 
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org
Do not reply to spam, report it: 
https://pagure.io/fedora-infrastructure/new_issue

Reply via email to