aboutsummaryrefslogtreecommitdiff
path: root/src/cla_parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cla_parse.c')
-rw-r--r--src/cla_parse.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/cla_parse.c b/src/cla_parse.c
new file mode 100644
index 0000000..18a9ece
--- /dev/null
+++ b/src/cla_parse.c
@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "cla_parse.h"
+
+#include "add_repo.h"
+#include "build.h"
+#include "create_pkg.h"
+#include "help.h"
+#include "install_pkg.h"
+#include "list_pkgs.h"
+#include "name_from_url.h"
+#include "remove_pkg.h"
+#include "update_all.h"
+#include "vars.h"
+
+#include "resolve_deps.h"
+
+#define COMMAND(large, small, code) \
+ if (strcmp(argv[i], large) == 0 || strcmp(argv[i], small) == 0) \
+ code
+
+#define NOT_ENOUGH_ARGS(arg, next) \
+ printf("%sNot enough arguments! Try: `pkgit %s [%s]`\n", print_error, arg, next)
+
+void cla_parse(int argc, char **argv) {
+ Pkg pkg = {0};
+
+ if (!argv[1]) {
+ help();
+ return;
+ }
+
+ for (int i = 1; i < argc; i++) {
+ COMMAND("--large", "-l", { is_symlink_install = true; });
+ COMMAND("add", "a", {
+ if (argv[i + 1]) {
+ add_repo(argv[i + 1], name_from_url(argv[i + 1]));
+ } else {
+ NOT_ENOUGH_ARGS(argv[i], "url");
+ }
+ });
+ COMMAND("build", "b", {
+ if (argv[i + 1]) {
+ if (argv[i + 2]) {
+ pkg = create_pkg(argv[i + 1], argv[i + 2]);
+ build(pkg);
+ } else {
+ pkg = create_pkg(argv[i + 1], "default");
+ build(pkg);
+ }
+ } else {
+ pkg = create_pkg(".", "default");
+ build(pkg);
+ }
+ });
+ COMMAND("install", "i", {
+ if (argv[i + 1]) {
+ if (argv[i + 2]) {
+ pkg = create_pkg(argv[i + 1], argv[i + 2]);
+ install_pkg(pkg);
+ } else {
+ pkg = create_pkg(argv[i + 1], "default");
+ install_pkg(pkg);
+ }
+ } else {
+ NOT_ENOUGH_ARGS(argv[i], "url/pkg");
+ }
+ });
+ COMMAND("remove", "r", {
+ if (argv[i + 1]) {
+ pkg = create_pkg(argv[i + 1], "default");
+ remove_pkg(pkg);
+ } else {
+ NOT_ENOUGH_ARGS(argv[i], "url/pkg");
+ }
+ });
+ COMMAND("update", "u", { update_all(); });
+ COMMAND("list", "l", { list_pkgs(); });
+ COMMAND("--version", "-v", { printf("%s\n", version); });
+ COMMAND("--help", "-h", { help(); });
+ COMMAND("--check", "-c", { resolve_deps(); return; });
+ }
+} \ No newline at end of file