aboutsummaryrefslogtreecommitdiff
path: root/include/spm.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/spm.h')
-rw-r--r--include/spm.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/include/spm.h b/include/spm.h
new file mode 100644
index 0000000..9f3ae17
--- /dev/null
+++ b/include/spm.h
@@ -0,0 +1,181 @@
+#ifndef SPM_SPM_H
+#define SPM_SPM_H
+
+#include <ctype.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fts.h>
+#include <glob.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <wordexp.h>
+#if !defined(_WIN32)
+#include <sys/utsname.h>
+#endif
+
+#include "config.h"
+
+// spm.c
+#define SYSERROR stderr, "%s:%s:%d: %s\n", __FILE__, __FUNCTION__, __LINE__, strerror(errno)
+#define DIRSEP_WIN32 '\\'
+#define DIRSEP_UNIX '/'
+#if defined(_WIN32)
+#define DIRSEP DIRSEP_WIN32
+#define NOT_DIRSEP DIRSEP_UNIX
+#else
+#define DIRSEP DIRSEP_UNIX
+#define NOT_DIRSEP DIRSEP_WIN32
+#endif
+
+#define PKG_DIR SPM_GLOBAL.package_dir
+#define TMP_DIR SPM_GLOBAL.tmp_dir
+
+#define SHELL_DEFAULT 1 << 0
+#define SHELL_OUTPUT 1 << 1
+#define SHELL_BENCHMARK 1 << 2
+
+typedef struct {
+ char *root;
+ char **dirs;
+ size_t dirs_length;
+ char **files;
+ size_t files_length;
+} FSTree;
+
+typedef struct {
+ size_t __size; // Count of allocated records
+ size_t records; // Count of usable records
+ char **list; // Array of dependencies
+} Dependencies;
+
+typedef struct {
+ char *key;
+ char *value;
+ size_t key_length;
+ size_t value_length;
+} ConfigItem;
+
+typedef struct {
+ char *package_dir;
+ char *tmp_dir;
+ char *user_config_basedir;
+ char *user_config_file;
+ ConfigItem **config;
+ struct utsname sysinfo;
+} spm_vars;
+
+typedef struct {
+ struct timespec start_time, stop_time;
+ double time_elapsed;
+ int returncode;
+ char *output;
+} Process;
+
+typedef struct {
+ char *prefix;
+ char *path;
+} RelocationEntry;
+
+// GLOBALS
+spm_vars SPM_GLOBAL;
+
+// shell.c
+void shell(Process **proc_info, u_int64_t option, const char *fmt, ...);
+void shell_free(Process *proc_info);
+
+// archive.c
+int tar_extract_archive(const char *_archive, const char *_destination);
+int tar_extract_file(const char *archive, const char* filename, const char *destination);
+
+// relocation.c
+int relocate(const char *filename, const char *_oldstr, const char *_newstr);
+int replace_text(char *data, const char *_spattern, const char *_sreplacement);
+int file_replace_text(char *filename, const char *spattern, const char *sreplacement);
+RelocationEntry **prefixes_read(const char *filename);
+void prefixes_free(RelocationEntry **entry);
+
+// strings.c
+int num_chars(const char *sptr, int ch);
+int startswith(const char *sptr, const char *pattern);
+int endswith(const char *sptr, const char *pattern);
+char *normpath(const char *path);
+void strchrdel(char *sptr, const char *chars);
+long int strchroff(const char *sptr, int ch);
+void strdelsuffix(char *sptr, const char *suffix);
+char** split(char *sptr, const char* delim);
+void split_free(char **ptr);
+char *substring_between(char *sptr, const char *delims);
+static int _strsort_compare(const void *a, const void *b);
+void strsort(char **arr);
+int find_in_file(const char *filename, const char *pattern);
+
+// find.c
+char *find_executable(const char *program);
+char *find_file(const char *root, const char *filename);
+char *find_package(const char *filename);
+int errglob(const char *epath, int eerrno);
+
+// rpath.c
+Process *patchelf(const char *_filename, const char *_args);
+char *rpath_autodetect(const char *filename);
+int has_rpath(const char *_filename);
+char *rpath_get(const char *_filename);
+char *rpath_generate(const char *_filename);
+int rpath_set(const char *filename, char *_rpath);
+
+// fs.c
+long int get_file_size(const char *filename);
+int mkdirs(const char *_path, mode_t mode);
+char *dirname(const char *_path);
+char *basename(char *path);
+int rsync(const char *_args, const char *_source, const char *_destination);
+
+// config_global.c
+char *get_user_conf_dir(void);
+char *get_user_config_file(void);
+char *get_user_tmp_dir(void);
+char *get_user_package_dir(void);
+
+void init_config_global(void);
+void free_global_config(void);
+void show_global_config(void);
+void check_runtime_environment(void);
+
+// install.c
+int install(const char *destroot, const char *_package);
+
+// config.c
+#define CONFIG_BUFFER_SIZE 1024
+
+char *lstrip(char *sptr);
+char *strip(char *sptr);
+int isempty(char *sptr);
+int isquoted(char *sptr);
+ConfigItem **config_read(const char *filename);
+ConfigItem *config_get(ConfigItem **item, const char *key);
+void config_free(ConfigItem **item);
+void config_test(void);
+
+// deps.c
+int exists(const char *filename);
+int dep_seen(Dependencies **deps, const char *name);
+int dep_init(Dependencies **deps);
+void dep_free(Dependencies **deps);
+int dep_append(Dependencies **deps, char *name);
+int dep_solve(Dependencies **deps, const char *filename);
+int dep_all(Dependencies **deps, const char *_package);
+void dep_show(Dependencies **deps);
+
+// fstree.c
+int _fstree_compare(const FTSENT **a, const FTSENT **b);
+void fstree_free(FSTree *fsdata);
+FSTree *fstree(const char *_path);
+int rmdirs(const char *_path);
+
+#endif //SPM_SPM_H