aboutsummaryrefslogtreecommitdiff
path: root/mbpk.c
blob: 1123b3984ebe03988e634adf1257013bb8d9033f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <pwd.h>
#include <xbps.h>
#include <stdlib.h>
#include <limits.h>

#define LOGFV(s) printf("[verbose] calling %s\n", s);

void usage(void) {
	printf("Usage: mbpk [OPTIONS]\n\n");
	printf("TODO: Add OPTIONS list here");
}

int main(int argc, char **argv) {
	/* parse arguments */
	int verbose = 0;
	int update_repos = 0;
	const char *pkgname = NULL;

	if (argc < 2) {
		usage();
		return 1;
	}

	int opt;
	while ((opt = getopt(argc, argv, "Si:vh")) != -1) {
		switch (opt) {
		case 'S': update_repos = 1; break;
		case 'i': pkgname = optarg; break;
		case 'v': verbose = 1; break;
		case 'h': usage(); return 0;
		default:  usage(); return 1;
		}
	}

	/* xbps init stuff */
	struct xbps_handle x;
	memset(&x, 0, sizeof(x));

	const char *home = getenv("HOME");
	if (home == NULL) {
		struct passwd *pw = getpwuid(getuid());
		if (pw != NULL) home = pw->pw_dir;
	}
	if (home == NULL) {
		fprintf(stderr, "cant find home directory\n");
		return 1;
	}

	if (verbose) printf("[verbose] setting x.rootdir to $home/.local/mbpk/prefix\n");
	snprintf(x.rootdir, sizeof(x.rootdir), "%s/.local/mbpk/prefix", home);
	if (verbose) printf("[verbose] setting x.cachedir to $home/.local/mbpk/cache\n");
	snprintf(x.cachedir, sizeof(x.cachedir), "%s/.local/mbpk/cache", home);
	if (verbose) printf("[verbose] setting x.confdir to $home/.local/mbpk/conf.d\n");
	snprintf(x.confdir, sizeof(x.confdir), "%s/.local/mbpk/conf.d", home);
	if (verbose) printf("[verbose] setting x.sysconfdir to $home/.local/mbpk/sysconf.d\n");
	snprintf(x.sysconfdir, sizeof(x.sysconfdir), "%s/.local/mbpk/sysconf.d", home);
	if (verbose) x.flags |= XBPS_FLAG_VERBOSE;

	if (verbose) LOGFV("xbps_init()");
	int r = xbps_init(&x);
	if (r != 0) {
		fprintf(stderr, "xbps_init failed: %s\n", strerror(r));
		return r;
	}

	/* actually do stuff */
	if (update_repos) {
		printf("[*] syncing repositories...\n");
		if (verbose) LOGFV("xbps_rpool_sync()");
		r = xbps_rpool_sync(&x, NULL);
		if (r != 0) {
			fprintf(stderr, "sync failed: %s\n", strerror(r));
			return r;
		}
		printf("[*] done!\n");
	}
	if (pkgname) {

	}

	return 0;
}