aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2026-07-25 15:18:41 -0400
committerJack Jamison <jackqjamison@gmail.com>2026-07-25 15:18:41 -0400
commitf26b7ff8a83e93c073598120d0870b885672ca22 (patch)
tree020edd3ed390f9f4535be0d03f5e0b290adc0137
parent6b27d8c6ad1f0cbbb36775a0b8c4d462ac7f9929 (diff)
absolute paths to allow building
-rw-r--r--packages/swenu/swenu.sh3
-rw-r--r--snag/.gitignore1
-rw-r--r--snag/src/build_db.c22
-rw-r--r--snag/src/cfg.c28
-rw-r--r--snag/src/cfg.h28
-rw-r--r--snag/src/main.c4
-rw-r--r--snag/src/package_db.c22
-rw-r--r--snag/src/source_db.c9
8 files changed, 84 insertions, 33 deletions
diff --git a/packages/swenu/swenu.sh b/packages/swenu/swenu.sh
index f3c157f..dec9ff3 100644
--- a/packages/swenu/swenu.sh
+++ b/packages/swenu/swenu.sh
@@ -10,11 +10,12 @@ pkg_source_url="https://github.com/NAHTAIV3L/swenu/archive/refs/tags/$pkg_versio
pkg_source_checksum="22cf0055907efa0570d4108b87f34289fea3a4c9e95289708ce99cab902b2aab"
configure() {
- echo "configuring swenu..."
+ echo "nothing to configure..."
}
build() {
echo "building swenu..."
+ make
}
install() {
diff --git a/snag/.gitignore b/snag/.gitignore
index ca60f7e..d0aac39 100644
--- a/snag/.gitignore
+++ b/snag/.gitignore
@@ -1,5 +1,6 @@
/objs/
/build/
+/var/
*.o
snag
compile_flags.txt
diff --git a/snag/src/build_db.c b/snag/src/build_db.c
index 778ebd5..83bf6d9 100644
--- a/snag/src/build_db.c
+++ b/snag/src/build_db.c
@@ -1,7 +1,8 @@
#include "build_db.h"
-#include "source_db.h"
+#include "cfg.h"
#include "util.h"
+#include "source_db.h"
#include <poll.h>
#include <stdint.h>
@@ -14,11 +15,6 @@
#include <sys/stat.h>
#include <errno.h>
-const char build_db_path[] = "./var/snag/builds";
-const size_t build_db_path_len = strlen(build_db_path);
-
-#define PKG_BUILD_CMD "./scripts/run_pkg_build.sh"
-
#define API_MESSAGE_NONE 0
#define API_MESSAGE_FINISHED 1
#define API_MESSAGE_TEST 2
@@ -38,15 +34,15 @@ bool package_setup_build(const package_info_t* info, package_build_t* build) {
// create build info
memset(build, 0, sizeof(*build));
build->package = info;
- build->directory = vastrcat(build_db_path, "/", info->attrs.id, "-", timestamp_str);
+ build->directory = vastrcat(cfg.build_db, "/", info->attrs.id, "-", timestamp_str);
// create build directory
if (mkdir(build->directory, 0777) == -1) die("failed to create build directory: %s", strerror(errno));
// (re)create symlink to build directory
- char* symlink_name = vastrcat(build_db_path, "/", info->attrs.id);
+ char* symlink_name = vastrcat(cfg.build_db, "/", info->attrs.id);
if (unlink(symlink_name) == -1 && errno != ENOENT) die("failed to remove build symlink '%s': %s", symlink_name, strerror(errno));
- if (symlink(build->directory + build_db_path_len + 1, symlink_name) == -1) die("failed to create build symlink '%s': %s", symlink_name, strerror(errno));
+ if (symlink(build->directory + cfg.build_db_len + 1, symlink_name) == -1) die("failed to create build symlink '%s': %s", symlink_name, strerror(errno));
free(symlink_name);
// unpack package source (eventually this will be done by swenu api)
@@ -87,11 +83,11 @@ void build_run(const package_build_t* build) {
char buf2[1024];
snprintf(buf2, sizeof(buf2), "%d", api_to_sh[0]);
// exec into install script
- char* argv[] = { PKG_BUILD_CMD, buf1, buf2, build->package->script_path, NULL };
- char* envp[] = { NULL };
- execve(PKG_BUILD_CMD, argv, envp);
+ chdir(build->source_directory);
+ char* argv[] = { cfg.build_package_script, buf1, buf2, build->package->script_path, NULL };
+ execv(cfg.build_package_script, argv);
// what are you still doing here?
- die("CHILD - execve to %s failed: %s", PKG_BUILD_CMD, strerror(errno));
+ die("CHILD - execve to %s failed: %s", cfg.build_package_script, strerror(errno));
} else {
// parent proc, close write end of pipe
close(child_output[1]);
diff --git a/snag/src/cfg.c b/snag/src/cfg.c
new file mode 100644
index 0000000..f6b9a9d
--- /dev/null
+++ b/snag/src/cfg.c
@@ -0,0 +1,28 @@
+#include "cfg.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+cfg_t cfg = {0};
+
+void cfg_init() {
+
+ // local database paths for now
+
+ cfg.package_db = realpath("./var/snag/packages", NULL);
+ cfg.package_db_len = strlen(cfg.package_db);
+
+ cfg.source_db = realpath("./var/snag/sources", NULL);
+ cfg.source_db_len = strlen(cfg.source_db);
+
+ cfg.build_db = realpath("./var/snag/builds", NULL);
+ cfg.build_db_len = strlen(cfg.build_db);
+
+ cfg.install_db = realpath("./var/snag/installs", NULL);
+ cfg.install_db_len = strlen(cfg.install_db);
+
+ // local script paths for now
+ cfg.get_package_info_script = realpath("./scripts/get_pkg_attrs.sh", NULL);
+ cfg.build_package_script = realpath("./scripts/run_pkg_build.sh", NULL);
+ cfg.untar_script = realpath("./scripts/extract_tar_contents.sh", NULL);
+}
diff --git a/snag/src/cfg.h b/snag/src/cfg.h
new file mode 100644
index 0000000..52f4340
--- /dev/null
+++ b/snag/src/cfg.h
@@ -0,0 +1,28 @@
+#ifndef CFG_H
+#define CFG_H
+
+#include <stddef.h>
+
+typedef struct {
+ char* package_db;
+ size_t package_db_len;
+
+ char* source_db;
+ size_t source_db_len;
+
+ char* build_db;
+ size_t build_db_len;
+
+ char* install_db;
+ size_t install_db_len;
+
+ char* get_package_info_script;
+ char* build_package_script;
+ char* untar_script;
+} cfg_t;
+
+extern cfg_t cfg;
+
+void cfg_init();
+
+#endif
diff --git a/snag/src/main.c b/snag/src/main.c
index fb32298..efe5c14 100644
--- a/snag/src/main.c
+++ b/snag/src/main.c
@@ -1,6 +1,7 @@
#include "libargs/args.h"
#include "util.h"
+#include "cfg.h"
#include "package_db.h"
#include "build_db.h"
#include "source_db.h"
@@ -9,6 +10,9 @@ int cmd_install(char* cmd_name, ArgParser* parser);
int main(int argc, char* argv[]) {
+ // initialize config
+ cfg_init();
+
// create argument parser
ArgParser* parser = ap_new_parser();
if (parser == NULL) die("failed to initialize cli parsing");
diff --git a/snag/src/package_db.c b/snag/src/package_db.c
index 036e284..a04c47b 100644
--- a/snag/src/package_db.c
+++ b/snag/src/package_db.c
@@ -1,4 +1,6 @@
#include "package_db.h"
+
+#include "cfg.h"
#include "util.h"
#include <stdio.h>
@@ -8,12 +10,6 @@
#include <sys/wait.h>
#include <errno.h>
-#define PKG_INFO_CMD "./scripts/get_pkg_attrs.sh"
-
-// note: fixed location of package database for now
-const char pkg_db[] = "./var/snag/packages";
-const size_t pkg_db_len = sizeof(pkg_db) - 1;
-
bool load_package_info(char* pkgid, package_info_t* info) {
memset(info, 0, sizeof(*info));
@@ -21,12 +17,12 @@ bool load_package_info(char* pkgid, package_info_t* info) {
// construct package description directory path and ensure it exists
// pkg_dir = "pkg_db/pkgid"
- size_t pkg_dir_len = pkg_db_len + pkgid_len + 1;
+ size_t pkg_dir_len = cfg.package_db_len + pkgid_len + 1;
char* pkg_dir = emalloc(pkg_dir_len + 1, "pkg_dir");
{
- memcpy(pkg_dir, pkg_db, pkg_db_len);
- pkg_dir[pkg_db_len] = '/';
- memcpy(pkg_dir + pkg_db_len + 1, pkgid, pkgid_len);
+ 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) {
print("Package '%s' not found\n", pkgid);
@@ -66,11 +62,11 @@ bool load_package_info(char* pkgid, package_info_t* info) {
dup2(pipefds[1], STDOUT_FILENO);
close(pipefds[1]);
// exec into get attr script
- char* argv[] = { PKG_INFO_CMD, info->script_path, NULL };
+ char* argv[] = { cfg.get_package_info_script, info->script_path, NULL };
char* envp[] = { NULL };
- execve(PKG_INFO_CMD, argv, envp);
+ execve(cfg.get_package_info_script, argv, envp);
// what are you still doing here?
- die("CHILD - execve to %s failed: %s", PKG_INFO_CMD, strerror(errno));
+ die("CHILD - execve to %s failed: %s", cfg.get_package_info_script, strerror(errno));
} else {
// parent proc, close write end of pipe
close(pipefds[1]);
diff --git a/snag/src/source_db.c b/snag/src/source_db.c
index d49e0c4..75f2e61 100644
--- a/snag/src/source_db.c
+++ b/snag/src/source_db.c
@@ -1,5 +1,6 @@
#include "source_db.h"
+#include "cfg.h"
#include "util.h"
#include <curl/curl.h>
@@ -9,8 +10,6 @@
#include <unistd.h>
#include <errno.h>
-#define EXTRACT_TAR_SCRIPT "./scripts/extract_tar_contents.sh"
-
// libcrpyto context
EVP_MD_CTX *mdctx = NULL;
const EVP_MD *md = NULL;
@@ -20,9 +19,7 @@ void ensure_libcrypto();
CURL *curl = NULL;
void ensure_libcurl();
-// note: fixed location of source database for now
-const char source_db_path[] = "./var/snag/sources";
-char* get_source_path(const source_info_t* source) { return join_path(source_db_path, source->name); }
+char* get_source_path(const source_info_t* source) { return join_path(cfg.source_db, source->name); }
bool verify_source(source_info_t* source) {
// verify source exists
@@ -106,7 +103,7 @@ static size_t download_write_callback(char* ptr, size_t size, size_t nmemb, void
bool unpack_source(const source_info_t* source, char* dest_path) {
char* source_path = get_source_path(source);
- char* command = vastrcat(EXTRACT_TAR_SCRIPT, " ", source_path, " ", dest_path);
+ char* command = vastrcat(cfg.untar_script, " ", source_path, " ", dest_path);
// just run the unpack script. we can rewrite in c in the future
int ret = system(command);