From: Jakub Jirutka Date: Tue, 23 Aug 2017 22:57:00 +0200 Subject: [PATCH] Patch niminst's (de)install to be usable for distributions * Add support for DESTDIR variable (staged installs). * Change paths to be FHS/Alpine compliant. * Use "install" command instead of mkdir/cp/chmod. +++ b/tools/niminst/install.tmpl --- a/tools/niminst/install.tmpl @@ -5,6 +5,8 @@ set -e +: ${DESTDIR:=} + if [ $# -eq 1 ] ; then # if c.cat[fcUnixBin].len > 0: if test -f ?{c.cat[fcUnixBin][0].toUnix} @@ -26,43 +28,47 @@ echo " (treated similar to '/opt')" echo "To deinstall, use the command:" echo "sh deinstall.sh DIR" + echo "" + echo "You may also use environment variable DESTDIR for staged installs" + echo "(DESTDIR is prepended to each install target file). Note that this" + echo "is added by Alpine Linux, it's not supported by standard niminst." exit 1 ;; "/usr/bin") - bindir=/usr/bin - configdir=/etc - libdir=/usr/lib/?proj - docdir=/usr/share/?proj/doc - datadir=/usr/share/?proj/data - nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" + bindir="$DESTDIR/usr/bin" + configdir="$DESTDIR/etc" + libdir="$DESTDIR/usr/lib/?proj" + docdir="$DESTDIR/usr/share/doc/?proj" + datadir="$DESTDIR/usr/share/?proj/data" + nimbleDir="$DESTDIR/usr/share/nimble/pkgs/?c.nimblePkgName-?c.version" ;; "/usr/local/bin") - bindir=/usr/local/bin - configdir=/etc - libdir=/usr/local/lib/?proj - docdir=/usr/local/share/?proj/doc - datadir=/usr/local/share/?proj/data - nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" + bindir="$DESTDIR/usr/local/bin" + configdir="$DESTDIR/etc" + libdir="$DESTDIR/usr/local/lib/?proj" + docdir="$DESTDIR/usr/local/share/doc/?proj" + datadir="$DESTDIR/usr/local/share/?proj/data" + nimbleDir="$DESTDIR/usr/local/share/nimble/pkgs/?c.nimblePkgName-?c.version" ;; "/opt") - bindir="/opt/?proj/bin" - configdir="/opt/?proj/config" - libdir="/opt/?proj/lib" - docdir="/opt/?proj/doc" - datadir="/opt/?proj/data" - nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" - mkdir -p /opt/?proj + bindir="$DESTDIR/opt/?proj/bin" + configdir="$DESTDIR/opt/?proj/config" + libdir="$DESTDIR/opt/?proj/lib" + docdir="$DESTDIR/opt/?proj/doc" + datadir="$DESTDIR/opt/?proj/data" + nimbleDir="$DESTDIR/opt/nimble/pkgs/?c.nimblePkgName-?c.version" + mkdir -p $DESTDIR/opt/?proj mkdir -p $bindir mkdir -p $configdir ;; *) - bindir="$1/?proj/bin" - configdir="$1/?proj/config" - libdir="$1/?proj/lib" - docdir="$1/?proj/doc" - datadir="$1/?proj/data" - nimbleDir="$1/?proj" - mkdir -p $1/?proj + bindir="$DESTDIR$1/?proj/bin" + configdir="$DESTDIR$1/?proj/config" + libdir="$DESTDIR$1/?proj/lib" + docdir="$DESTDIR$1/?proj/doc" + datadir="$DESTDIR$1/?proj/data" + nimbleDir="$DESTDIR$1/?proj" + mkdir -p $DESTDIR$1/?proj mkdir -p $bindir mkdir -p $configdir ;; @@ -89,35 +95,28 @@ #end for #for f in items(c.cat[fcUnixBin]): - cp ?f.toUnix $bindir/?f.skipRoot.toUnix - chmod 755 $bindir/?f.skipRoot.toUnix + install -D -m 755 ?f.toUnix $bindir/?f.skipRoot.toUnix #end for #for f in items(c.cat[fcConfig]): - cp ?f.toUnix $configdir/?f.skipRoot.toUnix - chmod 644 $configdir/?f.skipRoot.toUnix + install -D -m 755 ?f.toUnix $configdir/?f.skipRoot.toUnix #end for #for f in items(c.cat[fcData]): if [ -f ?f.toUnix ]; then - cp ?f.toUnix $datadir/?f.skipRoot.toUnix - chmod 644 $datadir/?f.skipRoot.toUnix + install -D -m 644 ?f.toUnix $datadir/?f.skipRoot.toUnix fi #end for #for f in items(c.cat[fcDoc]): if [ -f ?f.toUnix ]; then - cp ?f.toUnix $docdir/?f.skipRoot.toUnix - chmod 644 $docdir/?f.skipRoot.toUnix + install -D -m 644 ?f.toUnix $docdir/?f.skipRoot.toUnix fi #end for #for f in items(c.cat[fcLib]): - cp ?f.toUnix $libdir/?f.skipRoot.toUnix - chmod 644 $libdir/?f.skipRoot.toUnix + install -D -m 644 ?f.toUnix $libdir/?f.skipRoot.toUnix #end for #for f in items(c.cat[fcNimble]): - cp ?f.toUnix $nimbleDir/?f.toUnix - chmod 644 $nimbleDir/?f.toUnix + install -D -m 644 ?f.toUnix $nimbleDir/?f.toUnix #end for -cp ?{c.nimblePkgName}.nimble $nimbleDir/?{c.nimblePkgName}.nimble -chmod 644 $nimbleDir/?{c.nimblePkgName}.nimble +install -D -m 644 ?{c.nimblePkgName}.nimble $nimbleDir/?{c.nimblePkgName}.nimble echo "installation successful" else @@ -130,5 +129,9 @@ echo " (treated similar to '/opt')" echo "To deinstall, use the command:" echo "sh deinstall.sh DIR" + echo "" + echo "You may also use environment variable DESTDIR for staged installs" + echo "(DESTDIR is prepended to each install target file). Note that this" + echo "is added by Alpine Linux, it's not supported by standard niminst." exit 1 fi --- a/tools/niminst/deinstall.tmpl +++ b/tools/niminst/deinstall.tmpl @@ -19,17 +19,17 @@ bindir=/usr/bin configdir=/etc libdir=/usr/lib/?proj - docdir=/usr/share/?proj/doc + docdir=/usr/share/doc/?proj datadir=/usr/share/?proj/data - nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" + nimbleDir="/usr/share/nimble/pkgs/?c.nimblePkgName-?c.version" ;; "/usr/local/bin") bindir=/usr/local/bin configdir=/etc libdir=/usr/local/lib/?proj - docdir=/usr/local/share/?proj/doc + docdir=/usr/local/share/doc/?proj datadir=/usr/local/share/?proj/data - nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" + nimbleDir="/usr/share/nimble/pkgs/?c.nimblePkgName-?c.version" ;; "/opt") bindir="/opt/?proj/bin"