diff --git a/patches/ninja/jinx-working-patch.patch b/patches/ninja/jinx-working-patch.patch
new file mode 100644
index 00000000..606d3a17
--- /dev/null
+++ b/patches/ninja/jinx-working-patch.patch
@@ -0,0 +1,36 @@
+diff --git ninja-clean/configure.py ninja-workdir/configure.py
+index 03b5ce4..66af21a 100755
+--- ninja-clean/configure.py
++++ ninja-workdir/configure.py
+@@ -65,16 +65,21 @@ class Platform(object):
+ self._platform = 'os400'
+ elif self._platform.startswith('dragonfly'):
+ self._platform = 'dragonfly'
++ elif self._platform.startswith('astral'):
++ self._platform = 'astral'
+
+ @staticmethod
+ def known_platforms() -> List[str]:
+ return ['linux', 'darwin', 'freebsd', 'openbsd', 'solaris', 'sunos5',
+ 'mingw', 'msvc', 'gnukfreebsd', 'bitrig', 'netbsd', 'aix',
+- 'dragonfly']
++ 'dragonfly', 'astral']
+
+ def platform(self) -> str:
+ return self._platform # type: ignore # Incompatible return value type
+
++ def is_astral(self) -> bool:
++ return self._platform == 'astral'
++
+ def is_linux(self) -> bool:
+ return self._platform == 'linux'
+
+@@ -108,7 +113,7 @@ class Platform(object):
+
+ def supports_ppoll(self) -> bool:
+ return self._platform in ('freebsd', 'linux', 'openbsd', 'bitrig',
+- 'dragonfly')
++ 'dragonfly', 'astral')
+
+ def supports_ninja_browse(self) -> bool:
+ return (not self.is_windows()
diff --git a/patches/parted/jinx-working-patch.patch b/patches/parted/jinx-working-patch.patch
new file mode 100644
index 00000000..85c9a916
--- /dev/null
+++ b/patches/parted/jinx-working-patch.patch
@@ -0,0 +1,639 @@
+diff --git parted-clean/configure parted-workdir/configure
+index 7b7b1fd..7f6404f 100755
+--- parted-clean/configure
++++ parted-workdir/configure
+@@ -5323,6 +5323,7 @@ case "$host_os" in
+ linux*|uclinux*) OS=linux ;;
+ gnu*) OS=gnu ;;
+ beos*) OS=beos ;;
++ astral*) OS=astral ;;
+ *) as_fn_error $? "Unknown or unsupported OS \"$host_os\". Only \"linux\", \"uclinux\", \"gnu\" and \"beos\" are supported in this version of GNU Parted." "$LINENO" 5 ;;
+ esac
+
+diff --git parted-workdir/libparted/arch/astral.c parted-workdir/libparted/arch/astral.c
+new file mode 100644
+index 0000000..2989679
+--- /dev/null
++++ parted-workdir/libparted/arch/astral.c
+@@ -0,0 +1,558 @@
++/*
++ libparted - a library for manipulating disk partitions
++ Copyright (C) 2006-2007, 2009-2014, 2019-2023 Free Software Foundation,
++ Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see .
++*/
++
++#include
++
++#include
++#include
++
++/* POSIX headers */
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include "../architecture.h"
++
++#define _(str) (str)
++
++#define ASTRAL_SPECIFIC(dev) ((struct astral_specific *) (dev)->arch_specific)
++
++struct astral_specific {
++ int fd;
++};
++
++#define BLOCK_TYPE_DISK 0
++#define BLOCK_TYPE_PART 1
++
++#define BLOCK_IOCTL_GETDESC 0xb10ccd35c
++
++struct astral_blockdesc {
++ void *filler;
++ int type;
++ uintmax_t lbaoffset;
++ size_t blockcapacity;
++ size_t blocksize;
++ void *filler2[2];
++};
++
++static int
++_do_fsync (PedDevice* dev)
++{
++ struct astral_specific* arch_specific = ASTRAL_SPECIFIC (dev);
++ int status;
++ PedExceptionOption ex_status;
++
++ while (1) {
++ status = fsync (arch_specific->fd);
++ if (status >= 0) break;
++
++ ex_status = ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
++ _("%s during write on %s"),
++ strerror (errno), dev->path);
++
++ switch (ex_status) {
++ case PED_EXCEPTION_IGNORE:
++ return 1;
++
++ case PED_EXCEPTION_RETRY:
++ break;
++
++ case PED_EXCEPTION_UNHANDLED:
++ ped_exception_catch ();
++ /* FALLTHROUGH */
++ case PED_EXCEPTION_CANCEL:
++ return 0;
++ default:
++ PED_ASSERT (0);
++ break;
++ }
++ }
++ return 1;
++}
++
++static int
++_device_init_blkdev(PedDevice* dev)
++{
++ int type;
++ struct astral_blockdesc desc;
++ int fd = open(dev->path, O_RDONLY);
++ if (fd < 0)
++ return 0;
++
++ if (ioctl(fd, BLOCK_IOCTL_GETDESC, &desc) < 0)
++ goto error;
++
++ close (fd);
++
++ dev->length = desc.blockcapacity;
++ dev->sector_size = dev->phys_sector_size = desc.blocksize;
++
++ /* XXX: We have no way to get this! */
++ dev->bios_geom.sectors = 63;
++ dev->bios_geom.heads = 255;
++ int cyl_size = dev->bios_geom.sectors * dev->bios_geom.heads;
++ dev->bios_geom.cylinders = dev->length / cyl_size
++ * (dev->sector_size / PED_SECTOR_SIZE_DEFAULT);
++ dev->hw_geom = dev->bios_geom;
++ dev->model = strdup("Disk device");
++
++ // determine type
++
++ if (dev->path && strstr(dev->path, "nvme"))
++ return PED_DEVICE_NVME;
++
++ return PED_DEVICE_UNKNOWN;
++error:
++ close(fd);
++ return 0;
++}
++
++static int
++_device_init_file(PedDevice* dev, struct stat* dev_statp)
++{
++ if (!dev_statp->st_size)
++ return 0;
++
++ dev->sector_size =
++ dev->phys_sector_size = PED_SECTOR_SIZE_DEFAULT;
++
++ dev->length = dev_statp->st_size / PED_SECTOR_SIZE_DEFAULT;
++
++ dev->bios_geom.cylinders = dev->length / (4 * 32);
++ dev->bios_geom.heads = 4;
++ dev->bios_geom.sectors = 32;
++ dev->hw_geom = dev->bios_geom;
++
++ dev->model = strdup(_("Disk Image"));
++
++ return PED_DEVICE_FILE;
++}
++
++static int
++_device_init(PedDevice* dev)
++{
++ struct stat dev_stat;
++ int type = 0;
++
++ /* Check if we're a regular file */
++ if (stat(dev->path, &dev_stat) < 0)
++ goto done;
++
++ if (S_ISBLK(dev_stat.st_mode))
++ type = _device_init_blkdev(dev);
++ else if (S_ISREG(dev_stat.st_mode))
++ type = _device_init_file(dev,&dev_stat);
++
++done:
++ return type;
++}
++
++
++static PedDevice*
++astral_new (const char* path)
++{
++ struct stat stat_info;
++ PedDevice* dev;
++
++ PED_ASSERT(path != NULL);
++
++ dev = (PedDevice*) ped_malloc (sizeof (PedDevice));
++ if (!dev)
++ goto error;
++
++ dev->path = strdup(path);
++ if (!dev->path)
++ goto error_free_dev;
++
++ dev->arch_specific
++ = (struct astral_specific *) ped_malloc(sizeof(struct astral_specific));
++ if (dev->arch_specific == NULL)
++ goto error_free_path;
++
++ dev->open_count = 0;
++ dev->read_only = 0;
++ dev->external_mode = 0;
++ dev->dirty = 0;
++ dev->boot_dirty = 0;
++
++ if ((dev->type=_device_init(dev)) <= 0)
++ goto error_free_arch_specific;
++
++ /* All OK! */
++ return dev;
++
++error_free_arch_specific:
++ free (dev->arch_specific);
++
++error_free_path:
++ free (dev->path);
++
++error_free_dev:
++ free (dev);
++
++error:
++ return NULL;
++}
++
++static void
++astral_destroy (PedDevice* dev)
++{
++ free (dev->arch_specific);
++ free (dev->path);
++ free (dev->model);
++ free (dev);
++}
++
++static int
++astral_is_busy (PedDevice* dev)
++{
++ return 1;
++}
++
++static int
++astral_open (PedDevice* dev)
++{
++ struct astral_specific *arch_specific = ASTRAL_SPECIFIC(dev);
++
++retry:
++ arch_specific->fd = open(dev->path, O_RDWR);
++ if (arch_specific->fd == -1) {
++ char* rw_error_msg = strerror(errno);
++
++ arch_specific->fd = open (dev->path, O_RDONLY);
++ if (arch_specific->fd == -1) {
++ if (ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_RETRY_CANCEL,
++ _("Error opening %s: %s"),
++ dev->path, strerror (errno))
++ != PED_EXCEPTION_RETRY) {
++ return 0;
++ } else {
++ goto retry;
++ }
++ } else {
++ ped_exception_throw (
++ PED_EXCEPTION_WARNING,
++ PED_EXCEPTION_OK,
++ _("Unable to open %s read-write (%s). %s has "
++ "been opened read-only."),
++ dev->path, rw_error_msg, dev->path);
++ dev->read_only = 1;
++ }
++ } else {
++ dev->read_only = 0;
++ }
++
++ _do_fsync (dev);
++
++ return 1;
++}
++
++static int astral_refresh_open (PedDevice* dev)
++{
++ return 1;
++}
++
++static int astral_close (PedDevice* dev)
++{
++ struct astral_specific *arch_specific = ASTRAL_SPECIFIC(dev);
++
++ if (dev->dirty)
++ _do_fsync(dev);
++
++ close (arch_specific->fd);
++
++ return 1;
++}
++
++static int astral_refresh_close (PedDevice* dev)
++{
++ if (dev->dirty)
++ _do_fsync(dev);
++
++ return 1;
++}
++
++static int astral_read (const PedDevice* dev, void* buffer, PedSector start, PedSector count)
++{
++ struct astral_specific *arch_specific = ASTRAL_SPECIFIC(dev);
++ int status;
++ PedExceptionOption ex_status;
++ size_t read_length = count * dev->sector_size;
++
++ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
++
++ /* First, try to seek */
++ while(1)
++ {
++ if (lseek(arch_specific->fd, start * dev->sector_size, SEEK_SET)
++ == start * dev->sector_size)
++ break;
++
++ ex_status = ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
++ _("%s during seek for read on %s"),
++ strerror (errno), dev->path);
++
++ switch (ex_status)
++ {
++ case PED_EXCEPTION_IGNORE:
++ return 1;
++ case PED_EXCEPTION_RETRY:
++ break /* out of switch */;
++ case PED_EXCEPTION_UNHANDLED:
++ ped_exception_catch ();
++ case PED_EXCEPTION_CANCEL:
++ return 0;
++ }
++ }
++
++ /* If we seeked ok, now is the time to read */
++ while (1)
++ {
++ status = read(arch_specific->fd, buffer, read_length);
++ if (status == count * dev->sector_size)
++ break;
++
++ if (status > 0)
++ {
++ read_length -= status;
++ buffer += status;
++ continue;
++ }
++
++ ex_status = ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
++ _("%s during read on %s"),
++ strerror (errno),
++ dev->path);
++
++ switch (ex_status)
++ {
++ case PED_EXCEPTION_IGNORE:
++ return 1;
++ case PED_EXCEPTION_RETRY:
++ break;
++ case PED_EXCEPTION_UNHANDLED:
++ ped_exception_catch ();
++ case PED_EXCEPTION_CANCEL:
++ return 0;
++ }
++ }
++
++ return 1;
++}
++
++static int astral_write (PedDevice* dev, const void* buffer, PedSector start,
++ PedSector count)
++{
++ struct astral_specific *arch_specific = ASTRAL_SPECIFIC(dev);
++ int status;
++ PedExceptionOption ex_status;
++ size_t write_length = count * dev->sector_size;
++
++ PED_ASSERT(dev->sector_size % PED_SECTOR_SIZE_DEFAULT == 0);
++
++ if (dev->read_only)
++ {
++ if (ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_IGNORE_CANCEL,
++ _("Can't write to %s, because it is opened read-only."),
++ dev->path)
++ != PED_EXCEPTION_IGNORE)
++ return 0;
++ else
++ return 1;
++ }
++
++ while(1)
++ {
++ if (lseek(arch_specific->fd,start * dev->sector_size,SEEK_SET)
++ == start * dev->sector_size)
++ break;
++
++ ex_status = ped_exception_throw (
++ PED_EXCEPTION_ERROR, PED_EXCEPTION_RETRY_IGNORE_CANCEL,
++ _("%s during seek for write on %s"),
++ strerror (errno), dev->path);
++
++ switch (ex_status)
++ {
++ case PED_EXCEPTION_IGNORE:
++ return 1;
++ case PED_EXCEPTION_RETRY:
++ break;
++ case PED_EXCEPTION_UNHANDLED:
++ ped_exception_catch ();
++ case PED_EXCEPTION_CANCEL:
++ return 0;
++ }
++ }
++
++#ifdef READ_ONLY
++ printf ("ped_device_write (\"%s\", %p, %d, %d)\n",
++ dev->path, buffer, (int) start, (int) count);
++#else
++ dev->dirty = 1;
++ while(1)
++ {
++ status = write (arch_specific->fd, buffer, write_length);
++ if (status == count * dev->sector_size)
++ break;
++
++ if (status > 0)
++ {
++ write_length -= status;
++ buffer += status;
++ continue;
++ }
++
++ ex_status = ped_exception_throw (
++ PED_EXCEPTION_ERROR,
++ PED_EXCEPTION_RETRY_IGNORE_CANCEL,
++ _("%s during write on %s"),
++ strerror (errno), dev->path);
++
++ switch (ex_status)
++ {
++ case PED_EXCEPTION_IGNORE:
++ return 1;
++ case PED_EXCEPTION_RETRY:
++ break;
++ case PED_EXCEPTION_UNHANDLED:
++ ped_exception_catch ();
++ case PED_EXCEPTION_CANCEL:
++ return 0;
++ }
++ }
++#endif /* !READ_ONLY */
++
++ return 1;
++}
++
++static PedSector astral_check (PedDevice* dev, void* buffer, PedSector start, PedSector count)
++{
++ struct astral_specific* arch_specific = ASTRAL_SPECIFIC(dev);
++ PedSector done = 0;
++ int status;
++
++ PED_ASSERT(dev != NULL);
++
++ if (lseek(arch_specific->fd, start * dev->sector_size, SEEK_SET)
++ != start * dev->sector_size)
++ return 0;
++
++ for (done = 0; done < count; done += status / dev->sector_size)
++ {
++ status = read (arch_specific->fd, buffer,
++ (size_t) ((count-done) * dev->sector_size));
++ if (status < 0)
++ break;
++ }
++
++ return done;
++}
++
++static int astral_sync (PedDevice* dev)
++{
++ if (dev->read_only)
++ return 1;
++ if (!_do_fsync (dev))
++ return 0;
++
++ return 1;
++}
++
++/* Probe for all available disks */
++static void astral_probe_all(void) {
++ DIR *dir = opendir("/dev/");
++ if (!dir)
++ return;
++
++ struct dirent *dent = readdir(dir);
++ struct stat stat;
++ while (dent) {
++ char full_path[100];
++ snprintf(full_path, 100, "/dev/%s", dent->d_name);
++ if (stat(full_path, &stat) == 0 && S_ISBLK(stat.st_mode) && major(stat.st_rdev) == 7) {
++ // figure out if this is a disk
++ int f = open(full_path, O_RDONLY);
++ struct astral_blockdesc desc = {0};
++ if (ioctl(f, BLOCK_IOCTL_GETDESC, &desc) == 0 && desc.type == BLOCK_TYPE_DISK)
++ _ped_device_probe(full_path);
++ }
++
++ dent = readdir(dir);
++ }
++
++ closedir(dir);
++}
++
++static char* astral_partition_get_path (const PedPartition* part)
++{
++ return NULL;
++}
++
++static int astral_partition_is_busy (const PedPartition* part)
++{
++ return 0;
++}
++
++static int astral_disk_commit (PedDisk* disk)
++{
++ return 0;
++}
++
++static PedDeviceArchOps astral_dev_ops = {
++ _new: astral_new,
++ destroy: astral_destroy,
++ is_busy: astral_is_busy,
++ open: astral_open,
++ refresh_open: astral_refresh_open,
++ close: astral_close,
++ refresh_close: astral_refresh_close,
++ read: astral_read,
++ write: astral_write,
++ check: astral_check,
++ sync: astral_sync,
++ sync_fast: astral_sync,
++ probe_all: astral_probe_all
++};
++
++static PedDiskArchOps astral_disk_ops = {
++ partition_get_path: astral_partition_get_path,
++ partition_is_busy: astral_partition_is_busy,
++ disk_commit: astral_disk_commit
++};
++
++PedArchitecture ped_astral_arch = {
++ dev_ops: &astral_dev_ops,
++ disk_ops: &astral_disk_ops
++};
+diff --git parted-clean/libparted/architecture.c parted-workdir/libparted/architecture.c
+index 4020f98..0126e39 100644
+--- parted-clean/libparted/architecture.c
++++ parted-workdir/libparted/architecture.c
+@@ -34,6 +34,9 @@ ped_set_architecture ()
+ #elif defined(__BEOS__)
+ extern PedArchitecture ped_beos_arch;
+ const PedArchitecture* arch = &ped_beos_arch;
++#elif defined(__astral__)
++ extern PedArchitecture ped_astral_arch;
++ const PedArchitecture* arch = &ped_astral_arch;
+ #else
+ extern PedArchitecture ped_gnu_arch;
+ const PedArchitecture* arch = &ped_gnu_arch;
+diff --git parted-clean/libparted/libparted.c parted-workdir/libparted/libparted.c
+index 204ce00..1b72255 100644
+--- parted-clean/libparted/libparted.c
++++ parted-workdir/libparted/libparted.c
+@@ -76,7 +76,6 @@ extern void ped_disk_pc98_init ();
+ extern void ped_disk_sun_init ();
+ extern void ped_disk_amiga_init ();
+ extern void ped_disk_dasd_init ();
+-extern void ped_disk_atari_init ();
+
+ static void
+ init_disk_types ()
+@@ -87,7 +86,6 @@ init_disk_types ()
+ #if defined __s390__ || defined __s390x__
+ ped_disk_dasd_init();
+ #endif
+- ped_disk_atari_init (); /* easy false positives, so probe others first */
+ ped_disk_sun_init ();
+ #ifdef ENABLE_PC98
+ ped_disk_pc98_init ();
+@@ -146,7 +144,6 @@ extern void ped_disk_pc98_done ();
+ extern void ped_disk_sun_done ();
+ extern void ped_disk_amiga_done ();
+ extern void ped_disk_dasd_done ();
+-extern void ped_disk_atari_done ();
+
+ static void
+ done_disk_types ()
+@@ -166,7 +163,6 @@ done_disk_types ()
+ ped_disk_bsd_done ();
+ ped_disk_amiga_done ();
+ ped_disk_aix_done ();
+- ped_disk_atari_done ();
+ }
+
+ static void _init() __attribute__ ((constructor));
+diff --git parted-clean/libparted/unit.c parted-workdir/libparted/unit.c
+index a63b98d..01f46fb 100644
+--- parted-clean/libparted/unit.c
++++ parted-workdir/libparted/unit.c
+@@ -248,7 +248,7 @@ ped_unit_format_custom_byte (const PedDevice* dev, PedSector byte, PedUnit unit)
+ (w < 100.) ? 1 :
+ 0 ;
+
+-#ifdef __BEOS__
++#if defined(__BEOS__) || defined(__astral__)
+ snprintf (buf, 100, "%.*f%s", p, d, ped_unit_get_name(unit));
+ #else
+ snprintf (buf, 100, "%1$.*2$f%3$s", d, p, ped_unit_get_name (unit));
diff --git a/patches/readline/jinx-working-patch.patch b/patches/readline/jinx-working-patch.patch
index 07753db5..44a76d62 100644
--- a/patches/readline/jinx-working-patch.patch
+++ b/patches/readline/jinx-working-patch.patch
@@ -1,7 +1,8 @@
-diff -ruN readline-clean/support/config.sub readline/support/config.sub
---- readline-clean/support/config.sub 2022-10-14 16:21:57.553229749 -0300
-+++ readline/support/config.sub 2022-10-14 16:22:12.479896273 -0300
-@@ -1723,7 +1723,7 @@
+diff --git readline-clean/support/config.sub readline-workdir/support/config.sub
+index 9b62e37..12d8ea2 100644
+--- readline-clean/support/config.sub
++++ readline-workdir/support/config.sub
+@@ -1723,7 +1723,7 @@ case $os in
# Now accept the basic system types.
# The portable systems comes first.
# Each alternative MUST end in a * to match a version number.
@@ -10,3 +11,29 @@ diff -ruN readline-clean/support/config.sub readline/support/config.sub
| *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
| hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
| sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+diff --git readline-clean/support/shlib-install readline-workdir/support/shlib-install
+index 661355d..8c14919 100644
+--- readline-clean/support/shlib-install
++++ readline-workdir/support/shlib-install
+@@ -118,7 +118,7 @@ INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2'
+ # Create symlinks to the installed library. This section is incomplete.
+ #
+ case "$host_os-$host_vendor" in
+-*linux*|freebsd*|dragonfly*)
++*linux*|freebsd*|dragonfly*|astral*)
+ # libname.so.M -> libname.so.M.N
+ ${echo} ${RM} ${INSTALLDIR}/$LINK2
+ if [ -z "$uninstall" ]; then
+diff --git readline-clean/support/shobj-conf readline-workdir/support/shobj-conf
+index cd7634d..c72d34a 100644
+--- readline-clean/support/shobj-conf
++++ readline-workdir/support/shobj-conf
+@@ -123,7 +123,7 @@ sunos5*|solaris2*)
+ ;;
+
+ # All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd.
+-linux*-*|gnu*-*|k*bsd*-gnu-*|midnightbsd*|freebsd*|dragonfly*)
++linux*-*|gnu*-*|k*bsd*-gnu-*|midnightbsd*|freebsd*|dragonfly*|astral*)
+ SHOBJ_CFLAGS=-fPIC
+ SHOBJ_LD='${CC}'
+ SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
diff --git a/patches/util-linux/jinx-working-patch.patch b/patches/util-linux/jinx-working-patch.patch
new file mode 100644
index 00000000..effe9a54
--- /dev/null
+++ b/patches/util-linux/jinx-working-patch.patch
@@ -0,0 +1,33 @@
+diff --git util-linux-clean/Makefile.am util-linux-workdir/Makefile.am
+index 01e9970..7660be9 100644
+--- util-linux-clean/Makefile.am
++++ util-linux-workdir/Makefile.am
+@@ -84,7 +84,7 @@ EXTRA_DIST =
+ CLEANFILES =
+ DISTCLEANFILES =
+
+-SUBDIRS = po
++SUBDIRS = #po
+
+ RCS_FIND_IGNORE = \( -name SCCS -o -name BitKeeper -o -name .svn -o \
+ -name CVS -o -name .pc -o -name .hg -o -name .git \) -prune -o
+@@ -120,7 +120,6 @@ include lsfd-cmd/Makemodule.am
+ include pam_lastlog2/Makemodule.am
+ include bash-completion/Makemodule.am
+ include man-common/Makemodule.am
+-include po-man/Makemodule.am
+
+ include Documentation/Makemodule.am
+ include tests/Makemodule.am
+diff --git util-linux-clean/configure.ac util-linux-workdir/configure.ac
+index d1c1840..a860cc9 100644
+--- util-linux-clean/configure.ac
++++ util-linux-workdir/configure.ac
+@@ -3110,7 +3110,6 @@ libmount/src/libmount.h
+ libsmartcols/docs/Makefile
+ libsmartcols/docs/version.xml
+ libsmartcols/src/libsmartcols.h
+-po/Makefile.in
+ ])
+
+ AC_OUTPUT
diff --git a/patches/xz/jinx-working-patch.patch b/patches/xz/jinx-working-patch.patch
deleted file mode 100644
index 7d80954d..00000000
--- a/patches/xz/jinx-working-patch.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git xz-clean/src/xz/message.c xz-workdir/src/xz/message.c
-index abf30ad..4331696 100644
---- xz-clean/src/xz/message.c
-+++ xz-workdir/src/xz/message.c
-@@ -149,8 +149,8 @@ message_init(void)
- sa.sa_handler = &progress_signal_handler;
-
- for (size_t i = 0; message_progress_sigs[i] != 0; ++i)
-- if (sigaction(message_progress_sigs[i], &sa, NULL))
-- message_signal_handler();
-+ if (sigaction(message_progress_sigs[i], &sa, NULL)) ;
-+ //message_signal_handler();
- #endif
-
- return;
-diff --git xz-clean/src/xz/signals.c xz-workdir/src/xz/signals.c
-index 7aef463..6ea2540 100644
---- xz-clean/src/xz/signals.c
-+++ xz-workdir/src/xz/signals.c
-@@ -105,8 +105,8 @@ signals_init(void)
- continue;
-
- // Establish the signal handler.
-- if (sigaction(sigs[i], &my_sa, NULL))
-- message_signal_handler();
-+ if (sigaction(sigs[i], &my_sa, NULL)) ;
-+ // message_signal_handler();
- }
-
- signals_are_initialized = true;
diff --git a/recipes/e2fsprogs b/recipes/e2fsprogs
index 7451fef6..a5229702 100644
--- a/recipes/e2fsprogs
+++ b/recipes/e2fsprogs
@@ -2,11 +2,11 @@ name=e2fsprogs
revision=1
from_source=e2fsprogs
imagedeps="build-essential"
-hostdeps="xgcc xbinutils"
-deps="base"
+hostdeps="xgcc xbinutils pkgconfig libtool"
+deps="base libuuid"
configure() {
- ${source_dir}/configure --host=x86_64-astral --prefix=${prefix}
+ ${source_dir}/configure --host=x86_64-astral --prefix=${prefix} --disable-libuuid
}
build() {
diff --git a/recipes/libuuid b/recipes/libuuid
new file mode 100644
index 00000000..256af57f
--- /dev/null
+++ b/recipes/libuuid
@@ -0,0 +1,26 @@
+name=libuuid
+revision=1
+from_source=util-linux
+imagedeps="build-essential python3 python3-dev"
+hostrundeps="automake autoconf xgcc xbinutils libstdc++-v3 pkgconfig libtool"
+deps="base gmp mpfr mpc binutils python"
+
+configure() {
+ cp -rp ${source_dir}/* .
+ rm -rf po
+ #./configure --host=x86_64-astral --prefix=${prefix} --enable-libuuid --enable-elf-shlibs --enable-subset
+ ./configure --host=x86_64-astral --prefix=${prefix} --enable-libuuid --disable-all-programs --enable-po --disable-nls --disable-static
+}
+
+#build() {
+# make -j ${parallelism} libuuid.la
+#}
+
+package() {
+ make DESTDIR="${dest_dir}" install
+ mv -v ${dest_dir}/lib/* ${dest_dir}/${prefix}/lib
+ rm -r ${dest_dir}/lib
+ rm ${dest_dir}/${prefix}/lib/libuuid.so{,.1}
+ ln -sv libuuid.so.1.3.0 ${dest_dir}/${prefix}/lib/libuuid.so.1
+ ln -sv libuuid.so.1 ${dest_dir}/${prefix}/lib/libuuid.so
+}
diff --git a/recipes/meson b/recipes/meson
new file mode 100644
index 00000000..830d2392
--- /dev/null
+++ b/recipes/meson
@@ -0,0 +1,14 @@
+name=meson
+from_source=meson
+revision=1
+hostdeps="python"
+deps="base"
+
+build() {
+ cp -rp ${source_dir}/* .
+}
+
+package() {
+ /usr/bin/env python3 setup.py install --prefix=${prefix} --root=${dest_dir}
+ sed -i -e 's/\/usr\/local\/bin\/python3/\/usr\/bin\/env python3/g' ${dest_dir}/${prefix}/bin/meson
+}
diff --git a/recipes/ninja b/recipes/ninja
new file mode 100644
index 00000000..c85a80c7
--- /dev/null
+++ b/recipes/ninja
@@ -0,0 +1,23 @@
+name=ninja
+from_source=ninja
+revision=1
+hostdeps="xgcc xbinutils pkgconfig libstdc++-v3"
+imagedeps="build-essential python3"
+deps="base"
+
+configure() {
+ CC=x86_64-astral-gcc CXX=x86_64-astral-g++ LD=x86_64-astral-g++ python3 ${source_dir}/configure.py --verbose --platform astral --host astral
+}
+
+build() {
+ ninja
+}
+
+package() {
+ mkdir -p ${dest_dir}/${prefix}/bin/
+ mkdir -p ${dest_dir}/${prefix}/share/bash-completion/completions
+ mkdir -p ${dest_dir}/${prefix}/share/zsh/site-functions
+ install -vm755 ninja ${dest_dir}/${prefix}/bin/ninja
+ install -vDm644 ${source_dir}/misc/bash-completion ${dest_dir}/${prefix}/share/bash-completion/completions/ninja
+ install -vDm644 ${source_dir}/misc/zsh-completion ${dest_dir}/${prefix}/share/zsh/site-functions/_ninja
+}
diff --git a/recipes/parted b/recipes/parted
new file mode 100644
index 00000000..3c70f3cf
--- /dev/null
+++ b/recipes/parted
@@ -0,0 +1,19 @@
+name=parted
+revision=1
+from_source=parted
+imagedeps="build-essential"
+hostdeps="xgcc xbinutils pkgconfig libtool"
+deps="base ncurses libuuid readline"
+
+configure() {
+ cp -rp ${source_dir}/* .
+ ./configure --host=x86_64-astral --prefix=${prefix} --disable-device-mapper --disable-nls --enable-shared --disable-static
+}
+
+build() {
+ make -j ${parallelism}
+}
+
+package() {
+ make install DESTDIR=${dest_dir}
+}
diff --git a/recipes/python b/recipes/python
index bed9944f..c19a5795 100644
--- a/recipes/python
+++ b/recipes/python
@@ -3,12 +3,12 @@ revision=1
from_source=python
imagedeps="build-essential zlib1g-dev"
hostdeps="xgcc xbinutils pkgconfig python"
-deps="base"
+deps="base zlib"
configure() {
echo "ac_cv_file__dev_ptmx=yes" > /tmp/configsite
echo "ac_cv_file__dev_ptc=no" >> /tmp/configsite
- CONFIG_SITE=/tmp/configsite ${source_dir}/configure --prefix=${prefix} --host=x86_64-astral --build=x86_64 --with-build-python=python3 --disable-ipv6 --enable-shared
+ CONFIG_SITE=/tmp/configsite ${source_dir}/configure --prefix=${prefix} --host=x86_64-astral --build=x86_64 --disable-ipv6 --enable-shared
}
build() {
diff --git a/recipes/readline b/recipes/readline
index 8447319b..1a4b7713 100644
--- a/recipes/readline
+++ b/recipes/readline
@@ -2,7 +2,7 @@ name=readline
revision=1
from_source=readline
imagedeps="build-essential"
-hostdeps="xgcc xbinutils"
+hostdeps="xgcc xbinutils libtool pkgconfig"
deps="base ncurses"
configure() {
diff --git a/recipes/xz b/recipes/xz
new file mode 100644
index 00000000..f54abffd
--- /dev/null
+++ b/recipes/xz
@@ -0,0 +1,18 @@
+name=xz
+revision=1
+from_source=xz
+imagedeps="build-essential"
+hostdeps="xgcc xbinutils pkgconfig libtool"
+deps="base"
+
+configure() {
+ ${source_dir}/configure --host=x86_64-astral --prefix=${prefix} --disable-static
+}
+
+build() {
+ make -j ${parallelism}
+}
+
+package() {
+ make install DESTDIR=${dest_dir}
+}
diff --git a/source-recipes/frigg b/source-recipes/frigg
index 32aacbdc..f2a96e8f 100644
--- a/source-recipes/frigg
+++ b/source-recipes/frigg
@@ -1,8 +1,8 @@
name=frigg
-version=91ada7d4e12b9e73a454e7be13919e989444faa2
+version=f44b5e821c7d83fbe5189850045f262d544acd8b
source_method=tarball
tarball_url="https://github.com/managarm/frigg/archive/${version}.tar.gz"
-tarball_sha512=d7011bcb0b2adfe88968de7cf9080fc71664725784491e66266b34b7fd83c2e3005f8ba7b530116075a7f5f7b31103af9aef1b32dab3143ed9ae3a247d2aa655
+tarball_sha512=56b5d134630dd653db063bdc6f4ea7f48f7a106f28315acbaea4008b064a52794abd9a8251d5551a50de94b65be5670499ab3fc63f184947871ebe09e955a9c3
prepare() {
true
diff --git a/source-recipes/meson b/source-recipes/meson
new file mode 100644
index 00000000..0f71c75b
--- /dev/null
+++ b/source-recipes/meson
@@ -0,0 +1,9 @@
+name=meson
+version=1.9.0
+source_method=tarball
+tarball_url="https://github.com/mesonbuild/meson/archive/refs/tags/${version}.tar.gz"
+tarball_sha512=ecd69b6734be14c467f7db67dd88c0e57ebfad83ce3ddada131ff3e43ac964523e1083d7c7f3803033a9a76adbc32ad26dd2e3aca69884269000ca64130bde07
+
+prepare() {
+ true
+}
diff --git a/source-recipes/ninja b/source-recipes/ninja
new file mode 100644
index 00000000..ca47f74c
--- /dev/null
+++ b/source-recipes/ninja
@@ -0,0 +1,9 @@
+name=ninja
+version=1.13.1
+source_method=tarball
+tarball_url="https://github.com/ninja-build/ninja/archive/refs/tags/v${version}.tar.gz"
+tarball_sha512=ec94d42967b962d66ab0747fcb9d095510117159de0473ec08df47a657895aa2523f920798e4608d0c6cf0e2e382512c14aec8a54ea58b6cd4b01edd3a7c8e62
+
+prepare() {
+ true
+}
diff --git a/source-recipes/parted b/source-recipes/parted
new file mode 100644
index 00000000..d4ea3b01
--- /dev/null
+++ b/source-recipes/parted
@@ -0,0 +1,10 @@
+name=parted
+version=3.6
+source_method=tarball
+tarball_url="https://ftpmirror.gnu.org/gnu/parted/parted-${version}.tar.xz"
+tarball_sha512=034a44b25718acba175212019d24f092972a791c5bd1d921ae91e17478657a77c5c5dd0c832bed7968c3a07ec6c65c0785acfac2f90c1ca5e1692f3c141693ef
+hostdeps="libtool automake autoconf pkgconfig"
+
+prepare() {
+ cp -v $(find /usr/local/share/automake* -name config.sub) build-aux
+}
diff --git a/source-recipes/util-linux b/source-recipes/util-linux
new file mode 100644
index 00000000..9dfb89fa
--- /dev/null
+++ b/source-recipes/util-linux
@@ -0,0 +1,10 @@
+name=util-linux
+version=2.41.1
+source_method=tarball
+tarball_url="https://github.com/util-linux/util-linux/archive/refs/tags/v${version}.tar.gz"
+tarball_sha512="cada3b2c4b19be00265bd984fe74d49d75a62e14be8df89010068ee65022c252eeb08b98ec1cdf1951e2981ea3864f1837428cb089f1c2317fe2fd44d8135bcc"
+hostdeps="automake autoconf libtool pkgconfig"
+
+prepare() {
+ autoreconf -fvi
+}
diff --git a/source-recipes/xz b/source-recipes/xz
new file mode 100644
index 00000000..c52c5fe0
--- /dev/null
+++ b/source-recipes/xz
@@ -0,0 +1,10 @@
+name=xz
+version=5.8.1
+source_method=tarball
+tarball_url="https://github.com/tukaani-project/xz/releases/download/v${version}/xz-${version}.tar.gz"
+tarball_sha512=151b2a47fdf00274c4fd71ceada8fb6c892bdac44070847ebf3259e602b97c95ee5ee88974e03d7aa821ab4f16d5c38e50dfb2baf660cf39c199878a666e19ad
+hostdeps="autoconf automake libtool pkgconfig"
+
+prepare() {
+ autoreconf -fvi
+}