]> gitweb.fluxo.info Git - simplepkg.git/commitdiff
mkbuild-0.9.8: adicionado ao trunk
authorrudson <rudson@04377dda-e619-0410-9926-eae83683ac58>
Mon, 18 Jun 2007 16:58:14 +0000 (16:58 +0000)
committerrudson <rudson@04377dda-e619-0410-9926-eae83683ac58>
Mon, 18 Jun 2007 16:58:14 +0000 (16:58 +0000)
git-svn-id: svn+slack://slack.fluxo.info/var/svn/simplepkg@394 04377dda-e619-0410-9926-eae83683ac58

trunk/conf/simplepkg.conf.new
trunk/src/mkbuild

index 927d870ea18ba653967429cfaa0fa9947fc20820..50ea4ad5796dec7be581f68e2945bcde8fcfe793 100644 (file)
@@ -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
+
+#---------------------------------------------------------------------
index b6c718d510bb3de8d1cbb623730e1447ab314f7e..fce2533e8bfe34457dd464ad0b00ba281e5301fc 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/bash -x
+#!/bin/bash
 #
 # Script para gerar SlackBuild
 # Por Rudson R. Alves
 # 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_______________________________