From 7705246e6fe39f48bfcc9f357c056704e08ffc2d Mon Sep 17 00:00:00 2001 From: rudson Date: Tue, 6 May 2008 18:13:31 +0000 Subject: git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@507 04377dda-e619-0410-9926-eae83683ac58 --- trunk/src/createpkg | 462 ++++++++++++++++++++++++++++------------------------ 1 file changed, 245 insertions(+), 217 deletions(-) (limited to 'trunk/src/createpkg') diff --git a/trunk/src/createpkg b/trunk/src/createpkg index 557e3f6..93c658d 100644 --- a/trunk/src/createpkg +++ b/trunk/src/createpkg @@ -27,12 +27,12 @@ # Createpkg functions #--------------------------------------------------- -CREATEPKG_VERSION="1.1.11" +CREATEPKG_VERSION="1.1.12" function usage { - # Help message - echo -e "${red}NAME${normal} + # Help message + echo -e "${red}NAME${normal} createpkg - create Slackware packages from SlackBuilds in Sarava repository ${red}SYNOPSIS @@ -48,7 +48,9 @@ ${red}DESCRIPTION${normal} create all packages and install ${red}-np${normal}, ${red}--no-deps${normal} does not solve dependences - ${red}-s${normal}, ${red}--search${normal} + ${red}-d${normal}, ${red}--debug${normal} ${green}${normal} + enable SlackBuild debug (sh -x ...) + ${red}-s${normal}, ${red}--search${normal} ${green}S search for a ${green}${normal} ${red}-f${normal}, ${red}--info${normal} ${green}${normal} show description and dependences of the program @@ -87,163 +89,164 @@ ${red}COPYRIGHT${normal} function build_all_slackbuild { - # Build all SlackBuilds in repository - createpkg --sync + # Build all SlackBuilds in repository + createpkg --sync - cd $SLACKBUILDS_DIR - LIST=`find . -name *.SlackBuild | sed 's/.*\/\(.*\)\.SlackBuild$/\1/' | sort | uniq` - for i in $LIST; do - [ ! lspkg $i >/dev/null ] && createpkg -i $i - done + cd $SLACKBUILDS_DIR + LIST=`find . -name *.SlackBuild | sed 's/.*\/\(.*\)\.SlackBuild$/\1/' | sort | uniq` + for i in $LIST; do + [ ! lspkg $i >/dev/null ] && createpkg -i $i + done } function check_config { - # check the configuration - TMP=${TMP:=/tmp}; - if [ ! -z "$REPOS" ]; then - MAKEPKG_REPOS="$REPOS" - else - REPOS=$MAKEPKG_REPOS - fi - # Create $TMP and $REPOS if need - [ ! -e $TMP ] && mkdir -p $TMP - [ ! -e $MAKEPKG_REPOS ] && mkdir -p $MAKEPKG_REPOS - # - SLACKBUILDS_DIR=${SLACKBUILDS_DIR:=/var/slackbuilds} - # - SYNC=${SYNC:=$no} - SYNC=`convert_boolean $SYNC` - BASEDIR="`dirname $SLACKBUILDS_DIR`" + # check the configuration + TMP=${TMP:=/tmp}; + if [ ! -z "$REPOS" ]; then + MAKEPKG_REPOS="$REPOS" + else + REPOS=$MAKEPKG_REPOS + fi + # Create $TMP and $REPOS if need + [ ! -e $TMP ] && mkdir -p $TMP + [ ! -e $MAKEPKG_REPOS ] && mkdir -p $MAKEPKG_REPOS + # + SLACKBUILDS_DIR=${SLACKBUILDS_DIR:=/var/slackbuilds} + # + SYNC=${SYNC:=$no} + SYNC=`convert_boolean $SYNC` + BASEDIR="`dirname $SLACKBUILDS_DIR`" } function solve_dep { - # Solve dependency - [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER - local PACK="$1" - local COND="$2" - local VER="$3" - - # Check package in local system - PACK="`echo $PACK | sed -e 's/\+/\\\+/'`" - INSTALLED=`eval "ls /var/log/packages/ | egrep -E '^$PACK-[^-]+-[^-]+-[^-]+$'"` - CHECK=$? - - # TODO: Make check version procedures - if [ -z "$INSTALLED" ]; then - if [ $CHECK -ne 0 ]; then - # Check package in SlackBuilds tree - eecho $messag "$BASENAME: processing $PACKAGE dependency $PACK" - SYNC=$no CREATEPKG_CHILD=$CREATEPKG_CHILD createpkg --install $PACK - - # Check if the package was built and installed - EXIT_CODE=$? - - if [ $EXIT_CODE -eq $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND ]; then - # Try to use simplaret - ARCH=$CREATE_ARCH simplaret --update - ARCH=$CREATE_ARCH simplaret --install $PACK - [ $? -ne 0 ] && handle_error $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND $PACK - elif [ $EXIT_CODE -ne 0 ]; then - handle_error $EXIT_CODE $PACK - fi - - fi + # Solve dependency + [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER + local PACK="$1" + local COND="$2" + local VER="$3" + + # Check package in local system + PACK="`echo $PACK | sed -e 's/\+/\\\+/'`" + INSTALLED=`eval "ls /var/log/packages/ | egrep -E '^$PACK-[^-]+-[^-]+-[^-]+$'"` + CHECK=$? + + # TODO: Make check version procedures + if [ -z "$INSTALLED" ]; then + if [ $CHECK -ne 0 ]; then + # Check package in SlackBuilds tree + eecho $messag "$BASENAME: processing $PACKAGE dependency $PACK" + SYNC=$no CREATEPKG_CHILD=$CREATEPKG_CHILD createpkg --install $PACK + + # Check if the package was built and installed + EXIT_CODE=$? + + if [ $EXIT_CODE -eq $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND ]; then + # Try to use simplaret + ARCH=$CREATE_ARCH simplaret --update + ARCH=$CREATE_ARCH simplaret --install $PACK + [ $? -ne 0 ] && handle_error $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND $PACK + elif [ $EXIT_CODE -ne 0 ]; then + handle_error $EXIT_CODE $PACK + fi + fi + fi } function find_slackbuild { - # Find SlackBuild script in the repository - [ $# -ne 1 ] && handle_error $ERROR_PAR_NUMBER - find $SLACKBUILDS_DIR -iname $1.SlackBuild - + # Find SlackBuild script in the repository + [ $# -ne 1 ] && handle_error $ERROR_PAR_NUMBER + find $SLACKBUILDS_DIR -iname $1.SlackBuild + EXIT_CODE=$? } 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]` - eecho $commun "$NAME_UP: " - - PKG_DIR=`dirname $i` - if [ -e $PKG_DIR/slack-desc ]; then - eval "cat $PKG_DIR/slack-desc | grep '^$PACKAGE:' | cut -f2- -d:" - eecho $normal - else - eval "cat $i | grep '^$PACKAGE:' | cut -f2- -d:" - eecho $normal - fi - - if [ -e $PKG_DIR/slack-required ]; then - eecho $commun "slack-required" - cat $PKG_DIR/slack-required | sed 's/^/ /' - fi - done - fi + # 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]` + eecho $commun "$NAME_UP: " + + PKG_DIR=`dirname $i` + if [ -e $PKG_DIR/slack-desc ]; then + eval "cat $PKG_DIR/slack-desc | grep '^$PACKAGE:' | cut -f2- -d:" + eecho $normal + else + eval "cat $i | grep '^$PACKAGE:' | cut -f2- -d:" + eecho $normal + fi + + if [ -e $PKG_DIR/slack-required ]; then + eecho $commun "slack-required" + cat $PKG_DIR/slack-required | sed 's/^/ /' + fi + done + fi } function list_builds { - # List all available SlackBuilds - cd $SLACKBUILDS_DIR - echo "Sarava SlackBuilds list" - # level 1 - for i in *; do - if [ -d $i ]; then - echo -e " $i: " + # List all available SlackBuilds + cd $SLACKBUILDS_DIR + 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 + eecho $commun " $j" ( - cd $i - # level 2 - for j in *; do - if [ -d $j ]; then - eecho $commun " $j" - ( - cd $j - BUILD="`ls *.SlackBuild 2>/dev/null`" - if [ "$BUILD" != "" ]; then - # level 3 - for k in $BUILD; do - eecho $messag " $k" - done - else - BUILD="" - fi - for k in *; do - if [ -d $k ]; then - eecho $messag " $k.SlackBuild" - fi - done - ) + cd $j + BUILD="`ls *.SlackBuild 2>/dev/null`" + if [ "$BUILD" != "" ]; then + # level 3 + for k in $BUILD; do + eecho $messag " $k" + done + else + BUILD="" + fi + for k in *; do + if [ -d $k ]; then + eecho $messag " $k.SlackBuild" fi - done + done ) - fi - done + fi + done + ) + fi + done } function load_parameters { - # Load Createpkg parameters - MAKEPKG_REPOS="`eval_parameter MAKEPKG_REPOS /var/simplaret/repos`" - SOURCE_DIR="`eval_parameter SOURCE_DIR /var/simplaret/sources`" - SLACKBUILDS_DIR="`eval_parameter SLACKBUILDS_DIR /var/simplaret/slackbuilds`" - SLACKBUILDS_SVN="`eval_parameter SLACKBUILDS_SVN svn://slack.sarava.org/slackbuilds`" + # Load Createpkg parameters + MAKEPKG_REPOS="`eval_parameter MAKEPKG_REPOS /var/simplaret/repos`" + SOURCE_DIR="`eval_parameter SOURCE_DIR /var/simplaret/sources`" + SLACKBUILDS_DIR="`eval_parameter SLACKBUILDS_DIR /var/simplaret/slackbuilds`" + SLACKBUILDS_SVN="`eval_parameter SLACKBUILDS_SVN svn://slack.sarava.org/slackbuilds`" + + COLOR_MODE="`eval_parameter COLOR_MODE none`" + CREATE_ARCH="`eval_parameter CREATE_ARCH $(default_arch)`" + CREATE_CLEANUP="`eval_parameter CREATE_CLEANUP yes`" - COLOR_MODE="`eval_parameter COLOR_MODE none`" - CREATE_ARCH="`eval_parameter CREATE_ARCH $(default_arch)`" - CREATE_CLEANUP="`eval_parameter CREATE_CLEANUP yes`" + REMOVE_OLD_PACKAGE="`eval_boolean_parameter REMOVE_OLD_PACKAGE $off`" + MOVE_BIN_PACKAGE="`eval_boolean_parameter MOVE_BIN_PACKAGE $off`" - REMOVE_OLD_PACKAGE="`eval_boolean_parameter REMOVE_OLD_PACKAGE $off`" - MOVE_BIN_PACKAGE="`eval_boolean_parameter MOVE_BIN_PACKAGE $off`" } #--------------------------------------------------- @@ -253,6 +256,7 @@ function load_parameters { COMMON="/usr/libexec/simplepkg/common.sh" SIMPLEPKG_CONF="/etc/simplepkg/simplepkg.conf" BASENAME="`basename $0`" +EXIT_CODE=0 if [ -f "$COMMON" ]; then source $COMMON @@ -271,9 +275,9 @@ error_codes # Load slackbuildrc definitions if [ -f ~/.slackbuildrc ]; then - source ~/.slackbuildrc + source ~/.slackbuildrc else - source /etc/slackbuildrc 2>/dev/null + source /etc/slackbuildrc 2>/dev/null fi # Select color mode: gray, color or none (*) @@ -281,9 +285,9 @@ color_select $COLOR_MODE # This is used to show how many children process we have if [ -z "$CREATEPKG_CHILD" ]; then - CREATEPKG_CHILD=1 + CREATEPKG_CHILD=1 else - let CREATEPKG_CHILD++ + let CREATEPKG_CHILD++ fi BASENAME="`basename $0`[$CREATEPKG_CHILD]" @@ -293,53 +297,59 @@ check_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN INSTALL=$off NO_DEPS=$off +DEBUG=$off case $1 in - '--all'|'-a') - # build all SlackBuilds in repository - build_all_slackbuild - exit 0 - ;; - '--search'|'-s') - [ $# -ne 2 ] && usage # two parameters is required - find_slackbuild $2 - exit 0 - ;; - '--info'|'-f') - [ $# -ne 2 ] && usage # two parameters is required - PKG_PATH=`find_slackbuild $2` - info_builds - exit 0 - ;; - '--install'|'-i') - [ $# -ne 2 ] && usage # two parameters is required - PACKAGE="$2" - INSTALL=$on - ;; - '--no-deps'|'-nd') - [ $# -ne 2 ] && usage # two parameters is required - NO_DEPS=$on - PACKAGE="$2" - ;; - '--sync') - sync_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN - exit 0 - ;; - '--help'|'-h'|'') - usage - exit 0 - ;; - '--list'|'-l') - list_builds - exit 0 - ;; - *) - if [ "${1:0:1}" != "-" ]; then - PACKAGE="$1" - else - usage - fi - ;; + '--all'|'-a') + # build all SlackBuilds in repository + build_all_slackbuild + exit 0 + ;; + '--search'|'-s') + [ $# -ne 2 ] && usage # two parameters is required + find_slackbuild $2 + exit 0 + ;; + '--info'|'-f') + [ $# -ne 2 ] && usage # two parameters is required + PKG_PATH=`find_slackbuild $2` + info_builds + exit 0 + ;; + '--install'|'-i') + [ $# -ne 2 ] && usage # two parameters is required + PACKAGE="$2" + INSTALL=$on + ;; + '--no-deps'|'-nd') + [ $# -ne 2 ] && usage # two parameters is required + NO_DEPS=$on + PACKAGE="$2" + ;; + '--debug'|'-d') + [ $# -ne 2 ] && usage # two parameters is required + PACKAGE="$2" + DEBUG=$on + ;; + '--sync') + sync_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN + exit 0 + ;; + '--help'|'-h'|'') + usage + exit 0 + ;; + '--list'|'-l') + list_builds + exit 0 + ;; + *) + if [ "${1:0:1}" != "-" ]; then + PACKAGE="$1" + else + usage + fi + ;; esac # Synchronize repository @@ -350,29 +360,29 @@ BUILD_SCRIPT="`find_slackbuild $PACKAGE`" # Check SlackBuild script found if [ -z "$BUILD_SCRIPT" ]; then - handle_error $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND $PACKAGE + handle_error $ERROR_CREATEPKG_SLACKBUILD_NOTFOUND $PACKAGE fi # Select one SlackBuild if [ "`echo $BUILD_SCRIPT | wc -w`" -gt 1 ]; then - AUX="$PS3" - PS3="Choice: " - LIST=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | sed -r 's/.*\/(.*)\.SlackBuild$/\1/'`" EXIT" - - select PACKAGE in `echo $LIST`; do - break - done - - if [ "$PACKAGE" = "EXIT" ]; then - eecho $error "error: None package select" - exit 1 - fi - - # Select only one SlackBuild in BUILD_SCRIPT - BUILD_SCRIPT=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | grep "/$PACKAGE.SlackBuild"` - PS3="$AUX" + AUX="$PS3" + PS3="Choice: " + LIST=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | sed -r 's/.*\/(.*)\.SlackBuild$/\1/'`" EXIT" + + select PACKAGE in `echo $LIST`; do + break + done + + if [ "$PACKAGE" = "EXIT" ]; then + eecho $error "error: None package select" + exit 1 + fi + + # Select only one SlackBuild in BUILD_SCRIPT + BUILD_SCRIPT=`echo $BUILD_SCRIPT | sed 's/ /\n/g' | grep "/$PACKAGE.SlackBuild"` + PS3="$AUX" else - PACKAGE=`basename $BUILD_SCRIPT .SlackBuild` + PACKAGE=`basename $BUILD_SCRIPT .SlackBuild` fi # Get dirname and script name from slackbuild @@ -382,27 +392,29 @@ eecho $messag "$BASENAME: found script $PACKAGE.SlackBuild, now checking for dep # Sets the package's slack-required if [ -f "$SCRIPT_BASE/$PACKAGE.slack-required" ]; then - SLACK_REQUIRED="$SCRIPT_BASE/$PACKAGE.slack-required" + SLACK_REQUIRED="$SCRIPT_BASE/$PACKAGE.slack-required" elif [ -f "$SCRIPT_BASE/slack-required" ]; then - SLACK_REQUIRED="$SCRIPT_BASE/slack-required" + SLACK_REQUIRED="$SCRIPT_BASE/slack-required" fi if [ ! -z "$SLACK_REQUIRED" -a $NO_DEPS -ne $on ]; then - # This routine checks for dependencies in package's slack-required - ( grep '^[^#]' $SLACK_REQUIRED | while read dep; do - if [ ! -z "$dep" ]; then - PROGRAM="`echo $dep | awk '{ print $1 }'`" - CONDITION="`echo $dep | awk '{ print $2 }' | tr [=\>\<] [egl]`" - VERSION="`echo $dep | awk '{ print $3 }' | tr -dc '[:digit:]'`" - solve_dep "$PROGRAM" "$CONDITION" "$VERSION" - fi - true - done ) - [ $? -ne 0 ] && handle_error $error $ERROR_CREATEPKG_DEPENDENCY - - eecho $messag "$BASENAME: done checking for $PACKAGE dependencies" + # This routine checks for dependencies in package's slack-required + ( + grep '^[^#]' $SLACK_REQUIRED | while read dep; do + if [ ! -z "$dep" ]; then + PROGRAM="`echo $dep | awk '{ print $1 }'`" + CONDITION="`echo $dep | awk '{ print $2 }' | tr [=\>\<] [egl]`" + VERSION="`echo $dep | awk '{ print $3 }' | tr -dc '[:digit:]'`" + solve_dep "$PROGRAM" "$CONDITION" "$VERSION" + fi + true + done + ) + [ $? -ne 0 ] && handle_error $error $ERROR_CREATEPKG_DEPENDENCY + + eecho $messag "$BASENAME: done checking for $PACKAGE dependencies" else - eecho $messag "$BASENAME: no unmet dependencies for $PACKAGE" + eecho $messag "$BASENAME: no unmet dependencies for $PACKAGE" fi eecho $messag "$BASENAME: processing $SCRIPT_NAME" @@ -411,15 +423,29 @@ eecho $messag "$BASENAME: processing $SCRIPT_NAME" cd $SCRIPT_BASE # Run SlackBuild script -( +if [ $DEBUG -eq $off ]; then + ( + LANG=en_US \ SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ SRC=${SRC_DIR:=$SOURCE_DIR} \ ARCH=${ARCH:=$CREATE_ARCH} \ COLOR=${COLOR:=$COLOR_MODE} \ REPOS=${REPOS:=$MAKEPKG_REPOS} \ CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \ - INTERACT=no sh ./$SCRIPT_NAME -) + INTERACT=no sh +x ./$SCRIPT_NAME + ) +else + ( + LANG=en_US \ + SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ + SRC=${SRC_DIR:=$SOURCE_DIR} \ + ARCH=${ARCH:=$CREATE_ARCH} \ + COLOR=${COLOR:=$COLOR_MODE} \ + REPOS=${REPOS:=$MAKEPKG_REPOS} \ + CLEANUP=${CLEANUP:=$CREATE_CLEANUP} \ + INTERACT=no sh -x ./$SCRIPT_NAME + ) +fi # Check if package was built handle_error $? $PACKAGE @@ -445,10 +471,10 @@ PKG_NAME="`ls -1 -c $MAKEPKG_REPOS/$PACKAGE-*-*-*.tgz | head -n 1 | xargs basena # Install package if [ "$INSTALL" -eq $on ]; then - # as we dont have the full package file name, we'll - # use the newer file name that matches our wildcard: + # as we dont have the full package file name, we'll + # use the newer file name that matches our wildcard: - upgradepkg --install-new $NEW_REPOS/$PKG_NAME + upgradepkg --install-new $NEW_REPOS/$PKG_NAME fi # TODO: subversion integration @@ -456,6 +482,8 @@ fi # svn commit # Update repository FILELIST.TXT, ... ( - cd $MAKEPKG_REPOS - gen_filelist + cd $MAKEPKG_REPOS + gen_filelist ) + +exit $EXIT_CODE -- cgit v1.2.3