Subject: Re: fixes for case insensitive ${DESTDIR}
To: None <tech-toolchain@netbsd.org>
From: Christos Zoulas <christos@astron.com>
List: tech-toolchain
Date: 09/10/2006 23:22:03
In article <215B7B81-ECFB-4AF9-AAC1-698AF1840BBE@fnop.net>,
Rui Paulo  <rpaulo@fnop.net> wrote:
>
>On Sep 9, 2006, at 7:39 PM, Darrin B.Jewell wrote:
>
>>
>> The patch included below contains several fixes which allow building
>> into a case insensitive ${DESTDIR}.  Most, but not all of them, are
>> not user visible or even developer visible, and a few are also just
>> general cleanup.  I would like feedback, especially on user visible
>> x11 installed file renames, before I commit, thanks.
>>
>> The primary issues involved were:
>>
>>   - postinstall removed obsolete files with name conflicts
>>   - checkflist reported conflicts as missing files
>>   - name conflicts which were hard linked together did not end up in
>>     METALOG, this was mostly a few man pages and /usr/bin/[Mm]ail
>>   - src/tools/binstall -r -lh can get posix semantics for rename(2)
>>     and does not remove its temporary file when reinstalling
>>     an existing hard link.
>>   - minor clash with file name in objdir for src/x11/tools/xkbcomp
>>   - the X11 xdmx example program conflicted with the Xdmx server
>>   - the X11 stipple and Stipple bitmaps conflicted
>>
>> Which were addressed in the following ways:
>>
>>   - I added a routine to postinstall to compare paths on filesystems
>>     that are case insensitive but preserve case.  This was done by
>>     using 'ls -fa dirname | grep -q -x -F filename'.  Now postinstall
>>     will only remove obsolete files that match the exact case in the
>>     filesystem.
>>
>>   - I changed checkflist to do an extra case insensitive check for
>>     a file in the filesystem before reporting it missing
>>
>>   - I reworked the way hard links are created in bsd.man.mk and  
>> bsd.link.mk
>>     so that case conflicts are always installed even if it appears to
>>     already be there.  This inserts the proper entry in METALOG.
>>     I switched to using make constructs instead of shell  
>> constructs, which
>>     is a general improvement, but also provided a little more control
>>     over the individual link build dependencies.  This also uncovered
>>     some minor glitches in other system makefiles:
>>       - libform had several files listed to hard link to themselves
>>       - libkrb5 had a file hard linked when it also existed as its  
>> own man page.
>>       - libl needed to include bsd.lib.mk at the end of the makefile
>>       - bin/test doesn't need to explicitly shell quote the target [.1
>>     One side effect of this is that the resulting installed filename
>>     on case insensitive filesystems has the case of the last installed
>>     link.  I had a working tweak to fix this by installing from a hard
>>     link of the original and then moving that hard link back into
>>     the original filename but this seemed unnecessary.
>>
>>   - I changed src/usr.bin/xinstall/xinstall.c to unconditionally  
>> attempt
>>     to unlink() the temporary file after rename(), so that it  
>> doesn't matter
>>     whether rename has posix or bsd semantics.
>>
>>   - I created a special .c file for xkbcomp which included one of the
>>     name conflicting source files so that the .o file names in objdir
>>     no longer conflict
>>
>>   - I renamed the xdmx example program to just "dmx" from a hint in  
>> its
>>     Imakefile.  This could also be renamed something like dmxinfo or
>>     something else unobtrusive.  This is a user visible change that
>>     required obsoleting the old name in the set lists.
>>
>>   - I renamed /usr/X11R6/include/X11/bitmaps/Stipple to Stippler based
>>     on a hint in the Imakefile.  This is a user visible change that
>>     required obsoleting the old name in the set lists.
>>
>> These changes were tested by building the i386 target on osx and  
>> netbsd
>> into HFS+ and FFS respectively.  They were also tested with make -j 4.
>>
>> With these changes, a complete release build works on case insensitive
>> filesystems.  The only remaining issue is that the resulting set tar
>> files do not hard link everything correctly since tar gets confused by
>> the fact that two files in METALOG that differ only in case do not
>> separately bump the link count in the filesystem.  I am considering
>> adding an option to tar to consider all files as link candidates,
>> but that is not included in this patch.
>>
>> Please review, comment and possibly test.  I would like to commit
>> these changes, or at least the non user visible ones if there
>> is objection to the X11 renames.
>>
>> Thank you,
>> Darrin
>
>Great work! The patch looks good to me, but I can't comment on the  
>X11 renames.

Yes, I'd say commit it.

christos