[FIX] gcc: s390x installs to lib64, Arch expects lib
package_gcc() reached its very last step and stopped on one file: mv: cannot stat 'usr/lib/libgfortran.spec': No such file or directory The file exists, in usr/lib64/libgfortran.spec. lib64 is GCC's default MULTILIB_OSDIRNAMES for 64-bit Z, while Arch puts everything in usr/lib. So this is not one stray path: the whole package layout differs, and every _pick naming usr/lib would miss the same way. The trees are merged before any _pick runs, which leaves the upstream package definitions working unchanged rather than rewriting each path one at a time -- and keeps working if Arch adds a _pick later. curl now builds, with HTTP/3 disabled and patchelf on the host. --- FR --- package_gcc() atteignait sa toute derniere etape et s arretait sur un seul fichier : mv: cannot stat 'usr/lib/libgfortran.spec': No such file or directory Le fichier existe, dans usr/lib64/libgfortran.spec. lib64 est le MULTILIB_OSDIRNAMES par defaut de GCC pour Z en 64 bits, quand Arch place tout dans usr/lib. Ce n est donc pas un chemin isole : toute la disposition du paquet differe, et chaque _pick nommant usr/lib echouerait de la meme facon. Les arbres sont fusionnes avant le premier _pick, ce qui laisse les definitions amont fonctionner sans retouche plutot que de reecrire chaque chemin un a un -- et continue de tenir si Arch ajoute un _pick plus tard. curl se construit desormais, HTTP/3 desactive et patchelf pose sur l hote. Assisted-by: Claude Opus 5
This commit is contained in:
parent
115ea48fb4
commit
bcc6d63bed
1 changed files with 31 additions and 0 deletions
|
|
@ -94,6 +94,37 @@ sed -i '/_pick .*\/32\//d' PKGBUILD
|
||||||
# expands to the normal and the 32-bit path in one go. Deleting the line
|
# expands to the normal and the 32-bit path in one go. Deleting the line
|
||||||
# would lose the normal path too, so only the 32-bit alternative goes.
|
# would lose the normal path too, so only the 32-bit alternative goes.
|
||||||
sed -i 's|{,32/}||g; s|{,32}||g' PKGBUILD
|
sed -i 's|{,32/}||g; s|{,32}||g' PKGBUILD
|
||||||
|
|
||||||
|
# s390x GCC installs 64-bit libraries into usr/lib64; Arch's layout is usr/lib
|
||||||
|
# everywhere. package_gcc() therefore looked for files that were one directory
|
||||||
|
# away:
|
||||||
|
#
|
||||||
|
# mv: cannot stat 'usr/lib/libgfortran.spec': No such file or directory
|
||||||
|
#
|
||||||
|
# while the file sat in usr/lib64/libgfortran.spec. This is not one stray
|
||||||
|
# file -- lib64 is GCC's default MULTILIB_OSDIRNAMES for 64-bit Z, so the
|
||||||
|
# whole package layout is affected, and every _pick that names usr/lib would
|
||||||
|
# miss in the same way.
|
||||||
|
#
|
||||||
|
# The trees are merged before any _pick runs, which keeps the upstream
|
||||||
|
# package definitions working unchanged rather than rewriting each path.
|
||||||
|
python3 - <<'PY'
|
||||||
|
import io, re
|
||||||
|
s = io.open("PKGBUILD", encoding="utf-8").read()
|
||||||
|
merge = """ # s390x installs 64-bit libraries to lib64; Arch expects lib.
|
||||||
|
if [ -d usr/lib64 ]; then
|
||||||
|
mkdir -p usr/lib
|
||||||
|
cp -a usr/lib64/. usr/lib/
|
||||||
|
rm -rf usr/lib64
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
i = s.index(" _pick ")
|
||||||
|
s = s[:i] + merge + s[i:]
|
||||||
|
io.open("PKGBUILD", "w", encoding="utf-8").write(s)
|
||||||
|
PY
|
||||||
|
grep -q 'installs 64-bit libraries to lib64' PKGBUILD || {
|
||||||
|
echo "gcc: lib64 merge not inserted" >&2; exit 1; }
|
||||||
|
echo "gcc: lib64 merged into lib before packaging"
|
||||||
if grep -qE '_pick .*(\{,32|/32/)' PKGBUILD; then
|
if grep -qE '_pick .*(\{,32|/32/)' PKGBUILD; then
|
||||||
echo "gcc: a 32-bit _pick path remains" >&2; exit 1
|
echo "gcc: a 32-bit _pick path remains" >&2; exit 1
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue