Page MenuHomeFreeBSD

D41188.diff
No OneTemporary

D41188.diff

diff --git a/Makefile.inc1 b/Makefile.inc1
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -602,9 +602,8 @@
# still allow using the old behaviour (inheriting $PATH) if
# BUILD_WITH_STRICT_TMPPATH is set to 0 but this will eventually be removed.
-# Currently strict $PATH can cause build failures and does not work yet with
-# USING_SYSTEM_LINKER/USING_SYSTEM_COMPILER. Once these issues have been
-# resolved it will be turned on by default.
+# Currently strict $PATH can cause build failures. Once the remaining issues
+# have been resolved it will be turned on by default.
BUILD_WITH_STRICT_TMPPATH?=0
.if defined(CROSSBUILD_HOST)
# When building on non-FreeBSD we can't rely on the tools in /usr/bin being compatible
diff --git a/tools/build/Makefile b/tools/build/Makefile
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -312,6 +312,8 @@
_make_abs!= which "${MAKE}"
_host_abs_tools_to_symlink= ${_make_abs}:make ${_make_abs}:bmake
+_LINK_HOST_TOOL= ln -sfn
+
.if ${.MAKE.OS} == "FreeBSD"
# When building on FreeBSD we always copy the host tools instead of linking
# into WORLDTMP to avoid issues with incompatible libraries (see r364030).
@@ -322,7 +324,7 @@
# tools to another directory with cp -p results in freezes on macOS Big Sur for
# some unknown reason. It can also break building inside docker containers if
# there are ACLs on shared volumes.
-_COPY_HOST_TOOL= ln -sfn
+_COPY_HOST_TOOL= ${_LINK_HOST_TOOL}
.if ${.MAKE.OS} == "Darwin"
# /usr/bin/cpp may invoke xcrun:
@@ -335,6 +337,20 @@
_host_tools_to_symlink:= ${_host_tools_to_symlink:Nsh}
.endif
+# We also need to symlink any non-absolute toolchain commands. Clang finds its
+# resource directory relative to itself, so CC/CXX/CPP must be symlinked, and
+# we do the same for LD for consistency. There should be no concerns about
+# installing over the current system since we don't use the toolchain during
+# install.
+.for var in CC CXX CPP LD
+.for X in $${_empty_var_} X
+.if !empty(${X}${var}) && !${${X}${var}:M/*} && \
+ !${_toolchain_tools_to_symlink:U:M${${X}${var}}}
+_toolchain_tools_to_symlink+= ${${X}${var}}
+.endif
+.endfor
+.endfor
+
host-symlinks:
@echo "Linking host tools into ${DESTDIR}/bin"
.for _tool in ${_host_tools_to_symlink}
@@ -359,6 +375,15 @@
rm -f ${DESTDIR}/usr/libexec/flua
${_COPY_HOST_TOOL} /usr/libexec/flua ${DESTDIR}/usr/libexec/flua
.endif
+.for _tool in ${_toolchain_tools_to_symlink}
+ @export PATH=$${PATH}:/usr/local/bin; \
+ source_path=`which ${_tool} || echo /dev/null/no/such`; \
+ if [ ! -e "$${source_path}" ] ; then \
+ echo "Cannot find host tool '${_tool}' in PATH ($$PATH)." >&2; false; \
+ fi; \
+ rm -f "${DESTDIR}/bin/${_tool}"; \
+ ${_LINK_HOST_TOOL} "$${source_path}" "${DESTDIR}/bin/${_tool}"
+.endfor
# Create all the directories that are needed during the legacy, bootstrap-tools
# and cross-tools stages. We do this here using mkdir since mtree may not exist

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 2, 3:32 PM (21 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13362353
Default Alt Text
D41188.diff (2 KB)

Event Timeline