diff options
-rw-r--r-- | include/archive.h | 7 | ||||
-rw-r--r-- | include/checksum.h | 7 | ||||
-rw-r--r-- | include/conf.h | 54 | ||||
-rw-r--r-- | include/deps.h | 20 | ||||
-rw-r--r-- | include/environment.h | 15 | ||||
-rw-r--r-- | include/find.h | 9 | ||||
-rw-r--r-- | include/fs.h | 29 | ||||
-rw-r--r-- | include/install.h | 7 | ||||
-rw-r--r-- | include/internal_cmd.h | 7 | ||||
-rw-r--r-- | include/manifest.h | 48 | ||||
-rw-r--r-- | include/mime.h | 18 | ||||
-rw-r--r-- | include/mirrors.h | 12 | ||||
-rw-r--r-- | include/relocation.h | 21 | ||||
-rw-r--r-- | include/rpath.h | 12 | ||||
-rw-r--r-- | include/shell.h | 18 | ||||
-rw-r--r-- | include/spm.h | 300 | ||||
-rw-r--r-- | include/str.h | 27 | ||||
-rw-r--r-- | include/version_spec.h | 21 | ||||
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/str.c (renamed from src/strings.c) | 1 |
20 files changed, 352 insertions, 283 deletions
diff --git a/include/archive.h b/include/archive.h new file mode 100644 index 0000000..264a0d9 --- /dev/null +++ b/include/archive.h @@ -0,0 +1,7 @@ +#ifndef SPM_ARCHIVE_H +#define SPM_ARCHIVE_H + +int tar_extract_archive(const char *_archive, const char *_destination); +int tar_extract_file(const char *archive, const char* filename, const char *destination); + +#endif //SPM_ARCHIVE_H diff --git a/include/checksum.h b/include/checksum.h new file mode 100644 index 0000000..001192f --- /dev/null +++ b/include/checksum.h @@ -0,0 +1,7 @@ +#ifndef SPM_CHECKSUM_H +#define SPM_CHECKSUM_H + +char *md5sum(const char *filename); +char *sha256sum(const char *filename); + +#endif //SPM_CHECKSUM_H diff --git a/include/conf.h b/include/conf.h new file mode 100644 index 0000000..e1ab93a --- /dev/null +++ b/include/conf.h @@ -0,0 +1,54 @@ +#ifndef SPM_CONF_H +#define SPM_CONF_H + +#define CONFIG_BUFFER_SIZE 1024 +#define PKG_DIR SPM_GLOBAL.package_dir +#define TMP_DIR SPM_GLOBAL.tmp_dir + +typedef struct { + char *key; + char *value; + size_t key_length; + size_t value_length; +} ConfigItem; + +typedef struct { + char *binpath; + char *includepath; + char *libpath; + char *datapath; + char *manpath; +} SPM_Hierarchy; + +typedef struct { + char *package_dir; + char *tmp_dir; + char *package_manifest; + char *mirror_config; + char **mirror_list; + char *repo_target; + char *user_config_basedir; + char *user_config_file; + int verbose; + ConfigItem **config; + struct utsname sysinfo; + SPM_Hierarchy fs; +} spm_vars; + +ConfigItem **config_read(const char *filename); +ConfigItem *config_get(ConfigItem **item, const char *key); +void config_free(ConfigItem **item); +void config_test(void); + +char *get_user_conf_dir(void); +char *get_user_config_file(void); +char *get_user_tmp_dir(void); +char *get_user_package_dir(void); +char *get_package_manifest(void); + +void init_config_global(void); +void free_global_config(void); +void show_global_config(void); +void check_runtime_environment(void); + +#endif //SPM_CONF_H diff --git a/include/deps.h b/include/deps.h new file mode 100644 index 0000000..b9a07fd --- /dev/null +++ b/include/deps.h @@ -0,0 +1,20 @@ +#ifndef SPM_DEPS_H +#define SPM_DEPS_H + +typedef struct { + size_t __size; // Count of allocated records + size_t records; // Count of usable records + char **list; // Array of dependencies +} Dependencies; + +// 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); + +#endif //SPM_DEPS_H diff --git a/include/environment.h b/include/environment.h new file mode 100644 index 0000000..79e5013 --- /dev/null +++ b/include/environment.h @@ -0,0 +1,15 @@ +#ifndef SPM_ENVIRONMENT_H +#define SPM_ENVIRONMENT_H + +typedef StrList RuntimeEnv; + +ssize_t runtime_contains(RuntimeEnv *env, const char *key); +RuntimeEnv *runtime_copy(char **env); +char *runtime_get(RuntimeEnv *env, const char *key); +void runtime_set(RuntimeEnv *env, const char *_key, const char *_value); +char *runtime_expand_var(RuntimeEnv *env, const char *input); +void runtime_export(RuntimeEnv *env, char **keys); +void runtime_apply(RuntimeEnv *env); +void runtime_free(RuntimeEnv *env); + +#endif //SPM_ENVIRONMENT_H diff --git a/include/find.h b/include/find.h new file mode 100644 index 0000000..6a3b2f5 --- /dev/null +++ b/include/find.h @@ -0,0 +1,9 @@ +#ifndef SPM_FIND_H +#define SPM_FIND_H + +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); + +#endif //SPM_FIND_H diff --git a/include/fs.h b/include/fs.h new file mode 100644 index 0000000..7987e33 --- /dev/null +++ b/include/fs.h @@ -0,0 +1,29 @@ +#ifndef SPM_FSTREE_H +#define SPM_FSTREE_H + +#define SPM_FSTREE_FLT_NONE 1 << 0 +#define SPM_FSTREE_FLT_CONTAINS 1 << 1 +#define SPM_FSTREE_FLT_ENDSWITH 1 << 2 +#define SPM_FSTREE_FLT_STARTSWITH 1 << 3 + +typedef struct { + char *root; + char **dirs; + size_t dirs_length; + char **files; + size_t files_length; +} FSTree; + +int _fstree_compare(const FTSENT **a, const FTSENT **b); +void fstree_free(FSTree *fsdata); +FSTree *fstree(const char *_path, char **filter_by, unsigned int filter_mode); +int rmdirs(const char *_path); +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); +char *human_readable_size(uint64_t n); + + +#endif //SPM_FSTREE_H diff --git a/include/install.h b/include/install.h new file mode 100644 index 0000000..3ecba04 --- /dev/null +++ b/include/install.h @@ -0,0 +1,7 @@ +#ifndef SPM_INSTALL_H +#define SPM_INSTALL_H + +int metadata_remove(const char *_path); +int install(const char *destroot, const char *_package); + +#endif //SPM_INSTALL_H diff --git a/include/internal_cmd.h b/include/internal_cmd.h new file mode 100644 index 0000000..d01a63c --- /dev/null +++ b/include/internal_cmd.h @@ -0,0 +1,7 @@ +#ifndef SPM_INTERNAL_CMD_H +#define SPM_INTERNAL_CMD_H + +// internal_cmd.c +int internal_cmd(int argc, char **argv); + +#endif //SPM_INTERNAL_CMD_H diff --git a/include/manifest.h b/include/manifest.h new file mode 100644 index 0000000..c32ed20 --- /dev/null +++ b/include/manifest.h @@ -0,0 +1,48 @@ +#ifndef SPM_MANIFEST_H +#define SPM_MANIFEST_H + +#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2) + 1 + +#define PACKAGE_MEMBER_SIZE 0xff +#define PACKAGE_MEMBER_ORIGIN_SIZE PATH_MAX +#define PACKAGE_MEMBER_SEPARATOR '-' +#define PACKAGE_MEMBER_SEPARATOR_PLACEHOLD '*' + +#define SPM_MANIFEST_SEPARATOR '|' +#define SPM_MANIFEST_SEPARATOR_MAX 7 +#define SPM_MANIFEST_NODATA "*" +#define SPM_MANIFEST_HEADER "# SPM PACKAGE MANIFEST" +#define SPM_MANIFEST_FILENAME "manifest.dat" +#define SPM_PACKAGE_EXTENSION ".tar.gz" + +typedef struct { + char **requirements; + size_t requirements_records; + size_t size; + char archive[PACKAGE_MEMBER_SIZE]; + char name[PACKAGE_MEMBER_SIZE]; + char version[PACKAGE_MEMBER_SIZE]; + char revision[PACKAGE_MEMBER_SIZE]; + char checksum_sha256[SHA256_DIGEST_STRING_LENGTH]; + char origin[PACKAGE_MEMBER_ORIGIN_SIZE]; +} ManifestPackage; + +typedef struct { + size_t records; + ManifestPackage **packages; + char origin[PACKAGE_MEMBER_ORIGIN_SIZE]; +} Manifest; + +int fetch(const char *url, const char *dest); +void manifest_package_separator_swap(char **name); +void manifest_package_separator_restore(char **name); +Manifest *manifest_from(const char *package_dir); +Manifest *manifest_read(char *file_or_url); +int manifest_write(Manifest *info, const char *dest); +void manifest_free(Manifest *info); +void manifest_package_free(ManifestPackage *info); +ManifestPackage *manifest_search(Manifest *info, const char *package); +ManifestPackage *find_by_strspec(Manifest *manifest, const char *_strspec); +ManifestPackage *manifest_package_copy(ManifestPackage *manifest); + +#endif //SPM_MANIFEST_H diff --git a/include/mime.h b/include/mime.h new file mode 100644 index 0000000..d05be77 --- /dev/null +++ b/include/mime.h @@ -0,0 +1,18 @@ +#ifndef SPM_MIME_H +#define SPM_MIME_H + +typedef struct { + char *origin; + char *type; + char *charset; +} Mime; + +Process *file_command(const char *_filename); +Mime *file_mimetype(const char *filename); +void mime_free(Mime *m); +int build(int bargc, char **bargv); +int file_is_binary(const char *filename); +int file_is_text(const char *filename); +int file_is_binexec(const char *filename); + +#endif //SPM_MIME_H diff --git a/include/mirrors.h b/include/mirrors.h new file mode 100644 index 0000000..1be39f6 --- /dev/null +++ b/include/mirrors.h @@ -0,0 +1,12 @@ +#ifndef SPM_MIRRORS_H +#define SPM_MIRRORS_H + +#define SPM_MIRROR_MAX 0xff +#define SPM_MIRROR_FILENAME "mirrorlist" + +char **file_readlines(const char *filename); +char **mirror_list(const char *filename); +void mirror_list_free(char **m); +void mirror_clone(Manifest *info, char *dest); + +#endif //SPM_MIRRORS_H diff --git a/include/relocation.h b/include/relocation.h new file mode 100644 index 0000000..128b2bd --- /dev/null +++ b/include/relocation.h @@ -0,0 +1,21 @@ +#ifndef SPM_RELOCATION_H +#define SPM_RELOCATION_H + +#define PREFIX_WRITE_BIN 0 +#define PREFIX_WRITE_TEXT 1 + +typedef struct { + char *prefix; + char *path; +} RelocationEntry; + +int relocate(const char *filename, const char *_oldstr, const char *_newstr); +void relocate_root(const char *destroot, const char *baseroot); +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); +int prefixes_write(const char *output_file, int mode, char **prefix, const char *tree); + + +#endif //SPM_RELOCATION_H diff --git a/include/rpath.h b/include/rpath.h new file mode 100644 index 0000000..742d969 --- /dev/null +++ b/include/rpath.h @@ -0,0 +1,12 @@ +#ifndef SPM_RPATH_H +#define SPM_RPATH_H + +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_autoset(const char *filename); +int rpath_set(const char *filename, const char *rpath); + +#endif //SPM_RPATH_H diff --git a/include/shell.h b/include/shell.h new file mode 100644 index 0000000..2d115f9 --- /dev/null +++ b/include/shell.h @@ -0,0 +1,18 @@ +#ifndef SPM_SHELL_H +#define SPM_SHELL_H + +#define SHELL_DEFAULT 1 << 0 +#define SHELL_OUTPUT 1 << 1 +#define SHELL_BENCHMARK 1 << 2 + +typedef struct { + struct timespec start_time, stop_time; + double time_elapsed; + int returncode; + char *output; +} Process; + +void shell(Process **proc_info, u_int64_t option, const char *fmt, ...); +void shell_free(Process *proc_info); + +#endif //SPM_SHELL_H diff --git a/include/spm.h b/include/spm.h index d62cb42..b743c7a 100644 --- a/include/spm.h +++ b/include/spm.h @@ -27,12 +27,29 @@ #include <sys/utsname.h> #endif +#include "str.h" #include "strlist.h" #include "shlib.h" #include "config.h" +#include "internal_cmd.h" +#include "environment.h" +#include "manifest.h" +#include "fs.h" +#include "version_spec.h" +#include "checksum.h" +#include "deps.h" +#include "shell.h" +#include "relocation.h" +#include "conf.h" +#include "archive.h" +#include "find.h" +#include "rpath.h" +#include "mime.h" +#include "mirrors.h" +#include "install.h" -// spm.c #define SYSERROR stderr, "%s:%s:%d: %s\n", basename(__FILE__), __FUNCTION__, __LINE__, strerror(errno) + #define DIRSEP_WIN32 '\\' #define DIRSEPS_WIN32 "\\" #define PATHSEP_WIN32 ';' @@ -68,288 +85,7 @@ #define SPM_META_PREFIX_TEXT ".SPM_PREFIX_TEXT" #define SPM_META_MANIFEST ".SPM_MANIFEST" // TODO: Implement -#define SPM_MANIFEST_SEPARATOR '|' -#define SPM_MANIFEST_SEPARATOR_MAX 7 -#define SPM_MANIFEST_NODATA "*" -#define SPM_MANIFEST_HEADER "# SPM PACKAGE MANIFEST" -#define SPM_MANIFEST_FILENAME "manifest.dat" - -#define SPM_FSTREE_FLT_NONE 1 << 0 -#define SPM_FSTREE_FLT_CONTAINS 1 << 1 -#define SPM_FSTREE_FLT_ENDSWITH 1 << 2 -#define SPM_FSTREE_FLT_STARTSWITH 1 << 3 - -#define PREFIX_WRITE_BIN 0 -#define PREFIX_WRITE_TEXT 1 - -#define SPM_PACKAGE_EXTENSION ".tar.gz" -#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 - -#define PACKAGE_MEMBER_SIZE 0xff -#define PACKAGE_MEMBER_ORIGIN_SIZE PATH_MAX -#define PACKAGE_MEMBER_SEPARATOR '-' -#define PACKAGE_MEMBER_SEPARATOR_PLACEHOLD '*' - -#define VERSION_OPERATORS " ~!=<>" -#define VERSION_NOOP 1 << 0 -#define VERSION_EQ 1 << 1 -#define VERSION_NE 1 << 2 -#define VERSION_GT 1 << 3 -#define VERSION_LT 1 << 4 -#define VERSION_COMPAT 1 << 5 - -#define SPM_MIRROR_MAX 0xff -#define SPM_MIRROR_FILENAME "mirrorlist" - -#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2) + 1 - -typedef struct { - char **requirements; - size_t requirements_records; - size_t size; - char archive[PACKAGE_MEMBER_SIZE]; - char name[PACKAGE_MEMBER_SIZE]; - char version[PACKAGE_MEMBER_SIZE]; - char revision[PACKAGE_MEMBER_SIZE]; - char checksum_sha256[SHA256_DIGEST_STRING_LENGTH]; - char origin[PACKAGE_MEMBER_ORIGIN_SIZE]; -} ManifestPackage; - -typedef struct { - size_t records; - ManifestPackage **packages; - char origin[PACKAGE_MEMBER_ORIGIN_SIZE]; -} Manifest; - -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 *binpath; - char *includepath; - char *libpath; - char *datapath; - char *manpath; -} SPM_Hierarchy; - -typedef struct { - char *package_dir; - char *tmp_dir; - char *package_manifest; - char *mirror_config; - char **mirror_list; - char *repo_target; - char *user_config_basedir; - char *user_config_file; - int verbose; - ConfigItem **config; - struct utsname sysinfo; - SPM_Hierarchy fs; -} 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; - -typedef struct { - char *origin; - char *type; - char *charset; -} Mime; - -typedef StrList RuntimeEnv; -//typedef StrList Dependencies; - // 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); -void relocate_root(const char *destroot, const char *baseroot); -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); -int prefixes_write(const char *output_file, int mode, char **prefix, const char *tree); - -// 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 *join(char **arr, const char *separator); -char *substring_between(char *sptr, const char *delims); -void strsort(char **arr); -int find_in_file(const char *filename, const char *pattern); -int isrelational(char ch); -void print_banner(const char *s, int len); -char *strstr_array(char **arr, const char *str); -char **strdeldup(char **arr); -char *lstrip(char *sptr); -char *strip(char *sptr); -int isempty(char *sptr); -int isquoted(char *sptr); -char *normalize_space(char *s); - -// 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_autoset(const char *filename); -int rpath_set(const char *filename, const char *rpath); - -// fs.c -int _fstree_compare(const FTSENT **a, const FTSENT **b); -void fstree_free(FSTree *fsdata); -FSTree *fstree(const char *_path, char **filter_by, unsigned int filter_mode); -int rmdirs(const char *_path); -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); -char *human_readable_size(uint64_t n); - -// 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); -char *get_package_manifest(void); - -void init_config_global(void); -void free_global_config(void); -void show_global_config(void); -void check_runtime_environment(void); - -// install.c -int metadata_remove(const char *_path); -int install(const char *destroot, const char *_package); - -// config.c -#define CONFIG_BUFFER_SIZE 1024 - -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); - -// manifest.c -int fetch(const char *url, const char *dest); -void manifest_package_separator_swap(char **name); -void manifest_package_separator_restore(char **name); -Manifest *manifest_from(const char *package_dir); -Manifest *manifest_read(char *file_or_url); -int manifest_write(Manifest *info, const char *dest); -void manifest_free(Manifest *info); -void manifest_package_free(ManifestPackage *info); -ManifestPackage *manifest_search(Manifest *info, const char *package); -ManifestPackage *find_by_strspec(Manifest *manifest, const char *_strspec); -ManifestPackage *manifest_package_copy(ManifestPackage *manifest); - - -// checksum.c -char *md5sum(const char *filename); -char *sha256sum(const char *filename); - -// version_spec.c -char *version_suffix_get_alpha(char *str); -char *version_suffix_get_modifier(char *str); -int64_t version_suffix_modifier_calc(char *str); -int version_suffix_alpha_calc(char *str); -int64_t version_from(const char *version_str); -int version_spec_from(const char *op); -ManifestPackage **find_by_spec(Manifest *manifest, const char *name, const char *op, const char *version_str); - -// build.c -Process *file_command(const char *_filename); -Mime *file_mimetype(const char *filename); -void mime_free(Mime *m); -int build(int bargc, char **bargv); -int file_is_binary(const char *filename); -int file_is_text(const char *filename); -int file_is_binexec(const char *filename); - -// internal_cmd.c -int internal_cmd(int argc, char **argv); - -// environment.c -ssize_t runtime_contains(RuntimeEnv *env, const char *key); -RuntimeEnv *runtime_copy(char **env); -char *runtime_get(RuntimeEnv *env, const char *key); -void runtime_set(RuntimeEnv *env, const char *_key, const char *_value); -char *runtime_expand_var(RuntimeEnv *env, const char *input); -void runtime_export(RuntimeEnv *env, char **keys); -void runtime_apply(RuntimeEnv *env); -void runtime_free(RuntimeEnv *env); - -// mirrors.c -char **file_readlines(const char *filename); -char **mirror_list(const char *filename); -void mirror_list_free(char **m); -void mirror_clone(Manifest *info, char *dest); - #endif //SPM_SPM_H diff --git a/include/str.h b/include/str.h new file mode 100644 index 0000000..2674fb9 --- /dev/null +++ b/include/str.h @@ -0,0 +1,27 @@ +#ifndef SPM_STR_H +#define SPM_STR_H + +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 *join(char **arr, const char *separator); +char *substring_between(char *sptr, const char *delims); +void strsort(char **arr); +int find_in_file(const char *filename, const char *pattern); +int isrelational(char ch); +void print_banner(const char *s, int len); +char *strstr_array(char **arr, const char *str); +char **strdeldup(char **arr); +char *lstrip(char *sptr); +char *strip(char *sptr); +int isempty(char *sptr); +int isquoted(char *sptr); +char *normalize_space(char *s); + +#endif //SPM_STR_H diff --git a/include/version_spec.h b/include/version_spec.h new file mode 100644 index 0000000..995d24a --- /dev/null +++ b/include/version_spec.h @@ -0,0 +1,21 @@ +#ifndef SPM_VERSION_SPEC_H +#define SPM_VERSION_SPEC_H + +#define VERSION_OPERATORS " ~!=<>" +#define VERSION_NOOP 1 << 0 +#define VERSION_EQ 1 << 1 +#define VERSION_NE 1 << 2 +#define VERSION_GT 1 << 3 +#define VERSION_LT 1 << 4 +#define VERSION_COMPAT 1 << 5 + +// version_spec.c +char *version_suffix_get_alpha(char *str); +char *version_suffix_get_modifier(char *str); +int64_t version_suffix_modifier_calc(char *str); +int version_suffix_alpha_calc(char *str); +int64_t version_from(const char *version_str); +int version_spec_from(const char *op); +ManifestPackage **find_by_spec(Manifest *manifest, const char *name, const char *op, const char *version_str); + +#endif //SPM_VERSION_SPEC_H diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index de2a01f..8a0a69a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,7 +3,7 @@ include_directories( ${CMAKE_BINARY_DIR}/include ) -add_executable(spm spm.c config.c compat.c deps.c fs.c rpath.c find.c shell.c archive.c strings.c relocation.c install.c config_global.c manifest.c checksum.c extern/url.c version_spec.c spm_build.c mime.c internal_cmd.c environment.c mirrors.c strlist.c shlib.c) +add_executable(spm spm.c config.c compat.c deps.c fs.c rpath.c find.c shell.c archive.c str.c relocation.c install.c config_global.c manifest.c checksum.c extern/url.c version_spec.c spm_build.c mime.c internal_cmd.c environment.c mirrors.c strlist.c shlib.c) target_link_libraries(spm rt crypto ssl curl) if(MSVC) diff --git a/src/strings.c b/src/str.c index afd5be3..7519cb1 100644 --- a/src/strings.c +++ b/src/str.c @@ -589,3 +589,4 @@ char *normalize_space(char *s) { return result; } + |