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