aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Akhlaghi <mohammad@akhlaghi.org>2020-08-08 22:48:53 +0100
committerMohammad Akhlaghi <mohammad@akhlaghi.org>2020-08-08 22:56:07 +0100
commit09840874c3af449032a07cac56e23a78d7e3a666 (patch)
treebe19f1d9778cb7eb5ac3a16fd81ad8a6181bdf3c
parentb3b44798a3f472e5f5a6633de4a582d4c902b008 (diff)
Software tarballs saved as symlinks if already in filesystem
Until now, if the software source tarballs already existed on the system they would be copied inside the project. However, the software source tarballs are sometimes/mostly larger than their actual product and can consume significant space (~375 MB in the core branch!). With this commit, when the software are present on the system, their symbolic link will be placed in 'BDIR/software/tarballs', not a full copy. Also, because the tarballs in software tarball directory may themselves be links, we use 'realpath' to find the final place of the actual file and link to that location. Therefore if 'realpath' can't be found (prior to installing Coreutils in Maneage), we will copy the tarballs from the given software tarball directory. After Maneage has installed Coreutils, the project's own 'realpath' will be used. Of course, if the software are downloaded, their full downloaded copy will be kept in 'BDIR/software/tarballs', nothing has changed in the downloading scenario.
-rw-r--r--reproduce/software/make/build-rules.mk9
-rwxr-xr-xreproduce/software/shell/pre-make-build.sh14
2 files changed, 18 insertions, 5 deletions
diff --git a/reproduce/software/make/build-rules.mk b/reproduce/software/make/build-rules.mk
index 86370ab..d50c301 100644
--- a/reproduce/software/make/build-rules.mk
+++ b/reproduce/software/make/build-rules.mk
@@ -44,7 +44,12 @@ import-source = final=$(tdir)/$$tarball; \
unchecked="$$final.unchecked"; \
rm -f "$$unchecked"; \
if [ -f $(DEPENDENCIES-DIR)/$$tarball ]; then \
- cp $(DEPENDENCIES-DIR)/$$tarball "$$unchecked"; \
+ if type realpath > /dev/null 2> /dev/null; then \
+ ln -sf "$$(realpath $(DEPENDENCIES-DIR)/$$tarball)" \
+ "$$unchecked"; \
+ else \
+ cp $(DEPENDENCIES-DIR)/$$tarball "$$unchecked"; \
+ fi; \
else \
if [ x"$$url" = x ]; then \
bservers="$(backupservers)"; \
@@ -70,7 +75,7 @@ import-source = final=$(tdir)/$$tarball; \
if [ x"$$checksum" = x"$$exp_checksum" ]; then \
mv "$$unchecked" "$$final"; \
else \
- echo "ERROR: Non-matching checksum for '$$tarball'."; \
+ echo "ERROR: Non-matching checksum: $$tarball"; \
echo "Checksum should be: $$exp_checksum"; \
echo "Checksum is: $$checksum"; \
exit 1; \
diff --git a/reproduce/software/shell/pre-make-build.sh b/reproduce/software/shell/pre-make-build.sh
index 05a4143..9188fc9 100755
--- a/reproduce/software/shell/pre-make-build.sh
+++ b/reproduce/software/shell/pre-make-build.sh
@@ -104,9 +104,17 @@ download_tarball() {
tarballurl=$url/$tarball
fi
- # See if it is in the input software directory.
+ # See if it is in the input-software directory, if so, make a link, if
+ # not copy it. The only issue is that the file in the input-software
+ # directory may actually be a link itself. So to avoid complications
+ # with many links, we'll use 'realpath' (if it exists) to parse the
+ # link and link to an actual file.
if [ -f "$ddir/$tarball" ]; then
- cp $ddir/$tarball $ucname
+ if type realpath > /dev/null 2> /dev/null; then
+ ln -sf "$(realpath $ddir/$tarball)" "$ucname"
+ else
+ cp $ddir/$tarball $ucname
+ fi
else
$downloadwrapper "$downloader" nolock $tarballurl $ucname \
"$bservers"
@@ -118,7 +126,7 @@ download_tarball() {
expectedchecksum=$(awk '/^'$progname'-checksum/{print $3}' $checksumsfile)
if [ x$checksum = x$expectedchecksum ]; then mv "$ucname" "$maneagetar"
else
- echo "ERROR: Non-matching checksum for '$tarball'."
+ echo "ERROR: Non-matching checksum: $tarball"
echo "Checksum should be: $expectedchecksum"
echo "Checksum is: $checksum"
exit 1