The config.guess file needs to know about the SerenityOS `uname -m`
system name if we want to build ports inside Serenity. Support was only
added in January 2022, so most ports don't have a new enough version
yet.
This commit adds facilities for fetching a fresh config.guess file that
supports SerenityOS, similarly to what we do for config.sub. As its
first user, we make the bash port buildable inside the system.
We don't have a perl port, so let's use GNU sed's in-place option for
doing substitutions when running inside Serenity.
Note that we can't do this unconditionally, as `sed -i` is not portable
and works differently on BSD systems.
We now download a versioned tarball instead of the latest release to
avoid breaking the port build due to a signature mismatch when a new
version is released.
This depends on both the `libmpeg2` and `libmad` ports. Since `monkey4`
is currently an experimental engine in ScummVM, we need to explicitly
enable it during configuration.
Relying on host tools working correctly is not a good idea, as they may
be outdated (and therefore not support features like RELR relocations)
or may not exist at all (like objcopy on macOS).
While troubleshooting why gdb wasn't working when attempting to debug
serenity programs I noticed two things:
- The contract of serenity's `waitpid(..)` appears to be slightly
different than the generic ptrace target expects. We need to make
sure we pass `WSTOPPED`, and it can return different errno values
that we would want to re-try on.
- The contract of serenity's `ptrace(..)` implementation appears to
diverge as well, as we are expected to call `PT_ATTACH` before we
call `PT_CONTINUE`, otherwise `ptrace(..)` will just error out.
These two patches fix the behavior of wait and mourn_inferior so that
they work as expected on serenity and allow us to attach and then wait
for a process to exit while running under gdb.
This also switches to checking out a specific commit instead of just the
master HEAD, as the port linter requires a hash (which is imo pointless
in this case), and we can't provide a stable hash for the master branch
HEAD.
When I did a fresh build of ports, I got this while building fontconfig:
```
checking for FREETYPE... no
configure: error: Package requirements (freetype2 >= 21.0.15) were not
met:
No package 'freetype2' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables FREETYPE_CFLAGS
and FREETYPE_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
```
When a git patch that doesn't apply is encountered, start a git am
session and _then_ drop the user in it instead of expeting the user to
start the session on their own.
Also prompt for leftover files and delete them if the user does not want
them.
This hash format offers faster symbol lookup than the System V hash.
We've been using it in all our shared libraries for a long time, but did
not have it enabled by default in our toolchain, so ports couldn't make
use of it.
Before this change, our dynamic linker's global constructor handler
relied on the GNU linker implicitly including the content of `.ctors`
section inside `.init_array`. The mold linker does not do this, so
global constructors would fail to be called in the mold-built userland.
There is no point in sticking to `.ctors`, as most other systems already
use the superior `.init_array` scheme. This commit changes the kernel
linker script to not discard this new section, and enables it by default
in our toolchain.
The new `use_fresh_config_sub` option puts the config.sub in the root of
the tree, but `readline` puts it in the `support/` folder. So we need to
tell the ports infrastructure to place the file in that folder.