svn commit: r364030 - in head: . tools/build

Warner Losh imp at FreeBSD.org
Fri Aug 7 16:26:58 UTC 2020


Author: imp
Date: Fri Aug  7 16:26:56 2020
New Revision: 364030
URL: https://svnweb.freebsd.org/changeset/base/364030

Log:
  The practice of creating symbolic links is somewhat fragile. Always
  make copies instead.
  
  There's too many times that we can't run the new binaries with old
  libraries. Making the links when things are known to be 'safe' is a
  nice optimization, but a copy of all the binaries is only 30MB, so
  saving the copies at the cost of increased support when new symbols
  are added and used as part of the bootstrap seems to be unwise.
  
  There may be additional optimizations possible here, especially for
  !FreeBSD hosts. However, that's beyond the scope of the problem I'm
  trying to fix with make failing mid-way through an installworld across
  change r363679. This optimization there caused us to run a new binary
  with an old library once a new make was installed due to the symbolic
  link. One could just copy make, but then other binaries fail as well,
  so rather than play whack-a-mole, I opted to take us back to the old
  way.  Before r340157 or so we did copies (thogh of a lot fewer
  artifacts), and we didn't have issues like this.
  
  Reviewed by: arichards@
  Differential Revision: https://reviews.freebsd.org/D25967

Modified:
  head/Makefile.inc1
  head/UPDATING
  head/tools/build/Makefile

Modified: head/Makefile.inc1
==============================================================================
--- head/Makefile.inc1	Fri Aug  7 16:20:07 2020	(r364029)
+++ head/Makefile.inc1	Fri Aug  7 16:26:56 2020	(r364030)
@@ -2293,13 +2293,12 @@ ${_bt}-links: .PHONY
 
 .for _tool in ${_bootstrap_tools_links}
 ${_bt}-link-${_tool}: .PHONY .MAKE
-	@if [ ! -e "${WORLDTMP}/legacy/bin/${_tool}" ]; then \
-		source_path=`which ${_tool}`; \
-		if [ ! -e "$${source_path}" ] ; then \
-			echo "Cannot find host tool '${_tool}'"; false; \
-		fi; \
-		ln -sfnv "$${source_path}" "${WORLDTMP}/legacy/bin/${_tool}"; \
-	fi
+	@rm -f "${WORLDTMP}/legacy/bin/${_tool}"; \
+	source_path=`which ${_tool}`; \
+	if [ ! -e "$${source_path}" ] ; then \
+		echo "Cannot find host tool '${_tool}'"; false; \
+	fi; \
+	cp -f "$${source_path}" "${WORLDTMP}/legacy/bin/${_tool}"
 ${_bt}-links: ${_bt}-link-${_tool}
 .endfor
 

Modified: head/UPDATING
==============================================================================
--- head/UPDATING	Fri Aug  7 16:20:07 2020	(r364029)
+++ head/UPDATING	Fri Aug  7 16:26:56 2020	(r364030)
@@ -26,6 +26,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW:
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20200807:
+	Makefile.inc has been updated to work around the issue documented in
+	20200729. It was a case where the optimization of using symbolic links
+	to point to binaries created a situation where we'd run new binaries
+	with old libraries starting midway through the installworld process.
+
 20200729:
 	r363679 has redefined some undefined behavior in regcomp(3); notably,
 	extraneous escapes of most ordinary characters will no longer be

Modified: head/tools/build/Makefile
==============================================================================
--- head/tools/build/Makefile	Fri Aug  7 16:20:07 2020	(r364029)
+++ head/tools/build/Makefile	Fri Aug  7 16:26:56 2020	(r364030)
@@ -119,26 +119,25 @@ _host_abs_tools_to_symlink=	${_make_abs}:make ${_make_
 host-symlinks:
 	@echo "Linking host tools into ${DESTDIR}/bin"
 .for _tool in ${_host_tools_to_symlink}
-	@if [ ! -e "${DESTDIR}/bin/${_tool}" ]; then \
-		source_path=`which ${_tool}`; \
-		if [ ! -e "$${source_path}" ] ; then \
-			echo "Cannot find host tool '${_tool}'"; false; \
-		fi; \
-		ln -sfnv "$${source_path}" "${DESTDIR}/bin/${_tool}"; \
-	fi
+	@source_path=`which ${_tool}`; \
+	if [ ! -e "$${source_path}" ] ; then \
+		echo "Cannot find host tool '${_tool}'"; false; \
+	fi; \
+	rm -f "${DESTDIR}/bin/${_tool}"; \
+	cp -f "$${source_path}" "${DESTDIR}/bin/${_tool}"
 .endfor
 .for _tool in ${_host_abs_tools_to_symlink}
 	@source_path="${_tool:S/:/ /:[1]}"; \
 	target_path="${DESTDIR}/bin/${_tool:S/:/ /:[2]}"; \
-	if [ ! -e "$${target_path}" ] ; then \
-		if [ ! -e "$${source_path}" ] ; then \
-			echo "Host tool '${src_path}' is missing"; false; \
-		fi; \
-		ln -sfnv "$${source_path}" "$${target_path}"; \
-	fi
+	if [ ! -e "$${source_path}" ] ; then \
+		echo "Host tool '${src_path}' is missing"; false; \
+	fi; \
+	rm -f "$${target_path}"; \
+	cp -f "$${source_path}" "$${target_path}"
 .endfor
 .if exists(/usr/libexec/flua)
-	ln -sf /usr/libexec/flua ${DESTDIR}/usr/libexec/flua
+	rm -f ${DESTDIR}/usr/libexec/flua
+	cp -f /usr/libexec/flua ${DESTDIR}/usr/libexec/flua
 .endif
 
 # Create all the directories that are needed during the legacy, bootstrap-tools


More information about the svn-src-all mailing list