From 444ccb0a7c5f88f408bee91db052d00794791ccc Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 22 Jan 2020 01:37:38 -0500 Subject: Groundhog day 2 --- src/internal_cmd.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'src/internal_cmd.c') diff --git a/src/internal_cmd.c b/src/internal_cmd.c index 7b46e2c..2390671 100644 --- a/src/internal_cmd.c +++ b/src/internal_cmd.c @@ -9,6 +9,7 @@ static char *internal_commands[] = { "mkprefixbin", "generate prefix manifest (binary)", "mkprefixtext", "generate prefix manifest (text)", + "mkmanifest", "generate package repository manifest", "rpath_set", "modify binary RPATH", "rpath_autoset", "determine nearest lib directory and set RPATH", NULL, NULL, @@ -80,6 +81,55 @@ int mkprefix_interface(int argc, char **argv) { return result; } +/** + * + */ +void mkmanifest_interface_usage(void) { + printf("usage: mkmanifest [package_dir] [output_dir]"); +} + +/** + * Generate a named package manifest + * @param argc + * @param argv + * @return value of `manifest_write` + */ +int mkmanifest_interface(int argc, char **argv) { + if (argc < 1) { + mkmanifest_interface_usage(); + return -1; + } + Manifest *manifest = NULL; + char *pkgdir = NULL; + char path[PATH_MAX]; + memset(path, '\0', PATH_MAX); + + if (argc == 2) { + pkgdir = argv[1]; + } + else { + pkgdir = SPM_GLOBAL.package_dir; + } + + if (argc > 2) { + strcpy(path, argv[2]); + } + else { + strcpy(path, SPM_MANIFEST_FILENAME); + } + + if (exists(pkgdir) != 0) { + return -1; + } + + manifest = manifest_from(pkgdir); + if (manifest == NULL) { + return -2; + } + + return manifest_write(manifest, path); +} + /** * */ @@ -178,6 +228,9 @@ int internal_cmd(int argc, char **argv) { if (strcmp(command, "mkprefixbin") == 0 || strcmp(command, "mkprefixtext") == 0) { return mkprefix_interface(arg_count, arg_array); } + else if (strcmp(command, "mkmanifest") == 0) { + return mkmanifest_interface(arg_count, arg_array); + } else if (strcmp(command, "rpath_set") == 0) { return rpath_set_interface(arg_count, arg_array); } -- cgit