Files
scratchpkg/functions/functions
2018-06-03 16:58:27 +08:00

189 lines
4.0 KiB
Bash

#!/bin/bash
FUNCTIONS=${FUNCTIONS:-'/usr/share/scratchpkg'}
source "$FUNCTIONS/options"
source "$FUNCTIONS/color"
source "$FUNCTIONS/message"
# defaults value
CONF_FILE="/etc/scratchpkg.conf"
BUILD_SCRIPT="spkgbuild"
ROOT_DIR="/"
INDEX_DIR="/var/lib/scratchpkg/index"
PACKAGE_DIR="/var/cache/scratchpkg/packages"
SOURCE_DIR="/var/cache/scratchpkg/sources"
WORK_DIR="/tmp"
LOG_DIR="/var/cache/scratchpkg/log"
HOOK_DIR="/etc/hooks"
OPTIONS=(!libtool emptydirs strip docs purge zipman buildflags makeflags)
PURGE_FILES=(usr/{,share/}info/dir)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
MAN_DIRS=({usr{,/local}{,/share},opt/*}/man)
if [ -f $CONF_FILE ]; then
. $CONF_FILE
else
msgerr "Configuration file not found."
exit 1
fi
# check for extract tool
if [ "$(type -p bsdtar)" ]; then
EXTPROG=$(type -p bsdtar)
elif [ "$(type -p tar)" ]; then
EXTPROG=$(type -p tar)
else
msgerr "libarchive or tar is needed. Aborted!"
exit 1
fi
# functions load by scratchpkg
pushd() {
command pushd "$@" >/dev/null
}
popd() {
command popd >/dev/null
}
rmdir_silent() {
command rmdir "$@" 2> /dev/null
}
rm_silent() {
command rm "$@" 2> /dev/null
}
needroot() {
if [ $UID != 0 ]; then
if [ "$#" -eq 0 ]; then
needroot "This operation"
else
msgerr "$@ need root access!"
fi
exit 1
fi
}
checktool() {
if ! type -p $1 &>/dev/null; then
msgerr "'$1' not exist in your system!"
exit 1
fi
}
# function to print all installed packages
allinstalled() {
ls ${INDEX_DIR}/*/.pkginfo | rev | cut -d '/' -f2 | rev 2>/dev/null
}
getpkginfo() {
description=$(grep "^# description[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# description[[:blank:]]*:[[:blank:]]*//')
backup=$(grep "^# backup[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# backup[[:blank:]]*:[[:blank:]]*//')
conflict=$(grep "^# conflict[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# conflict[[:blank:]]*:[[:blank:]]*//')
depends=$(grep "^# depends[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# depends[[:blank:]]*:[[:blank:]]*//')
makedepends=$(grep "^# makedepends[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# makedepends[[:blank:]]*:[[:blank:]]*//')
noextract=$(grep "^# noextract[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# noextract[[:blank:]]*:[[:blank:]]*//')
options=$(grep "^# options[[:blank:]]*:" $BUILD_SCRIPT | sed 's/^# options[[:blank:]]*:[[:blank:]]*//')
# tmp
depends+=(${makedepends[@]})
. $BUILD_SCRIPT
}
getinstalledname() {
iname=$(cat $INDEX_DIR/$1/.pkginfo | grep ^name | cut -d " " -f3)
iversion=$(cat $INDEX_DIR/$1/.pkginfo | grep ^version | cut -d " " -f3)
irelease=$(cat $INDEX_DIR/$1/.pkginfo | grep ^release | cut -d " " -f3)
echo "$iname-$iversion-$irelease"
}
################################################################
# function to get information from installed package database
#
# Usage: installed_pkg_info <arg> <pkg>
#
# Note: 'arg' could be name, version, release, depends,
# makedepends and descriptions.
################################################################
installed_pkg_info() {
if [ -f $INDEX_DIR/$2/.pkginfo ]; then
echo $(cat $INDEX_DIR/$2/.pkginfo | grep ^$1 | cut -d " " -f3-)
fi
}
getinfopkg() {
cat /tmp/spkg.$2.pkginfo | grep ^$1 | cut -d " " -f3
}
vercomp() {
if [ "$1" = "$2" ]; then
return 0 # same version
elif [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]; then
return 1 # $1 lower than $2
else
return 2 # $1 higher than $2
fi
}
checkdirexist() {
for dir in "$@"; do
if [ ! -d $dir ]; then
msgwarn "Directory ${YELLOW}$dir${CRESET} not exist."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}
checkdirwrite() {
for dir in "$@"; do
if [ ! -w $dir ]; then
msgwarn "Directory ${YELLOW}$dir${CRESET} not writable."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}
checkdirread() {
for dir in "$@"; do
if [ ! -x $dir ] || [ ! -r $1 ]; then
msgwarn "Directory ${YELLOW}$dir${CRESET} not readable."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}