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
|
/*
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.4.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;
void init_vars(void);
void free_vars(void);
#endif
|