diff options
author | rudson <rudson@04377dda-e619-0410-9926-eae83683ac58> | 2007-06-18 16:58:14 +0000 |
---|---|---|
committer | rudson <rudson@04377dda-e619-0410-9926-eae83683ac58> | 2007-06-18 16:58:14 +0000 |
commit | e0da3bf1ac364cde1ffbf603699005d803e5bb78 (patch) | |
tree | fd2be2ea8f046a1839141158f40fdbeef5bdd8fd | |
parent | add67aa2ed0e25b65ac48a0551b477e12d6f33ce (diff) | |
download | simplepkg-e0da3bf1ac364cde1ffbf603699005d803e5bb78.tar.gz simplepkg-e0da3bf1ac364cde1ffbf603699005d803e5bb78.tar.bz2 |
mkbuild-0.9.8: adicionado ao trunk
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@394 04377dda-e619-0410-9926-eae83683ac58
-rw-r--r-- | trunk/conf/simplepkg.conf.new | 27 | ||||
-rwxr-xr-x | trunk/src/mkbuild | 1519 |
2 files changed, 559 insertions, 987 deletions
diff --git a/trunk/conf/simplepkg.conf.new b/trunk/conf/simplepkg.conf.new index 927d870..50ea4ad 100644 --- a/trunk/conf/simplepkg.conf.new +++ b/trunk/conf/simplepkg.conf.new @@ -123,3 +123,30 @@ TEMPLATE_FOLDER="/etc/simplepkg/templates" # This variable has backwards purposes only, so dont change it. TEMPLATE_STORAGE_STYLE="own-folder" +#--------------------------------------------------------------------- +# MKBUILD AND CREATEPKG SECTION +#--------------------------------------------------------------------- +# Set SlackBuilds default directory from scripts +SLACKBUILDS_DIR="/var/slackbuilds" + +# Set binaries default repository directory +#MAKEPKG_REPOS="/var/createpkg" + +# Set sources default directory +#SOURCE_DIR="/var/sources" + +# Set color style +# possible values are: color,gray, none +#COLOR_MODE="none" + +# Remove old packages from repository tree by createpkg +# 0 enable +# 1 desable +#REMOVE_OLD_PACKAGE=1 + +# Move package to SlackBuilds-like tree +# 0 enable +# 1 desable +#MOVE_BIN_PACKAGE=1 + +#--------------------------------------------------------------------- diff --git a/trunk/src/mkbuild b/trunk/src/mkbuild index b6c718d..fce2533 100755 --- a/trunk/src/mkbuild +++ b/trunk/src/mkbuild @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash # # Script para gerar SlackBuild # Por Rudson R. Alves @@ -9,1127 +9,672 @@ # SlackBuilds são scripts utilizados no Slackware para gerar # pacotes tgz. # -# Turn off debug -set +x -# -# Version 0.9.16 -PROG_VERSION=0.9.16 +# Version 0.9.8 +PROG_VERSION=0.9.8 #-------------------------------------------------------------------- # Functions #-------------------------------------------------------------------- - -function config_help { - - # Show ./configure --help - - view_file "Check ./configure --help" $CONFIG_HELP - -} - - -function view_file { - - # Show <file> in dialog textbox - # use: view_file <textbox> <file> - - [ $# -ne 2 ] && return 1 - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " $1 " --textbox $2 20 75 - -} - -function mk_exit { - - # Close all temporary files and exit - - clean_all - clear +function mkbuild_use() + +{ + # mkbuild help function + echo " +NAME + mkbuild - create SlackBuild script from .mkbuild input file + +SYNOPSIS + mkbuild [OPIONS] [mkbuild_file] + +DESCRIPTION + <mkbuild_file> input file with build rules and variables + + Input options: + -a, --author <author_name> + author name + -ai, --author_initials <initials> + author signature + -cs, --const_string <string> + construction string to source name + -u, --url <url_address> + url address to source + -pn, --pkg_name <package_name> + package name + -sn, --src_name <source_name> + source name + -pv, --pkg_version <version> + package version + -md, --model <SlackBuild_model> + SlackBuild model file + -j, --jobs <jobs_number> + Number of jobs to run simultaneously + --prefix <install_dir> + Prefix install directory + + Program options: + -h, --help + this help mesage + -c, --commit + commit SlackBuilds in local svn tree + -v, --version + program version + +EXAMPLES + mkbuild --prefix /usr/local pyrex.mkbuild + build pyrex.SlackBuild with prefix /usr/local and pyrex.mkbuild + variables and options definitions. + +AUTHOR + Written by Rduson R. Alves + +AVAILABILITY + by svn: svn checkout svn://slack.sarava.org/simplepkg + this mkbuild is found in branches/0.6/ + +REPORTING BUGS + Report bugs to <alves_list@yahoo.com.br> + +COPYRIGHT + 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 + <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the + extent permitted by law. +" | less +} + +function error_codes { + + # Start error codes function + NULL_STRING=499 + ERROR_FILE_NOT_FOUND=500 + ERROR_CONSTRUCTION=501 + ERROR_PROGRAM=502 + ERROR_INPUT_PAR=503 +} + +function mkbuild_error { + + # Error function + case $1 in + "$ERROR_FILE_NOT_FOUND") + echo "File $2 not found!" + ;; + "$ERROR_CONSTRUCTION") + echo "Construction error in $2 variable." + ;; + "$ERROR_PROGRAM") + echo "Program logical error." + ;; + "$ERROR_INPUT_PAR") + echo "Input parameter $2 error. See \"mkbuild --help\"." + ;; + *) + echo "Unknow error!" + ;; + esac exit $1 - } -function clean_all { - - # Clear all temp files +function is_number { - [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required - - rm $AUX_TMP 2>/dev/null - rm $SLACKDESC_TMP 2>/dev/null - rm $SLACKBUILD.test 2>/dev/null - rm $DEPENDENCY_LIST 2>/dev/null - if [ ! -z $MK_PKGNAME ]; then - rm $BASEDIR/*_$MK_PKGNAME.mkbuild 2>/dev/null - rm -rf /tmp/$MK_PKGNAME 2>/dev/null - rm $CONFIG_HELP 2>/dev/null + # Check if argument is a number + local -i int + if [ $# -eq 0 ]; then + return 1 + else + (let int=$1) 2>/dev/null + return $? # Exit status of the let thread fi - rm md5sum 2>/dev/null - -} - -function print_lines { - - # Print from <file>, the lines betwen <tag_string> and </tag_string> lines - # use: print_lines_to <tag_string> <file> - - [ $# -ne 2 ] && mk_exit 1 - eval "sed -n '/<$1>/,/<\/$1>/ { /<$1>/ b; /<\/$1>/ b; p; }' $2" - } -function print_lines_to { - - # Print from <file>, the lines betwen <tag_string_1> and string_2 lines - # use: print_lines_to <tag_string_1> <string_2> <file> - - [ $# -ne 3 ] && mk_exit 1 - eval "sed -n '/<$1>/,/$2/ { /<$1>/ b; /$2/ b; p; }' $3" - -} - -function mk_slackdesc { - - # Make slack-desc file - - print_lines_to "slackdesc" "|-----" $SB_MODEL - echo -n $MK_PKGNAME | tr [a-z+\-] " " - echo -n "|-----handy-ruler" - let N=18+${#MK_PKGNAME} - for i in `seq $N $SLACKDESC_LEN`; do - echo -n "-" - done - echo -en "|\n" - - for i in `seq 1 11`; do - echo -en "$MK_PKGNAME: \n" +function set_parameters { + + # Get and set mkbuild variables with parameters input + # Use: set_parameters $@ + # where $@ are the parameters input + # + ALL_PAR=( $@ ) # carrega todos os parâmetros + N_PAR=$# # carrega o número de parâmetros + + i=0 # inicia o contador + # Checa todos os parâmetros passados + while [ $i -lt $N_PAR ]; do + # get parameter[i] + PAR=${ALL_PAR[$i]} + case $PAR in + '-c'|'--commit') + # Commit directory + COMMIT=1 + ;; + '-d'|'--debug') + # Debug mode + set -x + ;; + '-h'|'--help' ) + # Show help mesage + mkbuild_use && exit 0 + ;; + '-v'|'--version') + # Show program version + echo -e "\nmkbuild version $PROG_VERSION\n" && exit 0 + ;; + '-a'|'--author') + # Enter with author name + let i++ + AUTHOR=${ALL_PAR[$i]} + [ ${AUTHOR:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR AUTHOR + ;; + '-ai'|'--author_initials') + # Enter with author name + let i++ + AUTHOR_INITIALS=${ALL_PAR[$i]} + [ ${AUTHOR_INITIALS:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR AUTHOR_INITIALS + ;; + '-cs'|'--const_string') + # Enter with construction source name string + let i++ + CONST_STRING=${ALL_PAR[$i]} + [ ${CONST_STRING:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR CONST_STRING + ;; + '-md'|'--model') + # Enter with SlackBuild model + let i++ + MODEL=${ALL_PAR[$i]} + [ ${MODEL:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR MODEL + ;; + '-j'|'--jobs') + # Enter with SlackBuild model + let i++ + NUMJOBS=${ALL_PAR[$i]} + [ ${NUMJOBS:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR NUMJOBS + [ ! is_number $NUMJOBS ] && mkbuild_error $ERROR_INPUT_PAR NUMJOBS + NUMJOBS="-j$NUMJOBS" + ;; + '--prefix') + # Enter with SlackBuild model + let i++ + PREFIX=${ALL_PAR[$i]} + [ ${PREFIX:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR PREFIX + ;; + '-pn'|'--pkg_name') + # Enter with package name + let i++ + PKG_NAME=${ALL_PAR[$i]} + [ ${PKG_NAME:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR PKG_NAME + ;; + '-pv'|'pkg_version') + # Enter with package version + let i++ + VERSION=${ALL_PAR[$i]} + [ ${VERSION:0:1} = "-" ] && mkbuild_error $ERROR_INPUT_PAR VERSION + ;; + '-sn'|'--src_name') + # Enter with source name + let i++ + SRC_NAME=${ALL_PAR[$i]} + [ ${SRC_NAME:0:1} = '-' ] && mkbuild_error $ERROR_INPUT_PAR SRC_NAME + ;; + '-u'|'--url') + # Enter with url address + let i++ + URL=${ALL_PAR[$i]} + [ ${URL:0:1} = '-' ] && mkbuild_error $ERROR_INPUT_PAR URL + ;; + *) + # mkbuild input file + MK_INPUT_FILE="${PAR//.mkbuild}.mkbuild" + [ ! -e $MK_INPUT_FILE ] && mkbuild_error $ERROR_FILE_NOT_FOUND $MK_INPUT_FILE + ;; + esac + let i++ done - print_lines "slackdesc" $SB_MODEL | sed '1,/\]\]/ d' - } -function get_status { - - # Get label status from section in the SlackBuild model - # use: get_status <section_name> <SlackBuild_model> +function get_variable { - [ $# -ne 2 ] && mk_exit 1 - eval "sed -n '/<$1>/ p' $2 | sed 's/.*> \([a-z]\+\)/\1/'" - -} - -function mk_status { - - # Get status from edited SlackBuild - # input: <section_name> - # output: section status and section number - # use: mk_status <section_name> - - for i in `seq 0 $MAXSECTION`;do - if [ "${SECTION_NAME[i]}" = "$1" ]; then - echo "${SECTION_FLAG[i]} $i" - return 0 - fi - done - return 1 + # Get variable value from mkbuild file (MK_INPUT_FILE) + [ $# -ne 1 ] && mkbuild_error $ERROR_PROGRAM + [ -z $MK_INPUT_FILE ] && echo "Warning: no [mkbuild_file]." && return 0 + grep "^\[\[${1}\]\]" $MK_INPUT_FILE | cut -f2 -d\" } function edit_file { - # Edit <file>, by change string [[<old_string>]] to <new_string> - # use: edit_file <old_string> <new_string> <file> - + # Edit file $3, by change string [[$1]] to $2 local STR_OLD local STR_NEW - [ $# -ne 3 ] && mk_exit 1 + [ $# -ne 3 ] && mkbuild_error $ERROR_PROGRAM STR_OLD=$( echo $1 | sed 's/\//\\\//g' ) STR_NEW=$( echo $2 | sed 's/\//\\\//g' ) eval "sed 's/\[\[$STR_OLD\]\]/$STR_NEW/' $3 > $AUX_TMP" mv $AUX_TMP $3 - -} - -function unpkg_source { - - # Unpackage source - # FIXME: if MK_DECOMPRESSOR -ne bunzip2 or gunzip... - - if [ $MK_DECOMPRESSOR = "bunzip2" -o $MK_DECOMPRESSOR = "gunzip" ]; then - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Main Menu" --title "$MK_TITLE" --infobox "Uncompress source in /tmp/$MK_PKGNAME. Wait" 3 45 - [ $? -ne 0 ] && return 100 - mkdir /tmp/$MK_PKGNAME/ 2>/dev/null - tar xvf $MK_SOURCE -C /tmp/$MK_PKGNAME/ 1>/dev/null - [ $? -ne 0 ] && mk_exit 1 - MK_TMPSRC="/tmp/$MK_PKGNAME/`ls /tmp/$MK_PKGNAME/`" - - DOC_FILES=`find $MK_TMPSRC -type f -maxdepth 1 -name "[A-Z]*" | sed 's/.*\/\(.*\)$/\1/'` - else - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --msgbox "$MK_DECOMPRESSOR not configurated..." 5 45 - fi - -} - -function download_url { - - # Download source - - clear - mkdir -p $MK_SOURCEDIR/$MK_PKGNAME 2>/dev/null - wget --continue --limit-rate=$MK_LIMITRATE $MK_URL -P $MK_SOURCEDIR/$MK_PKGNAME/ - if [ $? -ne 0 ]; then - echo "URL error" - return 0 - fi - MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME - -} - -function select_source { - - # Select source file - - MK_SOURCE=$BASEDIR - while [ ! -f $MK_SOURCE ]; do - MK_SOURCE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Main Menu" --title " Select source file name (use spaces to select): " --fselect "$MK_SOURCE" 10 70` - [ $? -ne 0 ] && return 100 - if [ ! -f $MK_SOURCE ]; then - MK_SOURCE="$MK_SOURCE/" - fi - done - - MK_SRCNAME=`basename $MK_SOURCE` - MK_SOURCEDIR=`dirname $MK_SOURCE` - } -function change_strings { +function edit_file_full { - # Change string string_1 to string_2 in all files in the current directory - # use: change_strings <string_1> <string_2> - - [ $# -ne 2 ] && mk_exit 1 - #[ -z "$2" ] && return 0 - eval "grep -l \"\[\[$1\]\]\" *" | while read FILE; do - edit_file "$1" "$2" $FILE - done + # Edit file $3, by change string $1 to $2 + local STR_OLD + local STR_NEW + [ $# -ne 3 ] && mkbuild_error $ERROR_PROGRAM + STR_OLD=$( echo $1 | sed 's/\//\\\//g' ) + STR_NEW=$( echo $2 | sed 's/\//\\\//g' ) + eval "sed 's/$STR_OLD/$STR_NEW/' $3 > $AUX_TMP" + mv $AUX_TMP $3 } -function get_source_dialog { +function start_build { - # Dialog to download source + # Build initial sections + [ $# -ne 1 ] && mkbuild_error $ERROR_PROGRAM - if [ ! -e $MK_SOURCE ]; then - dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --yesno " Download $MK_SRCNAME? " 5 50 - if [ $? -eq 0 ]; then - download_url - else - select_source - [ $? -eq 100 ] && return 100 - fi - fi + 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 + edit_file "ARCH" "$ARCH" $1 + [ `is_number $NUMJOBS` ] && NUMJOBS="-j${NUMJOBS}" + 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 "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_full "\$EXTENSION" "$EXTENSION" $1 } -function test_source { - - # Test source by $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG - - local TEST=1 - local ANS=0 - - while [ $TEST -ne 0 ]; do - dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "Test source with $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG $MK_SOURCE" 5 50 - $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG $MK_SOURCE - TEST=$? - if [ $TEST -ne 0 ]; then - dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --yesno "Source uncompress error. Download source again?" 6 50 - if [ $? -eq 0 ]; then - rm $MK_SOURCE - get_source_dialog - [ $? -eq 100 ] return 100 - else - TEST=0 - fi - fi - done +function clear_files { + # Remove temporary files + rm $AUX_TMP 2>/dev/null + rm $SLACKBUILD_TEMP 2>/dev/null } -function set_source_test { +function set_status { - # Configure test source variables - - MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME - if [ "$MK_EXTENSION" = "tar.gz" -o "$MK_EXTENSION" = "gz" -o "$MK_EXTENSION" = "tgz" ]; then - MK_DECOMPRESSOR=gunzip - MK_DECOMPRESSOR_TEST_FLAG="-t" - elif [ "$MK_EXTENSION" = "tar.bz2" -o "$MK_EXTENSION" = "bz2" ]; then - MK_DECOMPRESSOR=bunzip2 - MK_DECOMPRESSOR_TEST_FLAG="-t" + # Set status section + # $1 - Section + # $2 - Status + # $3 - file + [ $# -ne 3 ] && mkbuild_error $ERROR_PROGRAM + if [ "`get_status $1 $3`" != "all" ]; then + eval "sed 's/^<$1>.*$/<$1> $2/' $3" > $AUX_TMP + mv $AUX_TMP $3 else - edit_decompress_arg - [ $? -eq 100 ] && return 100 + echo "Warning: Section $1 have status all. Can't change!" fi - } -function desable_configure { - - # Desable configure section - - local i=0 - while [ "${SECTION_NAME[i]}" != "configure" -a $i -le $MAXSECTION ]; do - let i++ - done - - [ $i -ne $MAXSECTION ] && SECTION_FLAG[i]="off" - -} - -#-------------------------------------------------------------------- -# Edit functions -#-------------------------------------------------------------------- - -function edit_author { - - # Edit .mkslackbuild variables - - MK_AUTHOR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with author complite name:" 8 60 "$MK_AUTHOR"` - edit_file "AUTHOR NAME" "$MK_AUTHOR" ~/.mkslackbuild - - MK_AUTHOR_INITIALS=`echo $MK_AUTHOR | sed 's/ /\n/g' | sed 's/^\([A-Z]\).*/\1/' | sed ':i; $!N; s/\n//; ti' | tr [A-Z] [a-z]` - MK_AUTHOR_INITIALS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with author assignature:" 8 60 "$MK_AUTHOR_INITIALS"` - edit_file "AUTHOR INITIALS" "$MK_AUTHOR_INITIALS" ~/.mkslackbuild - - MK_EDITOR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with editor command:" 8 60 "pico"` - edit_file "EDITOR" "$MK_EDITOR" ~/.mkslackbuild - - MK_SOURCEDIR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with sources directory:" 8 60 "\`pwd\`"` - edit_file "SOURCE DIR" "$MK_SOURCEDIR" ~/.mkslackbuild - - if [ "$USER" != "root" ]; then - SLACKBUILDRC=`[ -e ~/.slackbuildrc ] && echo ~/.slackbuildrc || echo /etc/slackbuildrc` - MK_REPOS=`grep 'REPOS=' $SLACKBUILDRC | sed 's/REPOS=\(.*\)/\1/'` - else - SLACKBUILDRC=`su -c "[ -e ~/.slackbuildrc ] && echo ~/.slackbuildrc || echo /etc/slackbuildrc" 2>/dev/null` - MK_REPOS=`su -c "grep 'REPOS=' $SLACKBUILDRC | sed 's/REPOS=\(.*\)/\1/'" 2>/dev/null` - fi - - MK_REPOS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with binary repository directory:" 8 60 "$MK_REPOS"` - edit_file "REPOS DIR" "$MK_REPOS" ~/.mkslackbuild - - MK_ARCH=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter default architecture to SlackBuild:" 8 60 "i468"` - edit_file "DEFAULT ARCH" "$MK_ARCH" ~/.mkslackbuild - - MK_LIMITRATE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter wget limit rate:" 8 60 "120k"` - edit_file "LIMIT RATE" "$MK_LIMITRATE" ~/.mkslackbuild +function get_status { + # Get status from section + # $1 - Section + # $2 - file + [ $# -ne 2 ] && mkbuild_error $ERROR_PROGRAM + eval "sed '/^<$1>.*$/! d' $2" } +function activate_sections { -function edit_url { - - # Edit source URL - - MK_URL=${MK_URL:="http://downloads.sourceforge.net/"} - MK_URL=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Enter with complite URL from source:" 8 60 "$MK_URL"` - [ $? -ne 0 ] && return 100 - + # Enable and desable sections + ACTIONS_LIST=`sed '/^#>>/,/<</ ! d; /^#/ d ' $MK_INPUT_FILE | 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 edit_source_name { - - # Edit source name - - MK_SRCNAME=`basename $MK_URL` - MK_SRCNAME=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Enter with source file name:" 8 60 "$MK_SRCNAME"` - [ $? -ne 0 ] && return 100 +function build_slackbuild { + # Remove off sections + [ -e $SLACKBUILD ] && mv $SLACKBUILD $SLACKBUILD.old + sed '/^<[a-z].*> off/, /^<\/[a-z].*>$/ d' $SLACKBUILD_TEMP > $AUX_TMP + # Remove sections names + sed '/^<.*$/ d' $AUX_TMP > $SLACKBUILD_TEMP + # Remove clear lines + sed ':i ; $! N; s/\n/<NL>/ ; t i' $SLACKBUILD_TEMP | sed 's/<NL><NL><NL>/<NL><NL>/g' | sed 's/<NL><NL><NL>/<NL><NL>/g' | sed 's/<NL>/\n/g' > $AUX_TMP + sed '1,/^#\!/ {/^#\!/ b; d }' $AUX_TMP > $SLACKBUILD } -function edit_pkgname { - - # Edit MK_PKGNAME, MK_VERSION and MK_EXTENSION - - # Remove variables values from $MK_SRCNAME - MK_SRC_NAME=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\1/'` - MK_PKGNAME=`echo $MK_SRC_NAME | tr [A-Z_] [a-z\-]` - MK_VERSION=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\2/'` - MK_EXTENSION=`echo $MK_SRCNAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\3/'` - - # Check variables values - ANS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Main Menu" --title "$MK_TITLE" \ - --form "Check information below:" 14 52 7 \ - "Source name:" 1 1 "$MK_SRC_NAME" 1 15 30 60 \ - "Package name:" 3 1 "$MK_PKGNAME" 3 15 30 60 \ - "Version:" 5 1 "$MK_VERSION" 5 15 30 60 \ - "Extension:" 7 1 "$MK_EXTENSION" 7 15 30 60` - [ $? -ne 0 ] && return 100 - - MK_SRC_NAME=`echo $ANS | awk '{print $1}'` - MK_PKGNAME=`echo $ANS | awk '{print $2}'` - MK_VERSION=`echo $ANS | awk '{print $3}'` - MK_EXTENSION=`echo $ANS | awk '{print $4}'` - -} +function section_edit { -function edit_decompress_arg { + # Edit sections by change you values + [ -z $MK_INPUT_FILE ] && return 0 - # Edit MK_DECOMPRESSOR and MK_DECOMPRESSOR_TEST_FLAG + SECTION_LIST=`grep '^#>[a-z]' $MK_INPUT_FILE | cut -c3-` - MK_DECOMPRESSOR="" - MK_DECOMPRESSOR_TEST_FLAG="" + # Check for sections change + [ -z "$SECTION_LIST" ] && return 0 - ANS3=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Main Menu" --title "$MK_TITLE" \ - --form "Check information below:" 10 55 3 \ - "Uncompress program:" 1 1 "$MK_DECOMPRESSOR" 1 23 25 60 \ - "Uncompress test flag:" 3 1 "$MK_DECOMPRESSOR_TEST_FLAG" 3 23 25 100` - [ $? -ne 0 ] && return 100 - - MK_DECOMPRESSOR=`echo $ANS3 | awk '{print $1}'` - MK_DECOMPRESSOR_TEST_FLAG=`echo $ANS3 | awk '{print $2}'` - -} - -function edit_configure { - - # Edit configure options - - local ANS0=1 - - CONFIG_HELP=`mktemp -p /tmp/ config_$MK_PKGNAME.XXXXXX` - - $MK_TMPSRC/configure --help > $CONFIG_HELP -# config_help - - # Default PREFIX for Slackware 11+ - MK_PREFIX="/usr" - MK_OPTIONS="" - - while [ $ANS0 -eq 1 ]; do - local ANS1="7" - while [ $ANS1 -ne 0 ]; do - ANS1=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Continue" --title "$MK_TITLE" \ - --menu "Select one option" 0 0 0 \ - 1 "View ./configure --help" \ - 2 "View documentations" \ - 3 "PREFIX=$MK_PREFIX" \ - 4 "OPTIONS=$MK_OPTIONS" \ - 0 "Continue"` - - case $ANS1 in - '1') - config_help - ;; - '2') - view_docs - ;; - '3') - MK_PREFIX=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with prefix for install $MK_PKGNAME" 8 60 "$MK_PREFIX"` - ;; - '4') - MK_OPTIONS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with configure options for compile $MK_PKGNAME" 8 60 "$MK_OPTIONS"` - ;; - *) - ANS1=0 - ;; - esac - done - - # Configure - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " Execute ./configure below? " --yesno "./configure --prefix=$MK_PREFIX $MK_OPTIONS" 6 70 - if [ $? -eq 0 ]; then - ( - cd $MK_TMPSRC - ./configure --prefix=$MK_PREFIX $MK_OPTIONS - ) - - echo -en "\nPress ENTER to continue" - read ANS0 + # Change sections + for i in $SECTION_LIST; do + if [ "$i" = "slackdesc" ]; then + # Special slackdesc section + slackdesc_edit > $AUX_TMP + mv $AUX_TMP $SLACKBUILD_TEMP + else + # Others sections + section_change $i fi - - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " Configure line is ok? " --yesno "./configure --prefix=$MK_PREFIX $MK_OPTIONS" 6 70 - - ANS0=$? - done - -} - -function view_docs { - - # Show Documentations files - - local MENU="" - local SELECT="" - local ANS2=0 - - for i in $DOC_FILES; do - MENU="$MENU \"$i\" \"\" " done - - while [ $ANS2 -eq 0 ]; do - SELECT=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Continue\" --title \"$MK_TITLE\" --menu \"Select doc-file below:\" 20 45 13 $MENU"` - ANS2=$? - [ $ANS2 -eq 0 ] && view_file "File: $SELECT" $MK_TMPSRC/$SELECT - done - } -function edit_docfiles { - - # Edit documentations files +function slackdesc_edit { - [ -z $MK_TMPSRC ] && return 0 - -# if [ -e $MK_TMPSRC ]; then - LIST=`( cd $MK_TMPSRC; find . -type f -maxdepth 1 | cut -c3- )` - DOCMENU="" - for i in $LIST; do - if [ "`echo NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING | grep $i`" != "" ]; then - DOCMENU="$DOCMENU $i \"\" on" - else - DOCMENU="$DOCMENU $i \"\" off" - fi + # 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 - SELECTDOCS=`eval "dialog --stdout --separate-output --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \"$MK_TITLE\" --cancel-label \"Continue\" --checklist \"Select documentation files below:\" 20 45 13 $DOCMENU"` -# fi - - MK_DOCFILES="`echo $SELECTDOCS | sed ':i; N; s/\n/ /; bi'`" + echo -en "|\n" + sed -n '/#>slackdesc/,/#<slackdesc/ { /^#/ b; p }' $MK_INPUT_FILE + sed '1, /\[\[SLACK-DESC\]\]/ d' $SLACKBUILD_TEMP } -function edit_arch { - - # Edit compiler architecture +function section_change { - MK_ARCH=`dialog --stdout --backtitle "Make SlackBuild documentation files below:" --cancel-label "Main Menu" --title "$MK_TITLE" --inputbox "Set an architecture to compiler:" 8 45 $MK_ARCH` - [ $? -ne 0 ] && return 100 + # Change section lines + [ $# -ne 1 ] && mkbuild_error $ERROR_PROGRAM -} - -#-------------------------------------------------------------------- -# Mount files -#-------------------------------------------------------------------- - -function start_build { - - # Start build sections - - change_strings "SLACKBUILD AUTHOR" "$MK_AUTHOR" - change_strings "SLACKBUILD AUTHOR INITIALS" $MK_AUTHOR_INITIALS - change_strings "SOURCE NAME" "$MK_SRC_NAME" - change_strings "PROGRAM NAME" "$MK_PKGNAME" - change_strings "PACKAGE NAME" "$MK_PKGNAME" - change_strings "DECOMPRESSOR" "$MK_DECOMPRESSOR" - change_strings "DECOMPRESSOR TEST FLAG" "$MK_DECOMPRESSOR_TEST_FLAG" - change_strings "PROGRAM URL" "${MK_URL//$MK_SRCNAME}" - change_strings "ARCH" "$MK_ARCH" - change_strings "VERSION" $MK_VERSION - change_strings "SOURCE EXTENSION" ${MK_EXTENSION#tar.} - change_strings "DOWNLOAD FOLDER URL" "`dirname $MK_URL`" - if [ -z $MK_OPTIONS ]; then - change_strings "OTHER CONFIGURE ARGS" "\"\"" - else - change_strings "OTHER CONFIGURE ARGS" "$MK_OPTIONS" - fi - change_strings "DOCUMENTATION FILES" "$MK_DOCFILES" - change_strings "PREFIX" "$MK_PREFIX" + # Copy first half + eval "sed '1,/^<$1>/! d' $SLACKBUILD_TEMP > $AUX_TMP" + # Paste new section + eval "sed -n '/#>$1/,/#<$1/ { /^#>/ b; /^#</ b; p }' $MK_INPUT_FILE >> $AUX_TMP" + # Copy second halt + eval "sed '/^<\/$1>/,$ ! d' $SLACKBUILD_TEMP >> $AUX_TMP" + mv $AUX_TMP $SLACKBUILD_TEMP } -function mount_slackbuild { +function make_slack_required { - # Mount SlackBuild + # Build slack-required file + [ -e slack-required ] && mv slack-required slack-required.old + [ -z "$SLACK_REQUIRED" ] && return 0 - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD" 5 45 + echo -e "# Dependency list to $SRC_NAME\n#\n# dependency [condition] [version]]" > slack-required - rm $SLACKBUILD 2>/dev/null - - for i in `seq 0 $MAXSECTION`; do - if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then - cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $SLACKBUILD - echo "" >> $SLACKBUILD - fi + 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" >> slack-required done - chmod +x $SLACKBUILD - } -function mount_slackbuild_to { - - # Mount SlackBuild to section section_name - # use: mount_slackbuild_to <section_name> - - if [ $# -eq 1 ]; then - END_SECTION=$1 - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD.test" 5 45 - - rm $SLACKBUILD.test 2>/dev/null - let i=0 - while [ $i -le $END_SECTION ]; do - if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then - cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $SLACKBUILD.test - echo "" >> $SLACKBUILD - fi - let i++ - done - echo "" >> $SLACKBUILD - fi +function change_others_fields { + # Change others fields started by '[[' in .mkbuild file + grep '\[\[[A-Za-z]' $MK_INPUT_FILE | while read i; do + CHANGE="`echo $i | sed 's/\[\[\(.*\)\]\]=\"\(.*\)\"/\1/'`" + VALUE="`echo $i | sed 's/\[\[\(.*\)\]\]=\"\(.*\)\"/\2/'`" + edit_file "$CHANGE" "$VALUE" $SLACKBUILD + done } -function make_file_sections { - - # Make files section - - THIS_MODEL=$1 +function commit_slackbuild { - # Create SlackBuilds-sections files - rm *_$MK_PKGNAME.mkbuild 2>/dev/null - - # create file section - INDEX=0 - while read ITEM; do - SECTION_NAME[INDEX]="$ITEM" - - AUX=${SB_SECTION[$INDEX,0]}_${MK_PKGNAME} - SECTION_FILE=${SECTION_NAME[INDEX]}_${MK_PKGNAME}.mkbuild - rm $SECTION_FILE 2>/dev/null + # Commit SlackBuild in local Slack.Sarava tree + # Get SlackBuild path + SLACKBUILD_PATH=`validate_parameter "$SLACKBUILD_PATH" "SLACKBUILD PATH" ""` + if [ $? != 0 ]; then + # Mount SlackBuild path + AUX=`lynx -dump http://gentoo-portage.com/Search?search=$PKG_NAME | sed -n '/Results:/,+1 { /Results:/ b ; p }' | head --lines=1 | tr -d " "` + [ ! -z $AUX ] && SLACKBUILD_PATH="`dirname $AUX | tr - /`/`basename $AUX`" || SLACKBUILD_PATH="others/unclassified/$PKG_NAME" + fi - STRING=$ITEM - # Save section status flag - SECTION_FLAG[INDEX]=`get_status "$STRING" $THIS_MODEL` + # check SlackBuilds directory + [ ! -e $SLACKBUILDS_DIR ] && createpkg --sync + # change to SlackBuilds directory + cd $SLACKBUILDS_DIR/ - # Create sections files - print_lines "$STRING" $THIS_MODEL > $SECTION_FILE - let INDEX++ - done < <( cat $THIS_MODEL | grep '^<[a-z_0-9]\+>' | sed 's/<\(.*\)>.*$/\1/' ) + # Add SlackBuild scripts + # check path + [ ! -e $SLACKBUILD_PATH ] && svn_mkdir $SLACKBUILD_PATH + # add SlackBuild + svn_add $SLACKBUILD $SLACKBUILD_PATH - let INDEX-- - MAXSECTION=$INDEX - md5sum *.mkbuild > md5sum + # check slack-required + # add slack-required + [ -e $WORK/slack-required ] && svn_add slack-required $SLACKBUILD_PATH + cd $WORK } -#-------------------------------------------------------------------- -# Main Menu functions -#-------------------------------------------------------------------- - -function create_slackbuild { - - # Create new SlackBuild - # Config package URL - edit_url - [ $? -eq 100 ] && return 100 - - # Source Name - edit_source_name - [ $? -eq 100 ] && return 100 - - # Package name, version and extension - edit_pkgname - [ $? -eq 100 ] && return 100 +function svn_mkdir { - # Compile arch - edit_arch - [ $? -eq 100 ] && return 100 + # svn make directory + [ $# -ne 1 ] && mkbuild_error 0 - # Set source test variables - set_source_test - [ $? -eq 100 ] && return 100 + echo "svn_mkdir $1 $2" + DIR_LIST=`echo $1 | tr '/' ' '` - # Get source file - MK_SOURCE=$MK_SOURCEDIR/$MK_PKGNAME/$MK_SRCNAME - get_source_dialog - [ $? -eq 100 ] && return 100 - - # Test source - test_source - [ $? -eq 100 ] && return 100 + DIR="" + for i in $DIR_LIST; do + DIR=$DIR/$i + [ ! -e ${DIR:1} ] && svn mkdir ${DIR:1} + done +} - # Uncompress source - unpkg_source - [ $? -eq 100 ] && return 100 +function svn_add { - # GPG and MD5 test - # ADD: edit_signature + # svn add file + [ $# -ne 2 ] && mkbuild_error 0 - # Configure compiler options if exist - if [ -e $MK_TMPSRC/configure ]; then - edit_configure + # copy file + if [ -e $2/$1 ]; then + echo "$2/$1 exist. Overwriter it." + cp $WORK/$1 $2/ else - desable_configure + cp $WORK/$1 $2/ + # add file to svn tree + svn add $2/$1 fi - - # Edit documentation list - edit_docfiles - - # Create files sections - make_file_sections $SB_MODEL - - # SlackBuild script name - SLACKBUILD=$BASEDIR/$MK_PKGNAME.SlackBuild - - # mkSlackBuild script name - # FIXME: make an MODELDIR??? - MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild - - mk_slackdesc > slackdesc_$MK_PKGNAME.mkbuild - - # Edit builds sections - start_build - - # Main-Menu - edit_menu - } -function open_mkslackbuild_dialog { - - # Open mkslackbuild dialog input - MKSLACKBUILD=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title " Select source file name: " \ - --fselect "$BASEDIR/" 10 70` - [ $? -ne 0 ] && return 100 - - open_mkslackbuild - [ $? -eq 100 ] || return 100 - -} - -function open_mkslackbuild { - - # Open mkslackbuild - if [ -f $MKSLACKBUILD ]; then - # Start defaults variables - source $MKSLACKBUILD - - # SlackBuild scrit name - SLACKBUILD=$BASEDIR/$MK_PKGNAME.SlackBuild - - # Create files sections - make_file_sections $MKSLACKBUILD - - [ -e $BASEDIR/slack-required ] && ( cp $BASEDIR/slack-required $DEPENDENCY_LIST ) +function is_number { + # Check if $1 is a number + local -i int + if [ $# -eq 0 ]; then + return 1 else - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --msgbox "$MKSLACKBUILD most be a mkslackbuild file" 6 45 - return 100 + (let int=$1) 2>/dev/null + return $? # Exit status of the let thread fi - - # CHECK: - # Set source test vadiables - set_source_test - [ $? -eq 100 ] && return 100 - - # Get source file - get_source_dialog - [ $? -eq 100 ] && return 100 - - # Test source - test_source - - # Uncompress source - unpkg_source - } -function save_mkslackbuild { - - # Save mkSlackBuild - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "mkSlackBuild save in $MKSLACKBUILD" 5 30 - - rm $MKSLACKBUILD 2>/dev/null - echo '#!/bin/bash' > $MKSLACKBUILD - echo -e "# mkSlackBuild version $MK_VERSION\n" >> $MKSLACKBUILD - echo "MK_SRC_NAME=\"$MK_SRC_NAME\"" >> $MKSLACKBUILD - echo "MK_SRCNAME=\"$MK_SRCNAME\"" >> $MKSLACKBUILD - echo "MK_PKGNAME=\"$MK_PKGNAME\"" >> $MKSLACKBUILD - echo "MK_URL=\"$MK_URL\"" >> $MKSLACKBUILD - echo "MK_AUTHOR=\"$MK_AUTHOR\"" >> $MKSLACKBUILD - echo "MK_AUTHOR_INITIALS=\"$MK_AUTHOR_INITIALS\"" >> $MKSLACKBUILD - echo "MK_VERSION=\"$MK_VERSION\"" >> $MKSLACKBUILD - echo "MK_EXTENSION=\"$MK_EXTENSION\"" >> $MKSLACKBUILD - echo "MK_DECOMPRESSOR=\"$MK_DECOMPRESSOR\"" >> $MKSLACKBUILD - echo "MK_DECOMPRESSOR_TEST_FLAG=\"$MK_DECOMPRESSOR_TEST_FLAG\"" >> $MKSLACKBUILD - echo "MK_DOCFILES=\"$MK_DOCFILES\"" >> $MKSLACKBUILD - echo "MK_OPTIONS=\"$MK_OPTIONS\"" >> $MKSLACKBUILD - echo "MK_PREFIX=\"$MK_PREFIX\"" >> $MKSLACKBUILD - echo "MK_MD5SUM_EXT=\"$MK_MD5SUM_EXT\"" >> $MKSLACKBUILD - echo -e "return 0\n\n" >> $MKSLACKBUILD - - for i in `seq 0 $MAXSECTION`; do - echo "<${SECTION_NAME[i]}> ${SECTION_FLAG[i]}" >> $MKSLACKBUILD - cat ${SECTION_NAME[i]}_$MK_PKGNAME.mkbuild >> $MKSLACKBUILD - echo "</${SECTION_NAME[i]}>" >> $MKSLACKBUILD - echo "" >> $MKSLACKBUILD - done +function validate_parameter { - [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required - -} - -function edit_menu { - - # Edit Menu - - ANSE=0 - while [ $ANSE -ne 1 ]; do - - # Create main-menu string - EDITMENU="" - for i in `seq 0 $MAXSECTION`; do - EDITMENU="$EDITMENU ${SECTION_NAME[i]} ${SECTION_FLAG[i]}" - done - - # Show edit menu - SELECT=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --ok-label \"Edit\" --cancel-label \"Main Menu\" --title \"$MK_TITLE\" --menu \"Select one section to edit\" 20 40 13 $EDITMENU"` - ANSE=$? - if [ $ANSE -ne 1 ]; then - STATUS=`mk_status $SELECT` - if [ $? -ne 0 ]; then - echo "Section name error..." - mk_exit 1 - fi - - FLAG=`echo $STATUS | awk '{print $1}'` - INDEX=`echo $STATUS | awk '{print $2}'` - - if [ "$FLAG" = "on" ]; then - SECTION_FLAG[$INDEX]=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Change $SELECT status?" 0 0 0 "on" "enable section" "on" "off" "desable section" "off"` - elif [ "$FLAG" = "off" ]; then - SECTION_FLAG[$INDEX]=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Change $SELECT status?" 0 0 0 "on" "enable section" "off" "off" "desable section" "on"` - fi - - if [ $? -eq 0 ]; then - if [ "${SECTION_FLAG[$INDEX]}" = "on" -o "${SECTION_FLAG[$INDEX]}" = "all" ]; then - if [ "$SELECT" = "md5sum_download_and_check" ]; then - md5sum_edit ${SELECT}_${MK_PKGNAME}.mkbuild -# elif [ "$SELECT" = "gpg_signature_check" ]; then -# gpg_edit - else - $MK_EDITOR ${SELECT}_${MK_PKGNAME}.mkbuild - fi - fi - else - SECTION_FLAG[$INDEX]=$FLAG - fi + # Validate parameter in .mkbuild file + if [ ! -z "$1" ]; then + echo "$1" + else + local STRING="`get_variable "$2"`" + if [ -z "$STRING" ]; then + [ ! -z "$3" ] && echo "$3" || return 1 + else + echo "$STRING" fi - done - + fi } -function md5sum_edit { +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" + ;; + *) + mkbuild_error $ERROR_CONSTRUCTION "DECOMPRESSOR" + ;; + esac +} + +#============================= +# Main Program +#============================= +#----------------------------- +# Common functions +COMMON="/usr/libexec/simplepkg/common.sh" +SIMPLEPKG_CONF="/etc/simplepkg/simplepkg.conf" +WORK=`pwd` +LANG=en_US +COMMIT=0 - # Edit md5sum - local SELECT=0 - local FILE=$1 +if [ -f "$COMMON" ]; then + source $COMMON +else + echo "error: file $COMMON found, check your $BASENAME installation" + mk_exit 0 +fi - if ( grep '\[\[MD5SUM EXTENSION\]\]' $FILE &>/dev/null ); then - SELECT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --radiolist "Select one option" 0 0 0 "1" "$MK_SRC_NAME-$MK_VERSION.[[MD5SUM EXT]]" on "2" "$MK_SRCNAME.[[MD5SUM EXT]]" off "3" "MK5SUM CODE" off` +# createpkg and mkbuild section +SLACKBUILDS_DIR="`eval_parameter SLACKBUILDS_DIR /var/slackbuilds`" +#----------------------------- - case $SELECT in - 1) - MK_MD5SUM_EXT="md5sum" - MK_MD5SUM_EXT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_EXT` - edit_file "MD5SUM EXTENSION" "$MK_MD5SUM_EXT" $FILE - ;; - 2) - MK_MD5SUM_EXT="md5" - MK_MD5SUM_EXT=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_EXT` - eval "sed 's/^MD5SUM_FILE.*$/MD5SUM_FILE=\$SRC.$MK_MD5SUM_EXT/' $FILE > $AUX_TMP" - cp $AUX_TMP $FILE - ;; - 3) - MK_MD5SUM_CODE=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with md5sum extension:" 8 50 $MK_MD5SUM_CODE` - sed '1! d' $FILE > $AUX_TMP - sed -n '2, /^fi/ p' $FILE | while read LINE; do echo "#$LINE" >> $AUX_TMP; done - sed -n '/^fi/, $ { /^fi/ b; p; }' $FILE >> $AUX_TMP - eval "sed 's/^MD5SUM_SRC.*/MD5SUM_SRC=\"$MK_MD5SUM_CODE\"/' $AUX_TMP > $FILE" - ;; - esac - fi +# Start variables +DOWNLOAD_SOURCE=0 # desable download source +# Auxiliar file +AUX_TMP=/tmp/mkbuild_tmp.$RANDOM +# Derectory to SlackBuild models +MODEL_DIR=${MODEL_DIR:="/etc/simplepkg/defaults/mkbuild"} +# SlackDesk line length +SLACKDESC_LEN=78 + +# Load error codes +error_codes + +[ $# -eq 0 ] && mkbuild_use && exit 1 + +# Configure input parameters +set_parameters $@ + +# Get values +# Author name +AUTHOR=${AUTHOR:="`get_variable "SLACKBUILD AUTHOR"`"} +[ -z "$AUTHOR" ] && mkbuild_error $ERROR_CONSTRUCTION "SLACKBUILD 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"`" || mkbuild_error $ERROR_CONSTRUCTION "SLACKBUILD AUTHOR INITIALS" + +# URL program +URL=`validate_parameter "$URL" "DOWNLOAD FOLDER URL" ""` || mkbuild_error $ERROR_CONSTRUCTION "URL" + +STR_MOUNT="`echo $URL | rev | cut -c1-3 | rev | tr -d '.'`" +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 - $MK_EDITOR $FILE +# Extension +EXTENSION=`validate_parameter "$EXTENSION" "EXTENSION" "$STR_MOUNT"` || mkbuild_error $ERROR_CONSTRUCTION "EXTENSION" -} +# Build archteture +ARCH=`validate_parameter "$ARCH" "ARCH" "i486"` -function test_menu { +# Source name +STR_MOUNT=`echo $SOURCE_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\1/'` +SRC_NAME=`validate_parameter "$SRC_NAME" "SOURCE NAME" "$STR_MOUNT"` || mkbuild_error $ERROR_CONSTRUCTION "SOURCE NAME" - # Test Menu - local ANST=0 - local SECTION=0 - local EDITMENU="" +# Package name +STR_MOUNT=`echo $SRC_NAME | tr [A-Z_] [a-z\-]` +PKG_NAME=`validate_parameter "$PKG_NAME" "PACKAGE NAME" "$STR_MOUNT"` - # Create main-menu string - for i in `seq 0 $MAXSECTION`; do - if [ "${SECTION_FLAG[i]}" = "all" -o "${SECTION_FLAG[i]}" = "on" ]; then - EDITMENU="$EDITMENU $i ${SECTION_NAME[i]}" - fi - done +# Version +STR_MOUNT=`echo $SOURCE_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\2/'` +VERSION=`validate_parameter "$VERSION" "VERSION" $STR_MOUNT` || mkbuild_error $ERROR_CONSTRUCTION "VERSION" - EDITMENU="all \"SlackBuild\" $EDITMENU" - - while [ "$ANST" != "1" ]; do - SECTION=`eval "dialog --stdout --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Exit\" --title \"$MK_TITLE\" --menu \"Select section to test end\" 20 40 13 $EDITMENU"` - ANST=$? - - if [ $ANST -ne 1 ]; then - [ "$SECTION" = "all" ] && SECTION=$MAXSECTION - mount_slackbuild_to $SECTION - - # FIXME: -> sintaxe check - clear - echo "---------------------------------------------------------" - echo " --= SINTAX CHECK =--" - sh -n $SLACKBUILD.test - if [ $? -eq 0 ]; then - echo " --= 0K =--" - DEBUG=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "no debug" --title "$MK_TITLE" \ - --menu "Select debug level" 10 35 3 \ - "-x" "Simple debug" \ - "-xv" "More information" \ - "none" "No debug"` - - [ $? -ne 0 -o "$DEBUG" = "none" ] && DEBUG="" - - clear - echo "---------------------------------------------------------" - echo " --= START BUILDING =--" - if [ "$USER" != "root" ]; then - su -c "( sh $DEBUG $SLACKBUILD.test )" - else - ( sh $DEBUG $SLACKBUILD.test ) - fi - echo "---------------------------------------------------------" - echo " --= END =--" - - echo -n "Enter 1 to end test: " - read ANST - else - echo "Script error..." - read ANST - fi - fi - done +# Construction source name string +CONST_STRING="`validate_parameter "$CONST_STRING" "SOURCE NAME CONSTRUCTION STRING" "\\\$SRC_NAME-\\\$VERSION.tar.$EXTENSION"`" -} +# Build Source Name +[ -z $SOURCE_NAME ] && SOURCE_NAME=`eval "echo $CONST_STRING"` -function menu_dependency { +# Decompressor program and test flag +DECOMPRESSOR=`validate_parameter "$DECOMPRESSOR" "DECOMPRESSOR" ""` || decompress_find - # Dependency Menu - local ANSD=11 - while [ $ANSD -ne 0 ]; do - ANSD=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Main Menu" --title "$MK_TITLE" --menu "Main Menu:" 0 0 0 \ - "1" "Edit dependency list" \ - "2" "Test dependency list"` +DECOMPRESSOR_TEST_FLAG=`validate_parameter "$DECOMPRESSOR_TEST_FLAG" "DECOMPRESSOR TEST FLAG" ""` || mkbuild_error $ERROR_CONSTRUCTION "DECOMPRESSOR TEST FLAG" - [ $? -ne 0 ] && ANSD=0 +# Documentations list +DOCFILES=`validate_parameter "$DOCFILES" "DOCUMENTATION FILES" "NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING readme.*"` - case $ANSD in - 1) - edit_dependency - ;; - 2) - test_dependency - ;; - esac - done +# ./configure option +OPTIONS=`validate_parameter "$OPTIONS" "OTHER CONFIGURE ARGS" ""` -} +# PREFIX +PREFIX=`validate_parameter "$PREFIX" "PREFIX" "/usr"` -function edit_dependency { +# Number of jobs +NUMJOBS=`validate_parameter "$NUMJOBS" "NUMBER OF JOBS" ""` - # Dependency list edit - if [ ! -s $DEPENDENCY_LIST ]; then - echo -e "# Dependency list to $MK_PKGNAME\n# \n# dependency [condition] [version]]\n" > $DEPENDENCY_LIST - fi +# Make slack-required file. +SLACK_REQUIRED=`validate_parameter "$SLACK_REQUIRED" "SLACK REQUIRED" ""` - $MK_EDITOR $DEPENDENCY_LIST +# SlackBuild model +MODEL=`validate_parameter "$MODEL" "SLACKBUILD MODEL" "generic.mkSlackBuild"` -} +# +# Start build SlackBuild +SLACKBUILD=${PKG_NAME}.SlackBuild +SLACKBUILD_TEMP=$SLACKBUILD.tmp +cp $MODEL_DIR/$MODEL $SLACKBUILD_TEMP -function test_dependency { - - # Check dependency and comment not found dependencies - local DEP_LIST="" - - if [ -s $DEPENDENCY_LIST ]; then - for i in `grep '^[^#]' $DEPENDENCY_LIST | awk '{print $1}' | sort | uniq`; do - if [ `ls /var/log/packages/$i-[0-9]* 2>/dev/null` ]; then - DEP_LIST="$DEP_LIST $i \"intalled\" off" - else - DEP_LIST="$DEP_LIST $i \"unintalled\" on" - fi - done - - DEP_SELECT=`eval "dialog --stdout --separate-output --backtitle \"Make SlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \"$MK_TITLE\" --checklist \"Select packages to remove from dependency list:\" 0 0 0 $DEP_LIST"` - # 20 45 13 - - for i in $DEP_SELECT; do - eval "sed 's/$i$/#$i/' $DEPENDENCY_LIST > $AUX_TMP " - eval "sed 's/$i /#$i /' $AUX_TMP > $DEPENDENCY_LIST" - eval "sed 's/$i\t/#$i\t/' $DEPENDENCY_LIST > $AUX_TMP" - cp $AUX_TMP $DEPENDENCY_LIST - done - fi +# Change Strings from model +start_build $SLACKBUILD_TEMP -} +# On/Off sections +activate_sections -# -#-------------------------------------------------------------------- -# Start Program -#-------------------------------------------------------------------- -# -# Start variables -LANG=en_US -BASEDIR=`pwd` -AUX_TMP=`mktemp -p /tmp/ aux_tmp.XXXXXX` -SLACKDESC_TMP=`mktemp -p /tmp/ slackdesc_tmp.XXXXXX` -SLACKDESC_LEN=77 -DEPENDENCY_LIST=`mktemp -p /tmp/ slack-required.XXXXXX` -if [ -z $SB_MODEL ]; then - if [ -e ~/.generic.mkSlackBuild ]; then - SB_MODEL=~/.generic.mkSlackBuild - elif [ -e /etc/simplepkg/generic.mkSlackBuild ]; then - SB_MODEL=/etc/simplepkg/generic.mkSlackBuild - else - echo "SlackBuild model (generic.mkSlackBuild) not found" - mk_exit 0 - fi -fi -[ $# -ne 0 ] && MKSLACKBUILD=${1//.*}.mkslackbuild +# Change sections +section_edit -# Clear dialog -dialog --clear +# Remove off sections +build_slackbuild -# Load/create personal definitions -if [ ! -e ~/.mkslackbuild ]; then - ( cat << EOF > ~/.mkslackbuild -#!/bin/bash -# mkslackbuild definitions -# -MK_AUTHOR="[[AUTHOR NAME]]" -MK_AUTHOR_INITIALS="[[AUTHOR INITIALS]]" -MK_EDITOR=[[EDITOR]] -MK_REPOS=[[REPOS DIR]] -MK_LIMITRATE=[[LIMIT RATE]] -MK_SOURCEDIR=[[SOURCE DIR]] -MK_ARCH=[[DEFAULT ARCH]] -#SB_MODEL="my_model" -EOF -) -fi -source ~/.mkslackbuild -MK_SOURCEDIR=${MK_SOURCEDIR:=$BASEDIR} -MK_ARCH=${MK_ARCH:="i486"} - -# Config Author -if [ "$MK_AUTHOR" = "[[AUTHOR NAME]]" ]; then - MK_TITLE=" Personal Config " - edit_author - MK_TITLE="" -fi +# Make slack-required file +make_slack_required -if [ ! -z $MKSLACKBUILD ]; then - MK_TITLE=" Open mkSlackBuild " - open_mkslackbuild +if [ -e slack-required ]; then + DEPENDENCY_LIST="`cat slack-required | awk '{print $1}' | grep '^[a-z]' | tr '\012' ' '`" + edit_file "REQUIRES" "$DEPENDENCY_LIST" $SLACKBUILD +else + edit_file "REQUIRES" "Null" $SLACKBUILD fi -MK_TITLE="" +# Others changes +change_others_fields -ANS0=11 -while [ $ANS0 -ne 0 ]; do - if [ -z $MK_PKGNAME ]; then - ANS0=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \ - "1" "Create New SlackBuild" \ - "2" "Open mkSlackBuild" \ - "0" "Exit"` - - if [ $? -ne 0 ]; then - ANS0=0 - fi +# Clear temporary files +clear_files - case $ANS0 in - 1) - MK_TITLE=" Create SlackBuild " - create_slackbuild - [ $? -eq 100 ] && MK_PKGNAME="" - ;; - 2) - MK_TITLE=" Open mkSlackBuild " - open_mkslackbuild_dialog - [ $? -eq 100 ] && MK_PKGNAME="" - ;; - *) - echo "Exit..." - ANS0=0 - ;; - esac - MK_TITLE="" - else - ANS0=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \ - "1" "Edit SlackBuild sections" \ - "2" "Edit dependency list" \ - "3" "Test SlackBuild script" \ - "4" "View Doc-Files" \ - "5" "Save SlackBuild and mkslackbuild"` - - if [ $? -ne 0 ]; then - ANS0=0 - fi - case $ANS0 in - 1) # Edit Sections - MK_TITLE=" Edit Menu " - edit_menu - ;; - 2) # Dependency Menu - MK_TITLE=" Dependency Menu " - menu_dependency - ;; - 3) # Test Script - MK_TITLE=" Test Menu " - test_menu - ;; - 4) # View Doc-Files - MK_TITLE=" View Docs " - view_docs - ;; - 5) # Save SlackBuild - save_mkslackbuild - mount_slackbuild - ;; - 0) # Exit - ANS0=0 - ;; - esac - MK_TITLE="" - fi -done - -# Check changes -if [ ! -z $MK_PKGNAME ]; then - md5sum -c md5sum >/dev/null - if [ $? -ne 0 ]; then - MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild - save_mkslackbuild - mount_slackbuild - fi -fi +[ $COMMIT -eq 1 ] && commit_slackbuild -mk_exit 0 -# _________________________________END_______________________________ |