diff options
Diffstat (limited to 'src/createpkg')
-rw-r--r-- | src/createpkg | 171 |
1 files changed, 130 insertions, 41 deletions
diff --git a/src/createpkg b/src/createpkg index 6adf502..8118715 100644 --- a/src/createpkg +++ b/src/createpkg @@ -24,10 +24,10 @@ # TODO # # - optionally show a dependency tree before create the package -# - think if its better to change function check_config to directly source +# - ok - ??? think if its better to change function check_config to directly source # both /root/.slackbuildrc and /etc/slackbuildrc -# - option --list to list all available slackbuilds -# - option --search allowing use of wildcards or just part of the package name +# - ok - option --list to list all available slackbuilds +# - ok - option --search allowing use of wildcards or just part of the package name # - in function solve_dep: resolve program versions # @@ -38,7 +38,9 @@ function handle_error { # this function deals with internal createpkg errors # and also with non-zero exit codes from slackbuilds - + # Input: $1 - error code + # Output: Error mensage + # # check slackbuild exit status are: # # ERROR_WGET=31; ERROR_MAKE=32; ERROR_INSTALL=33 @@ -55,10 +57,10 @@ function handle_error { # exit codes case $1 in - 2) usage ;; - 3) echo -e "$CL_ALERT $BASENAME: could not update the repository $2 $CL_OFF" ;; - 4) echo -e "$CL_ALERT $BASENAME: could not create folder $2 $CL_OFF" ;; - 5) echo -e "$CL_ALERT $BASENAME: script not found for $2 $CL_OFF" ;; + 2) usage ;; + 3) echo -e "$CL_ALERT $BASENAME: could not update the repository $2 $CL_OFF" ;; + 4) echo -e "$CL_ALERT $BASENAME: could not create folder $2 $CL_OFF" ;; + 5) echo -e "$CL_ALERT $BASENAME: script not found for $2 $CL_OFF" ;; 31) echo -e "$CL_ERROR $BASENAME: error downloading source for $2 $CL_OFF" ;; 32) echo -e "$CL_ERROR $BASENAME: error compiling $2 source code $CL_OFF" ;; 33) echo -e "$CL_ERROR $BASENAME: error installing $2 $CL_OFF" ;; @@ -70,7 +72,7 @@ function handle_error { 39) echo -e "$CL_ERROR $BASENAME: error verifying GPG signature the source code for $2 $CL_OFF" ;; 40) echo -e "$CL_ERROR $BASENAME: error patching the source code for $2 $CL_OFF" ;; 41) echo -e "$CL_ERROR $BASENAME: error downloading $2 source from version control system $CL_OFF" ;; - *) echo -e "$CL_ERROR $BASENAME: unknown error or user interrupt $CL_OFF" + *) echo -e "$CL_ERROR $BASENAME: unknown error or user interrupt $CL_OFF" ;; esac exit $1 @@ -91,10 +93,13 @@ function build_repo { function usage { - echo -e "$CL_COMMU usage: createpkg [--install] package-name $CL_OFF" + echo -e "$CL_COMMU Usage: createpkg [--install] package-name $CL_OFF" echo -e "$CL_COMMU createpkg --no-deps package-name $CL_OFF" - echo -e "$CL_COMMU createpkg --search package-name $CL_OFF" - echo -e "$CL_COMMU createpkg --sync $CL_OFF" + echo -e "$CL_COMMU createpkg --search package-name $CL_OFF" + echo -e "$CL_COMMU createpkg --info package-name $CL_OFF" + echo -e "$CL_COMMU createpkg --list $CL_OFF" + echo -e "$CL_COMMU createpkg --sync $CL_OFF" + echo -e "$CL_COMMU createpkg --help $CL_OFF" } @@ -122,7 +127,8 @@ function solve_dep { cond="$2" ver="$3" - if [ "$cond" != "equal" ] && [ "$cond" != "less" ] && [ "$cond" != "equalorgreater" ] && [ "$cond" != "lessequal" ] && [ ! -z "$cond" ]; then + #if [ "$cond" != "e" ] && [ "$cond" != "l" ] && [ "$cond" != "ge" ] && [ "$cond" != "le" ] && [ ! -z "$cond" ]; then + if [ ! -z "$cond" ]; then # slack-required has a wrong logical sentence, so we ignore it check_version="no" fi @@ -176,17 +182,76 @@ function find_script { } +function info_builds { + + # Show packages info + if [ "$PKG_PATH" != "" ]; then + for i in $PKG_PATH; do + PACKAGE=`basename $i .SlackBuild` + NAME_UP=`echo $PACKAGE | tr [a-z] [A-Z]` + echo -e "$CL_COMMU $NAME_UP: $CL_OFF" + eval "cat $i | grep '^$PACKAGE:' | cut -f2- -d:" + echo -e "$CL_OFF" + done + fi + +} + +function list_builds { + + # List all available SlackBuilds + # find $SLACKBUILDS -name *.SlackBuild | sed -r 's,.*/(.*)\.SlackBuild$,\1,' | sort + cd $SLACKBUILDS + echo "Sarava SlackBuilds list" + # level 1 + for i in *; do + if [ -d $i ]; then + echo -e " $i: " + ( + cd $i + # level 2 + for j in *; do + if [ -d $j ]; then + echo -e "$CL_COMMU $j $CL_OFF" + ( + cd $j + BUILD="`ls *.SlackBuild 2>/dev/null`" + if [ "$BUILD" != "" ]; then + # level 3 + for k in $BUILD; do + echo -e "$CL_MENSG $k $CL_OFF" + done + else + BUILD="" + fi + for k in *; do + if [ -d $k ]; then + echo -e "$CL_MENSG $k.SlackBuild $CL_OFF" + fi + done + ) + fi + done + ) + fi + done +} + #--------------------------------------------------- # Starting createpkg #--------------------------------------------------- # Common functions COMMON="/usr/libexec/simplepkg/common.sh" + +# TODO: SLACKBUILDRC is need? if [ -f ~/.slackbuildrc ]; then - source ~/.slackbuildrc + SLACKBUILDRC=~/.slackbuildrc else - source /etc/slackbuildrc 2>/dev/null + SLACKBUILDRC=/etc/slackbuildrc fi +source $SLACKBUILDRC 2>/dev/null + # Select color mode: gray, color or none (*) # CL_COMMU - Communication # CL_MENSG - Commum messages @@ -228,7 +293,8 @@ fi if [ -z "$CREATEPKG_CHILD" ]; then CREATEPKG_CHILD="1" else - CREATEPKG_CHILD="`echo $CREATEPKG_CHILD + 1 | bc -l`" + #CREATEPKG_CHILD="`echo $CREATEPKG_CHILD + 1 | bc -l`" + let CREATEPKG_CHILD++ fi BASENAME="`basename $0`[$CREATEPKG_CHILD]" @@ -236,56 +302,80 @@ BASENAME="`basename $0`[$CREATEPKG_CHILD]" check_config check_repo -if [ -z "$1" ]; then - handle_error 2 -elif [ "$#" == "2" ]; then - if [ "$1" == "--search" ]; then +case $1 in + '--search') + [ $# -ne 2 ] && handle_error 2 # two parameters is required find_script $2 exit - elif [ "$1" == "--install" ]; then + ;; + '--info') + [ $# -ne 2 ] && handle_error 2 # two parameters is required + PKG_PATH=`find_script $2` + info_builds + exit + ;; + '--install') + [ $# -ne 2 ] && handle_error 2 # two parameters is required PACKAGE="$2" INSTALL="1" - elif [ "$1" == "--no-deps" ]; then + ;; + '--no-deps') + [ $# -ne 2 ] && handle_error 2 # two parameters is required NO_DEPS="1" PACKAGE="$2" - else - handle_error 2 - fi -elif [ "$1" == "--sync" ]; then - sync_repo - exit -elif [ "${1:0:1}" != "-" ]; then - PACKAGE="$1" -else - handle_error 2 -fi + ;; + '--sync') + sync_repo + exit + ;; + '--help'|'') + usage + exit + ;; + '--list') + list_builds + exit + ;; + *) + if [ "${1:0:1}" != "-" ]; then + PACKAGE="$1" + else + handle_error 2 + fi + ;; +esac +# Synchronize repository if [ "$SYNC" == "yes" ]; then sync_repo fi +# Get SlackBuild script BUILD_SCRIPT="`find_script $PACKAGE`" +# Check SlackBuild script found if [ -z "$BUILD_SCRIPT" ]; then handle_error 5 $PACKAGE fi +# Get dirname and script name from slackbuild SCRIPT_BASE="`dirname $BUILD_SCRIPT`" +SCRIPT_NAME="`basename $BUILD_SCRIPT`" echo -e "$CL_MENSG $BASENAME: found script $PACKAGE.SlackBuild, now checking for dependencies $CL_OFF" -# sets the package's slack-required +# Sets the package's slack-required 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" ] && [ "$NO_DEPS" != "1" ]; then +if [ ! -z "$SLACK_REQ" -a "$NO_DEPS" != "1" ]; then # this routine checks for dependencies in package's slack-required while read dep; do if [ ! -z "$dep" ]; then program="`echo $dep | awk '{ print $1 }'`" - condition="`echo $dep | awk '{ print $2 }' | sed -e 's/>=/equalorgreater/' -e 's/=</equalorless/' -e 's/</less/' -e 's/>/greater/' -e 's/=/equal/'`" + condition="`echo $dep | awk '{ print $2 }' | tr [=\>\<] [egl]`" version="`echo $dep | awk '{ print $3 }' | tr -dc '[:digit:]'`" solve_dep $program $condition $version fi @@ -295,13 +385,13 @@ else echo -e "$CL_MENSG $BASENAME: no unmet dependencies for $PACKAGE $CL_OFF" fi -echo -e "$CL_MENSG $BASENAME: processing `basename $BUILD_SCRIPT` $CL_OFF" +echo -e "$CL_MENSG $BASENAME: processing $SCRIPT_NAME $CL_OFF" -# built package +# Built package cd $SCRIPT_BASE -INTERACT=no ./`basename $BUILD_SCRIPT` +INTERACT=no ./$SCRIPT_NAME -# check if package was built +# Check if package was built handle_error $? $PACKAGE if [ "$INSTALL" == "1" ]; then @@ -310,4 +400,3 @@ if [ "$INSTALL" == "1" ]; then PACKAGE="`ls -1 -c $REPOS/$PACKAGE-*-*-*tgz | head -n 1`" upgradepkg --install-new $PACKAGE fi - |