#include "build.h" #include "package.h" #include "log.h" #include "paths.h" #include "package_list.h" #include "download.h" #include "lauxlib.h" #include "lua.h" #include "lualib.h" #include "stdio.h" #include "stdlib.h" #include "unistd.h" int pow_package_build(pow_package *pkg) { if (pkg->pkg_ref == LUA_NOREF) { pow_log_error("error! pkg_ref is equal to LUA_NOREF"); return 1; } lua_rawgeti(pkg->L, LUA_REGISTRYINDEX, pkg->pkg_ref); char *tmp_path = NULL; int err = pow_create_dir_for_package(&tmp_path); if (err) { pow_log_error("error creating temp dir for package"); return 1; } if ((err = chdir(tmp_path))) { pow_log_error("uh oh oops %d", err); return 1; } pow_log_info("building package %s", pkg->name); if (pow_download_source(pkg->sources[0], tmp_path)) { 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); pow_log_error("error running script: %s", lua_tostring(pkg->L, -1)); lua_pop(pkg->L, 1); return 1; } free(tmp_path); fflush(stdout); return 0; }