mkpk

Систем за управљање пакетима који користи mk из система Plan9
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 1285fb28a295cfcf502ec545e9eca3ee0bc9c474
родитељ 6e7f68059c0ae7d61ea10a9e3979456694422e75
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Thu,  4 Aug 2022 21:08:44 +0200

Add fetch; check SHA512 sums before installing

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
MTODO | 4++--
Mlib/build.mk | 21++++++++++++++-------
Mlib/defaults.mk | 1+
Mlib/fetch.mk | 8+++++++-
Mlib/install.mk | 7+++++++
Mlib/package.mk | 24++++++++++++++++++++++++
измењених датотека: 6, додавања: 55(+), брисања: 10(-)

diff --git a/TODO b/TODO @@ -1,9 +1,9 @@ TODO ==== -[ ] mkpk fetch +[x] mkpk fetch -[ ] Actually check SHA512 sums when installing +[x] Actually check SHA512 sums when installing [x] More accurately locate packages based on name (currently, "gcc" refers also to eg. directory "gcc-mlfs" if it happens to be under /src); keep fetched diff --git a/lib/build.mk b/lib/build.mk @@ -1,14 +1,21 @@ <$mkpklib/defaults.mk build-package:QV: - recentver=$(find $SRCBASEDIR/* -type d -prune -name "$PKGBASE-*" | \ - sed 's,\([^0-9]\+[^-]-\)\+\([0-9].*\),\2,' | recent) - if [ -z "$recentver" ]; then - printf "Directory %s does not exist (try fetch?)" \ - "$PKGBASE" >&2 - exit 1 + if [ -d "$SRCBASEDIR/$PKGBASE" ]; then + # No ver = git clone + found=$SRCBASEDIR/$PKGBASE + else + # From source tarball + recentver=$(find $SRCBASEDIR/* -type d -prune \ + -name "$PKGBASE-*" | \ + sed 's,\([^0-9]\+[^-]-\)\+\([0-9].*\),\2,' | recent) + if [ -z "$recentver" ]; then + printf "Directory %s does not exist (try fetch?)" \ + "$PKGBASE" >&2 + exit 1 + fi + found=$SRCBASEDIR/$PKGBASE-$recentver fi - found=$SRCBASEDIR/$PKGBASE-$recentver cp -R "$SRCMKFILES/$PKGBASE"/* "$found/" cd "$found" "$MK" package-install diff --git a/lib/defaults.mk b/lib/defaults.mk @@ -29,6 +29,7 @@ LDFLAGS= `{ if [ -n "$LDFLAGS" ]; then echo $LDFLAGS; \ BC= `{ if [ -n "$BC" ]; then echo $BC; \ else echo /plan9/bin/bc; fi } CC= `{ if [ -n "$CC" ]; then echo $CC; else echo cc; fi } +CURL= `{ if [ -n "$CURL" ]; then echo $CURL; else echo curl; fi } DATE= `{ if [ -n "$DATE" ]; then echo $DATE; else echo date; fi } GIT= `{ if [ -n "$GIT" ]; then echo $GIT; else echo git; fi } GZ= `{ if [ -n "$GZ" ]; then echo $GZ; else echo gzip; fi } diff --git a/lib/fetch.mk b/lib/fetch.mk @@ -1,3 +1,9 @@ <$mkpklib/defaults.mk -fetch-package:QV: +fetch:QV: + if [ ! -d "$SRCMKFILES/$PKGBASE" ]; then + printf "Package %s not found in mkfiles\n" "$PKGBASE" >&2 + exit 1 + fi + cd "$SRCMKFILES/$PKGBASE" + "$MK" package-fetch diff --git a/lib/install.mk b/lib/install.mk @@ -11,6 +11,13 @@ install-package:QV: exit 1 else pkg=$PKGDIR/$PKGBASE-$recentver.tar.xz + sha=$PKGDIR/$PKGBASE-$recentver.sha512 + cd "$PKGDIR" + printf " SHA512\t%s\n" "$sha" + if ! $SHA512SUM -c "$sha"; then + printf "Checksum mismatch in %s\n" "$sha" >&2 + exit 1 + fi cd / printf " TAR\t%s\n" "$pkg" xz -dc "$pkg" | tar -xf - 2>/dev/null diff --git a/lib/package.mk b/lib/package.mk @@ -18,3 +18,27 @@ package-install:QV: package "$INSTALL" -Dm0644 $PKG.tar.xz $PKGDIR/$PKG.tar.xz printf " INST\t%s\n" $PKG.sha512 "$INSTALL" -Dm0644 $PKG.sha512 $PKGDIR/$PKG.sha512 + +package-fetch:QV: + cd "$SRCBASEDIR" + for srctarball in $SRCTARBALLS; do + tbfile="${srctarball##*/}" + if [ ! -e "$tbfile" ]; then + printf " CURL\t%s\n" "$tbfile" + $CURL "$srctarball" > "$tbfile" + printf " TAR\t%s\n" "$tbfile" + xz -dc "$tbfile" | $TAR -xf - + fi + done + for srcrepo in $SRCREPOS; do + repodir="${srcrepo##*/}" + if [ ! -d "$repodir" ]; then + printf " GIT\t%s %s\n" clone "$repodir" + $GIT clone "$srcrepo" + else + cd "$repodir" + printf " GIT\t%s %s\n" pull "$repodir" + $GIT pull --ff-only + cd - >/dev/null + fi + done