Skip to content

Name the softfp world so makepkg can build in it - #184

Merged
frangarcj merged 1 commit into
masterfrom
softfp-arch-name
Aug 28, 2026
Merged

Name the softfp world so makepkg can build in it#184
frangarcj merged 1 commit into
masterfrom
softfp-arch-name

Conversation

@frangarcj

Copy link
Copy Markdown
Contributor

No package can be built in the softfp world today. The first attempt was this morning — 32e026c in vitasdk-autobuild put softfp in the try-build matrix — and both packages tried since died the same way before compiling anything:

vita-makepkg: line 381: unset: `provides_vita-softfp': not a valid identifier
==> ERROR: An unknown error has occurred. Exiting...

Why

merge_arch_attrs() in makepkg builds shell variable names out of CARCH:

for attr in "${supported_attrs[@]}"; do
    eval "$attr+=(\"\${${attr}_$CARCH[@]}\")"
done
unset -v "${supported_attrs[@]/%/_$CARCH}"

A hyphen makes that name unusable, and bash does not say so — it reads ${provides_vita-softfp[@]} as ${provides_vita-...}: the variable provides_vita, the - default-value operator, and the word softfp[@].

$ CARCH=vita-softfp; provides=(); eval "provides+=(\"\${provides_$CARCH[@]}\")"
$ printf 'provides=[%s]\n' "${provides[@]}"
provides=[softfp[@]]
$ unset -v "provides_$CARCH"
bash: unset: `provides_vita-softfp': not a valid identifier

So the literal string softfp[@] lands in all seven arrays — provides, conflicts, depends, replaces, optdepends, makedepends, checkdepends — and then the unset fails and makepkg aborts.

The abort is the lucky part. Without it every softfp package would have shipped with a fabricated depends=softfp[@].

pacman assumes architectures are identifiers and never says so: x86_64, aarch64, armv7h, i686 — nobody had reached for a hyphen.

What changes

The world is vita_softfp, and Profiles.cmake now refuses any profile name that would break the same way. The tag, repository and channel names are separate fields and keep their hyphens.

The published softfp core has CARCH="vita-softfp" stamped in bin/makepkg.conf, so it has to be rebuilt — it is a nightly, and nothing has been built against it.

🤖 Generated with Claude Code

makepkg turns CARCH into shell variable names -- depends_$CARCH,
provides_$CARCH and five more -- so a world name with a hyphen in it is
not a name makepkg can use. With CARCH=vita-softfp, bash reads
${provides_vita-softfp[@]} as ${provides_vita-...}: the variable
provides_vita with the default value 'softfp[@]'. It appends that
literal string to all seven arrays, and then the matching unset fails
because the identifier is invalid and makepkg aborts.

The abort is what saved us. Without it every softfp package would have
shipped with a fabricated depends=softfp[@].

pacman assumes architectures are identifiers -- x86_64, aarch64, armv7h
-- and never says so, because nobody had used a hyphen. So the world is
vita_softfp now, and Profiles.cmake refuses any name that would break
the same way.
@frangarcj
frangarcj merged commit 49c7878 into master Aug 28, 2026
10 of 13 checks passed
frangarcj added a commit to vitasdk/vitasdk-autobuild that referenced this pull request Aug 28, 2026
makepkg builds shell variable names out of CARCH, so nothing could be
built for a world whose name has a hyphen in it -- see
vitasdk/buildscripts#184 for what bash does with depends_vita-softfp.

The core moves with the name: sdk-vita_softfp-snapshot-20260828.667.1
stamps CARCH="vita_softfp" in bin/makepkg.conf and names the same
world in version_info.txt. Nothing was ever built against the old one.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant