/* pkgit - package it! Copyright (C) 2026 dacctal 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 #include #include #include #include "add_repo.h" #include "build.h" #include "fetch_src.h" #include "files.h" #include "install_pkg.h" #include "lua_state.h" #include "name_from_url.h" #include "vars.h" void install_pkg(Pkg pkg) { if (is_directory(pkg.src)) { if (!is_forced) { if (is_verbose) printf( "%s %s is already installed.\n", print_skipped, pkg.name ); return; } else { if (is_verbose) printf( "%s %s is already installed.\n", print_warning, pkg.name ); } } char cwd[MAX_PATH_LEN]; getcwd(cwd, MAX_PATH_LEN); if (strcmp(pkg.src, cwd) != 0) chdir(pkg.src); if (pkg.is_local) { cpdir(cwd, pkg.src); } else { printf( "%s fetching %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); fetch_src(pkg); if (is_verbose) printf( "%s fetched %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); } printf( "%s building %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); build(pkg); if (is_verbose) printf( "%s built %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); printf( "%s installing %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); bool install_success = false; if (!install_success && repo_install(pkg.name, pkg.target)) install_success = true; if (!install_success && bldit_install(pkg.target)) install_success = true; if (!install_success && config_install(pkg.src, pkg.target)) install_success = true; if (!install_success) { printf( "%s no install function availible for package: %s\n", print_error, pkg.name ); return; } printf( "%s installed %s%s%s\n", print_success, green, pkg.name, color_reset ); bool repo_exists = false; for (size_t i = 0; i < cached_repos_count; i++) { char *repo_name = name_from_url(cached_repos[i].source_key); if (strcmp(repo_name, pkg.name) == 0) { repo_exists = true; } free(repo_name); } if (!repo_exists) { printf( "%s adding %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); if (pkg.url && strlen(pkg.url) > 0) { add_repo(pkg.url, pkg.name); } printf( "%s added %s%s%s\n", print_pkgit, green, pkg.name, color_reset ); } else { if (is_verbose) printf("%s repo already exists, done\n", print_pkgit); } }