Merge pull request #565 from flatcar/krnowak/weekly

common: Extend liblto link fixup function
This commit is contained in:
Krzesimir Nowak 2022-11-10 09:46:50 +01:00 committed by GitHub
commit 703b58770f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 18 deletions

View File

@ -189,7 +189,7 @@ emerge_to_image() {
# Make sure profile.env has been generated # Make sure profile.env has been generated
sudo -E ROOT="${root_fs_dir}" env-update --no-ldconfig sudo -E ROOT="${root_fs_dir}" env-update --no-ldconfig
fixup_liblto_softlinks "$root_fs_dir" fixup_gcc_config_softlinks "${root_fs_dir}"
# TODO(marineam): just call ${BUILD_LIBRARY_DIR}/check_root directly once # TODO(marineam): just call ${BUILD_LIBRARY_DIR}/check_root directly once
# all tests are fatal, for now let the old function skip soname errors. # all tests are fatal, for now let the old function skip soname errors.

View File

@ -295,7 +295,7 @@ fi
eclean-$BOARD -d packages eclean-$BOARD -d packages
fixup_liblto_softlinks "${BOARD_ROOT}" fixup_gcc_config_softlinks "${BOARD_ROOT}"
info "Checking build root" info "Checking build root"
test_image_content "${BOARD_ROOT}" test_image_content "${BOARD_ROOT}"

View File

@ -976,22 +976,37 @@ clean_qemu_static() {
esac esac
} }
# Fix up liblto softlink created by gcc-config # Fix up various softlinks created by gcc-config
fixup_liblto_softlinks() { fixup_gcc_config_softlinks() {
local root="$1" # root without trailing slashes, for / it will be empty
local root="${1%%*(/)}"
info "fixup_liblto_softlinks: Looking for broken softlinks in '${root}'" info "fixup_gcc_config_softlinks: Looking for broken softlinks in '${root}/'"
local link (
shopt -s nullglob
local files=(
"${root}"/usr/*/binutils-bin/lib/bfd-plugins/liblto_plugin.so
"${root}"/usr/*/*/binutils-bin/lib/bfd-plugins/liblto_plugin.so
"${root}"/usr/bin/*-cc
)
local file
local target local target
# check both native (/usr/CHOST/) as well as cross compile (/usr/CHOST/CTARGET) paths local new_target
{ ls -l "${root}/"usr/*/binutils-bin/lib/bfd-plugins/liblto_plugin.so 2>/dev/null || :; for file in "${files[@]}"; do
ls -l "${root}/"usr/*/*/binutils-bin/lib/bfd-plugins/liblto_plugin.so 2>/dev/null || :; } \ if [[ ! -L "${file}" ]]; then
| sed 's:.* \([^[:space:]]\+\) -> \([^[:space:]]\+\):\1 \2:' \ # not a symlink, ignore
| while read link target; do continue
local newtarget=$(echo "$target" | sed "s:${root}:/:") fi
info " Fixing up broken $link -> $target" target=$(readlink "${file}")
info " sudo ln -sf $newtarget $link" new_target=${target/#${root}}
sudo ln -sf $newtarget $link if [[ "${target}" == "${new_target}" ]]; then
# nothing to fix, ignore
continue
fi
info " Fixing up broken symlink '${file}' -> '${target}'"
info " sudo ln -sf '${new_target}' '${file}'"
sudo ln -sf "${new_target}" "${file}"
done done
)
} }