diff options
Diffstat (limited to 'src/createpkg')
-rw-r--r-- | src/createpkg | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/src/createpkg b/src/createpkg new file mode 100644 index 0000000..45fb329 --- /dev/null +++ b/src/createpkg @@ -0,0 +1,184 @@ +#!/bin/bash +# +# createpkg: package builder using http://slack.sarava.org/slackbuilds scripts +# feedback: rhatto at riseup.net | gpl +# +# createpkg is free software; you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or any later version. +# +# createpkg is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place - Suite 330, Boston, MA 02111-1307, USA +# +# /etc/simplepkg/slackbuildrc parameters: +# +# SLACKBUILDS="/folder/to/place/slackbuilds", defaults to /var/slackbuilds +# SVN="svn://repository", defaults do svn://slack.sarava.org/slackbuilds +# SYNC="yes|no", whether to always update the repository +# + +COMMON="/usr/libexec/simplepkg/common.sh" +SLACKBUILDRC="/etc/slackbuildrc" + +if [ -f "$COMMON" ]; then + source $COMMON +else + echo "error: file $COMMON found, check your `basename $0` installation" + exit 1 +fi + +function safe_exit { + + # exit codes + case $1 in + 2) echo Could not create folder $2;; + 3) echo Could not update the repository $2 ;; + 4) usage ;; + 5) echo Script not found;; + *) exit 1 + esac + + exit $1 + +} + +function build_repo { + + BASEDIR="`dirname $SLACKBUILDS`" + mkdir -p $BASEDIR || safe_exit 2 $BASEDIR + cd $BASEDIR + svn checkout $SVN + cd $SLACKBUILDS + +} + +function usage { + + echo "usage: createpkg [--install] package-name" + echo " createpkg --search package-name" + echo " createpkg --sync" + +} + +function check_config { + + if [ -f "$SLACKBUILDRC" ]; then + source $SLACKBUILDRC + fi + + TMP=${TMP:=/tmp} + REPOS=${REPOS:=$TMP} + SLACKBUILDS=${SLACKBUILDS:=/var/slackbuilds} + SVN=${SVN:=svn://slack.sarava.org/slackbuilds} + SYNC=${SYNC:=no} + BASEDIR="`dirname $SLACKBUILDS`" + +} + +function solve_dep { + + # TODO: solve dep with version checking + + pack="$1" + for candidate in `ls /var/log/packages/$pack* 2> /dev/null`; do + candidate="`package_name $candidate`" + if [ "$pack" == "$candidate" ]; then + found="1" + break + fi + done + + if [ "$found" != "1" ]; then + createpkg --install $pack + else + found="0" + fi + +} + +function check_repo { + + if [ ! -d "$SLACKBUILDS" ]; then + build_repo + fi + +} + +function sync_repo { + + cd $SLACKBUILDS + svn update || build_repo + +} + +function find_script { + + find $SLACKBUILDS | grep -v .svn | grep $1.SlackBuild + +} + +check_config +check_repo + +if [ -z "$1" ]; then + safe_exit 4 +elif [ "$1" == "--sync" ]; then + sync_repo + exit +elif [ "$1" == "--search" ]; then + find_script $2 + exit +elif [ "$1" == "--install" ]; then + PACKAGE="$2" + INSTALL="1" +else + PACKAGE="$1" +fi + +if [ "$SYNC" == "yes" ]; then + sync_repo +fi + +BUILD_SCRIPT="`find_script $PACKAGE`" + +if [ -z "$BUILD_SCRIPT" ]; then + safe_exit 5 +fi + +SCRIPT_BASE="`dirname $BUILD_SCRIPT`" + +if [ -f "$SCRIPT_BASE/$PACKAGE.slack-required" ]; then + SLACK_REQ="$SCRIPT_BASE/$PACKAGE.slack-required" +elif [ -f "$SCRIPT_BASE/slack-required" ]; then + SLACK_REQ="$SCRIPT_BASE/slack-required" +fi + +if [ ! -z "$SLACK_REQ" ]; then + + cat $SLACK_REQ | while read dep; do + dep="`echo $dep | sed -e 's/>=/equalorgreater/' -e 's/=</equalorless/' -e 's/</less/' -e 's/>/greater/' -e 's/=/equal/'`" + solve_dep $dep + done + +fi + +cd $SCRIPT_BASE +INTERACT=no ./`basename $BUILD_SCRIPT` + +VERSION="`grep -e '^VERSION=' $BUILD_SCRIPT | head -n 1 | sed -e "s/VERSION//g" -e 's/=//g' -e 's/-//g' | cut -d ":" -f 2 | cut -d "}" -f 1`" +BUILD="`grep -e '^BUILD=' $BUILD_SCRIPT | head -n 1 | sed -e "s/BUILD//g" -e 's/=//g' | cut -d ":" -f 2 | cut -d "}" -f 1`" +_ARCH="`grep -e '^ARCH' $BUILD_SCRIPT | head -n 1 | cut -d "=" -f 2 | sed -e 's/"//g'`" + +if [ "$_ARCH" == "noarch" ]; then + ARCH="noarch" +fi + +if [ "$INSTALL" == "1" ]; then + installpkg $REPOS/$PACKAGE-$VERSION-$ARCH-$BUILD.tgz +fi + |