aboutsummaryrefslogtreecommitdiff
path: root/src/build.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/build.c')
-rw-r--r--src/build.c82
1 files changed, 76 insertions, 6 deletions
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 <https://www.gnu.org/licenses/>.
+
+*/
+
#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;
}