aboutsummaryrefslogtreecommitdiff
path: root/src/create_pkg.c
diff options
context:
space:
mode:
authordacctal <dacctal@symlinx.net>2026-06-11 20:07:13 +0000
committerdacctal <dacctal@symlinx.net>2026-06-11 20:07:13 +0000
commitd057a68a837d278f5dfe55a5dc3c4998e4f126f5 (patch)
tree2ab65bbca01943bbfc36bade64b20771f7e28da9 /src/create_pkg.c
parent12fc304f6627dabb2e907582b1ea724c9cad2297 (diff)
cpdir checkpoint
Diffstat (limited to 'src/create_pkg.c')
-rw-r--r--src/create_pkg.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/create_pkg.c b/src/create_pkg.c
index 36e9d10..cf92f75 100644
--- a/src/create_pkg.c
+++ b/src/create_pkg.c
@@ -4,13 +4,13 @@
#include <unistd.h>
#include "create_pkg.h"
+#include "files.h"
#include "lua_state.h"
#include "name_from_url.h"
#include "vars.h"
-Pkg create_pkg(const char *arg, const char *target) {
+Pkg create_pkg(const char *arg) {
Pkg pkg = {0};
- pkg.target = target;
pkg.ver = "HEAD";
pkg.is_local = false;
@@ -23,10 +23,17 @@ Pkg create_pkg(const char *arg, const char *target) {
char *new_arg = strdup(arg);
if (!new_arg) exit(EXIT_FAILURE);
char *argver = strchr(new_arg, '@');
+ char *argtrg = strchr(new_arg, ',');
if (argver) {
pkg.ver = argver + 1;
*argver = '\0';
}
+ if (argtrg) {
+ pkg.target = argtrg + 1;
+ *argtrg = '\0';
+ } else {
+ pkg.target = "default";
+ }
bool is_in_repos = false;
for (size_t i = 0; i < cached_repos_count; i++) {
@@ -42,7 +49,7 @@ Pkg create_pkg(const char *arg, const char *target) {
} else if (strcmp(new_arg, ".") == 0) {
pkg.url = "";
getcwd(pkg.src, MAX_PATH_LEN);
- pkg.name = name_from_url(pkg.url);
+ pkg.name = name_from_url(pkg.src);
pkg.is_local = true;
} else if (is_in_repos) {
for (size_t i = 0; i < cached_repos_count; i++) {
@@ -53,20 +60,27 @@ Pkg create_pkg(const char *arg, const char *target) {
}
pkg.name = strdup(new_arg);
} else {
- printf("%s'%s' is not a valid package\n", print_error, new_arg);
+ printf("%s '%s' is not a valid package\n", print_error, new_arg);
exit(EXIT_FAILURE);
}
- if (strlen(pkg.name) > 4 && strncmp(pkg.name + strlen(pkg.name) - 4, ".git", 4) == 0) {
+ if (strlen(pkg.name) > 4 &&
+ strncmp(pkg.name + strlen(pkg.name) - 4, ".git", 4) == 0)
pkg.name[strlen(pkg.name) - 4] = '\0';
- }
cache_install_directories();
if (!pkg.is_local) {
char src_dir[MAX_PATH_LEN];
- snprintf(src_dir, sizeof(src_dir), "%s/%s/%s", get_install_dir("src"),
- pkg.name, pkg.ver);
+ snprintf(src_dir, sizeof(src_dir), "%s/%s/%s",
+ get_install_dir("src"), pkg.name, pkg.ver);
snprintf(pkg.src, MAX_PATH_LEN, "%s", src_dir);
+ } else {
+ const char *destination = strcat(
+ strdup(get_install_dir("src")),
+ strcat(strdup("/"), pkg.name)
+ );
+ printf("%s\n", destination);
+ cpdir(pkg.src, destination);
}
return pkg;