NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

toolchain/57463: issues with build to DESTDIR on case insenstive file system



>Number:         57463
>Category:       toolchain
>Synopsis:       issues with build to DESTDIR on case insenstive file system
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    toolchain-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 10 19:55:00 +0000 2023
>Originator:     Luke Mewburn
>Release:        NetBSD-current as at 2023-07-10
>Organization:
NetBSD
>Environment:
>Description:

tl;dr: building on case insenstive file systems will result in
sets will missing files and/or files with incorrect contents
because of duplicate case-insensitive file names, mostly
manual pages.


Various files installed into DESTDIR that have conflicting names
if DESTDIR is on a case-insensitve file system won't
be available; only one of the duplicates will exist.

This isn't obvious at first, since during "make install" portion of the
build the conflicting-if-case-insensitve filenames just get overwritten
without an error, and the sets appear to be generated fine.

I first observed this when running on a macOS host
	% ./build.sh -D DESTDIR -E install=ROOTDIR
where these are both on case insensitive file systems,
which failed with:
	pax: Cannot link file ROOTDIR/./usr/share/man/html9/FREE.html to itself
	pax: Cannot link file ROOTDIR/./usr/share/man/html9/ISSET.html to itself


Checking the METALOG for case-insensitive matches of "9/free" using
	% grep -i 9/free DESTDIR/METALOG

On a NetBSD host:
	./usr/share/man/html9/FREE.html type=file uname=root gname=wheel mode=0444 size=12225 sha256=871393d86f3f8fa1f94fe44458e1daf2cfbb06bacdbc974a882c073a25d06558
	./usr/share/man/html9/free.html type=file uname=root gname=wheel mode=0444 size=12225 sha256=871393d86f3f8fa1f94fe44458e1daf2cfbb06bacdbc974a882c073a25d06558
	./usr/share/man/man9/FREE.9 type=file uname=root gname=wheel mode=0444 size=6806 sha256=f23c599362b8a57aaf568ded6e9633f86eefcd5b057daa239c1b949d9c74e171
	./usr/share/man/man9/free.9 type=file uname=root gname=wheel mode=0444 size=6806 sha256=f23c599362b8a57aaf568ded6e9633f86eefcd5b057daa239c1b949d9c74e171

On a case-insenstive macOS host:
	./usr/share/man/html9/FREE.html type=file uname=root gname=wheel mode=0444 size=12225 sha256=871393d86f3f8fa1f94fe44458e1daf2cfbb06bacdbc974a882c073a25d06558
	./usr/share/man/html9/free.html type=file uname=root gname=wheel mode=0444 size=12225 sha256=871393d86f3f8fa1f94fe44458e1daf2cfbb06bacdbc974a882c073a25d06558
	./usr/share/man/man9/free.9 type=file uname=root gname=wheel mode=0444 size=6806 sha256=f23c599362b8a57aaf568ded6e9633f86eefcd5b057daa239c1b949d9c74e171

Notice usr/share/man/man9/FREE.9 is missing?


Checking the output of the comp.tar.xz set built on case insensitive
macOS host versus a NetBSD host showed that some of the files were
stored differently too.

On a NetBSD host:
	% tar -Jtvf SETDIR/comp.tar.xz | grep -i 9/free | wc -l
	18

On a macOS host:
	% tar -Jtvf SETDIR/comp.tar.xz | grep -i 9/free | wc -l
	8


A method to determine all the potential case-insensitive filename
conflicts is to build to a DESTDIR on a NetBSD host and run:
	% cd DESTDIR
	% find . -type f | tr A-Z a-z | sort | uniq -d

E.g.,:
	./usr/share/man/html2/_exit.html
	./usr/share/man/html3/gcq_init.html
	./usr/share/man/html3/gcq_init_head.html
	./usr/share/man/html4/dbcool.html
	./usr/share/man/html4/i386/pcibios.html
	./usr/share/man/html8/makedev.html
	./usr/share/man/html8/makedev.local.html
	./usr/share/man/html9/cardbus_conf_read.html
	./usr/share/man/html9/cardbus_conf_write.html
	./usr/share/man/html9/cardbus_free_tag.html
	./usr/share/man/html9/cardbus_function_disable.html
	./usr/share/man/html9/cardbus_function_enable.html
	./usr/share/man/html9/cardbus_make_tag.html
	./usr/share/man/html9/cardbus_mapreg_map.html
	./usr/share/man/html9/cardbus_mapreg_unmap.html
	./usr/share/man/html9/delay.html
	./usr/share/man/html9/free.html
	./usr/share/man/html9/isset.html
	./usr/share/man/html9/knote.html
	./usr/share/man/html9/m_prepend.html
	./usr/share/man/html9/malloc.html
	./usr/share/man/man2/_exit.2
	./usr/share/man/man3/gcq_init.3
	./usr/share/man/man3/gcq_init_head.3
	./usr/share/man/man4/dbcool.4
	./usr/share/man/man4/i386/pcibios.4
	./usr/share/man/man8/makedev.8
	./usr/share/man/man8/makedev.local.8
	./usr/share/man/man9/cardbus_conf_read.9
	./usr/share/man/man9/cardbus_conf_write.9
	./usr/share/man/man9/cardbus_free_tag.9
	./usr/share/man/man9/cardbus_function_disable.9
	./usr/share/man/man9/cardbus_function_enable.9
	./usr/share/man/man9/cardbus_make_tag.9
	./usr/share/man/man9/cardbus_mapreg_map.9
	./usr/share/man/man9/cardbus_mapreg_unmap.9
	./usr/share/man/man9/delay.9
	./usr/share/man/man9/free.9
	./usr/share/man/man9/isset.9
	./usr/share/man/man9/knote.9
	./usr/share/man/man9/m_prepend.9
	./usr/share/man/man9/malloc.9

>How-To-Repeat:
Build releases and sets on a case insenstive file system.
Carefuly compare the differences in the generated sets.

>Fix:
To be determined.

It's long been a goal of build.sh to support building on systems
with case insensitive file systems, and our CVS source was adapted
many years ago to allow source checkouts on that.



Home | Main Index | Thread Index | Old Index