aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/spm.h3
-rwxr-xr-xscripts/spmbuild37
-rw-r--r--src/deps.c4
-rw-r--r--src/internal_cmd.c3
-rw-r--r--src/manifest.c4
-rw-r--r--src/relocation.c5
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
}
diff --git a/src/deps.c b/src/deps.c
index 6be4ff4..5ab8316 100644
--- a/src/deps.c
+++ b/src/deps.c
@@ -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