diff options
Diffstat (limited to 'branches/0.6/src/createpkg')
-rw-r--r-- | branches/0.6/src/createpkg | 515 |
1 files changed, 0 insertions, 515 deletions
diff --git a/branches/0.6/src/createpkg b/branches/0.6/src/createpkg deleted file mode 100644 index 373c8cc..0000000 --- a/branches/0.6/src/createpkg +++ /dev/null @@ -1,515 +0,0 @@ -#!/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_DIR="/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 -# -# TODO -# -# - optionally show a dependency tree before create the package -# - in function solve_dep: resolve program versions -# - mkdir source directory - error... (please check!) - -#--------------------------------------------------- -# Createpkg functions -#--------------------------------------------------- - -CREATEPKG_VERSION="1.1.1" - -function error_codes { - - # Slackbuilds error codes - ERROR_WGET=31 # wget error - ERROR_MAKE=32 # make source error - ERROR_INSTALL=33 # make install error - ERROR_MD5=34 # md5sum error - ERROR_CONF=35 # ./configure error - ERROR_HELP=36 # dasable - ERROR_TAR=37 # tar error - ERROR_MKPKG=38 # makepkg error - ERROR_GPG=39 # gpg check error - ERROR_PATCH=40 # patch error - ERROR_VCS=41 # cvs error - ERROR_MKDIR=42 # make directory error - - # Createpkg error codes - ERROR_INSTPKG=200 # installpkg error - ERROR_DEPEN=201 # dependency error - SCRIPT_OR_PACKAGE_NOT_FOUND=202 # Script or package not found -} - -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 - # ERROR_MD5=34; ERROR_CONF=35; ERROR_HELP=36 - # ERROR_TAR=37; ERROR_MKPKG=38 ERROR_GPG=39 - # ERROR_PATCH=40; ERROR_VCS=41; ERROR_MKDIR=42 - # - # thanks to rudsonalves at yahoo.com.br for this spec. - - # we don't want to process when exit status = 0 - [ "$1" == "0" ] && return - - # Exit codes - case $1 in - 2) usage ;; - 3) eecho $alert "$BASENAME: could not update the repository $2" ;; - 4) eecho $alert "$BASENAME: could not create folder $2" ;; - 5) eecho $alert "$BASENAME: script not found for $2" ;; - $ERROR_WGET) - eecho $error "$BASENAME: error downloading source/package for $2" ;; - $ERROR_MAKE) - eecho $error "$BASENAME: error compiling $2 source code" ;; - $ERROR_INSTALL) - eecho $error "$BASENAME: error installing $2" ;; - $ERROR_MD5) - eecho $error "$BASENAME: error on source code integrity check for $2" ;; - $ERROR_CONF) - eecho $error "$BASENAME: error configuring the source code for $2" ;; - $ERROR_HELP) - exit 0 ;; # its supposed to never happen here :P - $ERROR_TAR) - eecho $error "$BASENAME: error decompressing source code for $2" ;; - $ERROR_MKPKG) - eecho $error "$BASENAME: error creating package $2" ;; - $ERROR_GPG) - eecho $error "$BASENAME: error verifying GPG signature the source code for $2" ;; - $ERROR_PATCH) - eecho $error "$BASENAME: error patching the source code for $2" ;; - $ERROR_VCS) - eecho $error "$BASENAME: error downloading $2 source from version control system" ;; - $ERROR_MKDIR) - eecho $error "$BASENAME: make directory $2 error, aborting" ;; - $ERROR_INSTPKG) - eecho $error "$BASENAME: install package $2 error, aborting" ;; - $ERROR_DEPEN) - eecho $error "$BASENAME: dependency solve error, aborting" ;; - *) eecho $error "$BASENAME: unknown error or user interrupt" ;; - $SCRIPT_OR_PACKAGE_NOT_FOUND) - eecho $error "$BASENAME: SlackBuild or package not found" ;; - esac - - exit $1 - -} - -function build_repo { - - # Checkout a new slackbuild working copy - BASEDIR="`dirname $SLACKBUILDS_DIR`" - mkdir -p $BASEDIR || handle_error 4 $BASEDIR - cd $BASEDIR - svn checkout $SVN - cd $SLACKBUILDS_DIR - -} - -function usage { - - # Help message - eecho $commun "Createpkg version $CREATEPKG_VERSION\n" - eecho $commun "Usage: createpkg [--install/-i] package-name" - eecho $commun " createpkg --no-deps/-np package-name" - eecho $commun " createpkg --search/-s package-name" - eecho $commun " createpkg --info/-f package-name" - eecho $commun " createpkg --list/-l" - eecho $commun " createpkg --sync" - eecho $commun " createpkg --help/-h" -} - -function check_config { - - # check the configuration - TMP=${TMP:=/tmp}; - REPOS=${REPOS:=$MAKEPKG_REPOS}; - # Create $TMP and $REPOS if need - [ ! -e $TPM ] && mkdir $TMP - [ ! -e $REPOS ] && mkdir $REPOS - # - SLACKBUILDS_DIR=${SLACKBUILDS_DIR:=/var/slackbuilds} - SVN=${SVN:=svn://slack.sarava.org/slackbuilds} - SYNC=${SYNC:=$no} - SYNC=`convert_boolean $SYNC` - BASEDIR="`dirname $SLACKBUILDS_DIR`" - -} - -function solve_dep { - - # Solve dependency - 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" == "5" ]; then - - # exit code 5 == slackbuild not found - # try to use simplaret - ARCH=$CREATE_ARCH simplaret --update - ARCH=$CREATE_ARCH simplaret --install $PACK - EXIT_CODE="$?" - if [ "$EXIT_CODE" != "0" ]; then - handle_error $SCRIPT_OR_PACKAGE_NOT_FOUND $PACK - fi - - elif [ "$EXIT_CODE" != "0" ]; then - handle_error $EXIT_CODE $PACK - fi - - fi - fi - -} - -function check_repo { - - # Verify if repository exist - [ ! -d "$SLACKBUILDS_DIR" ] && build_repo - -} - -function sync_repo { - - # Synchronize repository - cd $SLACKBUILDS_DIR - exit # svn update || build_repo - #simplaret --update - -} - -function find_slackbuild { - - # Find SlackBuild script in the repository - find $SLACKBUILDS_DIR -iname $1.SlackBuild - -} - -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 - -} - -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: " - ( - 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 - ) - 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`" - - COLOR_MODE="`eval_parameter COLOR_MODE none`" - CREATE_ARCH="`eval_parameter CREATE_ARCH $(default_arch)`" - CREATE_CLEANUP="`eval_boolean_parameter CREATE_CLEANUP $yes`" - - REMOVE_OLD_PACKAGE="`eval_boolean_parameter REMOVE_OLD_PACKAGE $off`" - MOVE_BIN_PACKAGE="`eval_boolean_parameter MOVE_BIN_PACKAGE $off`" -} - -#--------------------------------------------------- -# Starting createpkg -#--------------------------------------------------- -# Common functions -COMMON="/usr/libexec/simplepkg/common.sh" -SIMPLEPKG_CONF="/etc/simplepkg/simplepkg.conf" -BASENAME="`basename $0`" - -if [ -f "$COMMON" ]; then - source $COMMON -else - echo "error: file $COMMON found, check your $BASENAME installation" - mk_exit 0 -fi - -set_constants - -# Load simplepkg.conf variables -load_parameters -#eval_config $BASENAME - -# Loading error codes -error_codes - -# Load slackbuildrc definitions -if [ -f ~/.slackbuildrc ]; then - source ~/.slackbuildrc -else - source /etc/slackbuildrc 2>/dev/null -fi - -# Select color mode: gray, color or none (*) -color_select $COLOR_MODE - -# This is used to show how many children process we have -if [ -z "$CREATEPKG_CHILD" ]; then - CREATEPKG_CHILD=1 -else - let CREATEPKG_CHILD++ -fi - -BASENAME="`basename $0`[$CREATEPKG_CHILD]" - -check_config -check_repo - -INSTALL=$off -NO_DEPS=$off - -case $1 in - '--search'|'-s') - [ $# -ne 2 ] && handle_error 2 # two parameters is required - find_slackbuild $2 - exit - ;; - '--info'|'-f') - [ $# -ne 2 ] && handle_error 2 # two parameters is required - PKG_PATH=`find_slackbuild $2` - info_builds - exit - ;; - '--install'|'-i') - [ $# -ne 2 ] && handle_error 2 # two parameters is required - PACKAGE="$2" - INSTALL=$on - ;; - '--no-deps'|'-nd') - [ $# -ne 2 ] && handle_error 2 # two parameters is required - NO_DEPS=$on - PACKAGE="$2" - ;; - '--sync') - sync_repo - exit 0 - ;; - '--help'|'-h'|'') - usage - exit 0 - ;; - '--list'|'-l') - list_builds - exit 0 - ;; - *) - if [ "${1:0:1}" != "-" ]; then - PACKAGE="$1" - else - handle_error 2 - fi - ;; -esac - -# Synchronize repository -[ $SYNC -eq $yes ] && sync_repo - -# Get SlackBuild script -BUILD_SCRIPT="`find_slackbuild $PACKAGE`" - -# Check SlackBuild script found -if [ -z "$BUILD_SCRIPT" ]; then - handle_error 5 $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" -else - #PACKAGE=`echo $BUILD_SCRIPT | sed -r 's/.*\/(.*)\.SlackBuild$/\1/'` - PACKAGE=`basename $BUILD_SCRIPT .SlackBuild` -fi - -# Get dirname and script name from slackbuild -SCRIPT_BASE="`dirname $BUILD_SCRIPT`" -SCRIPT_NAME="`basename $BUILD_SCRIPT`" -eecho $messag "$BASENAME: found script $PACKAGE.SlackBuild, now checking for dependencies" - -# Sets the package's slack-required -if [ -f "$SCRIPT_BASE/$PACKAGE.slack-required" ]; then - SLACK_REQUIRED="$SCRIPT_BASE/$PACKAGE.slack-required" -elif [ -f "$SCRIPT_BASE/slack-required" ]; then - 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 ) - if [ $? -ne 0 ]; then - eecho $messag "$BASENAME: dependency solve error" - exit 1 - fi - eecho $messag "$BASENAME: done checking for $PACKAGE dependencies" -else - eecho $messag "$BASENAME: no unmet dependencies for $PACKAGE" -fi - -eecho $messag "$BASENAME: processing $SCRIPT_NAME" - -# Change to script base directory -cd $SCRIPT_BASE - -# Make MAKEPKG_REPOS -[ ! -e $MAKEPKG_REPOS ] && mkdir -p $MAKEPKG_REPOS - -# Run SlackBuild script -( - 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 -) - -# Check if package was built -handle_error $? $PACKAGE - -# Get package name -PKG_NAME="`ls -1 -c $MAKEPKG_REPOS/$PACKAGE-*-*-*.tgz | head -n 1 | xargs basename`" - -# Select repository directory -[ $MOVE_BIN_PACKAGE -eq $on ] && NEW_REPOS=$MAKEPKG_REPOS/$( echo ${SCRIPT_BASE#$SLACKBUILDS_DIR/} ) || NEW_REPOS=$MAKEPKG_REPOS - -# Create repository directory -[ ! -e $NEW_REPOS ] && mkdir -p $NEW_REPOS 2>/dev/null - -# Remove old packages from repository tree -[ $REMOVE_OLD_PACKAGE -eq $on ] && rm $NEW_REPOS/$PACKAGE-*-*-*.tgz 2>/dev/null - -# Move package to SlackBuilds-like tree -[ $MOVE_BIN_PACKAGE -eq $on ] && mv $MAKEPKG_REPOS/$PKG_NAME $NEW_REPOS/ - -# 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: - - upgradepkg --install-new $NEW_REPOS/$PKG_NAME -fi - -# Update repository FILELIST.TXT, ... -( - cd $MAKEPKG_REPOS - gen_filelist -) |