niminst: support DESTDIR and quote variables (#20051)

* niminst: support DESTDIR (fix #9788)

* niminst: quote variables
This commit is contained in:
Anna 2022-07-19 00:22:53 +05:00 • committed by GitHub
commit 2549d398a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -6,19 +6,19 @@
set -e set -e
if [ $# -eq 1 ] ; then if [ $# -eq 1 ] ; then
# if c.cat[fcUnixBin].len > 0: #if c.cat[fcUnixBin].len > 0:
if test -f ?{c.cat[fcUnixBin][0].toUnix} if [ -f "?{c.cat[fcUnixBin][0].toUnix}" ]
then then
echo "?c.displayName build detected" echo "?c.displayName build detected"
else else
echo "Please build ?c.displayName before installing it" echo "Please build ?c.displayName before installing it"
exit 1 exit 1
fi fi
# end if #end if
case $1 in case $1 in
"--help"|"-h"|"help"|"h") "--help"|"-h"|"help"|"h")
echo "?c.displayName installation script" echo "?c.displayName installation script"
echo "Usage: [sudo] sh install.sh DIR" echo "Usage: [sudo] [env DESTDIR=...] sh install.sh DIR"
echo "Where DIR may be:" echo "Where DIR may be:"
echo " /usr/bin" echo " /usr/bin"
echo " /usr/local/bin" echo " /usr/local/bin"
@ -29,19 +29,19 @@ if [ $# -eq 1 ] ; then
exit 1 exit 1
;; ;;
"/usr/bin") "/usr/bin")
bindir=/usr/bin bindir=$1
configdir=/etc/?proj configdir="/etc/?proj"
libdir=/usr/lib/?proj libdir="/usr/lib/?proj"
docdir=/usr/share/?proj/doc docdir="/usr/share/?proj/doc"
datadir=/usr/share/?proj/data datadir="/usr/share/?proj/data"
nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version"
;; ;;
"/usr/local/bin") "/usr/local/bin")
bindir=/usr/local/bin bindir=$1
configdir=/etc/?proj configdir="/etc/?proj"
libdir=/usr/local/lib/?proj libdir="/usr/local/lib/?proj"
docdir=/usr/local/share/?proj/doc docdir="/usr/local/share/?proj/doc"
datadir=/usr/local/share/?proj/data datadir="/usr/local/share/?proj/data"
nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version"
;; ;;
"/opt") "/opt")
@ -51,9 +51,6 @@ if [ $# -eq 1 ] ; then
docdir="/opt/?proj/doc" docdir="/opt/?proj/doc"
datadir="/opt/?proj/data" datadir="/opt/?proj/data"
nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version" nimbleDir="/opt/nimble/pkgs/?c.nimblePkgName-?c.version"
mkdir -p /opt/?proj
mkdir -p $bindir
mkdir -p $configdir
;; ;;
*) *)
bindir="$1/?proj/bin" bindir="$1/?proj/bin"
@ -62,16 +59,22 @@ if [ $# -eq 1 ] ; then
docdir="$1/?proj/doc" docdir="$1/?proj/doc"
datadir="$1/?proj/data" datadir="$1/?proj/data"
nimbleDir="$1/?proj" nimbleDir="$1/?proj"
mkdir -p $1/?proj
mkdir -p $bindir
mkdir -p $configdir
;; ;;
esac esac
mkdir -p $libdir bindir="${DESTDIR}${bindir}"
mkdir -p $docdir configdir="${DESTDIR}${configdir}"
mkdir -p $configdir libdir="${DESTDIR}${libdir}"
mkdir -p $nimbleDir/ docdir="${DESTDIR}${docdir}"
datadir="${DESTDIR}${datadir}"
nimbleDir="${DESTDIR}${nimbleDir}"
mkdir -p "$bindir"
mkdir -p "$configdir"
mkdir -p "$libdir"
mkdir -p "$docdir"
mkdir -p "$datadir"
mkdir -p "$nimbleDir"
echo "copying files..." echo "copying files..."
#var createdDirs = newStringTable() #var createdDirs = newStringTable()
#for cat in {fcConfig..fcLib, fcNimble}: #for cat in {fcConfig..fcLib, fcNimble}:
@ -84,46 +87,46 @@ if [ $# -eq 1 ] ; then
# end if # end if
# if mk.len > 0 and not createdDirs.hasKey(mk): # if mk.len > 0 and not createdDirs.hasKey(mk):
# createdDirs[mk] = "true" # createdDirs[mk] = "true"
mkdir -p ?{mk.toUnix} mkdir -p "?{mk.toUnix}"
# end if # end if
# end for # end for
#end for #end for
#for f in items(c.cat[fcUnixBin]): #for f in items(c.cat[fcUnixBin]):
cp ?f.toUnix $bindir/?f.skipRoot.toUnix cp "?f.toUnix" "$bindir/?f.skipRoot.toUnix"
chmod 755 $bindir/?f.skipRoot.toUnix chmod 755 "$bindir/?f.skipRoot.toUnix"
#end for #end for
#for f in items(c.cat[fcConfig]): #for f in items(c.cat[fcConfig]):
cp ?f.toUnix $configdir/?f.skipRoot.toUnix cp "?f.toUnix" "$configdir/?f.skipRoot.toUnix"
chmod 644 $configdir/?f.skipRoot.toUnix chmod 644 "$configdir/?f.skipRoot.toUnix"
#end for #end for
#for f in items(c.cat[fcData]): #for f in items(c.cat[fcData]):
if [ -f ?f.toUnix ]; then if [ -f "?f.toUnix" ]; then
cp ?f.toUnix $datadir/?f.skipRoot.toUnix cp "?f.toUnix" "$datadir/?f.skipRoot.toUnix"
chmod 644 $datadir/?f.skipRoot.toUnix chmod 644 "$datadir/?f.skipRoot.toUnix"
fi fi
#end for #end for
#for f in items(c.cat[fcDoc]): #for f in items(c.cat[fcDoc]):
if [ -f ?f.toUnix ]; then if [ -f "?f.toUnix" ]; then
cp ?f.toUnix $docdir/?f.skipRoot.toUnix cp "?f.toUnix" "$docdir/?f.skipRoot.toUnix"
chmod 644 $docdir/?f.skipRoot.toUnix chmod 644 "$docdir/?f.skipRoot.toUnix"
fi fi
#end for #end for
#for f in items(c.cat[fcLib]): #for f in items(c.cat[fcLib]):
cp ?f.toUnix $libdir/?f.skipRoot.toUnix cp "?f.toUnix" "$libdir/?f.skipRoot.toUnix"
chmod 644 $libdir/?f.skipRoot.toUnix chmod 644 "$libdir/?f.skipRoot.toUnix"
#end for #end for
#for f in items(c.cat[fcNimble]): #for f in items(c.cat[fcNimble]):
cp ?f.toUnix $nimbleDir/?f.toUnix cp "?f.toUnix" "$nimbleDir/?f.toUnix"
chmod 644 $nimbleDir/?f.toUnix chmod 644 "$nimbleDir/?f.toUnix"
#end for #end for
cp ?{c.nimblePkgName}.nimble $nimbleDir/?{c.nimblePkgName}.nimble cp "?{c.nimblePkgName}.nimble" "$nimbleDir/?{c.nimblePkgName}.nimble"
chmod 644 $nimbleDir/?{c.nimblePkgName}.nimble chmod 644 "$nimbleDir/?{c.nimblePkgName}.nimble"
echo "installation successful" echo "installation successful"
else else
echo "?c.displayName installation script" echo "?c.displayName installation script"
echo "Usage: [sudo] sh install.sh DIR" echo "Usage: [sudo] [env DESTDIR=...] sh install.sh DIR"
echo "Where DIR may be:" echo "Where DIR may be:"
echo " /usr/bin" echo " /usr/bin"
echo " /usr/local/bin" echo " /usr/local/bin"