From f113371523bc26e320e5ef8799e6ab123af9618e Mon Sep 17 00:00:00 2001 From: forever2k38 Date: Wed, 30 Sep 2026 22:01:45 +0200 Subject: initial install support, better readme, relicense, and more! --- src/build.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 6 deletions(-) (limited to 'src/build.c') diff --git a/src/build.c b/src/build.c index 5558720..3df8148 100644 --- a/src/build.c +++ b/src/build.c @@ -1,6 +1,28 @@ +/* + pow! - the pow!erful package manager + + Copyright (C) 2026 forever2k38 + + 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 2 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 "build.h" #include "package.h" +#include "log.h" #include "paths.h" +#include "package_list.h" #include "download.h" #include "lauxlib.h" @@ -12,7 +34,7 @@ int pow_package_build(pow_package *pkg) { if (pkg->pkg_ref == LUA_NOREF) { - printf("error! pkg_ref is equal to LUA_NOREF\n"); + pow_log_error("error! pkg_ref is equal to LUA_NOREF"); return 1; } @@ -24,31 +46,79 @@ int pow_package_build(pow_package *pkg) { int err = pow_create_dir_for_package(&tmp_path); if (err) { - printf("error creating temp dir for package\n"); + pow_log_error("error creating temp dir for package"); return 1; } if ((err = chdir(tmp_path))) { - printf("uh oh oops %d\n", err); + pow_log_error("uh oh oops %d", err); return 1; } - printf("building package %s\n", pkg->name); + pow_log_info("building package %s", pkg->name); if (pow_download_source(pkg->sources[0], tmp_path)) { - printf("failed to get sources\n"); + pow_log_error("failed to get sources"); return 1; } lua_getfield(pkg->L, -1, "build"); + + if (lua_isnil(pkg->L, -1)) { + pow_log_error("invalid package schema, build is not defined"); + + lua_pop(pkg->L, 1); + + return 1; + } + + if (!lua_isfunction(pkg->L, -1)) { + pow_log_error("invalid package schema, build is not a function"); + + lua_pop(pkg->L, 1); + + return 1; + } + + if (lua_pcall(pkg->L, 0, 0, 0) != LUA_OK) { + free(tmp_path); + + pow_log_error("error running script: %s", lua_tostring(pkg->L, -1)); + + lua_pop(pkg->L, 1); + + return 1; + } + + lua_getfield(pkg->L, -1, "install"); + + if (lua_isnil(pkg->L, -1)) { + pow_log_error("invalid package schema, install is not defined"); + + lua_pop(pkg->L, 1); + + return 1; + } + + if (!lua_isfunction(pkg->L, -1)) { + pow_log_error("invalid package schema, install is not a function"); + + lua_pop(pkg->L, 1); + + return 1; + } + + pow_log_info("build finished, installing"); if (lua_pcall(pkg->L, 0, 0, 0) != LUA_OK) { free(tmp_path); - printf("error running script: %s\n", lua_tostring(pkg->L, -1)); + pow_log_error("error running script: %s", lua_tostring(pkg->L, -1)); + + lua_pop(pkg->L, 1); return 1; } -- cgit v1.3