diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2017-10-07 19:32:06 -0300 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2017-10-07 19:32:06 -0300 |
commit | 0d6bcb2b7d08e3a41481372c1ae0d11868d88b1b (patch) | |
tree | d4429ce3a62e9cb5d095ad567b5f821d99a7b9f5 /trunk/src/createpkg | |
parent | 5bfb15bdbedbc7273a283d611c84ed1cf401011b (diff) | |
download | simplepkg-0d6bcb2b7d08e3a41481372c1ae0d11868d88b1b.tar.gz simplepkg-0d6bcb2b7d08e3a41481372c1ae0d11868d88b1b.tar.bz2 |
New repo layout with git migration
Diffstat (limited to 'trunk/src/createpkg')
-rw-r--r-- | trunk/src/createpkg | 1096 |
1 files changed, 0 insertions, 1096 deletions
diff --git a/trunk/src/createpkg b/trunk/src/createpkg deleted file mode 100644 index 10daf0b..0000000 --- a/trunk/src/createpkg +++ /dev/null @@ -1,1096 +0,0 @@ -#!/bin/bash -# -# createpkg: package builder using http://slack.sarava.org/slackbuilds scripts -# feedback: rhatto at riseup.net / rudsonalves at yahoo.com.br -# -# 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 -# -# Version $Rev$ - $Author$ -# - -#--------------------------------------------------- -# Createpkg functions -#--------------------------------------------------- - -function usage { - - # Help message - echo -e "${red}NAME${normal} - createpkg - create Slackware packages from SlackBuilds in Sarava repository - -${red}SYNOPSIS - createpkg${normal} [${green}OPTIONS${normal}] [${green}program1${normal} ... ${green}programN${normal}] - -${red}DESCRIPTION${normal} - [${green}program${normal}] name to build/search (some options support more than one program) - - Input ${green}OPTIONS${normal}: - ${red}-i${normal}, ${red}--install${normal} ${green}<program1>${normal} - create the package ${green}<program>${normal} and install - ${red}-a${normal}, ${red}--all${normal} - create all packages and install - ${red}-np${normal}, ${red}--no-deps${normal} - does not solve dependences - ${red}-d${normal}, ${red}--debug${normal} ${green}<program>${normal} - enable SlackBuild debug (sh -x ...) - ${red}-s${normal}, ${red}--search${normal} ${green}<program${normal}> - search for a ${green}<program>${normal} - ${red}-f${normal}, ${red}--info${normal} ${green}<program>${normal} - show description and dependences of the program - ${red}-l${normal}, ${red}--list${normal} - list all the SlackBuilds - ${red}--list-packages ${green}[repository]${normal} - list all packages in binary repositories - ${red}--sign${green}<package_name>${normal} - sign a binary package - ${red}--remove${green}<package_name>${normal} - remove a binary package - ${red}--sync${normal} - synchronize SlackBuilds repository - ${red}--update${normal} - synchronize packages repository - ${red}--commit${normal} ${green}["message"]${normal} - commit changes to binary packages' repository - ${red}--status${normal} - check binary packages' svn repository status - ${red}--import${normal} - import packages into a svn repository - ${red}--checkout${normal} - checkout binary packages from a svn repository - ${red}--update-keyring${normal} - update GPG-KEY from binary repositories - ${red}-h${normal}, ${red}--help${normal} - show this help - -${red}EXAMPLES${normal} - ${red}createpkg -i scilab${normal} - build and install scilab package - ${red}createpkg -s at*${normal} - search for all at* SlackBuilds scripts (at-spi, atk, ...) - ${red}createpkg --info pyrex${normal} - show pyrex description and dependences - $SYNC=yes {red}createpkg -i scilab${normal} - sync repository first, then build and install scilab package - -${red}AUTHOR${normal} - Written by ${blue}Rudson R. Alves${normal} and ${blue}Silvio Rhatto${normal} - -${red}AVAILABILITY${normal} - by svn: ${yellow}svn checkout http://slack.sarava.org/simplepkg${normal} - -${red}REPORTING BUGS${normal} - Report bugs to <${blue}rudsonalves[at]rra.etc.br${normal}> - -${red}COPYRIGHT${normal} - Copyright © 2006 Free Software Foundation, Inc. - This is free software. You may redistribute copies of it under the - terms of the GNU General Public License - <${yellow}http://www.gnu.org/licenses/gpl.html${normal}>. There is NO WARRANTY, - to the extent permitted by law." -} - -function build_all_slackbuilds { - - # 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 - -} - -function check_config { - - # Check the configuration - TMP=${TMP:=/tmp} - - if [ ! -z "$REPOS" ]; then - PACKAGES_DIR="$REPOS" - else - REPOS=$PACKAGES_DIR - fi - - # Nested folders, if configured - if [ ! -z "$PACKAGES_REPOS_STYLE" ]; then - PACKAGES_REPOS_STYLE=$(echo $PACKAGES_REPOS_STYLE | sed -e "s/none//g" -e "s/distro/`default_distro`/g" \ - -e "s/arch/`default_arch`/g" -e "s/version/`default_version`/g") - PACKAGES_DIR="$PACKAGES_DIR/$PACKAGES_REPOS_STYLE" - REPOS="$REPOS/$PACKAGES_REPOS_STYLE" - fi - - # Create $TMP and $REPOS if need - [ ! -e $TMP ] && mkdir -p $TMP - [ ! -e $PACKAGES_DIR ] && create_repo_folder $PACKAGES_DIR - # - SLACKBUILDS_DIR=${SLACKBUILDS_DIR:=/var/simplepkg/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="`check_installed $PACK`" - CHECK=$? - - # TODO: check dependency versions - 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=$CREATEPKG_ARCH simplaret --update - ARCH=$CREATEPKG_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 - OUTPUT=`find $SLACKBUILDS_DIR -iname $1.SlackBuild` - [ "$OUTPUT" != "" ] && EXIT_CODE=0 || EXIT_CODE=1 - echo $OUTPUT - -} - -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]` - ID_VERSION=`grep '^SRC_VERSION' $i | cut -f2- -d":" | cut -f2 -d= | cut -f1 -d}` - eecho $commun "$NAME_UP: " - eecho Version: "$ID_VERSION" - eecho - - 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_slackbuilds { - - # list all available slackbuilds - # usage: list_slackbuilds - - list_builds $SLACKBUILDS_DIR SlackBuild - -} - -function load_parameters { - - # Load Createpkg parameters - PACKAGES_DIR="`eval_parameter PACKAGES_DIR /var/simplepkg/repos`" - PACKAGES_SVN="`eval_parameter PACKAGES_SVN http://slack.sarava.org/packages`" - PACKAGES_REPOS_STYLE="`eval_parameter PACKAGES_REPOS_STYLE none`" - NOARCH_DIR="`eval_parameter PACKAGES_DIR /var/simplepkg/repos`/noarch" - SOURCE_DIR="`eval_parameter SOURCE_DIR /var/simplepkg/sources`" - SLACKBUILDS_DIR="`eval_parameter SLACKBUILDS_DIR /var/simplepkg/slackbuilds`" - SLACKBUILDS_SVN="`eval_parameter SLACKBUILDS_SVN http://slack.sarava.org/slackbuilds`" - SVN_USER="`eval_parameter PACKAGES_SVN_USER`" - SVN_GROUP="`eval_parameter PACKAGES_SVN_GROUP`" - SOURCE_DIR_USER="`eval_parameter SOURCE_DIR_USER`" - SOURCE_DIR_GROUP="`eval_parameter SOURCE_DIR_GROUP`" - - COLOR_MODE="`eval_parameter COLOR_MODE none`" - CREATEPKG_ARCH="`eval_parameter CREATEPKG_ARCH $(default_arch)`" - CREATEPKG_CLEANUP="`eval_parameter CREATEPKG_CLEANUP yes`" - CREATEPKG_AUTHOR="`eval_parameter CREATEPKG_AUTHOR`" - - TMP="`eval_parameter TMP /tmp`" - TMP_USER="`eval_parameter TMP_USER`" - TMP_GROUP="`eval_parameter TMP_GROUP`" - - SIGN_PACKAGES="`eval_boolean_parameter SIGN_PACKAGES $off`" - SIGN_PACKAGES_USER="`eval_parameter SIGN_PACKAGES_USER`" - SIGN_PACKAGES_KEYID="`eval_parameter SIGN_PACKAGES_KEYID`" - SIGN_PACKAGES_WITH_GPG_AGENT="`eval_boolean_parameter SIGN_PACKAGES_WITH_GPG_AGENT $off`" - - if [ ! -z "$SIGN_PACKAGES_KEYID" ]; then - SIGN_PACKAGES_KEYID="`echo $SIGN_PACKAGES_KEYID | tr '[:lower:]' '[:upper:]'`" - fi - - if [ "$SIGN_PACKAGES_WITH_GPG_AGENT" -eq $on ]; then - GPG_AGENT_OPTION="--use-agent" - else - GPG_AGENT_OPTION="" - fi - - # For use at common.sh functions - SIGN="$SIGN_PACKAGES" - SIGN_KEYID="$SIGN_PACKAGES_KEYID" - SIGN_USER="$SIGN_PACKAGES_USER" - - REMOVE_OLD_PACKAGE="`eval_boolean_parameter REMOVE_OLD_PACKAGE $off`" - MOVE_BIN_PACKAGE="`eval_boolean_parameter MOVE_BIN_PACKAGE $off`" - MOVE_SLACK_REQUIRED="`eval_boolean_parameter MOVE_SLACK_REQUIRED $off`" - PACKAGES_REPOS_NOARCH="`eval_boolean_parameter PACKAGES_REPOS_NOARCH $on`" - FORCE_MANIFEST_CHECK="`eval_boolean_parameter FORCE_MANIFEST_CHECK $off`" - FORCE_MANIFEST_CHECK_SIGNATURE="`eval_boolean_parameter FORCE_MANIFEST_CHECK_SIGNATURE $off`" - -} - -function repository_checkout { - - # checkout a binary repository - # usage: repository_checkout [repository-adress] - - local svn oldfolder - - if [ -d "$PACKAGES_DIR" ]; then - oldfolder="$(mktemp -d $(echo $PACKAGES_DIR | sed -e 's/\/*$//g').XXXXXX)" - echo "Backing up old $folder at $oldfolder..." - mv $PACKAGES_DIR $oldfolder - fi - - if [ -z "$1" ]; then - svn="$1" - else - svn="$PACKAGES_SVN" - fi - - if valid_svn_repo $svn; then - svn checkout $svn $PACKAGES_DIR - chown_svn $PACKAGES_DIR && chgrp_svn $PACKAGES_DIR - if [ "$svn" != "$PACKAGES_SVN" ]; then - echo "Using svn repository different from the one pointed at $CONF." - fi - else - echo "Invalid repository $repository, aborting." - EXIT_CODE="1" - fi - -} - -function repository_update { - - if [ ! -z "$1" ] && svn_folder $1; then - echo "Fetching changes from svn repository for $1..." - cwd="`pwd`" - chown_svn $1 && chgrp_svn $1 - cd $1 && su_svn update - cd $cwd - fi - -} - -function repository_status { - - local cwd - - if svn_folder $PACKAGES_DIR; then - echo "Status of $PACKAGES_DIR." - cwd="`pwd`" - cd $PACKAGES_DIR && su_svn status - cd $cwd - fi - - if svn_folder $NOARCH_DIR; then - cwd="`pwd`" - echo "Status of $NOARCH_DIR." - cd $NOARCH_DIR && su_svn status - cd $cwd - fi - - exit 0 - -} - -function binary_repository_import { - - # import packages into a subversion repository - # usage: binary_repository_import [repository] - - local repository="$1" folder - - if [ -z "$repository" ]; then - repository="file:////var/svn/packages" - fi - - # eval again so it doesn't include repository style information - folder="`eval_parameter PACKAGES_DIR /var/simplepkg/repos`" - - repository_import $folder $repository - -} - -function create_repo_folder { - - # Create repository directory - # usage: create_repo_folder <repository_folder> - - local folder="$1" basedir - - if [ ! -d "$folder" ]; then - echo "Creating packages folder $folder..." - basedir="`dirname $folder`" - if svn_folder $basedir && ! svn_check $folder; then - ( - cd $basedir - chown_svn $basedir && chgrp_svn $basedir - svn_mkdir `basename $folder`/$SUBFOLDER - ) - else - mkdir -p $folder/$SUBFOLDER - fi - elif [ ! -e $folder/$SUBFOLDER ]; then - if svn_folder $folder && ! svn_check $folder/$SUBFOLDER; then - ( - cd $folder - chown_svn $folder && chgrp_svn $folder - svn_mkdir $SUBFOLDER - ) - else - mkdir -p $folder/$SUBFOLDER - fi - fi - -} - -function remove_old_package_data { - - # Remove old packages from repository tree - # usage: remove_old_package_data <repository_folder> - - if [ ! -d "$1" ]; then - return 1 - fi - - local makepkg_repos="$1" - - # Remove old PACKAGEs from repository tree - if [ $REMOVE_OLD_PACKAGE -eq $on ]; then - - # first remove entries from CHECKSUMS.md5 - if [ -f "$makepkg_repos/CHECKSUMS.md5" ]; then - sed -i "/$PACKAGE-.*-.*-.*.*$/d" $makepkg_repos/CHECKSUMS.md5 - fi - - # then remove entries from patches/CHECKSUMS.md5 - if [ -f "$makepkg_repos/patches/CHECKSUMS.md5" ]; then - sed -i "/$PACKAGE-.*-.*-.*.*$/d" $makepkg_repos/patches/CHECKSUMS.md5 - fi - - # Using subversion - if svn_folder $makepkg_repos; then - - ( - - cd $makepkg_repos - - # Using -mindepth 2 so it doesn't delete the new PACKAGE - for file in `find . -mindepth 2 -name "$PACKAGE-*-*-*.*"`; do - candidate="`echo $file | sed -e 's/\.meta$/\.tgz/'`" # otherwise PACKAGE info functions can fail - candidate="`echo $candidate | sed -e 's/\.asc$//'`" # otherwise PACKAGE info functions can fail - # Just delete packages with different arch, version, build number or folder - if [ "`package_name $candidate`" == "$PACKAGE" ]; then - if [ "`package_version $candidate`" != "$PACKAGE_VERSION" ] || \ - [ "`package_arch $candidate`" != "$PACKAGE_ARCH" ] || \ - [ "`package_build $candidate`" != "$PACKAGE_BUILD" ] || \ - [ "`package_ext $candidate`" != "$PACKAGE_EXT" ] || \ - [ "`dirname $candidate | sed -e 's/^\.\///'`" != "`dirname $SUBFOLDER/$PKG_NAME | sed -e 's/^\.\///'`" ]; then - svn_del $file - fi - fi - done - - for file in `find $makepkg_repos -name "$PACKAGE.slack-required"`; do - if [ $MOVE_SLACK_REQUIRED -eq $off ]; then - svn_del $file - elif [ ! -z "$SLACK_REQUIRED" ] && [ "$makepkg_repos/$SUBFOLDER/$PACKAGE.slack-required" != "$file" ]; then - svn_del $file - fi - done - - ) - - else - # Using -mindepth 2 so it doesn't delete the new package - eval find $makepkg_repos -mindepth 2 $(pkg_ext_find $PACKAGE-*-*-*) -exec rm {} 2>/dev/null \; - find $makepkg_repos -mindepth 2 -name "$PACKAGE-*-*-*.meta" -exec rm {} 2>/dev/null \; - find $makepkg_repos -mindepth 2 -name "$PACKAGE-*-*-*.*.asc" -exec rm {} 2>/dev/null \; - find $makepkg_repos -name "$PACKAGE.slack-required" -exec rm {} 2>/dev/null \; - fi - fi - -} - -function update_metadata { - - # Update repository metadata - # usage: update_metadata <repository_folder> - - if [ ! -d "$1" ]; then - return 1 - fi - - local makepkg_repos="$1" - - ( - - cd $makepkg_repos - - get_sign_user - repo_gpg_key $makepkg_repos - gen_meta $SUBFOLDER/$PKG_NAME - gen_filelist - update_md5_checksum $makepkg_repos $SUBFOLDER/$PKG_NAME - - # update md5 file from patches/ folder if needed - if [ -d "patches/" ]; then - - found_patch="no" - - for file in `eval find patches/ $(pkg_ext_find $PACKAGE-*-*-*)`; do - found_patch="yes" - update_md5_checksum $makepkg_repos/patches patches/$SUBFOLDER/$PKG_NAME - done - - if [ "$found_patch" == "yes" ]; then - gen_patches_filelist patches - fi - fi - - ) - -} - -function list_packages { - - # list packages in repositories - # usage: list_packages [repository_list] - - local repository repositories="$*" - - if [ -z "$repositories" ]; then - repositories="$PACKAGES_DIR $NOARCH_DIR" - fi - - for repository in $repositories; do - echo "Packages from $repository..." - eval find $repository $(pkg_ext_find) - done - -} - -function remove_package { - - # delete a package from repositories - # usage: remove_packages <package> [repository_list] - - local package="$1" repository repositories="$2" - - if [ -z "$package" ]; then - return 1 - fi - - if [ -z "$repositories" ]; then - repositories="$PACKAGES_DIR $NOARCH_DIR" - fi - - for repository in $repositories; do - - ( - - cd $repository - - for file in `eval find . $(pkg_ext_find $package-*-*-*) -o -name "$package-*-*-*.meta" -o -name "$package-*-*-*.*.asc"`; do - svn_del $file - if [ -e "CHECKSUMS.md5" ] && echo $file | grep -q -E -e "$(pkg_ext_grep)$"; then - # remove md5 information - sed -i "/ \.*\/*$(regexp_slash $file)$/d" CHECKSUMS.md5 - cat CHECKSUMS.md5 | gzip -9 -c - > CHECKSUMS.md5.gz - fi - done - - for file in `find $repository -name "$package.slack-required"`; do - svn_del $file - done - - ) - - update_metadata $repository - done - -} - -function sign_package { - - # sign a package from repositories - # usage: sign_package <package> [repository_list] - - local package="$1" repository repositories="$2" - - if [ -z "$package" ]; then - return 1 - fi - - if [ -z "$repositories" ]; then - repositories="$PACKAGES_DIR $NOARCH_DIR" - fi - - for repository in $repositories; do - - ( - - cd $repository - - for file in `eval find . $(pkg_ext_find $package-*-*-*)`; do - - echo "Signing package..." - - get_sign_user - - if [ ! -z "$SIGN_PACKAGES_USER" ] && [ "`whoami`" != "$SIGN_PACKAGES_USER" ]; then - tmp_sign_folder="`mktemp -d $TMP/createpkg_sign.XXXXXX`" - chown $SIGN_PACKAGES_USER $tmp_sign_folder - su $SIGN_PACKAGES_USER -c "gpg $GPG_AGENT_OPTION --armor -sb -u $SIGN_KEYID -o $tmp_sign_folder/`basename $file`.asc $repository/$file" - cp $tmp_sign_folder/`basename $file`.asc $repository/$file.asc - rm -rf $tmp_sign_folder - else - tmp_sign_folder="`mktemp -d $TMP/createpkg_sign.XXXXXX`" - gpg $GPG_AGENT_OPTION --armor -sb -u $SIGN_KEYID -o $tmp_sign_folder/`basename $file`.asc $repository/$file - cp $tmp_sign_folder/`basename $file`.asc $repository/$file.asc - rm -rf $tmp_sign_folder - fi - - done - - ) - - update_metadata $repository - done - -} - -function create_package { - - # Synchronize repository - [ $SYNC -eq $yes ] && sync_svn_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN - - # Update keyring - update_keyring $SLACKBUILDS_DIR/GPG-KEY - - # Get SlackBuild script - BUILD_SCRIPT="`find_slackbuild $PACKAGE`" - - # Check SlackBuild script found - if [ -z "$BUILD_SCRIPT" ]; then - 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: no package selected" - return 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` - 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 - ) - [ $? -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" - fi - - eecho $messag "$BASENAME: processing $SCRIPT_NAME" - - # Change to script base directory - cd $SCRIPT_BASE - - # Use fakeroot if needed and available - if [ "`whoami`" != "root" ]; then - FAKEROOT="`which fakeroot`" - if [ "$?" == "0" ]; then - eecho $messag "$BASENAME: running SlackBuild with fakeroot." - FAKEROOT="$FAKEROOT --" - else - eecho $messag "$BASENAME: WARNING: not running as root and no fakeroot found." - eecho $messag "$BASENAME: WARNING: your build might not be successful." - FAKEROOT="" - fi - else - FAKEROOT="" - fi - - # Manifest checking - if [ $FORCE_MANIFEST_CHECK -eq $on ] || [ $FORCE_MANIFEST_CHECK_SIGNATURE -eq $on ]; then - if [ ! -e "`dirname $SCRIPT_NAME`/Manifest" ]; then - eecho $messag "$BASENAME: ERROR: no Manifest file for $PACKAGE." - return 1 - fi - fi - - # Manifest signature checking - if [ $FORCE_MANIFEST_CHECK_SIGNATURE -eq $on ]; then - if grep -q -- "-----BEGIN PGP SIGNED MESSAGE-----" `dirname $SCRIPT_NAME`/Manifest; then - gpg --verify `dirname $SCRIPT_NAME`/Manifest &> /dev/null - if [ "$?" != "0" ]; then - eecho $messag "$BASENAME: ERROR: invalid signature for $PACKAGES's Manifest file." - return 1 - fi - else - eecho $messag "$BASENAME: ERROR: no signed Manifest file for $PACKAGE." - return 1 - fi - fi - - # Run SlackBuild script - [ $DEBUG -eq $off ] && SHELL_FLAG="+x" || SHELL_FLAG="-x" - ( - LANG=en_US \ - TMP=$TMP \ - SRC_DIR=${SRC_DIR:=$SOURCE_DIR} \ - SRC=${SRC_DIR:=$SOURCE_DIR} \ - ARCH=${ARCH:=$CREATEPKG_ARCH} \ - COLOR=${COLOR:=$COLOR_MODE} \ - REPOS=${REPOS:=$PACKAGES_DIR} \ - CLEANUP=${CLEANUP:=$CREATEPKG_CLEANUP} \ - SLACKBUILD_PATH="/" \ - INTERACT=no $FAKEROOT sh $SHELL_FLAG ./$SCRIPT_NAME - ) - - # Check if package was built - handle_error $? $PACKAGE - - # Fix source folder user - if [ ! -z "$SOURCE_DIR_USER" ]; then - chown -R $SOURCE_DIR_USER $SOURCE_DIR - fi - - # Fix source folder group - if [ ! -z "$SOURCE_DIR_GROUP" ]; then - chgrp -R $SOURCE_DIR_GROUP $SOURCE_DIR - fi - - # Get package name, arch, version and build number - PKG_NAME="`ls -1 -c $PACKAGES_DIR/$PACKAGE-*-*-*.* | grep -E -e "$(pkg_ext_grep)$" | head -n 1 | xargs basename`" - PACKAGE_NAME="`package_name $PKG_NAME`" - PACKAGE_VERSION="`package_version $PKG_NAME`" - PACKAGE_ARCH="`package_arch $PKG_NAME`" - PACKAGE_BUILD="`package_build $PKG_NAME`" - PACKAGE_EXT="`package_ext $PKG_NAME`" - - # Update package author - if [ ! -z "$CREATEPKG_AUTHOR" ]; then - AUTHOR="`echo $PACKAGE_BUILD | sed -e 's/^[0-9]*//'`" - if [ "$AUTHOR" != "$CREATEPKG_AUTHOR" ]; then - echo "Changing package build author..." - BUILD_NUMBER="`echo $PACKAGE_BUILD | sed -e "s/$AUTHOR$//"`" - NEW_BUILD="$BUILD_NUMBER""$CREATEPKG_AUTHOR" - mv $PACKAGES_DIR/$PKG_NAME $PACKAGES_DIR/$PACKAGE_NAME-$PACKAGE_VERSION-$PACKAGE_ARCH-$NEW_BUILD.$PACKAGE_EXT - PKG_NAME="$PACKAGE_NAME-$PACKAGE_VERSION-$PACKAGE_ARCH-$NEW_BUILD.$PACKAGE_EXT" - PACKAGE_BUILD="$NEW_BUILD" - AUTHOR="$CREATEPKG_AUTHOR" - echo "New package name is $PKG_NAME." - fi - fi - - # Sign package - if [ $SIGN_PACKAGES -eq $on ]; then - - echo "Signing package..." - - get_sign_user - - if [ ! -z "$SIGN_PACKAGES_USER" ] && [ "`whoami`" != "$SIGN_PACKAGES_USER" ]; then - tmp_sign_folder="`mktemp -d $TMP/createpkg_sign.XXXXXX`" - chown $SIGN_PACKAGES_USER $tmp_sign_folder - su $SIGN_PACKAGES_USER -c "gpg $GPG_AGENT_OPTION --armor -sb -u $SIGN_KEYID -o $tmp_sign_folder/$PKG_NAME.asc $PACKAGES_DIR/$PKG_NAME" - cp $tmp_sign_folder/$PKG_NAME.asc $PACKAGES_DIR/$PKG_NAME.asc - rm -rf $tmp_sign_folder - else - tmp_sign_folder="`mktemp -d $TMP/createpkg_sign.XXXXXX`" - gpg $GPG_AGENT_OPTION --armor -sb -u $SIGN_KEYID -o $tmp_sign_folder/$PKG_NAME.asc $PACKAGES_DIR/$PKG_NAME - cp $tmp_sign_folder/$PKG_NAME.asc $PACKAGES_DIR/$PKG_NAME.asc - rm -rf $tmp_sign_folder - fi - - fi - - # Select repository directory - if [ $MOVE_BIN_PACKAGE -eq $on ]; then - SUBFOLDER="$( echo ${SCRIPT_BASE#$SLACKBUILDS_DIR/} )" - NEW_REPOS=$PACKAGES_DIR/$SUBFOLDER - else - SUBFOLDER="." - NEW_REPOS=$PACKAGES_DIR - fi - - # Update information from remote repository - repository_update $PACKAGES_DIR - - # Create the repository folders - create_repo_folder $PACKAGES_DIR - - # Remove old packages from repository tree - remove_old_package_data $PACKAGES_DIR - - # Move package to SlackBuilds-like tree - if [ $MOVE_BIN_PACKAGE -eq $on ]; then - - mv $PACKAGES_DIR/$PKG_NAME $NEW_REPOS/ - if [ -e "$PACKAGES_DIR/$PKG_NAME.asc" ]; then - mv $PACKAGES_DIR/$PKG_NAME.asc $NEW_REPOS/ - fi - - if svn_folder $NEW_REPOS; then - ( - cd $NEW_REPOS - chown_svn $PACKAGES_DIR && chgrp_svn $PACKAGES_DIR - svn_add $PKG_NAME - svn_add $PKG_NAME.asc - ) - fi - - # Move package's slack-required to binary repository - if [ $MOVE_SLACK_REQUIRED -eq $on ]; then - if [ ! -z "$SLACK_REQUIRED" ]; then - svn_copy $SLACK_REQUIRED $NEW_REPOS/$PACKAGE.slack-required - fi - fi - - fi - - # Update repository metadata - update_metadata $PACKAGES_DIR - - # General cleanup - echo Cleaning up the repository... - svn_remove_empty_folders $PACKAGES_DIR - - # Update noarch repository - if [ $PACKAGES_REPOS_NOARCH -eq $on ] && [ "`package_arch $PKG_NAME`" == "noarch" ]; then - repository_update $NOARCH_DIR - echo Copying package to noarch repository... - create_repo_folder $NOARCH_DIR - remove_old_package_data $NOARCH_DIR - svn_copy $NEW_REPOS/$PKG_NAME $NOARCH_DIR/$SUBFOLDER/ - svn_copy $NEW_REPOS/`strip_pkg_ext $PKG_NAME`.meta $NOARCH_DIR/$SUBFOLDER/ - svn_copy $NEW_REPOS/`basename $PKG_NAME`.asc $NOARCH_DIR/$SUBFOLDER/ - svn_copy $NEW_REPOS/$PACKAGE.slack-required $NOARCH_DIR/$SUBFOLDER/ - update_metadata $NOARCH_DIR - svn_remove_empty_folders $NOARCH_DIR - fi - - # Install package - if [ "$INSTALL" -eq $on ]; then - upgradepkg --install-new $NEW_REPOS/$PKG_NAME - fi - - echo "Package saved at $NEW_REPOS/$PKG_NAME" - - if [ $PACKAGES_REPOS_NOARCH -eq $on ] && [ "`package_arch $PKG_NAME`" == "noarch" ]; then - echo "Aditional copy saved at $NOARCH_DIR/$SUBFOLDER/$PKG_NAME" - fi - - return $EXIT_CODE - -} - -function build_queue { - - # createpkg's build queue - # usage: build_queue <package1> ... <packageN> - - local unable_to_install last_status built=0 total=0 - - if [ -z "$1" ]; then - return - fi - - for PACKAGE in $*; do - create_package - last_status="$?" - let total++ - if [ "$last_status" != "0" ]; then - unable_to_install="$unable_to_install\n\t`echo $PACKAGE | sed -e 's/\\\+/\+/'`" - else - let built++ - fi - done - - if [ ! -z "$unable_to_install" ] && [[ $total > 1 ]]; then - eecho $messag "$BASENAME: done building $built of $total requested SlackBuilds." - eecho $messag "$BASENAME: unable to create the following packages:" - echo -e "$unable_to_install" - fi - - # Fix possible $TMP removal - mkdir -p $TMP - - # Fix $TMP user - if [ ! -z "$TMP_USER" ]; then - chown $TMP_USER $TMP - fi - - # Fix $TMP group - if [ ! -z "$TMP_GROUP" ]; then - chgrp $TMP_GROUP $TMP - fi - - # Exit with last build package exit status - exit $last_status - -} - -#--------------------------------------------------- -# Starting createpkg -#--------------------------------------------------- -# Common functions -COMMON="/usr/libexec/simplepkg/common.sh" -SIMPLEPKG_CONF="/etc/simplepkg/simplepkg.conf" -BASENAME="`basename $0`" -EXIT_CODE=0 - -if [ -f "$COMMON" ]; then - source $COMMON -else - echo "error: file $COMMON found, check your $BASENAME installation" - exit 0 -fi - -set_constants - -# Load simplepkg.conf variables -load_parameters - -# 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_svn_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN - -INSTALL=$off -NO_DEPS=$off -DEBUG=$off - -case $1 in - '--all'|'-a') - # build all SlackBuilds in repository - build_all_slackbuilds - exit $EXIT_CODE - ;; - '--search'|'-s') - if [ $# -ne 2 ]; then - list_slackbuilds - else - LIST=`find_slackbuild $2` - if [ -z $LIST ]; then - EXIT_CODE=1 - else - for i in $LIST; do - echo $i #| sed 's/.*\/\([^\/]\+\)\.[Ss]lack[Bb]uild$/ \1/' - done - fi - fi - exit $EXIT_CODE - ;; - '--info'|'-f') - [ $# -ne 2 ] && usage # two parameters is required - PKG_PATH=`find_slackbuild $2` - info_builds - exit $EXIT_CODE - ;; - '--install'|'-i') - [ $# -ne 2 ] && usage # two parameters is required - shift - PACKAGE="$1" - INSTALL=$on - build_queue $* - ;; - '--no-deps'|'-nd') - [ $# -ne 2 ] && usage # two parameters is required - shift - NO_DEPS=$on - PACKAGE="$1" - build_queue $* - ;; - '--debug'|'-d') - [ $# -ne 2 ] && usage # two parameters is required - shift - PACKAGE="$1" - DEBUG=$on - build_queue $* - ;; - '--sync') - sync_svn_repo $SLACKBUILDS_DIR $SLACKBUILDS_SVN - exit $EXIT_CODE - ;; - '--help'|'-h'|'') - usage - exit $EXIT_CODE - ;; - '--list'|'-l') - list_slackbuilds - exit $EXIT_CODE - ;; - '--update') - repository_update $PACKAGES_DIR - repository_update $NOARCH_DIR - exit $EXIT_CODE - ;; - '--commit') - shift - commit_changes $PACKAGES_DIR "`basename $PACKAGES_DIR:`" $* - if [ $PACKAGES_REPOS_NOARCH -eq $on ]; then - commit_changes $NOARCH_DIR "noarch:" $* - fi - exit $EXIT_CODE - ;; - '--status') - repository_status - exit $EXIT_CODE - ;; - '--import') - shift - binary_repository_import $* - exit $EXIT_CODE - ;; - '--checkout') - shift - repository_checkout $* - exit $EXIT_CODE - ;; - '--update-keyring') - get_sign_user - repo_gpg_key $PACKAGES_DIR --update - if [ $PACKAGES_REPOS_NOARCH -eq $on ]; then - repo_gpg_key $NOARCH_DIR --update - fi - exit $EXIT_CODE - ;; - '--list-packages') - shift - list_packages $* - exit $EXIT_CODE - ;; - '--sign') - shift - sign_package $* - exit $EXIT_CODE - ;; - '--remove') - shift - remove_package $* - exit $EXIT_CODE - ;; - *) - if [ "${1:0:1}" != "-" ]; then - build_queue $* - else - usage - fi - ;; -esac |