diff options
-rw-r--r-- | include/spm.h | 3 | ||||
-rwxr-xr-x | scripts/spmbuild | 37 | ||||
-rw-r--r-- | src/deps.c | 4 | ||||
-rw-r--r-- | src/internal_cmd.c | 3 | ||||
-rw-r--r-- | src/manifest.c | 4 | ||||
-rw-r--r-- | src/relocation.c | 5 |
6 files changed, 45 insertions, 11 deletions
diff --git a/include/spm.h b/include/spm.h index 032a19b..fbaf1ed 100644 --- a/include/spm.h +++ b/include/spm.h @@ -83,7 +83,8 @@ #define SPM_META_DEPENDS ".SPM_DEPENDS" #define SPM_META_PREFIX_BIN ".SPM_PREFIX_BIN" #define SPM_META_PREFIX_TEXT ".SPM_PREFIX_TEXT" -#define SPM_META_MANIFEST ".SPM_MANIFEST" // TODO: Implement +#define SPM_META_DESCRIPTOR ".SPM_DESCRIPTOR" +#define SPM_META_FILELIST ".SPM_FILELIST" #define SPM_META_PREFIX_PLACEHOLDER \ "_0________________________________________________\ _1________________________________________________" diff --git a/scripts/spmbuild b/scripts/spmbuild index 2ee11ea..d608642 100755 --- a/scripts/spmbuild +++ b/scripts/spmbuild @@ -247,12 +247,41 @@ function spm_build_mkdepends() { shift local deps=("$@") - touch "${filename}" + > "${filename}" for dep in "${deps[@]}"; do echo "${dep}" >> "${filename}" done } +function spm_build_mkdesc() { + local filename="${1}" + if [[ -z ${filename} ]]; then + msg_error "spm_build_mkdesc requires a path" + exit 1 + fi + echo "# SPM PACKAGE DESCRIPTOR +name=${name:-*} +version=${version:-*} +revision=${revision:-*} +license=${license:-*} +homepage=${homepage:-*} +summary=${summary:-*} +" > "${filename}" +} + +function spm_build_mkfilelist() { + local filename="${1}" + if [[ -z ${filename} ]]; then + msg_error "spmbuild_mkfilelist requires an output filename" + exit 1 + fi + + pushd "${pathname}" + echo "# SPM PACKAGE FILE LIST" > "${filename}" + find . -type f -not -name ".SPM_*" >> "${filename}" + popd +} + function spm_build_filelist() { : } @@ -299,8 +328,12 @@ function spm_build_do_stage_archive() { spm_build_mkprefixtext "${SPM_META_PREFIX_TEXT}" . ${SPM_BUILD_CRUMBS} msg2 "Recording dependencies..." spm_build_mkdepends "${SPM_META_DEPENDS}" "${depends[@]}" + msg2 "Recording package data..." + spm_build_mkdesc "${SPM_META_DESCRIPTOR}" + msg2 "Recording paths..." + spm_build_mkfilelist "${SPM_META_FILELIST}" msg2 "Archiving files..." - tar cfz "${archive}" . + tar --create --gzip --file "${archive}" --exclude '..' --exclude '.' .* * popd popd } @@ -179,7 +179,7 @@ int dep_all(Dependencies **deps, const char *root, const char *_package) { free(suffix); return -1; } - if (tar_extract_file(package, "./"SPM_META_DEPENDS, tmpdir) < 0) { + if (tar_extract_file(package, SPM_META_DEPENDS, tmpdir) < 0) { perror(package); fprintf(SYSERROR); free(package); @@ -188,7 +188,7 @@ int dep_all(Dependencies **deps, const char *root, const char *_package) { } // Scan depencency tree - sprintf(depfile, "%s%c%s", tmpdir, DIRSEP, ".SPM_DEPENDS"); + sprintf(depfile, "%s%c%s", tmpdir, DIRSEP, SPM_META_DEPENDS); int resolved = dep_solve(deps, root, depfile); // NOTE: diff --git a/src/internal_cmd.c b/src/internal_cmd.c index be300d6..753f6d9 100644 --- a/src/internal_cmd.c +++ b/src/internal_cmd.c @@ -176,7 +176,8 @@ int mkruntime_interface(int argc, char **argv) { runtime_set(rt, "SPM_META_DEPENDS", SPM_META_DEPENDS); runtime_set(rt, "SPM_META_PREFIX_BIN", SPM_META_PREFIX_BIN); runtime_set(rt, "SPM_META_PREFIX_TEXT", SPM_META_PREFIX_TEXT); - runtime_set(rt, "SPM_META_MANIFEST", SPM_META_MANIFEST); + runtime_set(rt, "SPM_META_DESCRIPTOR", SPM_META_DESCRIPTOR); + runtime_set(rt, "SPM_META_FILELIST", SPM_META_FILELIST); runtime_set(rt, "SPM_META_PREFIX_PLACEHOLDER", SPM_META_PREFIX_PLACEHOLDER); runtime_set(rt, "PATH", "$SPM_BIN:$PATH"); diff --git a/src/manifest.c b/src/manifest.c index acc1107..c782940 100644 --- a/src/manifest.c +++ b/src/manifest.c @@ -109,8 +109,7 @@ Manifest *manifest_from(const char *package_dir) { // Read package requirement specs char *archive = join((char *[]) {info->origin, SPM_GLOBAL.repo_target, info->packages[i]->archive, NULL}, DIRSEPS); - char *in_archive = join((char *[]) {".", SPM_META_DEPENDS, NULL}, DIRSEPS); - if (tar_extract_file(archive, in_archive, tmpdir) != 0) { + if (tar_extract_file(archive, SPM_META_DEPENDS, tmpdir) != 0) { // TODO: at this point is the package is invalid? .SPM_DEPENDS should be there... fprintf(stderr, "extraction failure: %s\n", archive); rmdirs(tmpdir); @@ -130,7 +129,6 @@ Manifest *manifest_from(const char *package_dir) { unlink(depfile); free(depfile); free(archive); - free(in_archive); split_free(parts); } diff --git a/src/relocation.c b/src/relocation.c index 1df9f81..1c5b1cf 100644 --- a/src/relocation.c +++ b/src/relocation.c @@ -7,7 +7,8 @@ const char *METADATA_FILES[] = { SPM_META_DEPENDS, SPM_META_PREFIX_BIN, SPM_META_PREFIX_TEXT, - SPM_META_MANIFEST, + SPM_META_DESCRIPTOR, + SPM_META_FILELIST, NULL, }; @@ -238,7 +239,7 @@ RelocationEntry **prefixes_read(const char *filename) { * #include "spm.h" * * int main() { - * if (file_is_metadata("./.SPM_DEPENDS")) { + * if (file_is_metadata(".SPM_DEPENDS")) { * // file is metadata * } else { * // file is not metadata |