Subject: Re: fixes for case insensitive ${DESTDIR}
To: Darrin B.Jewell <dbj@netbsd.org>
From: Rui Paulo <rpaulo@fnop.net>
List: tech-toolchain
Date: 09/09/2006 21:01:48
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.
-- Rui Paulo