diff options
| author | Jack Jamison <jackqjamison@gmail.com> | 2026-07-25 15:18:41 -0400 |
|---|---|---|
| committer | Jack Jamison <jackqjamison@gmail.com> | 2026-07-25 15:18:41 -0400 |
| commit | f26b7ff8a83e93c073598120d0870b885672ca22 (patch) | |
| tree | 020edd3ed390f9f4535be0d03f5e0b290adc0137 /snag/src | |
| parent | 6b27d8c6ad1f0cbbb36775a0b8c4d462ac7f9929 (diff) | |
absolute paths to allow building
Diffstat (limited to 'snag/src')
| -rw-r--r-- | snag/src/build_db.c | 22 | ||||
| -rw-r--r-- | snag/src/cfg.c | 28 | ||||
| -rw-r--r-- | snag/src/cfg.h | 28 | ||||
| -rw-r--r-- | snag/src/main.c | 4 | ||||
| -rw-r--r-- | snag/src/package_db.c | 22 | ||||
| -rw-r--r-- | snag/src/source_db.c | 9 |
6 files changed, 81 insertions, 32 deletions
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); |
