aboutsummaryrefslogtreecommitdiff
path: root/include/globs.h
blob: 94169236215f78f7ffbcc07118ab0ea21ff610ba (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*
	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 <https://www.gnu.org/licenses/>.
*/

#ifndef PKGIT_GLOBALS_H
#define PKGIT_GLOBALS_H

#include <stdlib.h>

#include "str.h"

#define VERSION "1.2.0_INDEV"
#define RED "\x1b[0;31m"
#define GREEN "\x1b[0;32m"
#define YELLOW "\x1b[0;33m"
#define BLUE "\x1b[0;34m"
#define MAGENTA "\x1b[0;35m"
#define CYAN "\x1b[0;36m"
#define GRAY "\x1b[0;37m"
#define BRIGHT_RED "\x1b[0;91m"
#define BRIGHT_GREEN "\x1b[0;92m"
#define BRIGHT_YELLOW "\x1b[0;93m"
#define BRIGHT_BLUE "\x1b[0;94m"
#define BRIGHT_MAGENTA "\x1b[0;95m"
#define BRIGHT_CYAN "\x1b[0;96m"
#define BRIGHT_GRAY "\x1b[0;97m"
#define BOLD "\x1b[1m"
#define BOLD_RED "\x1b[1;31m"
#define BOLD_GREEN "\x1b[1;32m"
#define BOLD_YELLOW "\x1b[1;33m"
#define BOLD_BLUE "\x1b[1;34m"
#define BOLD_MAGENTA "\x1b[1;35m"
#define BOLD_CYAN "\x1b[1;36m"
#define BOLD_GRAY "\x1b[1;37m"
#define BOLD_WHITE "\x1b[1;38m"
#define BOLD_BRIGHT_RED "\x1b[1;91m"
#define BOLD_BRIGHT_GREEN "\x1b[1;92m"
#define BOLD_BRIGHT_YELLOW "\x1b[1;93m"
#define BOLD_BRIGHT_BLUE "\x1b[1;94m"
#define BOLD_BRIGHT_MAGENTA "\x1b[1;95m"
#define BOLD_BRIGHT_CYAN "\x1b[1;96m"
#define BOLD_BRIGHT_GRAY "\x1b[1;97m"
#define ITALIC "\x1b[3m"
#define COLOR_RESET "\x1b[0m"

#define LENGTH(lst) (sizeof(lst) / sizeof(*(lst)))

#define eprintf(...) fprintf(stderr, __VA_ARGS__);

#define check_alloc(ptr)                                                       \
	do {                                                                       \
		if (ptr == NULL)                                                       \
			panic("allocation of `%s` failed", #ptr);                          \
	} while (0)

#define panic(...)                                                             \
	do {                                                                       \
		eprintf(BOLD RED "panic:" COLOR_RESET " line %d, func \"%s\" in file " \
						 "\"%s\": ",                                           \
				__LINE__, __func__, __FILE_NAME__);                            \
		eprintf(__VA_ARGS__);                                                  \
		eprintf("\n");                                                         \
		fflush(stderr);                                                        \
		abort();                                                               \
	} while (0)

#ifdef PKGIT_DEBUG
#define assert(expr)                                                           \
	do {                                                                       \
		if (!(expr))                                                           \
			panic("Assertion `%s` failed", #expr);                             \
	} while (0)
#else
#define assert(expr) (void)(expr)
#endif

#ifdef unreachable
#undef unreachable
#endif
#define unreachable panic("reached unreachable code")

#define PKGIT_PREFIX                                                           \
	BOLD_YELLOW "[" BOLD_MAGENTA "pkgit" BOLD_YELLOW "] " COLOR_RESET
#define PKGIT_PREFIX_SUCCESS PKGIT_PREFIX GREEN "[SUCCESS] " COLOR_RESET
#define PKGIT_PREFIX_INFO PKGIT_PREFIX BLUE "[INFO] " COLOR_RESET
#define PKGIT_PREFIX_WARNING PKGIT_PREFIX YELLOW "[WARNING] " COLOR_RESET
#define PKGIT_PREFIX_ERROR PKGIT_PREFIX RED "[ERROR] " COLOR_RESET

#define MAX_REPOS 1000
#define MAX_DIRS 100
#define MAX_PATH_LEN 1024

typedef struct {
	bool verbose, force;
} cli_flags_t;

typedef struct {
	str dir, name, content, repos;
	bool is_root_config;
} config_t;

typedef struct {
	str prefix, bin, lib, include, src;
} install_dirs_t;

extern cli_flags_t flags;
extern config_t cfg;
extern install_dirs_t inst_dirs;
extern str new_arg_str;

void init_vars(void);
void free_vars(void);

#endif