On 28 May 2023, at 07:18, Enji Cooper <yaneurab...@gmail.com> wrote:
> 
> I just tried to run “make hierarchy” from a main tree on a 13.2-RELEASE 
> system, and doing so completely broke my headers.
> It took me about 30 minutes to figure out what happened… 
> /usr/include/c++/v1/__string was a header, whereas on :main it’s a directory?!

Yes, upstream libc++ has split up large headers into multiple components, in 
particular __string and __type_traits.

Since we had a file named __string, it had to be somehow replaced by a 
directory. This is what the distrib-cleanup target in the top-level Makefile 
does:

https://github.com/DimitryAndric/freebsd-src/commit/6b13b4a095e3

Afterwards, the replacement directory named __string is created as part of the 
regular mtree commands.


...
> I reinstalled the headers by going to lib/libc++ in my releng/13.2 tree, 
> building, and installing all of the 13.2-RELEASE headers.
> This change has been live for almost a year now on :main — is this a known 
> caveat when doing a source-based upgrade from 13.2-RELEASE* to 14.0-CURRENT, 
> i.e., that the installworld (if interrupted) could break the c++ compiler?

I think it should already be quite clear that interrupting installworld is 
risky. If you were just in the middle of replacing libc or rtld, and those were 
half-written, your system will be completely hosed. (I am speaking from 
experience. :) The same goes for any system headers or libraries, not only the 
C++ ones. If you have a half-installed tree, it should not be used for anything 
except attempting another installworld.

-Dimitry

Attachment: signature.asc
Description: Message signed with OpenPGP

Reply via email to