Commit fab2579e authored by Ben Gamari's avatar Ben Gamari 🐢 Committed by Marge Bot
Browse files

hadrian: Don't rely on realpath in bindist Makefile

As noted in #19963, `realpath` is not specified by POSIX and therefore
cannot be assumed to be available. Here we provide a POSIX shell
implementation of `realpath`, due to Julian Ospald and others.

Closes #19963.
parent 44c08863
Pipeline #44766 failed with stages
in 383 minutes and 16 seconds
......@@ -202,7 +202,7 @@ update_package_db: install_bin install_lib
@echo "$(PKG_CONFS)"
@echo "Updating the package DB"
$(foreach p, $(PKG_CONFS),\
$(call patchpackageconf,$(shell echo $(notdir $p) | sed 's/-\([0-9]*[0-9]\.\)*conf//g'),$(shell echo "$p" | sed 's:xxx: :g'),$(docdir),$(shell realpath --relative-to="$(ActualLibsDir)" "$(docdir)")))
$(call patchpackageconf,$(shell echo $(notdir $p) | sed 's/-\([0-9]*[0-9]\.\)*conf//g'),$(shell echo "$p" | sed 's:xxx: :g'),$(docdir),$(shell mk/relpath.sh "$(ActualLibsDir)" "$(docdir)")))
'$(WrapperBinsDir)/$(CrossCompilePrefix)ghc-pkg' recache
install_mingw:
......
......@@ -337,9 +337,10 @@ compressorExtension Bzip2 = "bz2"
-- @./configure [...] && make install@ workflow.
bindistInstallFiles :: [FilePath]
bindistInstallFiles =
[ "config.sub", "config.guess", "install-sh", "mk" -/- "config.mk.in"
, "mk" -/- "install.mk.in", "mk" -/- "project.mk", "README"
, "INSTALL" ]
[ "config.sub", "config.guess", "install-sh"
, "mk" -/- "config.mk.in", "mk" -/- "install.mk.in", "mk" -/- "project.mk"
, "mk" -/- "relpath.sh"
, "README", "INSTALL" ]
-- | This auxiliary function gives us a top-level 'Filepath' that we can 'need'
-- for all libraries and programs that are needed for a complete build.
......
#!/bin/sh
# POSIX shell implementation of `realpath --relative-to=$1 $2.
# This is an adaptation of the implementation from
# <https://github.com/Offirmo/offirmo-shell-lib>.
# returns relative path to $2=$target from $1=$source
## NOTE : path are compared in text only. They don’t have to exist
## and they WONT be normalized/escaped
## Result in "$return_value"# both $1 and $2 are absolute paths beginning with /
src="$1"
target="$2"
common_part="$src"
result=""
while test "${target#$common_part}" = "${target}" ; do
#echo "common_part is now : \"$common_part\""
#echo "result is now : \"$result\""
#echo "target#common_part : \"${target#$common_part}\""
# no match, means that candidate common part is not correct
# go up one level (reduce common part)
common_part="$(dirname "$common_part")"
# and record that we went back
if test -z "$result" ; then
result=".."
else
result="../$result"
fi
done
#echo "common_part is : \"$common_part\""
if test "$common_part" = "/" ; then
# special case for root (no common path)
result="$result/"
fi
# since we now have identified the common part,
# compute the non-common part
forward_part="${target#$common_part}"
#echo "forward_part = \"$forward_part\""
if test -n "$result" && test -n "$forward_part" ; then
#echo "(simple concat)"
result="$result$forward_part"
elif test -n "$forward_part" ; then
#echo "(concat with slash removal)"
result="$(printf "%s" "$forward_part" | cut -c 1-)"
fi
printf "%s" "$result"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment