diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-12-18 01:14:48 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2019-12-18 01:14:48 -0500 |
commit | 2be3d5c5d905bd748b8ce511033065fa5a83a59c (patch) | |
tree | 740de985535e765c37deb61dd87b03e131c5d0bb /deps.c | |
parent | fa992c8655f2fe27a97fe0e6768800a356de3744 (diff) | |
download | spmc-2be3d5c5d905bd748b8ce511033065fa5a83a59c.tar.gz |
Split up functions into different source files
Diffstat (limited to 'deps.c')
-rw-r--r-- | deps.c | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -105,6 +105,35 @@ int dep_solve(Dependencies **deps, const char *filename) { return line_count; } +void dep_all(Dependencies **deps, const char *_package) { + static int next = 0; + char *package = find_package(_package); + char depfile[PATH_MAX]; + char template[PATH_MAX]; + char suffix[PATH_MAX] = "spm_depends_all_XXXXXX"; + sprintf(template, "%s%c%s", TMP_DIR, DIRSEP, suffix); + + // Create a new temporary directory and extract the requested package into it + char *tmpdir = mkdtemp(template); + if (!tmpdir) { + perror(tmpdir); + exit(errno); + } + tar_extract_file(package, ".SPM_DEPENDS", tmpdir); + sprintf(depfile, "%s%c%s", tmpdir, DIRSEP, ".SPM_DEPENDS"); + + int resolved = dep_solve(deps, depfile); + for (int i = next; i < resolved; i++) { + next++; + if (dep_seen(deps, (*deps)->list[i])) { + dep_all(deps, (*deps)->list[i]); + } + } + + unlink(depfile); + unlink(tmpdir); +} + void dep_show(Dependencies **deps) { if ((*deps) == NULL) { return; |