diff options
Diffstat (limited to 'trunk/src/mkbuild')
-rwxr-xr-x | trunk/src/mkbuild | 1904 |
1 files changed, 0 insertions, 1904 deletions
diff --git a/trunk/src/mkbuild b/trunk/src/mkbuild deleted file mode 100755 index 9be4a16..0000000 --- a/trunk/src/mkbuild +++ /dev/null @@ -1,1904 +0,0 @@ -#!/bin/bash -# -# mkbuild: SlackBuild script maker -# feedback: rudsonaalves at yahoo.com.br -# -# mkbuild 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. -# -# mkbuild 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 -# -# Based in model generic.SlackBuild from Luis -# Version $Rev$ - $Author$ -# - -#-------------------------------------------------------------------- -# Functions -#-------------------------------------------------------------------- - -function mkbuild_use { - - # mkbuild help function - echo -e "${red}NAME${normal} - mkbuild - create SlackBuild script from ${green}.mkbuild${normal} input file - -${red}SYNOPSIS - mkbuild${normal} [${green}OPTIONS${normal}] [${green}mkbuild_file${normal}] - -${red}DESCRIPTION${normal} - [${green}mkbuild_file${normal}] input file with build rules and variables - - Input ${green}OPTIONS${normal}: - ${red}-a${normal}, ${red}--author${normal} ${green}<author_name>${normal} - author name - ${red}-ai${normal}, ${red}--author_initials${normal} ${green}<initials>${normal} - author signature - ${red}-bn${normal}, ${red}--build-number${normal} - change build number - ${red}-cs${normal}, ${red}--const_string${normal} ${green}<string>${normal} - construction string to source name - ${red}-j${normal}, ${red}--jobs${normal} ${green}<jobs_number>${normal} - Number of jobs to run simultaneously - ${red}-md${normal}, ${red}--model${normal} ${green}<SlackBuild_model>${normal} - SlackBuild model file - ${red}-npss${normal}, ${red}--nps-strip${normal} - Number of prefix slashes to strip - ${red}-pf${normal}, ${red}--patch-files${normal} - List of patch files - ${red}-pn${normal}, ${red}--pkg_name${normal} ${green}<package_name>${normal} - package name - ${red}--prefix${normal} <install_dir>${normal} - Prefix install directory - ${red}-pv${normal}, ${red}--pkg_version${normal} ${green}<version>${normal} - package version - ${red}-sn${normal}, ${red}--src_name${normal} ${green}<source_name>${normal} - source name - ${red}-u${normal}, ${red}--url${normal} ${green}<url_address>${normal} - url address to source - - Program options: - ${red}-d${normal}, ${red}--debug${normal} - enable debug mode - ${red}-ss${normal}, ${red}--submit-slackbuild${normal} - submit SlackBuilds in local svn SlackBuild tree - ${red}-sm${normal}, ${red}--submit-mkbuild${normal} - submit .mkbuild in local svn mkbuild tree - ${red}-sa${normal}, ${red}--submit-all${normal} - submit SlackBuild and .mkbuild files in local svn tree - ${red}-cs${normal}, ${red}--commit-slackbuild${normal} - commit SlackBuilds in svn SlackBuild tree - ${red}-cm${normal}, ${red}--commit-mkbuild${normal} - commit .mkbuild in svn mkbuild tree - ${red}-ca${normal}, ${red}--commit-all${normal} - commit SlackBuild and .mkbuild files in svn tree - ${red}-im${normal}, ${red}--import-mkbuilds${normal} - import mkbuild repository in a svn tree - ${red}-is${normal}, ${red}--import-slackbuilds${normal} - import SlackBuild repository in a svn tree - ${red}-ia${normal}, ${red}-i${normal}, ${red}--import-all${normal}, ${red}--import${normal} - import mkbuild and SlackBuild repositories in a svn tree - ${red}--status${normal} - print mkbuild and SlackBuild svn repositories status - ${red}-ls${normal}, ${red}--list${normal} - list mkbuild folder contents - ${red}-h${normal}, ${red}--help${normal} - this help mesage - ${red}-n${normal}, ${red}--new${normal} ${green}<mkbuild_name>${normal} - start a new mkbuild configure file - ${red}-s${normal}, ${red}--search${normal} ${green}<mkbuild_name>${normal} - search for a ${green}<mkbuild_name>${normal} file - ${red}--sync${normal} - synchronize mkbuilds repository - ${red}-v${normal}, ${red}--version${normal} - program version - ${red}-V${normal}, ${red}--verbose${normal} - print debug information - ${red}-e${normal}, ${red}--edit${normal} - edit a mkbuild - ${red}-um${normal}, ${red}--update-manifest${normal} - update manifest file - ${red}-wc${normal}, ${red}--working-copy${normal} - create an unversioned mkbuild working copy - ${red}--get-param-copy${normal} - get a parameter from a given mkbuild - -${red}EXAMPLES${normal} - ${red}mkbuild -sa pyrex.mkbuild${normal} - build pyrex.SlackBuild and submit .mkbuild and .SlackBuild in - Slack.Sarava local tree. - ${red}mkbuild -a \"Jose Araujo\" -ai \"ja\" -n pyrex${normal} - make a basic pyrex.mkbuild with author name \"Jose Araujo\" and - author signature \"ja\". - ${red}mkbuild --prefix /usr/local pyrex.mkbuild${normal} - build pyrex.SlackBuild with prefix /usr/local and pyrex.mkbuild - variables and options definitions. - -${red}AUTHOR${normal} - Written by ${blue}Rudson R. Alves${normal} - -${red}AVAILABILITY${normal} - by svn: ${yellow}svn checkout http://slack.sarava.org/simplepkg${normal} - -${red}REPORTING BUGS${normal} - Report bugs to <${blue}rudsonaalves[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 set_parameters { - - # Get and set mkbuild variables with parameters input - # Use: set_parameters $@ - # where $@ are the parameters input - # - # Parameter evaluation - ACTION="build" - - local search match - - while [ "$1" ]; do - case $1 in - '-bn'|'--build-number') - # Build Number - BUILD_NUMBER=$2 - is_number $BUILD_NUMBER || handle_error "$ERROR_NOT_NUMBER" "--build-number" - shift - ;; - '-ss'|'--submit-slackbuild') - # Submit SlackBuild file - SUBMIT_SLACKBUILD=$on - ;; - '-sm'|'--submit-mkbuild') - # Submit mkbuild file - SUBMIT_MKBUILD=$on - ;; - '-sa'|'--submit-all') - # Submit SlackBuild and mkbuild file - SUBMIT_SLACKBUILD=$on - SUBMIT_MKBUILD=$on - ;; - '-cs'|'--commit-slackbuild') - # Commit SlackBuild file - ACTION="commit_slackbuild" - set_mkbuild_name $2 - break # we need to break otherwise commit log message is evalued - ;; - '-cm'|'--commit-mkbuild') - # commit mkbuild file - ACTION="commit_mkbuild" - set_mkbuild_name $2 - break # we need to break otherwise commit log message is evalued - ;; - '-ca'|'--commit-all') - # Commit SlackBuild and mkbuild file - ACTION="commit_all" - set_mkbuild_name $2 - break # we need to break otherwise commit log message is evalued - ;; - '-is'|'--import-slackbuilds') - # Import SlackBuilds - ACTION="import_slackbuilds" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-im'|'--import-mkbuilds') - # Import mkbuilds - ACTION="import_mkbuilds" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-ia'|'-i'|'--import-all'|'--import') - # Import SlackBuilds and mkbuilds - ACTION="import_all" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-ds'|'--delete-slackbuild') - # Delete SlackBuild - ACTION="delete_slackbuild" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-dm'|'--delete-mkbuild') - # Delete mkbuild - ACTION="delete_mkbuild" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-da'|'--delete-all') - # Delete mkbuild and SlackBuild - ACTION="delete_all" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '--status') - # Repository status - ACTION="status" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-ls'|'--list') - # List mkbuild folder contents - ACTION="list" - set_mkbuild_name $2 - break # we need to break otherwise specific arguments are evalued - ;; - '-um'|'--update-manifest') - ACTION="update_manifest" - set_mkbuild_name $2 - SOURCE_FILE="$3" - shift 2 - ;; - '-n'|'--new') - # New mkbuild configure file - set_mkbuild_name $2 - ACTION="new" - shift - ;; - '-s'|'--search') - # Search for a mkbuild file - set_mkbuild_name $2 - ACTION='search' - ;; - '-e'|'--edit') - # Open mkbuild with $EDITOR - set_mkbuild_name $2 - ACTION='edit' - break # we need to break otherwise specific arguments are evalued - ;; - '-wc'|'--working-copy') - # Create an unversioned mkbuild working copy - set_mkbuild_name $2 - ACTION='working_copy' - break # we need to break otherwise specific arguments are evalued - ;; - '--get-param') - # Get parameter for a given mkbuild - set_mkbuild_name $2 - ACTION='get_param' - break # we need to break otherwise specific arguments are evalued - ;; - '-d'|'--debug') - # Debug mode - set -x - ;; - '-h'|'--help' ) - # Show help mesage - mkbuild_use && exit 0 - ;; - '--sync' ) - # Synchronize mkbuilds repository - mkbuild_update_keyring - sync_svn_repo $MKBUILDS_DIR $MKBUILDS_SVN - exit $? - ;; - '-v'|'--version') - # Show program version - eecho $normal "\n$BASENAME version $PROG_VERSION\n" - ;; - '-V' | '--verbose') - # Enable verbose mode - VERBOSE=1 - ;; - '-a'|'--author') - # Enter with author name - AUTHOR=$2 - [ ${AUTHOR:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR AUTHOR - shift - ;; - '-ai'|'--author_initials') - # Enter with author name - AUTHOR_INITIALS=$2 - [ ${AUTHOR_INITIALS:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR AUTHOR_INITIALS - shift - ;; - '-cs'|'--const_string') - # Enter with construction source name string - CONST_STRING=$2 - [ ${CONST_STRING:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR CONST_STRING - shift - ;; - '-md'|'--model') - # Enter with SlackBuild model - MODEL=$2 - [ ${MODEL:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR MODEL - shift - ;; - '-j'|'--jobs') - # Enter with SlackBuild model - NUMJOBS=$2 - [ ${NUMJOBS:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR NUMJOBS - ! is_number $NUMJOBS && handle_error $ERROR_NOT_NUMBER NUMJOBS - NUMJOBS="-j$NUMJOBS" - shift - ;; - '--prefix') - # Enter with SlackBuild model - PREFIX=$2 - [ ${PREFIX:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR PREFIX - shift - ;; - '-pn'|'--pkg_name') - # Enter with package name - PKG_NAME=$2 - [ ${PKG_NAME:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR PKG_NAME - shift - ;; - '-pv'|'pkg_version') - # Enter with package version - VERSION=$2 - [ ${VERSION:0:1} = "-" ] && handle_error $ERROR_MKBUILD_INPUT_PAR VERSION - shift - ;; - '-sn'|'--src_name') - # Enter with source name - SRC_NAME=$2 - [ ${SRC_NAME:0:1} = '-' ] && handle_error $ERROR_MKBUILD_INPUT_PAR SRC_NAME - shift - ;; - '-u'|'--url') - # Enter with url address - URL=$2 - [ ${URL:0:1} = '-' ] && handle_error $ERROR_MKBUILD_INPUT_PAR URL - shift - ;; - '-pf'|'--patch-files') - # Path files list - PATCH_FILES=$2 - [ ${PATCH_FILES:0:1} = '-' ] && handle_error $ERROR_MKBUILD_INPUT_PAR PATCH_FILES - shift - ;; - '-npss'|'--nps-strip') - # Number of prefix slashes to strip - NPS_STRIP=$2 - [ ${NPS_STRIP:0:1} = '-' ] && handle_error $ERROR_MKBUILD_INPUT_PAR NPS_STRIP - shift - ;; - *) - # mkbuild input file - set_mkbuild_name $1 - ;; - esac - shift - done - - if [ "${MKBUILD_NAME:0:1}" == "-" ]; then - echo "Invalid mkbuild name $MKBUILD_NAME" - exit 1 - fi - - if [ ! -e "$MKBUILD_NAME" ] && [ "$ACTION" != "search" ] && [ "$ACTION" != "status" ]; then - - search="`search_mkbuild`" - - if [ ! -z "$search" ]; then - for match in $search; do - MKBUILD_NAME="$match" - WORK="`dirname $match`" - break - done - else - if [ "$ACTION" == "build" ]; then - ACTION='new' - fi - fi - - fi - - MKBUILD_NAME="${MKBUILD_NAME//.mkbuild}.mkbuild" - MKBUILD_BASENAME="`basename $MKBUILD_NAME .mkbuild`" - -} - -function get_variable { - - # Get variable value from mkbuild file (MKBUILD_NAME) - [ $# -ne 1 ] && handle_error $ERROR_PAR_NUMBER - [ -z $MKBUILD_NAME ] && echo "Warning: no [mkbuild_file]." && return 0 - - sed -n '1,/^#>>/ p' $MKBUILD_NAME | grep "^\[\[${1}\]\]" | tail -n 1 | cut -f2- -d= | sed -e 's/^"//' -e 's/"$//' - -} - -function edit_file { - - # Edit file $3, by change string [[$1]] to $2 - [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER - - eval "sed -i 's¦\[\[$1\]\]¦$2¦g' $3" - -} - -function edit_file_full { - - # Edit file $3, by change string $1 to $2 - [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER - - eval "sed -i 's¦$1¦$2¦' $3" - -} - -function start_build { - - # Build initial sections - [ $# -ne 1 ] && handle_error $ERROR_PAR_NUMBER - - edit_file "SLACKBUILD AUTHOR" "$AUTHOR" $1 - edit_file "SLACKBUILD AUTHOR INITIALS" "$AUTHOR_INITIALS" $1 - edit_file "SOURCE NAME" "$SRC_NAME" $1 - edit_file "PROGRAM NAME" "$PKG_NAME" $1 - edit_file "PACKAGE NAME" "$PKG_NAME" $1 - edit_file "DECOMPRESSOR" "$DECOMPRESSOR" $1 - edit_file "DECOMPRESSOR TEST FLAG" "$DECOMPRESSOR_TEST_FLAG" $1 - edit_file "PROGRAM URL" "$URL" $1 - if [ "$ARCH" == "noarch" ]; then - sed -i 's/^ARCH=.*$/ARCH="noarch"/' $1 - else - edit_file "ARCH" "$ARCH" $1 - fi - edit_file "NUMBER OF JOBS" "$NUMJOBS" $1 - edit_file "VERSION" "$VERSION" $1 - edit_file "SOURCE NAME CONSTRUCTION STRING" "$CONST_STRING" $1 - edit_file "EXTENSION" "$EXTENSION" $1 - edit_file "MKBUILD COMPRESS" "$MKBUILD_COMPRESS" $1 - edit_file "DOWNLOAD FOLDER URL" "$URL_BASE" $1 - edit_file "OTHER CONFIGURE ARGS" "$OPTIONS" $1 - edit_file "DOCUMENTATION FILES" "$DOCFILES" $1 - edit_file "PREFIX" "$PREFIX" $1 - edit_file "UNPACKER" "$UNPACKER" $1 - edit_file "UNPACKER FLAGS" "$UNPACKER_FLAGS" $1 - edit_file "BUILD NUMBER" "$BUILD_NUMBER" $1 - edit_file "PATCH FILES" "$PATCH_FILES" $1 - edit_file "NUMBER OF PREFIX SLASHES TO STRIP" "$NPS_STRIP" $1 - - edit_file_full "\$EXTENSION" "$EXTENSION" $1 - -} - -function clear_files { - - # Remove temporary files - [ ! -z $AUX_TMP ] && rm $AUX_TMP 2>/dev/null - [ ! -z $SLACKBUILD_TEMP ] && rm $SLACKBUILD_TEMP 2>/dev/null - [ ! -z $DIFF_FILE ] && rm $DIFF_FILE 2>/dev/null - if [ "`ls $TMP/`" == "" ]; then - rm -rf $TMP - fi - chmod 755 *.SlackBuild 2>/dev/null - -} - -function set_status { - - # Set status section - # $1 - Section - # $2 - Status - # $3 - file - [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER - if [ "`get_status $1 $3`" != "all" ]; then - verbose "Section $1 $2" - eval "sed -i 's/^<$1>.*$/<$1> $2/' $3" - else - echo "Warning: Section $1 have status all. Can't change!" - fi - -} - -function get_status { - - # Get status from section - # $1 - Section - # $2 - file - [ $# -ne 2 ] && handle_error $ERROR_PAR_NUMBER - eval "sed '/^<$1>.*$/! d' $2" - -} - -function get_mkbuild_status { - - # Get status from mkbuild file - # $1 section - eval "sed '/^#>>/,/<</ ! d; /^#/ d; /: *$1$/! d; s/^ *\(.*\):.*$/\1/' $MKBUILD_NAME" -} - -function activate_sections { - - # Enable and disable sections - ACTIONS_LIST=`sed '/^#>>/,/<</ ! d; /^#/ d ' $MKBUILD_NAME | tr -d ' '` - for i in $ACTIONS_LIST; do - STATUS=`echo $i | cut -f1 -d:` - SECTION=`echo $i | cut -f2 -d:` - set_status $SECTION $STATUS $SLACKBUILD_TEMP - done - -} - -function build_slackbuild { - - # Clean SlackBuild - # Make SlackBuild backup - [ -e $SLACKBUILD ] && mv $SLACKBUILD $SLACKBUILD.old - # Remove off sections - sed -i '/^<[a-z].*> off/, /^<\/[a-z].*>$/ d' $SLACKBUILD_TEMP - # Remove sections names - sed -i '/^<.*$/ d' $SLACKBUILD_TEMP - # Remove clear lines - # isto pode ser feito com "cat -s SLACKBUILD_TEMP ..." - #sed -i ':i ; $! N; s/\n/Ø/ ; t i ; s/Ø\{3,\}/ØØ/g ; s/Ø/\n/g' $SLACKBUILD_TEMP - cat -s $SLACKBUILD_TEMP > $SLACKBUILD - # Remove from frist line do #!/... line - #sed '1,/^#\!/ {/^#\!/ b; d }' $SLACKBUILD_TEMP > $SLACKBUILD - sed -i '1,/^#\!/ {/^#\!/ b; d }' $SLACKBUILD - -} - -function section_edit { - - # Edits a section substituting its content - [ -z $MKBUILD_NAME ] && return 0 - - SECTION_LIST=`grep '^#>[a-z]' $MKBUILD_NAME | cut -c3-` - - # Check for sections change - [ -z "$SECTION_LIST" ] && return 0 - - # Change sections - for i in $SECTION_LIST; do - verbose "Change section $i" - if [ "$i" = "slackdesc" ]; then - # Special slackdesc section - slackdesc_edit > $AUX_TMP - mv $AUX_TMP $SLACKBUILD_TEMP - else - # Others sections - section_change $i - fi - done - -} - -function slackdesc_edit { - - # Edit slackdesc section - sed -n '1,/|-----/ { /<slackdesc>/ b; /|-----/ b; p; }' $SLACKBUILD_TEMP - echo -n $PKG_NAME | tr [a-z+\-] " " - echo -n "|-----handy-ruler" - let N=18+${#PKG_NAME} - for i in `seq $N $SLACKDESC_LEN`; do - echo -n "-" - done - echo -en "|\n" - - sed -n '/#>slackdesc/,/#<slackdesc/ { /^#/ b; p }' $MKBUILD_NAME - sed '1, /\[\[SLACK-DESC\]\]/ d' $SLACKBUILD_TEMP - -} - -function section_change { - - # Change section lines - [ $# -ne 1 ] && handle_error $ERROR_PAR_NUMBER - - # Copy first half - eval "sed '1,/^<$1>/! d' $SLACKBUILD_TEMP > $AUX_TMP" - # Paste new section - eval "sed -n '/#>$1/,/#<$1/ { /^#>/ b; /^#</ b; p }' $MKBUILD_NAME >> $AUX_TMP" - # Copy second halt - eval "sed '/^<\/$1>/,$ ! d' $SLACKBUILD_TEMP >> $AUX_TMP" - - mv $AUX_TMP $SLACKBUILD_TEMP - -} - -function make_slack_required { - - # Build slack-required file - [ -e $WORK/slack-required ] && mv $WORK/slack-required $WORK/slack-required.old - [ -z "$SLACK_REQUIRED" ] && return 0 - - echo -e "# Dependency list to $SRC_NAME\n#\n# dependency [condition] [version]]" > $WORK/slack-required - - echo $SLACK_REQUIRED | sed 's/:/\n/g' | while read i; do - REQ=`echo $i | awk '{ print $1 }'` - CON=`echo $i | awk '{ print $2 }'` - VER=`echo $i | awk '{ print $3 }'` - echo -e "$REQ\t\t$CON\t\t$VER" >> $WORK/slack-required - done - -} - -function change_other_parameters { - - # Change other parameters started by '[[' in .mkbuild file - sed '1,/#>>/ ! d' $MKBUILD_NAME | grep -v '^#' | grep '^\[\[[A-Za-z]' | \ - while read i; do - CHANGE="`echo $i | sed 's/\[\[\(.*\)\]\]=\"\(.*\)\"/\1/'`" - VALUE="`echo $i | sed 's/\[\[\(.*\)\]\]=\"\(.*\)\"/\2/'`" - edit_file "$CHANGE" "$VALUE" $SLACKBUILD - done - -} - -function get_slackbuild_path { - - # Search for SlackBuild Path in order: - # - command line parameter; - # - mkbuild parameters file; - # - SlackBuild tree; - # - Gentool-portage internet tree; - # - default path (others/unclassified/$PKG_NAME). - - # Start AUX_PATH with command line parameter - AUX_PATH="$SLACKBUILD_PATH" - - # Get in mkbuild - [ -z "$AUX_PATH" ] && AUX_PATH=`validate_parameter "$SLACKBUILD_PATH" "SLACKBUILD PATH" ""` - - # SlackBuild path in SlackBuild tree - [ -z "$AUX_PATH" ] && AUX_PATH=`cd $SLACKBUILDS_DIR && find . -name $SLACKBUILD | sed -e 's/^\.\///' | xargs dirname 2>/dev/null` - - # SlackBuild path default - [ -z "$AUX_PATH" ] && AUX_PATH="others/unclassified/$PKG_NAME" - - # Down case SlackBuild path - eval "echo $AUX_PATH" | tr [A-Z] [a-z] - -} - -function apply_mkpatch { - - # Apply mkpatch if exist - sed -n '/#p>/,/#p</ { /^#/ b; p }' $MKBUILD_NAME > $DIFF_FILE - if [ -s $DIFF_FILE ]; then - mkpatch $DIFF_FILE $SLACKBUILD_TEMP > $AUX_TMP || handle_error $? - [ ! -s $AUX_TMP ] && handle_error 1 - cp $AUX_TMP $SLACKBUILD_TEMP - [ $VERBOSE -eq $on ] && ( echo -e "\nApply mkpath ..."; cat $DIFF_FILE ) - fi - -} - -# ---------------------------------------------------------------- -# svn functions -# ---------------------------------------------------------------- - -function submit_slackbuild { - - # Submit SlackBuild in local Slack.Sarava tree - echo -e "\nSubmiting $SLACKBUILD" - - local candidate oldplace - - # check SlackBuilds directory - [ ! -e $SLACKBUILDS_DIR ] && createpkg --sync - - # change to SlackBuilds directory - cd $SLACKBUILDS_DIR/ - - # Add SlackBuild scripts - # check path - [ ! -e $SLACKBUILD_PATH ] && svn_mkdir $SLACKBUILD_PATH - - # add SlackBuild - svn_copy $WORK/`basename $SLACKBUILD` $SLACKBUILD_PATH - - # check and add slack-required - [ -e $WORK/slack-required ] && svn_copy $WORK/slack-required $SLACKBUILD_PATH - - for i in `ls $WORK | grep -E -v '(SlackBuild|old|slack-required|.mkbuild$|.tmp$)\*{0,1}$'`; do - svn_copy $WORK/$i $SLACKBUILD_PATH - done - - # remove stuff in old places - for candidate in $(find . -name $(basename $SLACKBUILD)); do - oldplace="`dirname $candidate | sed -e 's/^\.\///'`" - if [ "$oldplace" != "$SLACKBUILD_PATH" ]; then - echo "Removing SlackBuild found at old path $oldplace" - svn_del $oldplace - fi - done - - if [ "$SIGN_MANIFESTS" -eq $on ]; then - repo_gpg_key $SLACKBUILDS_DIR - fi - - cd $WORK - -} - -function submit_mkbuild { - - # Submit mkbuild in local mkbuild Slack.Sarava tree - echo -e "\nSubmiting $MKBUILD_NAME" - - local candidate oldplace - - # Check mkbuild directory - [ ! -d $MKBUILDS_DIR ] && build_svn_repo $MKBUILDS_DIR $MKBUILDS_SVN - - # Get mkbuild path in parameter file - MKBUILD_PATH=$SLACKBUILD_PATH - - # Change to mkbuilds directory - cd $MKBUILDS_DIR/ - - # Check path - [ ! -e $MKBUILD_PATH ] && svn_mkdir $MKBUILD_PATH - - # Add relevant files - for i in `ls $WORK | grep -E -v '(SlackBuild|old|slack-required|.tmp$)\*{0,1}$'`; do - if [ "`basename $i`" != "$DIST_SRC_NAME" ]; then - if ! is_the_same $MKBUILD_PATH $WORK; then - svn_copy $WORK/$i $MKBUILD_PATH - else - svn_add $WORK/$i - fi - fi - done - - # Remove stuff in old places - for candidate in $(find . -name $(basename $MKBUILD_NAME)); do - oldplace="`dirname $candidate | sed -e 's/^\.\///'`" - if [ "$oldplace" != "$MKBUILD_PATH" ]; then - echo "Removing mkbuild found at old path $oldplace" - svn_del $oldplace - fi - done - - submit_cleanup - - cd $WORK - -} - -function submit_cleanup { - - # Remove files that should not be stored at the mkbuilds repository - if is_the_same $MKBUILD_PATH $WORK; then - ( - cd $WORK - rm -f *.old *.tmp *.SlackBuild slack-required $DIST_SRC_NAME - ) - fi - -} - -function import_mkbuilds { - - # import mkbuilds into a subversion repository - # usage: repository_import [repository] - - local repository="$1" - - if [ -z "$repository" ]; then - repository="file:////var/svn/mkbuilds" - fi - - repository_import $MKBUILDS_DIR $repository - -} - -function import_slackbuilds { - - # import SlackBuilds into a subversion repository - # usage: repository_import [repository] - - local repository="$1" - - if [ -z "$repository" ]; then - repository="file:////var/svn/slackbuilds" - fi - - repository_import $SLACKBUILDS_DIR $repository - -} - -function repository_status { - - local cwd - - if svn_folder $MKBUILDS_DIR; then - echo "Status of $MKBUILDS_DIR." - cwd="`pwd`" - cd $MKBUILDS_DIR && su_svn status - cd $cwd - fi - - if svn_folder $SLACKBUILDS_DIR; then - cwd="`pwd`" - echo "Status of $SLACKBUILDS_DIR." - cd $SLACKBUILDS_DIR && su_svn status - cd $cwd - fi - - exit 0 - -} - -# ---------------------------------------------------------------- -# general functions -# ---------------------------------------------------------------- - -function validate_parameter { - - # Validate parameter in .mkbuild file - [ $# -ne 3 ] && handle_error $ERROR_PAR_NUMBER - - if [ ! -z "$1" ]; then - echo "$1" - else - local STRING="`get_variable "$2"`" - if [ ! -z "$STRING" ]; then - echo "$STRING" - else - echo "$3" - fi - fi - -} - -function decompress_find { - - # Find decompressor program and test flag - case $EXTENSION in - 'gz'|'GZ') - DECOMPRESSOR="gunzip" - DECOMPRESSOR_TEST_FLAG="-t" - ;; - 'bz2'|'BZ2') - DECOMPRESSOR="bunzip2" - DECOMPRESSOR_TEST_FLAG="-t" - ;; - 'zip'|'ZIP') - DECOMPRESSOR="unzip" - DECOMPRESSOR_TEST_FLAG="-t" - ;; - *) - handle_error $ERROR_MKBUILD_CONSTRUCTION "DECOMPRESSOR" - ;; - esac - -} - -function load_parameters { - - # Load Createpkg parameters - SOURCE_DIR="`eval_parameter SOURCE_DIR /var/simplepkg/sources`" - SLACKBUILDS_DIR="`eval_parameter SLACKBUILDS_DIR /var/simplepkg/slackbuilds`" - [ ! -d $SLACKBUILDS_DIR ] && mkdir -p $SLACKBUILDS_DIR - - MKBUILDS_DIR="`eval_parameter MKBUILDS_DIR /var/simplepkg/mkbuilds`" - [ ! -d $SLACKBUILDS_DIR ] && mkdir -p $SLACKBUILDS_DIR - - SLACKBUILDS_SVN="`eval_parameter SLACKBUILDS_DIR http://slack.sarava.org/slackbuilds`" - MKBUILDS_SVN="`eval_parameter MKBUILDS_SVN http://slack.sarava.org/mkbuilds`" - SVN_USER="`eval_parameter MKBUILDS_SVN_USER`" - SVN_GROUP="`eval_parameter MKBUILDS_SVN_GROUP`" - - COLOR_MODE="`eval_parameter COLOR_MODE none`" - TMP="`eval_parameter TMP /tmp`" - [ ! -e $TMP ] && mkdir -p $TMP - - MKBUILD_COMPRESS="`eval_parameter MKBUILD_COMPRESS tgz`" - MKBUILD_AUTHOR="`eval_parameter MKBUILD_AUTHOR`" - MKBUILD_AUTHOR_INITIALS="`eval_parameter MKBUILD_AUTHOR_INITIALS`" - - SIGN_MANIFESTS="`eval_boolean_parameter SIGN_MANIFESTS $off`" - SIGN_MANIFESTS_USER="`eval_parameter SIGN_MANIFESTS_USER`" - SIGN_MANIFESTS_KEYID="`eval_parameter SIGN_MANIFESTS_KEYID`" - SIGN_MANIFESTS_WITH_GPG_AGENT="`eval_boolean_parameter SIGN_MANIFESTS_WITH_GPG_AGENT $off`" - - if [ ! -z "$SIGN_MANIFESTS_KEYID" ]; then - SIGN_MANIFESTS_KEYID="`echo $SIGN_MANIFESTS_KEYID | tr '[:lower:]' '[:upper:]'`" - fi - - if [ "$SIGN_MANIFESTS_WITH_GPG_AGENT" -eq $on ]; then - GPG_AGENT_OPTION="--use-agent" - else - GPG_AGENT_OPTION="" - fi - - # For use at common.sh functions - SIGN="$SIGN_MANIFESTS" - SIGN_KEYID="$SIGN_MANIFESTS_KEYID" - SIGN_USER="$SIGN_MANIFESTS_USER" - - if [ "$SIGN_MANIFESTS" -eq $on ]; then - get_sign_user - fi - -} - -function file_metainfo { - - # get integrity file metadata - # usage: file_metainfo <file> <file_type> <manifest_file> - - local sum="" file="$1" file_type="`echo $2 | tr '[:lower:]' '[:upper:]'`" - local size algo candidate folders path manifest_file="$3" - local dist_name="`basename $file`" - - if [ -d "$file" ]; then - return - fi - - if [ -z "$file_type" ]; then - file_type="AUX" - fi - - if [ ! -e "$file" ]; then - if [ "$file_type" == "DIST" ]; then - - # Add DIST information only if source is not under revision control - if [ $SVN_MOD -eq $on -o $GIT_MOD -eq $on ]; then - return - fi - - # Force DIST file name at Manifest - dist_name="$DIST_SRC_NAME" - - # Determine file location - get_dist_file - - # Update Manifest metadata - if [ -e "$DIST_SRC_LOCATION" ]; then - file="$DIST_SRC_LOCATION" - else - echo "$file_type $dist_name " >> $manifest_file # end space is important - return 1 - fi - - elif [ "$file_type" == "PATCH" ]; then - - # Determine file location - get_patch_file $file - - # Update Manifest metadata - if [ -e "$DOWNLOADED_PATCH_LOCATION" ]; then - file="$DOWNLOADED_PATCH_LOCATION" - else - echo "$file_type $dist_name " >> $manifest_file # end space is important - return 1 - fi - - else - echo "$file_type $dist_name " >> $manifest_file # end space is important - return 1 - fi - fi - - for algo in md5 rmd160 sha1 sha256 sha512; do - sum="$sum `echo $algo | tr '[:lower:]' '[:upper:]'` `gethash $algo $file`" - done - - echo $file_type $dist_name `file_size $file` $sum >> $manifest_file - - if [ "$file_type" == "DIST" ] || [ "$file_type" == "PATCH" ]; then - echo "Please make sure that the following hashes are correct:" - grep -e "^$file_type $dist_name " $manifest_file - fi - -} - -function update_manifest_info { - - # update manifest metainfo for a given file - # usage: update_manifest_info <file> <file_type> - - local tmpfile file="$1" file_type="`echo $2 | tr '[:lower:]' '[:upper:]'`" - - if [ -z "$file_type" ]; then - file_type="`file_extension $file | tr '[:lower:]' '[:upper:]'`" - fi - - # Update Manifest file - if [ ! -e "$WORK/Manifest" ]; then - touch $WORK/Manifest - fi - - # Set temporary file - tmpfile="`mktemp $TMP/mkbuild_manifest.XXXXXX`" - - # Update metadata - sed -e "/^$file_type `basename $file` /d" $WORK/Manifest > $tmpfile - file_metainfo $file $file_type $tmpfile - - if [ "$?" != "0" ]; then - echo "Could not add hashes for $file on Manifest: file not found." - echo "Please do it with --update-manifest." - fi - - # Save Manifest changes - strip_gpg_signature $tmpfile | sort > $WORK/Manifest - - rm -f $tmpfile - -} - -function edit_manifest { - - local option="$1" - - # Check if existing Manifest is properly signed - if ! check_manifest_signature; then - echo "Invalid signature at $WORK/Manifest, aborting." - return 1 - fi - - # Update Manifest file - echo "Updating Manifest..." - - # Update mkbuild metainformation - update_manifest_info $WORK/`basename $MKBUILD_NAME` - - # Update SlackBuild information - update_manifest_info $WORK/`basename $SLACKBUILD` - - # Update slack-required information - if [ -e "$WORK/slack-required" ]; then - update_manifest_info $WORK/slack-required - fi - - if [ "$option" == "--update" ]; then - # Add DIST information only if source is not under revision control - if [ $SVN_MOD -eq $on -o $GIT_MOD -eq $on ]; then - echo "Source is under version control system, not adding hashes to Manifest." - else - echo "Updating DIST information at $MKBUILD_NAME Manifest..." - - # Determine file location - get_dist_file $SOURCE_FILE - - # Update Manifest metadata - if [ -e "$DIST_SRC_LOCATION" ]; then - update_manifest_info $DIST_SRC_LOCATION dist - else - echo "Can't get $DIST_SRC_NAME." - fi - fi - else - # Add source code information if its not already there - if ! grep -q -e "^DIST $DIST_SRC_NAME " $WORK/Manifest; then - update_manifest_info $DIST_SRC_NAME dist - fi - fi - - # Update patches - for i in `find $WORK | grep -E '(.diff$|.diff.gz$|.diff.bz2$|.patch$|.patch.gz$|.patch.bz2$)\*{0,1}$'`; do - if [ ! -d "$WORK/$i" ] && ! grep -q -e "^PATCH `basename $i` " $WORK/Manifest; then - update_manifest_info $i patch - fi - done - - # Update patches from URLs - for i in $PATCH_URLS; do - if ! grep -q -e "^PATCH `basename $i` " $WORK/Manifest; then - update_manifest_info $i patch - fi - done - - # Update miscelaneous information - for i in `find $WORK | grep -E -v '(SlackBuild|old|slack-required|.mkbuild$|.tmp$|Manifest$)\*{0,1}$' | \ - grep -E -v '(.diff$|.diff.gz$|.diff.bz2$|.patch$|.patch.gz$|.patch.bz2$)\*{0,1}$' | \ - grep -v "/\.svn"`; do - # Avoid folders, dotfiles and DIST files - if [ ! -d "$WORK/$i" ] && \ - [ "`basename $i`" != "$DIST_SRC_NAME" ] && \ - ! echo "`basename $i`" | grep -q -e "^\."; then - update_manifest_info $i misc - fi - done - - # Finally, sign the Manifest - sign_manifest - -} - -function get_file { - - # download a file - # usage: download_file <file_type> <url> [file] [dist_name] - - local folder folders path candidate - local file_type="`echo $1 | tr '[:lower:]' '[:upper:]'`" - local url="$2" file="$3" file_name="$4" - local protocol="`echo $url| cut -d : -f 1 | tr '[:upper:]' '[:lower:]'`" - - if [ -z "$file_name" ]; then - if [ "$file_type" == "DIST" ]; then - file_name="$DIST_SRC_NAME" - else - file_name="`basename $url`" - fi - fi - - # Clean global var - DOWNLOADED_FILE_LOCATION="" - - # Determine file location - if [ -d "$file" ]; then - - folder="$file" - file="$file_name" - for candidate in $(find $folder -name $(basename $file)); do - if [ ! -z "$candidate" ]; then - break 2 - fi - done - - if [ ! -z "$candidate" ]; then - echo "Using $(basename $candidate) found at $(dirname $candidate) to hash at the Manifest." - file="$candidate" - else - echo "Can't find $file at $folder." - return 1 - fi - - elif [ -z "$file" ]; then - - file="$file_name" - folders="$WORK $TMP $SOURCE_DIR" - if ! is_the_same /tmp $TMP; then - folders="$folders /tmp" - fi - - echo "Trying to find $(basename $file) at $folders..." - - for path in $folders; do - for candidate in $(find $path -name $(basename $file) 2> /dev/null); do - if [ ! -z "$candidate" ]; then - break 2 - fi - done - done - - if [ ! -z "$candidate" ]; then - - echo "Using $(basename $candidate) found at $(dirname $candidate) to hash at the Manifest." - file="$candidate" - - elif [ "$protocol" == "https" ] || \ - [ "$protocol" == "http" ] || \ - [ "$protocol" == "ftp" ]; then - - # Try to donwload the file - echo "File $file not found, trying to download it..." - if [ ! -e "$file" ]; then - if is_writable_folder $SOURCE_DIR/$PKG_NAME; then - file="$SOURCE_DIR/$PKG_NAME/`basename $file_name`" - wget "$url" -O "$file" - if [ "$?" != "0" ]; then - echo "Could not download $file" - return 1 - fi - elif is_writable_folder $TMP; then - file="$TMP/`basename $file_name`" - if [ ! -e "$file" ]; then - wget "$url" -O "$file" - if [ "$?" != "0" ]; then - echo "Could not download $file" - return 1 - fi - fi - elif ! is_the_same /tmp $TMP; then - file="/tmp/`basename $file_name`" - if [ ! -e "$file" ]; then - wget "$url" -O "$file" - if [ "$?" != "0" ]; then - echo "Could not download $file" - return 1 - fi - fi - else - echo "Could not download $file" - return 1 - fi - fi - fi - fi - - if [ -e "$file" ]; then - DOWNLOADED_FILE_LOCATION="$file" - fi - -} - -function get_dist_file { - - # get package source code - # usage: get_dist_file <url> [file_name] - - DIST_SRC_LOCATION="" - get_file dist $DIST_SRC_URL - DIST_SRC_LOCATION="$DOWNLOADED_FILE_LOCATION" - -} - -function get_patch_file { - - # get a patch - # usage: get_patch <file_name> - - local patch_url file_name="$1" - - if [ -z "$file_name" ]; then - return 1 - fi - - DOWNLOADED_PATCH_LOCATION="" - - for patch_url in $PATCH_URLS; do - if [ "`basename $file_name`" == "`basename $patch_url`" ]; then - get_file patch $patch_url - DOWNLOADED_PATCH_LOCATION="$DOWNLOADED_FILE_LOCATION" - break - fi - done - -} - -function update_manifest { - - # Get mkbuild values - get_mkbuild_values - - # Update the Manifest - edit_manifest --update - -} - -function if_previous_error { - - if [ "$?" != "0" ]; then - handle_error $* - fi - -} - -function verbose { - - if [ $VERBOSE -eq $on ]; then - echo $* - fi - -} - -function get_mkbuild_values { - - # Get values - # Author name - AUTHOR=${AUTHOR:="`get_variable "SLACKBUILD AUTHOR"`"} - [ -z "$AUTHOR" ] && handle_error $ERROR_MKBUILD_CONSTRUCTION "SLACKBUILD AUTHOR" - verbose "[[SLACKBUILD AUTHOR]]=\"$AUTHOR\"" - - # Author initials - STR_MOUNT=`echo $AUTHOR | sed 's/ /\n/g' | sed 's/^\([A-Z]\).*/\1/' | sed ':i; $!N; s/\n//; ti' | tr [A-Z] [a-z]` - AUTHOR_INITIALS="`validate_parameter "$AUTHOR_INITIALS" "SLACKBUILD AUTHOR INITIALS" "$STR_MOUNT"`" - if_previous_error $ERROR_MKBUILD_CONSTRUCTION "SLACKBUILD AUTHOR INITIALS" - verbose "[[SLACKBUILD AUTHOR INITIALS]]=\"$AUTHOR_INITIALS\"" - - # URL program - URL=`validate_parameter "$URL" "DOWNLOAD FOLDER URL" ""` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "URL" - verbose "[[URL]]=\"$URL\"" - - AUX=`get_mkbuild_status "svn_source"` - SVN_MOD=`convert_boolean "$AUX"` - - AUX=`get_mkbuild_status "git_source"` - GIT_MOD=`convert_boolean "$AUX"` - - # Check sections - if [ $SVN_MOD -eq $on -o $GIT_MOD -eq $on -o $URL == "" ]; then - LIST_OFF="download_source md5sum_download_and_check_0 md5sum_download_and_check_1 gpg_signature_check untar_source" - verbose -e "\nCheck subversion or empty URL" - for i in $LIST_OFF; do - if [ `get_mkbuild_status "$i"` != "off" ]; then - handle_error $ERROR_MKBUILD_VCS - else - verbose -e "off: $i is ok." - fi - done - fi - - STR_MOUNT="`echo $URL | sed 's/.*\.\([a-z0-9]\+\)$/\1/'`" - if [ $STR_MOUNT = "gz" -o $STR_MOUNT = "tgz" -o $STR_MOUNT = "bz2" -o $STR_MOUNT = "zip" ]; then - SOURCE_NAME=`basename $URL` - URL_BASE=`dirname $URL` - else - URL_BASE=$URL - fi - verbose "[[DOWNLOAD FOLDER URL]]=\"$URL_BASE\"" - - if [ $SVN_MOD -eq $off ] && [ $GIT_MOD -eq $off ]; then - # Extension - EXTENSION=`validate_parameter "$EXTENSION" "EXTENSION" "$STR_MOUNT"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "EXTENSION" - verbose "[[EXTENSION]]=\"$EXTENSION\"" - - # Unpacker - UNPACKER=`validate_parameter "$UNPACKER" "UNPACKER" "tar"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "UNPACKER" - verbose "[[UNPACKER]]=\"$UNPACKER\"" - - # Unpacker flags - [ "$UNPACKER" == "tar" ] && STR_MOUNT="--no-same-owner --no-same-permissions -xvf" || STR_MOUNT="" - UNPACKER_FLAGS=`validate_parameter "$UNPACKER_FLAGS" "UNPACKER FLAGS" "$STR_MOUNT"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "UNPACKER FLAGS" - verbose "[[UNPACKER_FLAGS]]=\"$UNPACKER_FLAGS\"" - - # Decompressor program and test flag - DECOMPRESSOR=`validate_parameter "$DECOMPRESSOR" "DECOMPRESSOR" ""` - [ -z $DECOMPRESSOR ] && decompress_find - verbose "[[DECOMPRESSOR]]=\"$DECOMPRESSOR\"" - - DECOMPRESSOR_TEST_FLAG=`validate_parameter "$DECOMPRESSOR_TEST_FLAG" "DECOMPRESSOR TEST FLAG" ""` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "DECOMPRESSOR TEST FLAG" - verbose "[[DECOMPRESSOR TEST FLAG]]=\"$DECOMPRESSOR_TEST_FLAG\"" - fi - - # Build number - BUILD_NUMBER=`validate_parameter "$BUILD_NUMBER" "BUILD NUMBER" "1"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "BUILD NUMBER" - - # Build archteture - ARCH=`validate_parameter "$ARCH" "ARCH" "i486"` - verbose "[[ARCH]]=\"$ARCH\"" - - # Source name - STR_MOUNT=`echo $SOURCE_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\1/'` - SRC_NAME=`validate_parameter "$SRC_NAME" "SOURCE NAME" "$STR_MOUNT"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "SOURCE NAME" - verbose "[[SOURCE NAME]]=\"$SRC_NAME\"" - - # SOURCE NAME cannot be empty - if [ -z "$SRC_NAME" ]; then - echo "SOURCE NAME is empty." - handle_error $ERROR_MKBUILD_CONSTRUCTION "SOURCE NAME" - fi - - # Package name - STR_MOUNT=$SRC_NAME - PKG_NAME=`validate_parameter "$PKG_NAME" "PACKAGE NAME" "$STR_MOUNT"` - verbose "[[PACKAGE NAME]]=\"$PKG_NAME\"" - - # PACKAGE NAME cannot be empty - if [ -z "$PKG_NAME" ]; then - echo "PACKAGE NAME is empty." - handle_error $ERROR_MKBUILD_CONSTRUCTION "PACKAGE NAME" - fi - - # Version - STR_MOUNT=`echo $SOURCE_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\2/'` - VERSION=`validate_parameter "$VERSION" "VERSION" "$STR_MOUNT"` - if_previous_error handle_error $ERROR_MKBUILD_CONSTRUCTION "VERSION" - verbose "[[VERSION]]=\"$VERSION\"" - - # Source name construction string - CONST_STRING="`validate_parameter "$CONST_STRING" "SOURCE NAME CONSTRUCTION STRING" "\\\$SRC_NAME-\\\$VERSION.tar.$EXTENSION"`" - verbose "[[SOURCE NAME CONSTRUCTION STRING]]=\"$CONST_STRING\"" - - # Build Source Name - [ -z $SOURCE_NAME ] && SOURCE_NAME=`eval "echo $CONST_STRING"` - verbose "SOURCE_NAME=\"$SOURCE_NAME\"" - - # Eval source code name and URL - DIST_SRC_NAME="`eval "echo $CONST_STRING"`" # we need this to strip some escape strings - DIST_SRC_NAME="`eval "echo $DIST_SRC_NAME"`" # twice does the job - DIST_SRC_URL="`eval "echo $URL_BASE"`" # we need this to strip some escape strings - DIST_SRC_URL="`eval "echo $DIST_SRC_URL"`" # twice does the job - DIST_SRC_URL="$DIST_SRC_URL/$DIST_SRC_NAME" - - # Documentations list - DEFAULT_DOCFILES="NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING LICENSE SIGNATURE readme.*" - DOCFILES=`validate_parameter "$DOCFILES" "DOCUMENTATION FILES" "$DEFAULT_DOCFILES"` - verbose "[[DOCUMENTATION FILES]]=\"$DOCFILES\"" - - # ./configure option - OPTIONS=`validate_parameter "$OPTIONS" "OTHER CONFIGURE ARGS" ""` - verbose "[[OTHER CONFIGURE ARGS]]=\"$OPTIONS\"" - - # PREFIX - PREFIX=`validate_parameter "$PREFIX" "PREFIX" "/usr"` - verbose "[[PREFIX]]=\"$PREFIX\"" - - # Number of jobs - NUMJOBS=`validate_parameter "$NUMJOBS" "NUMBER OF JOBS" ""` - is_number $NUMJOBS && NUMJOBS="-j${NUMJOBS}" - verbose "[[NUMBER OF JOBS]]=\"$NUMJOBS\"" - - # Make slack-required file - SLACK_REQUIRED=`validate_parameter "$SLACK_REQUIRED" "SLACK REQUIRED" ""` - verbose "[[SLACK REQUIRED]]=\"$SLACK_REQUIRED\"" - - # SlackBuild model - MODEL=`validate_parameter "$MODEL" "SLACKBUILD MODEL" "generic.mkSlackBuild"` - verbose "[[SLACKBUILD MODEL]]=\"$MODEL\"" - - # PATCH FILES - PATCH_FILES=`validate_parameter "$PATCH_FILES" "PATCH FILES" ""` - verbose "[[PATCH_FILES]]=\"$PATCH_FILES\"" - - # PATCH URLs - PATCH_URLS=`validate_parameter "$PATCH_URLS" "PATCH URLS" ""` - verbose "[[PATCH_URLS]]=\"$PATCH_URLS\"" - - # Strip the smallest prefix containing num leading slashes from each file name found in the patch file. - NPS_STRIP=`validate_parameter "$NPS_STRIP" "NUMBER OF PREFIX SLASHES TO STRIP" "1"` - verbose "[[NUMBER OF PREFIX SLASHES TO STRIP]]=\"$NPS_STRIP\"" - - # SlackBuild path - # SlackBuild path in mkbuild parameters file - SLACKBUILD=$WORK/${PKG_NAME}.SlackBuild - SLACKBUILD_PATH=`get_slackbuild_path` - verbose "[[SLACKBUILD PATH]]=\"$SLACKBUILD_PATH\"" - -} - -function make_slackbuild { - - #-------------------------------------------------------------- - #- Start build SlackBuild - - #-------------------------------------------------------------- - - # Get mkbuild values - get_mkbuild_values - - verbose -e "\nStart SlackBuild make" - SLACKBUILD_TEMP=$SLACKBUILD.tmp - cp $MODEL_DIR/$MODEL $SLACKBUILD_TEMP - - # Apply mkpatch - verbose -e "\nMkpatch section ..." - apply_mkpatch - - # On/Off sections - verbose -e "\nEnable/disable sections ..." - activate_sections - - # Change sections - verbose -e "\nEdit sections ..." - section_edit - - # Change strings from model - verbose -e "\nChange strings in $PACKAGE.SlackBuild model..." - start_build $SLACKBUILD_TEMP - - # Remove off sections - verbose -e "\nRemove off sections ..." - build_slackbuild - - # Make slack-required file - verbose -e "\nMake slack-required file ..." - make_slack_required - - if [ -e slack-required ]; then - DEPENDENCY_LIST="`cat $WORK/slack-required | awk '{print $1}' | grep '^[a-z]' | tr '\012' ' '`" - edit_file "REQUIRES" "$DEPENDENCY_LIST" $SLACKBUILD - else - edit_file "REQUIRES" " " $SLACKBUILD - fi - - # Others changes - verbose -e "\nEdit other [[]] parameters ..." - change_other_parameters - - if [ "$SIGN_MANIFESTS" -eq $on ]; then - mkbuild_update_keyring - repo_gpg_key $MKBUILDS_DIR - fi - - # Update Manifest file - edit_manifest - - if [ "$?" == "0" ]; then - - # Commit SlackBuild - [ $SUBMIT_SLACKBUILD -eq $on ] && submit_slackbuild - - # Commit mkbuild - [ $SUBMIT_MKBUILD -eq $on ] && submit_mkbuild - fi - -} - -function create_mkbuild { - - # Create a new .mkbuild parameters-file - cp $MODEL_DIR/model.mkbuild $MKBUILD_NAME - - if [ -z "$AUTHOR" ] && [ ! -z "$MKBUILD_AUTHOR" ]; then - AUTHOR="$MKBUILD_AUTHOR" - fi - - if [ -z "$AUTHOR_INITIALS" ] && [ ! -z "$MKBUILD_AUTHOR_INITIALS" ]; then - AUTHOR_INITIALS="$MKBUILD_AUTHOR_INITIALS" - fi - - # Package Author - if [ ! -z "$AUTHOR" ]; then - edit_file "YOUR NAME" "${AUTHOR}" $MKBUILD_NAME - # Package Author Signature - if [ -z "$AUTHOR_INITIALS" ]; then - AUTHOR_INITIALS=`echo $AUTHOR | tr '[A-Z]' '[a-z]' | sed 's/ /\n/g' | sed 's/^\([a-z]\).*/\1/' | sed ':i ; $! N ; s/\n// ; t i'` - fi - edit_file "YOUR SIGNATURE" "${AUTHOR_INITIALS}" $MKBUILD_NAME - fi - - # Change Default SourceForge URL - [ -z "$URL" ] && URL="http://downloads.sourceforge.net/[[PKG NAME]]/" - edit_file "DEFAULT URL" "${URL}" $MKBUILD_NAME - - # Change Package Name - edit_file "PKG NAME" "${MKBUILD_NAME//.mkbuild}" $MKBUILD_NAME - - # Change SlackBuild Path - if [ ! -z "$MKBUILD_PATH" ]; then - edit_file_full "\[\[SLACKBUILD PATH\]\]=.*" "\[\[SLACKBUILD PATH\]\]=\"`regexp_slash $MKBUILD_PATH`\"" $MKBUILD_NAME - fi - - # Print .mkbuild name - echo "$MKBUILD_NAME" - -} - -function search_mkbuild { - - # find a given mkbuild - # usage: search_mkbuild [-i] - - if [ "$MKBUILD_NAME" == ".mkbuild" ]; then - list_mkbuilds - return - fi - - if [ ! -z "$MKBUILD_PATH" ]; then - if echo $name | grep -q -e "\.mkbuild$"; then - if [ -d "$MKBUILDS_DIR/$MKBUILD_PATH" ]; then - find $MKBUILDS_DIR/$MKBUILD_PATH -name $MKBUILD_NAME - else - find $MKBUILDS_DIR -name $MKBUILD_NAME - fi - else - if [ -d "$MKBUILDS_DIR/$MKBUILD_PATH" ]; then - find $MKBUILDS_DIR/$MKBUILD_PATH -name '*.mkbuild' - fi - fi - else - if [ "$1" == "-i" ]; then - # case insensitive mode - find $MKBUILDS_DIR -iname $MKBUILD_NAME - else - find $MKBUILDS_DIR -name $MKBUILD_NAME - fi - fi - -} - -function set_mkbuild_name { - - local name="$1" - - MKBUILD_PATH="" - - if [ ! -z "$name" ]; then - MKBUILD_NAME="`basename $name`" - fi - - if echo $name | grep -q "/"; then - if echo $name | grep -q -e "\.mkbuild$"; then - MKBUILD_NAME="`basename $name`" - MKBUILD_PATH="`dirname $name`" - else - MKBUILD_PATH="$name" - fi - else - MKBUILD_NAME="${name//.mkbuild}.mkbuild" - fi - -} - -function list_mkbuilds { - - # list all available mkbuilds - # usage: list_mkbuilds - - list_builds $MKBUILDS_DIR mkbuild - -} - -function edit_mkbuild { - - # edit a mkbuild - # usage: edit_mkbuild - - if [ -e "$MKBUILD_NAME" ]; then - if [ -z "$EDITOR" ]; then - EDITOR="vi" - fi - $EDITOR $MKBUILD_NAME - else - echo "Not found: $MKBUILD_NAME" - return 1 - fi - -} - -function mkbuild_update_keyring { - - # Update keyring using GPG-KEY from - # mkbuild repository - - update_keyring $MKBUILDS_DIR/GPG-KEY - -} - -function sign_manifest { - - # sign manifest file - # usage: sign_manifest - - if [ "$SIGN_MANIFESTS" -eq $on ]; then - echo "Signing Manifest..." - if [ ! -z "$SIGN_USER" ] && [ "`whoami`" != "$SIGN_USER" ]; then - su $SIGN_USER -c "gpg $GPG_AGENT_OPTION --clearsign -u $SIGN_KEYID $WORK/Manifest" - mv $WORK/Manifest.asc $WORK/Manifest - else - gpg $GPG_AGENT_OPTION --clearsign -u $SIGN_KEYID $WORK/Manifest - mv $WORK/Manifest.asc $WORK/Manifest - fi - fi - -} - -function check_manifest_signature { - - # check if a manifest signature is valid - # usage: check_manifest_signature - - if [ -e "$WORK/Manifest" ]; then - if grep -q -- "-----BEGIN PGP SIGNED MESSAGE-----" $WORK/Manifest; then - echo "Checking existing Manifest signature..." - mkbuild_update_keyring - if [ ! -z "$SIGN_USER" ] && [ "`whoami`" != "$SIGN_USER" ]; then - su $SIGN_USER -c "gpg --verify $WORK/Manifest" - if [ "$?" != "0" ]; then - return 1 - fi - else - gpg --verify $WORK/Manifest - if [ "$?" != "0" ]; then - return 1 - fi - fi - fi - fi - -} - -function delete_mkbuild { - - # delete content from a mkbuild folder - # usage: delete_mkbuilds [file] - - local folder candidate file="$1" - local name="`basename $MKBUILD_NAME .mkbuild`.mkbuild" - - for candidate in `find $MKBUILDS_DIR -name $name`; do - folder="`dirname $candidate`" - if [ -d "$folder" ]; then - if [ -z "$1" ]; then - # Delete the whole mkbuild folder - svn_del $folder - elif [ -e "$folder/$file" ]; then - svn_del $folder/$file - fi - fi - done - -} - -function delete_slackbuild { - - # delete content from a SlackBuild folder - # usage: delete_slackbuilds [file] - - local folder candidate file="$1" - local name="`basename $MKBUILD_NAME .mkbuild`.SlackBuild" - - for candidate in `find $SLACKBUILDS_DIR -name $name`; do - folder="`dirname $candidate`" - if [ -d "$folder" ]; then - if [ -z "$1" ]; then - # Delete the whole mkbuild folder - svn_del $folder - elif [ -e "$folder/$file" ]; then - svn_del $folder/$file - fi - fi - done - -} - -function list_mkbuild_contents { - - if [ -e "$MKBUILD_NAME" ]; then - ls `dirname $MKBUILD_NAME` - else - echo "Not found: $MKBUILD_NAME" - return 1 - fi - -} - -function working_copy { - - local copy tmpfolder name - - if [ -e "$MKBUILD_NAME" ]; then - name="$(basename $MKBUILD_NAME .mkbuild)" - copy="$(basename $(basename $MKBUILD_NAME .mkbuild))" - if [ -d "$copy" ]; then - tmpfolder="`mktemp $name.XXXXXX`" - mv $copy $tmpfolder/ - fi - rsync -av --exclude=".svn" --exclude=".git" `dirname $MKBUILD_NAME`/ $copy/ &> /dev/null - echo "Working copy for $name set at $(pwd)/$name." - else - echo "Not found: $MKBUILD_NAME" - return 1 - fi - -} - -function get_param { - - # get a parameter from a mkbuild file - # usage: get_param <parameter> - - local parameter="`echo $* | tr '[:lower:]' '[:upper:] | tr -d '"' | tr -d "'"'`" - - if [ -e "$MKBUILD_NAME" ]; then - grep -e "\[\[$parameter\]\]" $MKBUILD_NAME | cut -d = -f 2 | tr -d '"' | tr -d "'" - fi - -} - -# ---------------------------------------------------------------- - -#============================= -# Main Program -#============================= - -# Common functions -COMMON_SH="/usr/libexec/simplepkg/common.sh" -PROG_VERSION="`echo '$Rev$' | sed -e 's/[^0-9]//g'`" -BASENAME="`basename $0`" -WORK=`pwd` -LANG=en_US -EXIT_CODE=0 - -if [ -f "$COMMON_SH" ]; then - source $COMMON_SH -else - echo $error "$BASENAME: file $COMMON_SH not found. Check your $BASENAME installation" -fi - -# Start constants -set_constants - -# Set submit off -SUBMIT_SLACKBUILD=$off -SUBMIT_MKBUILD=$off -# Set verbose off -VERBOSE=$off -SVN_MOD=$off - -# Load /etc/simplepkg/simplepkg.conf parameters -load_parameters - -# Select color mode: gray, color or none (*) -color_select $COLOR_MODE - -# Auxiliar file -AUX_TMP=/tmp/mkbuild_tmp.$RANDOM -DIFF_FILE=/tmp/mkbuild.diff.$RANDOM -# Derectory to SlackBuild models -MODEL_DIR=${MODEL_DIR:="/etc/simplepkg/defaults/mkbuild"} -# SlackDesk line length -SLACKDESC_LEN=78 - -# Load error codes -error_codes - -# Show help if has no arguments -[ $# -eq 0 ] && mkbuild_use && exit 1 - -# Configure input parameters -set_parameters "$@" - -verbose -e "$BASENAME version $PROG_VERSION\n" -case $ACTION in - 'update_manifest') - shift - update_manifest $* - ;; - 'commit_slackbuild') - shift 2 - commit_changes $SLACKBUILDS_DIR $MKBUILD_BASENAME: $* - ;; - 'commit_mkbuild') - shift 2 - commit_changes $MKBUILDS_DIR $MKBUILD_BASENAME: $* - ;; - 'commit_all') - shift 2 - commit_changes $SLACKBUILDS_DIR $MKBUILD_BASENAME: $* - commit_changes $MKBUILDS_DIR $MKBUILD_BASENAME: $* - ;; - 'import_slackbuilds') - shift - import_slackbuilds $* - ;; - 'import_mkbuilds') - shift - import_mkbuilds $* - ;; - 'import_all') - shift - import_mkbuilds $* - import_slackbuilds $* - ;; - 'delete_slackbuild') - delete_slackbuild - ;; - 'delete_mkbuild') - delete_mkbuild - ;; - 'delete_all') - delete_mkbuild - delete_slackbuild - ;; - 'new') - create_mkbuild - ;; - 'build') - make_slackbuild - ;; - 'search') - search_mkbuild -i - ;; - 'status') - repository_status - ;; - 'list') - list_mkbuild_contents - ;; - 'edit') - edit_mkbuild - ;; - 'working_copy') - working_copy - ;; - 'get_param') - shift 2 - get_param $* - ;; -esac - -# Clear temporary files -verbose -e "\nRemove temporary files ..." -clear_files -exit $EXIT_CODE |