Files
scratchpkg/functions/functions
2017-12-08 21:13:21 +08:00

258 lines
5.2 KiB
Bash

#!/bin/bash
FUNCTIONS=${FUNCTIONS:-'/usr/share/scratchpkg'}
source "$FUNCTIONS/options"
source "$FUNCTIONS/color"
source "$FUNCTIONS/message"
### SET SOME 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"
BACKUP_DIR="/var/cache/scratchpkg/backup"
REJECTED_DIR="/var/cache/scratchpkg/rejected"
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
### SET BSDTAR FOR EXTRACT PROGRAM IF LIBARCHIVE IS INSTALLED ###
if [ "$(type -pa bsdtar)" ]; then
EXTPROG=bsdtar
else
EXTPROG=tar
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 -pa $1 &>/dev/null; then
msgerr "$1 not exist in your system!"
exit 1
fi
}
updmimedb() {
# msg2 "Update mime database..."
if [ -x /usr/bin/update-mime-database ]; then
/usr/bin/update-mime-database /usr/share/mime
fi
}
updiconcache() {
# ms2 "Update icon cache..."
if [ -x /usr/bin/gtk-update-icon-cache ]; then
/usr/bin/gtk-update-icon-cache -qf /usr/share/icons/hicolor
fi
}
updglibschemas() {
# msg2 "Update glib schemas..."
if [ -x /usr/bin/glib-compile-schemas ]; then
/usr/bin/glib-compile-schemas /usr/share/glib-2.0/schemas
fi
}
upddesktopdb() {
# msg2 "Update desktop database..."
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database
fi
}
updmandb() {
# msg2 "Update man database..."
if [ -x /usr/bin/mandb ]; then
/usr/bin/mandb -q
fi
}
updlibdb() {
# msg2 "Running ldconfig..."
if [ -x /sbin/ldconfig ]; then
/sbin/ldconfig
fi
}
updinfopages() {
pushd /usr/share/info
if [ -f dir ]; then
rm dir
fi
for f in *; do
install-info $f dir 2>/dev/null
done
popd
}
getpkginfo() {
description=$(cat $BUILD_SCRIPT | grep ^'# description' | sed 's/\://' | cut -d ' ' -f 3-)
backup=$(cat $BUILD_SCRIPT | grep ^'# backup' | sed 's/\://' | cut -d ' ' -f 3-)
conflict=$(cat $BUILD_SCRIPT | grep ^'# conflict' | sed 's/\://' | cut -d ' ' -f 3-)
depends=$(cat $BUILD_SCRIPT | grep ^'# depends' | sed 's/\://' | cut -d ' ' -f 3-)
makedepends=$(cat $BUILD_SCRIPT | grep ^'# makedepends' | sed 's/\://' | cut -d ' ' -f 3-)
noextract=$(cat $BUILD_SCRIPT | grep ^'# noextract' | sed 's/\://' | cut -d ' ' -f 3-)
options=$(cat $BUILD_SCRIPT | grep ^'# options' | sed 's/\://' | cut -d ' ' -f 3-)
. $BUILD_SCRIPT
}
getpkginfofrompkg() {
name=$(tar xf $1 .pkginfo -O | grep ^name | cut -d " " -f3)
version=$(tar xf $1 .pkginfo -O | grep ^version | cut -d " " -f3)
release=$(tar xf $1 .pkginfo -O | grep ^release | cut -d " " -f3)
description=$(tar xf $1 .pkginfo -O | grep ^description | cut -d " " -f3-)
backup=$(tar xf $1 .pkginfo -O | grep ^backup | cut -d " " -f3-)
conflict=$(tar xf $1 .pkginfo -O | grep ^conflict | cut -d " " -f3-)
depends=$(tar xf $1 .pkginfo -O | grep ^depends | cut -d " " -f3-)
makedepends=$(tar xf $1 .pkginfo -O | grep ^makedepends | cut -d " " -f3-)
}
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)
depends=$(cat $INDEX_DIR/$1/.pkginfo | grep ^depends | cut -d " " -f3-)
backup=$(cat $INDEX_DIR/$1/.pkginfo | grep ^backup | cut -d " " -f3-)
installedname=$iname-$iversion-$irelease
}
createtemplate() {
if [ -d $TEMPLATE_NAME ]; then
msg "Error directory ${color_red}$TEMPLATE_NAME${color_reset} already exist"
exit 1
else
mkdir $TEMPLATE_NAME
echo "# description :
# backup :
# conflict :
# depends :
# makedepends :
# noextract :
name=$TEMPLATE_NAME
version=
release=1
options=()
source=()
build() {
cd \$name-\$version
./configure --prefix=/usr
make
make DESTDIR=\$PKG install
}" > $TEMPLATE_NAME/$BUILD_SCRIPT
msg "Template port have created for ${color_green}$TEMPLATE_NAME${color_reset}."
fi
}
checkdirexist() {
for dir in "$@"; do
if [ ! -d $dir ]; then
msgwarn "Directory ${color_yellow}$dir${color_reset} not exist."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}
checkdirwrite() {
for dir in "$@"; do
if [ ! -w $dir ]; then
msgwarn "Directory ${color_yellow}$dir${color_reset} not writable."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}
checkdirread() {
for dir in "$@"; do
if [ ! -x $dir ] || [ ! -r $1 ]; then
msgwarn "Directory ${color_yellow}$dir${color_reset} not readable."
DIR_ERROR=yes
fi
done
[ "$DIR_ERROR" ] && exit 1
}