Re: make installworld fails because /usr/include/c++/v1/__tuple is a file

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Wed, 13 Dec 2023 18:07:05 UTC
On 12/10/23 8:43 AM, Dimitry Andric wrote:
> On 10 Dec 2023, at 15:11, Herbert J. Skuhra <herbert@gojira.at> wrote:
>>
>> On Sun, Dec 10, 2023 at 01:22:38PM +0000, John F Carr wrote:
>>> On arm64 running CURRENT from two weeks ago I updated to
>>>
>>>   c711af772782 Bump __FreeBSD_version for llvm 17.0.6 merge
>>>
>>> and built and installed from source.  make installworld failed:
>>>
>>>   install: target directory `/usr/include/c++/v1/__tuple/' does not exist
>>>
>>> That pathname is a file:
>>>
>>>   -r--r--r--  1 root wheel 20512 Feb 15  2023 /usr/include/c++/v1/__tuple
>>>
>>> Early in make output is
>>>
>>>   mtree -deU -i -f /usr/src/etc/mtree/BSD.include.dist -p /usr/include
>>>   ./c++/v1/__algorithm/pstl_backends missing (created)
>>>   [...]
>>>   ./c++/v1/__tuple missing (not created: File exists)
>>>
>>> Should I remove the file and try again, or is there a more elegant fix?
>>>
>>> The word "tuple" does not appear in UPDATING.
>>
>> 'make delete-old' should have removed this file.
>>
>> bdd1243df58e6 (Dimitry Andric          2023-04-14 23:41:27 +0200   965)
>> OLD_FILES+=usr/include/c++/v1/__tuple
> 
> Ah yes, that's it. The file was removed during the upgrade from libc++
> 15.0 to 16.0, while its contents was split into a subdirectory named
> __tuple_dir. In libc++ 17.0.0 they renamed this subdirectory back to
> just __tuple.
> 
> This means that apparently people are not running "make delete-old"
> after installations. Please don't forget that. :)

Well, but if you have an old system with LLVM 15 that you upgrade directly
to LLVM 17 you will hit this even if you ran delete-old after your last
upgrading that used LLVM 15.  We might need something to cope with this
during the install target for libc++ in particular where this has occurred
multiple times historically.

-- 
John Baldwin