/*
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 .
*/
#ifndef PKGIT_GLOBALS_H
#define PKGIT_GLOBALS_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 eprintf(...) fprintf(stderr, __VA_ARGS__);
#define check_alloc(ptr) \
do { \
if (ptr == NULL) \
panic("allocation of `%s` failed", #ptr); \
} while (0)
#include
#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 PRINT_PKGIT \
BOLD_YELLOW "[" BOLD_MAGENTA "pkgit" BOLD_YELLOW "]" COLOR_RESET
#define PRINT_SUCCESS PRINT_PKGIT GREEN " [SUCCESS]" COLOR_RESET
#define PRINT_SKIPPED PRINT_PKGIT BLUE " [SKIPPED]" COLOR_RESET
#define PRINT_WARNING PRINT_PKGIT YELLOW " [WARNING]" COLOR_RESET
#define PRINT_ERROR PRINT_PKGIT RED " [ERROR]" COLOR_RESET
#define MAX_REPOS 1000
#define MAX_DIRS 100
#define MAX_PATH_LEN 1024
#include "str.h"
typedef struct {
str name;
str url;
str version;
str target;
str src;
int is_local;
} package;
extern int is_verbose;
extern int is_forced;
extern int config_exists;
extern str home_config_dir;
extern str home_config_file;
extern str home_repos_file;
extern str root_config_dir;
extern str root_config_file;
extern str root_repos_file;
extern int is_root_config;
extern str config_dir;
extern str config_file;
extern str repos_file;
extern str bin;
extern str lib;
extern str include;
extern str src;
void init_vars(void);
void free_vars(void);
#endif