We don't support hashes from external files (anymore), downloading
another file for integrity validation is pointless. As as result, these
two ports would refuse to build as their hashes were missing.
Fixes#6645.
Without a SONAME gcc will put the whole library path into executables
which link against these libraries:
$ readelf -d Root/usr/local/games/openttd
Dynamic section at offset 0xf0747c contains 32 entries:
Tag Type Name/Value
0x00000001 (NEEDED) [libgcc_s.so]
0x00000001 (NEEDED) [/serenity/Build/i686/Root/usr/local/lib/libpng.so]
0x00000001 (NEEDED) [/serenity/Build/i686/Root/usr/local/lib/libz.so]
0x00000001 (NEEDED) [/serenity/Build/i686/Root/usr/local/lib/liblzma.so]
0x00000001 (NEEDED) [libSDL2-2.0.so.1]
0x00000001 (NEEDED) [libicui18n.so.69]
0x00000001 (NEEDED) [libicuuc.so.69]
0x00000001 (NEEDED) [libicudata.so.69]
0x00000001 (NEEDED) [libpthread.so]
0x00000001 (NEEDED) [libm.so]
0x00000001 (NEEDED) [libc.so]
This causes the executable to fail because the dynamic linker
tries to find the library in the incorrect path.
I have my environment configured to use https://pre-commit.com/.
I guess the scripts were changed recently to lint all ports, and
the python port was barfing on my system because of this bug.
Commit b3db01e20 broke simple commands without arguments like:
./package.sh clean
Now, all available arguments are passed along, even if there are none.
This adds support for detecting incorrect version numbers and links
in the ports list.
Also, unlike before it doesn't parse the package.sh script but executes
it instead which allows us to detect syntax errors.
The hash for the master zip file changed again. Probably because
GitLab only caches those zip files for a bit and re-generates them
with slightly different zip headers after some time even though
the repository didn't change.
The new message for skipping builds makes it hard to
distinguish failed builds from builds that were just skipped
so change it back to the old one - but don't actually build
packages twice again.
This unbreaks the ScummVM port build. Some `[[noreturn]]` keywords were
added to `<assert.h>` recently and this required an additional flag to
the ScummVM configure script to fix.
Also removed the now unnecessary `export LIBS`.
Previously we'd end up building some ports multiple times, e.g.
as a dependency for another port. This changes the build_all.sh
script so that it builds ports only once.
we need to link against LibCrypt and subsubsequently LibCore (which
LibCrypt does not link against itself due to a circular dependency
issue).
Not sure why this broke, it worked when I last updated the port.
- Replaced /Root with
- Improved documentation.
- Removed a few typos.
- Replaced with
- Added brackets in some cases.
Most of the changes were reviewed and applied manually.
- SERENITY_ROOT is being kept around for compatibility reasons, and will
be removed gradually
- SERENITY_INSTALL_ROOT points to DESTDIR but will be preferred over
that in the future
- SERENITY_SOURCE_DIR points to the root folder of the repository. Let's
keep the root terminology in the directory structure sort of sense out
of here
When building with ccache these ports failed to build because
CC contains more than one word.
The ncurses port also doesn't like how ccache preprocesses
files. This patch fixes that.
This port was still using the upstream's master branch as opposed to
a fixed git commit.
Also, now that SDL2 is installed into /usr/local the build failed.
I have also removed an obsolete patch because we're now linking
against shared libraries for SDL2 and those already have appropriate
library dependencies.
This manually builds shared libraries for a bunch of ports. Using
libtool would be preferable but that's currently broken so I'm
linking the shared libraries manually.
According to @Baitinq the original port crashed with audio enabled.
I suspect that this was because the SDL2 headers didn't match between
the host and target system. Now that we properly use target's headers
this is no longer an issue so I enabled audio:
https://www.youtube.com/watch?v=ZTFvrcpZjY8
I was trying to port openttd which I ultimately gave up on because
too much of the C++ standard library's functionality is missing at this
point. The libicu library was a dependency for that.
In its current state the libicu port is not thread-safe because of
missing functionality in the C++ standard library (mainly std::mutex,
std::condition_variable, etc.).
This is useful for ports which depend on running tools on the host system.
In this case we can build the port twice - once for the host and once for
the target system.
I'd rather use libtool to build the library but that would
require more extensive changes to the configure script
and maybe even libtool itself. So instead I just build
it manually.
install-ports copys the necessary files from Ports/ to /usr/Ports. Also
refactor the compiler and destiation variables from .port_include.sh
into .hosted_defs.sh. .hosted_defs.sh does not exists when ports are
built in serenity
The flatbuffers library is a serialization library, created by Google
for game development and performance-critical applications.
It aims to be fast and efficient.
This commit creates a port of it to SerenityOS.
The flatbuffers build process generates three things: some header files,
a library (libflatbuffers) and a schema compiler (flatc).
There are tests, but they are not compiled, because it runs the
flatbuffers schema compiler, one of the things we are cross-compiling.
The compiler will not run because the target is different from the host
the opus and modplug music libraries.
Previously it wasnt compiling as we do not have ports of those
libraries. I have also changed the install location of the library so it
installs under /usr/include/SDL2 instead of /usr/local/include/SDL2.
This patch fixes the m4 port by removing unneeded make subdirs that
would cause the build to fail on some systems. We now only care about
the `lib` and `src`.
This patch allows for a verbose argument to be passed
so that the build output of the individual builds
is printed to stdout instead of /dev/null to help with diagnosing errors
If the verbose argument is not passed the old behaviour is preserved
and the build output is printed to /dev/null
No idea how this is supposed to work, because git's buildscripts execute
'uname -S' to determine which functions are available - and that's not how
cross-compilation works.
This library will allow us to port more multimedia programs and games,
since it's a common dependency of such projects. I was looking at
Scummvm's dependencies in particular, with a goal of porting them all
eventually, so that we can have Myst running in Serenity!
Our TLS implementation relies on the TLS model being "initial-exec".
We previously enforced this by adding the '-ftls-model=initial-exec'
flag in the root CmakeLists file, but that did not affect ports - So
now we put that flag in the gcc spec files.
Closes#5366
We now follow a common capitalization throughout the project:
./Ports/openssh/ReadMe.md
./Ports/python3/patches/ReadMe.md
./Ports/ReadMe.md
./Meta/Lagom/ReadMe.md
./ReadMe.md
This filename is still obvious enough to be seen immediately.
Attempting to import C-extensions (lib-dynload/*.so) currently asserts
in the dynamic loader - let's just build them statically instead for the
time being.
This makes a large number of modules available for use and the port a
lot more functional! :^)
There's pre_configure to do things required by the configure script,
let's also add post_configure for things not covered by the configure
script.
The specific use case is overwriting a file created by python3's
configure script.
When removing and recreating the Build directory, it's quite annoying
having to edit/remove Ports/packages.db as the installer won't install
previously installed port dependencies again if they're still listed.
This problem is easily solved by just considering packages.db a
build-specific file.
This adds a separate Markdown document comtaining a table with all
available ports, including name, version number and website.
This should make it easier to get an overview of what's available or
learn more about ports one is not familiar with, as well as checking the
current version of each port (many are outdated by now, and the version
being hidden in the package.sh script doesn't improve that situation)
and spotting ports with no defined version (i.e. install from the main
branch), which can break easily and should be avoided.
Please keep this list in sync when adding or updating ports. :^)
- Remove superfluous function overrides and use makeopts instead
- Remove superfluous installopts
- Use run rather than cd'ing manually
- Ensure empty line between functions
The current version of our Python port (3.6.0) is over four years old by
now and has (or had, I haven't actually tried it in a while) some
limitations - time for an upgrade! The latest Python release is 3.9.1,
so I used that version. It's a from-scratch port, no patches are taken
from the previous port to ensure the smallest possible amount of code is
patched. The BuildPython.sh script is useful so I kept it, with some
tweaks. I added a short document explaining each patch to ease judging
their underlying problem and necessity in the future.
Compared to the old Python port, this one does support both the time
module as well as threading (at least _thread) just fine. Importing
modules written in C (everything in /usr/local/lib/python3.9/lib-dynload)
currently asserts in Serenity's dynamic loader, which is unfortunate but
probably solvable. Possibly related to #4642. I didn't try building
Python statically, which might be one possibility to circumvent this
issue.
I also renamed the directory to just "python3", which is analogous to
the Python 3.x package most Linux distributions provide. That implicitly
means that we likely will not support multiple versions of the Python
port at any given time, but again, neither do many other systems by
default. Recent versions are usually backwards compatible anyway though,
so having the latest shouldn't be a problem.
On the other hand bumping the version should now be be as simple as
updating the variables in version.sh, given that no new patches are
required.
These core modules to currently not build - I chose to ignore that for
now rather than adding more patches to make them work somehow, which
means they're fully unavailable. This should probably be fixed in
Serenity itself.
_ctypes, _decimal, _socket, mmap, resource, termios
These optional modules requiring 3rd-party dependencies do currently not
build (even with depends="ncurses openssl zlib"). Especially the absence
of a readline port makes the REPL a bit painful to use. :^)
_bz2, _curses, _curses_panel, _dbm, _gdbm, _hashlib, _lzma, _sqlite3,
_ssl, _tkinter, _uuid, nis, ossaudiodev, readline, spwd, zlib
I did some work on LibC and LibM beforehand to add at least stubs of
missing required functions, it still encounters an ASSERT_NOT_REACHED()
/ TODO() every now and then, notably frexp() (implementations of that
can be found online easily if you want to get that working right now).
But then again that's our fault and not this port's. :^)
Let's keep things consistent, .diff is the name we use pretty much
everywhere. Also tweak the glob in .port_includes.sh to be
'patches/*.patch' rather than just 'patches/*'.
* Add SERENITY_ARCH option to CMake for selecting the target toolchain
* Port all build scripts but continue to use i686
* Update GitHub Actions cache to include BuildIt.sh
This is a very WIP port bringing stress-ng to SerenityOS.
stress-ng is great at doing multi-workload stress testing, this allows it to
find unique and interesting intermixed pairs of stressful operations which cause bugs.
This initial port just rips out an non applicable functionality in order to get
the port to compile.
For now, only the non-standard _SC_NPROCESSORS_CONF and
_SC_NPROCESSORS_ONLN are implemented.
Use them to make ninja pick a better default -j value.
While here, make the ninja package script not fail if
no other port has been built yet.
Now that a "jq" port is available we can re-enable CPU name detection in
neofetch and don't need to use "read" for extracting values from
/proc/memstat anymore :^)
We don't really have a good way of parsing and processing JSON in the
shell yet, and the solution used for /proc/memstat (read) is very
limited and doesn't work for the more complex /proc/cpuinfo array. Let's
disable cpu detection in neofetch for now until we can come up with a
good solution.
- 1.8.2 for now, newer versions need high-res timestamp file APIs
which serenity doesn't have yet
- pselect() instead of ppoll() for now, same reason (depends on #2609)
- no good default for -j yet (see nproc.patch)
- `-l` probably doesn't work yet (see loadavg.patch), but I've never
used that anyways
- some minor include patches that I've also sent upstream
Other than that, this seems to work reasonably well. It currently
produces some spam on stdout from probably the shell.
This is very basic and doesn't support many features. Instead
of describing what it *doesn't* support, I'll describe what I
have tested:
1. Public key authentication (password is not supported)
2. Single command execution
3. PTY-less interactive bash shell (/bin/sh doesn't work)
4. Multi-user (i.e you can ssh as 'anon' as well as root)
Obviously we don't support many of the common terminals as we're missing
X11, Qt, WxWidgets, Cairo etc. - but at least the "dumb" terminal
(ASCII output) and "canvas" terminal (generates JS to plot on a HTML
<canvas>) are confirmed to be working :^)
This is useful if we want to do something after patching but before
running the configure script - e.g. creating the configure script using
another script :^)
This ensures that ./configure results are actually used by the build.
This way, Python picks up the new sizeof(time_t) (which is 8), and
the build succeeds.
This patch refreshes the openssl port and makes it build the utilities
in apps/, e.g. the openssl utility.
Now you can do this from Serenity:
$ openssl s_client -connect example.org:443
...
GET / HTTP/1.1
Host: example.org
<HTTP response here>
The download URL was bit-rotten and needed a fix.
I've added a post_install step to the system that allows you to run
arbitrary commands after the regular install step.
This allows scripts that start with "#!/bin/bash" to work in Serenity.
There are various issues with this port that need to be fixed, but it's
at least possible to inspect and modify the SerenityOS repo if I clone
it into the disk image from the outside.
Very cool! :^)
This is causing build errors for myself and a few other people.
This config option disables the SDL2 port from trying to compile
with the JACK audio server (which we don't need).
* Use ${version} instead of explicit version numbers in urls/filenames
* Move -L option to port script, as this is always good
* Fix some various other stuff
* Add authenticity methods: sig, asc, md5sum, sha1sum, sha256sum
* Split patch into own step
* Improve extraction and patching: only do it, if it hasn't already be done,
to do that, hidden files are created when a file is extracted or a patch is
applied
* Patch function is named patched_internal to not overwrite patch command in /usr/bin
Turns out the reason GCC wasn't as smart about startup code for
shared objects as we hoped is because nobody told it to be :D
Change the STARTFILE_SPEC and ENDFILE_SPEC in gcc/config/serenity.h to
skip crt0.o and to link the S variants of crtbegin
and crtend for shared objects.
Because we're using the crtbegin and crtend from libgcc, also tell
libgcc in libgcc/config.host to compile crtbeginS and crtendS from
crtstuff.c.