> On May 28, 2023, at 3:53 AM, Dimitry Andric <d...@freebsd.org> wrote: > > 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.
That’s a fair point, however, given that this follows the standard installation workflow… 1. etcupdate pre-run. 2. install kernel 3. reboot 4. make installworld 5. etcupdate post-run … this could surprise end-users. In particular, the C++ compiler will be broken between step 1 and step 4. It would be good to bring this fact up in UPDATING or RELNOTES as a warning because it could result in a broken system that’s difficult to recover from. Cheers, -Enji
signature.asc
Description: Message signed with OpenPGP