aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/xdemineur/string.patch10
-rw-r--r--packages/xdemineur/xdemineur.sh25
-rwxr-xr-xsnag/scripts/run_pkg_build.sh1
-rw-r--r--snag/src/build_db.c11
-rw-r--r--snag/src/package.h1
-rw-r--r--snag/src/package_db.c30
6 files changed, 61 insertions, 17 deletions
diff --git a/packages/xdemineur/string.patch b/packages/xdemineur/string.patch
new file mode 100644
index 0000000..e56296e
--- /dev/null
+++ b/packages/xdemineur/string.patch
@@ -0,0 +1,10 @@
+--- main.c 1999-08-01 22:57:46.000000000 +0200
++++ newmain.c 2026-09-17 17:28:16.911113144 +0200
+@@ -21,6 +21,7 @@
+ #include <stdlib.h>
+ #include <sysexits.h>
+ #include <time.h>
++#include <string.h>
+
+ #include "demineur.h"
+ #include "xdemineur.h"
diff --git a/packages/xdemineur/xdemineur.sh b/packages/xdemineur/xdemineur.sh
new file mode 100644
index 0000000..bb921b7
--- /dev/null
+++ b/packages/xdemineur/xdemineur.sh
@@ -0,0 +1,25 @@
+pkg_id=xdemineur
+pkg_name="xdémineur"
+pkg_desc="a minesweeper game for the X Window System"
+pkg_webpage="https://www.babafou.eu.org/xdemineur/"
+pkg_license="MIT-CMU"
+pkg_version="2.1.1"
+
+pkg_source_name="xdemineur-$pkg_version.tar.gz"
+pkg_source_url="https://www.babafou.eu.org/xdemineur/xdemineur-$pkg_version.tar.gz"
+pkg_source_checksum="593824412a208a1b75d5b15745a271dc3eba330d41f7718f4826567d04bcbb9b"
+
+# NOTE: requires horrible x imake thing
+
+configure() {
+ patch main.c < $descdir/string.patch
+ xmkmf
+}
+
+build() {
+ make -j16
+}
+
+install() {
+ make DESTDIR="$root" install
+}
diff --git a/snag/scripts/run_pkg_build.sh b/snag/scripts/run_pkg_build.sh
index 5b98cfd..17079bc 100755
--- a/snag/scripts/run_pkg_build.sh
+++ b/snag/scripts/run_pkg_build.sh
@@ -26,6 +26,7 @@ IFS= read -r data 0<&"$api_recv"
echo "data=$data"
root=$(getvar root)
+descdir=$(getvar descdir)
# load the description script
. $3
diff --git a/snag/src/build_db.c b/snag/src/build_db.c
index ad68be5..06099f6 100644
--- a/snag/src/build_db.c
+++ b/snag/src/build_db.c
@@ -86,7 +86,7 @@ bool set_child_sandbox(const package_build_t* build) {
if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, cfg.build_package_script, &path_beneath)) {
return false;
}
- if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, build->package->script_path, &path_beneath)) {
+ if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, build->package->desc_dir, &path_beneath)) {
return false;
}
path_beneath.allowed_access =
@@ -139,7 +139,8 @@ bool set_child_sandbox(const package_build_t* build) {
LANDLOCK_ACCESS_FS_MAKE_FIFO |
LANDLOCK_ACCESS_FS_MAKE_BLOCK |
LANDLOCK_ACCESS_FS_MAKE_SYM |
- LANDLOCK_ACCESS_FS_TRUNCATE;
+ LANDLOCK_ACCESS_FS_TRUNCATE |
+ LANDLOCK_ACCESS_FS_EXECUTE;
if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, "/tmp", &path_beneath)) {
return false;
}
@@ -281,6 +282,12 @@ void build_run(const package_build_t* build) {
write(api_to_sh[1], tmp, strlen(tmp));
free(tmp);
}
+ if (strncmp(buf, "descdir", sizeof("descdir") - 1) == 0) {
+ char* tmp = vastrcat(build->package->desc_dir, "\n");
+ write(api_to_sh[1], tmp, strlen(tmp));
+ free(tmp);
+ }
+ // failure, failed to work (asked for bad var)
break;
case API_MESSAGE_NONE:
break;
diff --git a/snag/src/package.h b/snag/src/package.h
index 54009c1..d8f591e 100644
--- a/snag/src/package.h
+++ b/snag/src/package.h
@@ -10,6 +10,7 @@ typedef struct {
} source_info_t;
typedef struct {
+ char* desc_dir;
char* script_path;
struct {
char buffer[4069];
diff --git a/snag/src/package_db.c b/snag/src/package_db.c
index a04c47b..f2a105e 100644
--- a/snag/src/package_db.c
+++ b/snag/src/package_db.c
@@ -16,35 +16,35 @@ bool load_package_info(char* pkgid, package_info_t* info) {
size_t pkgid_len = strlen(pkgid);
// construct package description directory path and ensure it exists
- // pkg_dir = "pkg_db/pkgid"
- size_t pkg_dir_len = cfg.package_db_len + pkgid_len + 1;
- char* pkg_dir = emalloc(pkg_dir_len + 1, "pkg_dir");
+ // desc_dir = "pkg_db/pkgid"
+ size_t desc_dir_len = cfg.package_db_len + pkgid_len + 1;
+ info->desc_dir = emalloc(desc_dir_len + 1, "desc_dir");
{
- memcpy(pkg_dir, cfg.package_db, cfg.package_db_len);
- pkg_dir[cfg.package_db_len] = '/';
- memcpy(pkg_dir + cfg.package_db_len + 1, pkgid, pkgid_len);
- pkg_dir[pkg_dir_len] = '\0';
- if (access(pkg_dir, F_OK) != 0) {
+ memcpy(info->desc_dir, cfg.package_db, cfg.package_db_len);
+ info->desc_dir[cfg.package_db_len] = '/';
+ memcpy(info->desc_dir + cfg.package_db_len + 1, pkgid, pkgid_len);
+ info->desc_dir[desc_dir_len] = '\0';
+ if (access(info->desc_dir, F_OK) != 0) {
print("Package '%s' not found\n", pkgid);
- free(pkg_dir);
+ free(info->desc_dir);
return false;
}
}
// construct package description script path and ensure it exists
- // script_path = "pkg_dir/pkgid.sh"
- size_t script_path_len = pkg_dir_len + pkgid_len + 4;
+ // script_path = "desc_dir/pkgid.sh"
+ size_t script_path_len = desc_dir_len + pkgid_len + 4;
info->script_path = emalloc(script_path_len + 1, "info->script_path");
{
- memcpy(info->script_path, pkg_dir, pkg_dir_len);
- info->script_path[pkg_dir_len] = '/';
- memcpy(&info->script_path[pkg_dir_len + 1], pkgid, pkgid_len);
+ memcpy(info->script_path, info->desc_dir, desc_dir_len);
+ info->script_path[desc_dir_len] = '/';
+ memcpy(&info->script_path[desc_dir_len + 1], pkgid, pkgid_len);
memcpy(&info->script_path[script_path_len - 3], ".sh", 3);
info->script_path[script_path_len] = '\0';
- free(pkg_dir);
if (access(info->script_path, F_OK) != 0) {
print("Package '%s' broken, doesn't have description script\n", pkgid);
free(info->script_path);
+ free(info->desc_dir);
return false;
}
}