diff options
Diffstat (limited to 'branches/0.6/src')
-rw-r--r-- | branches/0.6/src/createpkg | 45 | ||||
-rwxr-xr-x | branches/0.6/src/mkbuild | 1563 |
2 files changed, 432 insertions, 1176 deletions
diff --git a/branches/0.6/src/createpkg b/branches/0.6/src/createpkg index a15e27c..a1ba65b 100644 --- a/branches/0.6/src/createpkg +++ b/branches/0.6/src/createpkg @@ -55,16 +55,6 @@ function error_codes { SCRIPT_OR_PACKAGE_NOT_FOUND=202 # Script or package not found } -function eecho { - - # echoes a message - # usage: eecho <message-type> <message> - # message-type can be: commun, messag, error, normal - - echo -e "${1}${2}${normal}" - -} - function handle_error { # This function deals with internal createpkg errors @@ -299,39 +289,6 @@ function list_builds { } -function color_select { - - # Select color mode: gray, color or none (*) - # commun - Communication - # messag - Commum messages - # error - Error messages - # normal - turn off color - case "$1" in - 'gray') - commun="\033[37;1m" - messag="\033[37;1m" - error="\033[30;1m" - alert="\033[37m" - normal="\033[m" - ;; - 'color') - commun="\033[34;1m" # green - messag="\033[32;1m" # blue - error="\033[31;1m" # red - alert="\033[33;1m" # yellow - normal="\033[m" # normal - ;; - *) - commun="" - messag="" - error="" - alert="" - normal="" - ;; - esac - -} - #--------------------------------------------------- # Starting createpkg #--------------------------------------------------- @@ -371,7 +328,7 @@ else fi # Select color mode: gray, color or none (*) -color_select $COLOR +color_select $COLOR_MODE # This is used to show how many children process we have if [ -z "$CREATEPKG_CHILD" ]; then diff --git a/branches/0.6/src/mkbuild b/branches/0.6/src/mkbuild index bc0786d..631898a 100755 --- a/branches/0.6/src/mkbuild +++ b/branches/0.6/src/mkbuild @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash # # Script para gerar SlackBuild # Por Rudson R. Alves @@ -9,1234 +9,533 @@ # SlackBuilds são scripts utilizados no Slackware para gerar # pacotes tgz. # -# Turn off debug -set +x -# -# Version 0.9.19 -PROG_VERSION=0.9.19 +# Version 0.9.1 +PROG_VERSION=0.9.1 #-------------------------------------------------------------------- # Functions #-------------------------------------------------------------------- -function config_help { - - # Show ./configure --help - view_file "Check ./configure --help" $CONFIG_HELP -} - -function view_file { - - # Show file - # INPUT: $1 string textbox - # $2 file - [ $# -ne 2 ] && return 1 - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " $1 " --textbox $2 20 75 -} - -function mk_exit { - # Exit function - clean_all - clear +function mkbuild_use() + +{ + # mkbuild help function + echo " +NAME + mkbuild - create SlackBuild script from mkbuild_file input + +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 + -s, --show + show output files + -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 + +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 variable1." + ;; + "$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 - [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required +function is_number { - 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 } -function print_lines { - - # Print from file $2, the lines betwen <$1> and </$1> lines - [ $# -ne 2 ] && mk_exit 1 - eval "sed -n '/<$1>/,/<\/$1>/ { /<$1>/ b; /<\/$1>/ b; p; }' $2" -} - -function print_lines_to { - - # Print from file $2, the lines betwen <$1> and $2 lines - [ $# -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" +function set_parameters { - for i in `seq 1 11`; do - echo -en "$MK_PKGNAME: \n" + # 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 + '-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 SlackBuild model - [ $# -ne 2 ] && mk_exit 1 - eval "sed -n '/<$1>/ p' $2 | sed 's/.*> \([a-z]\+\)/\1/'" -} +function get_variable { -function mk_status { + # 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 - # Get status from edited SlackBuild - # input: $1 -> section name - # output: section status and section number - for i in `seq 0 $MAXSECTION`;do - if [ "${SECTION_NAME[i]}" = "$1" ]; then - echo "${SECTION_FLAG[i]} $i" - return 0 - fi - done - return 1 + grep "^${1}" $MK_INPUT_FILE | cut -f2 -d\" } function edit_file { - # Edit file $3, by change string [[$1]] to $2 + # Edit file $SLACKBUILD, 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/`" +function start_build { - DOC_FILES=`find $MK_TMPSRC -type f -maxdepth 1 -name "[A-Z]*" | sed 's/.*\/\(.*\)$/\1/'` + # Build initial sections + [ $# -ne 1 ] && mkbuild_error $ERROR_PROGRAM + + 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 + 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" $1 + if [ -z $OPTIONS ]; then + edit_file "OTHER CONFIGURE ARGS" "\"\"" $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_SOURCE_DIR/$MK_PKGNAME 2>/dev/null - wget --continue --limit-rate=$MK_LIMITRATE $MK_URL -P $MK_SOURCE_DIR/$MK_PKGNAME/ - if [ $? -ne 0 ]; then - echo "URL error" - return 0 + edit_file "OTHER CONFIGURE ARGS" "$OPTIONS" $1 fi - MK_SOURCE=$MK_SOURCE_DIR/$MK_PKGNAME/$MK_SRCNAME + edit_file "DOCUMENTATION FILES" "$DOCFILES" $1 + edit_file "PREFIX" "$PREFIX" $1 } -function select_source { +function clear_files { - # 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_SOURCE_DIR=`dirname $MK_SOURCE` + # Remove temporary files + rm $AUX_TMP 2>/dev/null + rm $SLACKBUILD_TEMP 2>/dev/null } -#-------------------------------------------------------------------- -# Edit functions -#-------------------------------------------------------------------- - -function edit_author { - - # Edit authot, Initials and editor - MK_AUTHOR=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter with author name:" 8 60 "$MK_AUTHOR"` - edit_file "AUTHOR NAME" "$MK_AUTHOR" $MK_SLACKBUILD_RC - - 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" $MK_SLACKBUILD_RC +function set_status { - 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" $MK_SLACKBUILD_RC - - MK_SOURCE_DIR=`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_SOURCE_DIR" $MK_SLACKBUILD_RC - - if [ "$USER" != "root" ]; then - SLACKBUILDRC=`[ -e ~/.slackbuildrc ] && echo ~/.slackbuildrc || echo /etc/slackbuildrc` - MK_REPOS=`grep 'REPOS=' $SLACKBUILDRC | sed 's/REPOS=\(.*\)/\1/'` + # 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 - 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" $MK_SLACKBUILD_RC - - 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" $MK_SLACKBUILD_RC - - 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" $MK_SLACKBUILD_RC -} - -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 -} - -function edit_source_name { - - # Edit source name - # Carrega nome do arquivo - 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 edit_pkgname { - - # Edit MK_PKGNAME, MK_VERSION and MK_EXTENSION - # Remove nome, versão e extensão do nome da fonte - 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/'` - - # Configura nome, versão e extensão do pacote - 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 edit_decompress_arg { - - # Edit MK_DECOMPRESSOR and MK_DECOMPRESSOR_TEST_FLAG - # Remove nome, versão e extensão do nome da fonte - MK_DECOMPRESSOR="" - MK_DECOMPRESSOR_TEST_FLAG="" - - # Configura nome, versão e extensão do pacote - 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 - CONFIG_HELP=`mktemp -p /tmp/ config_$MK_PKGNAME.XXXXXX` - - $MK_TMPSRC/configure --help > $CONFIG_HELP - config_help - #[ "$( cat $CONFIG_HELP | egrep '/usr/local')" != "" ] && MK_PREFIX=/usr || MK_PREFIX=/opt/kde - MK_PREFIX="/usr" - MK_OPTIONS="" - local ANS0=1 - - 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 - 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 - [ -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 - 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"` + echo "Warning: Section $1 have status all. Can't change!" fi - - MK_DOCFILES="`echo $SELECTDOCS | sed ':i; N; s/\n/ /; bi'`" } -function edit_arch { +function get_status { - # Edit compiler architecture - 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 + # Get status from section + # $1 - Section + # $2 - file + [ $# -ne 2 ] && mkbuild_error $ERROR_PROGRAM + eval "sed '/^<$1>.*$/! d' $2" } -#-------------------------------------------------------------------- -# Mount files -#-------------------------------------------------------------------- +function activate_sections { -function change_strings { - - # Change string $1 to $2 in all files in the current directory - [ $# -ne 2 ] && mk_exit 1 - #[ -z "$2" ] && return 0 - eval "grep -l \"\[\[$1\]\]\" *" | while read FILE; do - edit_file "$1" "$2" $FILE + # 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 start_build { +function build_slackbuild { - # Build initial 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" + # Remove off sections + 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 mount_slackbuild { +function section_edit { - # Mount final SlackBuild - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD" 5 45 + # Edit sections by change you values + [ -z $MK_INPUT_FILE ] && return 0 - rm $SLACKBUILD 2>/dev/null + SECTION_LIST=`grep '^#>[a-z]' $MK_INPUT_FILE | cut -c3-` - 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 - done - chmod +x $SLACKBUILD -} + # Check for sections change + [ -z "$SECTION_LIST" ] && return 0 -function mount_slackbuild_to { - - # Mount SlackBuild to section $1 - 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 make_file_sections { - - # Make files section - THIS_MODEL=$1 - - # Create SlackBuilds-sections files - rm *_$MK_PKGNAME.mkbuild 2>/dev/null - - # Make files 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 - - STRING=$ITEM - # Save section status flag - SECTION_FLAG[INDEX]=`get_status "$STRING" $THIS_MODEL` - - # Create sections files - print_lines "$STRING" $THIS_MODEL > $SECTION_FILE - let INDEX++ - done < <( cat $THIS_MODEL | grep '^<[a-z_0-9]\+>' | sed 's/<\(.*\)>.*$/\1/' ) - - let INDEX-- - MAXSECTION=$INDEX - md5sum *.mkbuild > md5sum -} - -function get_source_dialog { - - # - 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 + # 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 - select_source - [ $? -eq 100 ] && return 100 - fi - fi -} - - -function test_source { - - # - 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 + # Others sections + section_change $i fi done } -function set_source_test { - - # Configure test source variables - MK_SOURCE=$MK_SOURCE_DIR/$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" - else - edit_decompress_arg - [ $? -eq 100 ] && return 100 - fi -} - -function edit_signature { - - # Enable MD5 or GPG signature check - # GPG and MD5 test - local ANS=0 - - ANS=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --menu "Select code validate type:" 0 0 0 \ - "1" "gpg signature" \ - "2" "md5sum" \ - "0" "none"` - - case $ANS in - 1) - edit_gpg - ;; - 2) - edit_md5sum - ;; - esac -} - -function edit_gpg { +function slackdesc_edit { - # Enable GPG signature check - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --msgbox "Enter with gpg minimized signing key." 5 50 - $EDITOR $MK_GPGFILEKEY -} - -function edit_md5sum { - - # Enable MD5SUM signature check - echo "none" -} - -#-------------------------------------------------------------------- -# Main 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 - - # Compile arch - edit_arch - [ $? -eq 100 ] && return 100 - - # Set source test variables - set_source_test - [ $? -eq 100 ] && return 100 - - # Get source file - MK_SOURCE=$MK_SOURCE_DIR/$MK_PKGNAME/$MK_SRCNAME - get_source_dialog - [ $? -eq 100 ] && return 100 - - # Test source - test_source - [ $? -eq 100 ] && return 100 - - # Uncompress source - unpkg_source - [ $? -eq 100 ] && return 100 - - # GPG and MD5 test -# edit_signature - - # Configure compiler options if exist - if [ -e $MK_TMPSRC/configure ]; then - edit_configure - 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 ) - - else - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \ - --title "$MK_TITLE" --msgbox "$MKSLACKBUILD most be a mkslackbuild file" 6 45 - return 100 - 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 + # Edit slackdesc section + sed -n '1,/|-----/ { /<slackdesc>/ b; /|-----/ b; p; }' $SLACKBUILD_TEMP + echo -n $PKG_NAME | tr [a-z+\-] " " + echo -n "|-----handy-ruler" + let N=18+${#PKG_NAME} + for i in `seq $N $SLACKDESC_LEN`; do + echo -n "-" done + echo -en "|\n" - [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required + sed -n '/#>slackdesc/,/#<slackdesc/ { /^#/ b; p }' $MK_INPUT_FILE + sed '1, /\[\[SLACK-DESC\]\]/ d' $SLACKBUILD_TEMP } -function edit_menu { - - # Edit Menu - ANSE=0 - while [ $ANSE -ne 1 ]; do - # Create main-menu string - EDITMENU="" - for i in `seq 0 $MAXSECTION`; do - #echo "${SECTION_NAME[i]} ${SECTION_FLAG[i]} ${SECTION_FILE[i]}" - EDITMENU="$EDITMENU ${SECTION_NAME[i]} ${SECTION_FLAG[i]}" - done - - 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 - fi - done -} +function section_change { -function md5sum_edit { + # Change section lines + [ $# -ne 1 ] && mkbuild_error $ERROR_PROGRAM - # Edit md5sum - local SELECT=0 - local FILE=$1 + # 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" - 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` - - 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 - - $MK_EDITOR $FILE + mv $AUX_TMP $SLACKBUILD_TEMP } -function test_menu { +function make_slack_required { - # Test Menu - local ANST=0 - local SECTION=0 - local EDITMENU="" + # Build slack-required file + rm slack-required 2>/dev/null + [ -z "$SLACK_REQUIRED" ] && return 0 - # 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 + echo -e "# Dependency list to broffice\n#\n# dependency [condition] [version]]" > slack-required - 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 + 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 } -function menu_dependency { - - # 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"` - - [ $? -ne 0 ] && ANSD=0 +function change_others_fields { - case $ANSD in - 1) - edit_dependency - ;; - 2) - test_dependency - ;; - esac + # 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 edit_dependency { - - # Dependency list edit - if [ ! -s $DEPENDENCY_LIST ]; then - echo -e "# Dependency list to $MK_PKGNAME\n# \n# dependency [condition] [version]]\n" > $DEPENDENCY_LIST - fi - - $MK_EDITOR $DEPENDENCY_LIST -} - -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 -} - -function commit_SlackBuild { - - # Add/commit one SlackBuild - # Mount SlackBuild - mount_slackbuild - MK_TITLE="Commit SlackBuild" - - # Find SlackBuild - SB_PATH=`find $SLACKBUILD_DIR -iname $MK_PKGNAME` - - # Change to SlackBuild directory - cd $SLACKBUILD_DIR - - # Check for dirbase to new SlackBuild - if [ -z $SB_PATH ]; then - # New SlackBuild - AUX="" - while [ -z $AUX ]; do - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --infobox "lynx search for $MK_PKGNAME path. Wait..." 0 0 - AUX=`lynx -dump http://gentoo-portage.com/Search?search=$MK_PKGNAME | sed -n '/Results:/,+1 { /Results:/ b ; p }' | head --lines=1 | tr -d " "` - - if [ -z $AUX ]; then - dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --yesno "Net search error. Try again?" 0 0 - if [ $? -ne 0 ]; then - # Default directory - AUX="/others/unclass" - SB_PATH=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter dir-name to SlackBuild from $MK_PKGNAME:" 8 60 "$AUX"` - fi - else - SB_PATH="`dirname $AUX | tr - /`/`basename $AUX`" - fi - done - - # Make directory and add SlackBuild to svn - svn mkdir $SB_PATH - cp $BASEDIR/$MK_PKGNAME.SlackBuild $SB_PATH/ - svn add $SB_PATH/$MK_PKGNAME.SlackBuild - if [ -e $BASEDIR/slack-required ]; then - cp $BASEDIR/slack-required $SB_PATH/ - svn add $SB_PATH/slack-required - fi - else - cp $BASEDIR/$MK_PKGNAME.SlackBuild $SB_PATH/ - if [ -e $BASEDIR/slack-required ]; then - cp $BASEDIR/slack-required $SB_PATH/ - fi - fi - - # Commit SlackBuild - MK_MSG=`dialog --stdout --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --inputbox "Enter message do commit command:" 8 60` - svn commit -m "$MK_PKGNAME: $MK_MSG" - - cd $BASEDIR - - echo -e "\nPress ENTER to continue." - read ANS1 -} - -function compile_install { - - # Compile SlackBuild and install - local ANS="" - # Mount SlackBuild - mount_slackbuild - - # Clean temporary file - echo " " > $AUX_TMP - - if [ "$USER" = "root" ]; then - # Root user - # Compile pid - PID=`exec-slackbuild $SLACKBUILD $AUX_TMP` - - # Tail messages - tail -s .1 --pid=$PID -f $AUX_TMP - - # Package name - PACKAGE=`tail -10 $AUX_TMP | grep "^Moving $MK_PKGNAME-[0-9].*\.\.\.$" | awk '{ print $2 }' | grep "$MK_PKGNAME-.*\.tgz$"` - - # Install package - if [ ! -z $PACKAGE ]; then - installpkg $MK_REPOS/$PACKAGE - else - echo -e "\nBuild error!" - fi - else - # Commum users - # Compile pid - PID=`su -c "exec-slackbuild $SLACKBUILD $AUX_TMP"` - - # Tail messages - tail -s .1 --pid=$PID -f $AUX_TMP - - # Package name - PACKAGE=`tail -10 $AUX_TMP | grep "^Moving $MK_PKGNAME-[0-9].*\.\.\.$" | awk '{ print $2 }' | grep "$MK_PKGNAME-.*\.tgz$"` - - # Install package - if [ ! -z $PACKAGE ]; then - su -c "installpkg $MK_REPOS/$PACKAGE" - else - echo -e "\nBuild error!" - fi - fi - - echo -e "\nPress ENTER to continue." - read ANS -} - -function create_slackbuildrc { +#============================= +# Main Program +#============================= +# 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=${AUTHOR:="`get_variable AUTHOR`"} +[ -z "$AUTHOR" ] && mkbuild_error $ERROR_CONSTRUCTION "AUTHOR" + +AUTHOR_INITIALS=${AUTHOR_INITIALS:="`get_variable AUTHOR_INITIALS`"} +[ -z $AUTHOR_INITIALS ] && mkbuild_error $ERROR_CONSTRUCTION "AUTHOR_INITIALS" + +URL=${URL:="`get_variable URL`"} +EXTENSION=${EXTENSION:="`echo $URL | rev | cut -c1-3 | rev | tr -d '.'`"} +if [ $EXTENSION = "gz" -o $EXTENSION = "tgz" -o $EXTENSION = "bz2" -o $EXTENSION = "zip" ]; then + SOURCE_NAME=`basename $URL` + URL_BASE=`dirname $URL` +else + EXTENSION=`get_variable EXTENSION` + [ -z $EXTENSION ] && mkbuild_error $ERROR_CONSTRUCTION "EXTENSION" + URL_BASE=$URL +fi - # Create basic slackbuildrc - cat << EOF > $MK_SLACKBUILD_RC -#!/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_SOURCE_DIR=[[SOURCE DIR]] -MK_ARCH=[[DEFAULT ARCH]] -#SB_MODEL="my_model" -EOF +# Source name +SRC_NAME=${SRC_NAME:="`get_variable SRC_NAME`"} +[ -z $SRC_NAME ] && SRC_NAME=`echo $SOURCE_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\1/'` +[ -z $SRC_NAME ] && mkbuild_error $ERROR_CONSTRUCTION "SRC_NAME" + +# Package name +PKG_NAME=${PKG_NAME:="`get_variable PKG_NAME`"} +[ -z $PKG_NAME ] && PKG_NAME=`echo $SRC_NAME | tr [A-Z_] [a-z\-]` + +# Version +VERSION=${VERSION:="`get_variable VERSION`"} +[ -z $VERSION ] && VERSION=`echo $SRC_NAME | sed -r 's/(.*)-(.*)\.(.*\..*)$/\2/'` +[ -z $VERSION ] && mkbuild_error $ERROR_CONSTRUCTION "VERSION" + +# Construction source name string +CONST_STRING=${CONST_STRING:="`get_variable CONST_STRING`"} +[ -z "$CONST_STRING" ] && CONST_STRING="\$SRC_NAME-\$VERSION.tar.$EXTENSION" + +# Build Source Name +[ -z $SOURCE_NAME ] && SOURCE_NAME=`eval "echo $CONST_STRING"` + +# Decompressor program and test flag +DECOMPRESSOR=${DECOMPRESSOR:="`get_variable DECOMPRESSOR`"} +if [ -z $DECOMPRESSOR ]; then + 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 +fi +[ -z $DECOMPRESSOR_TEST_FLAG ] && DECOMPRESSOR_TEST_FLAG=`get_variable DECOMPRESSOR_TEST_FLAG` +[ -z $DECOMPRESSOR_TEST_FLAG ] && mkbuild_error $ERROR_CONSTRUCTION "DECOMPRESSOR_TEST_FLAG" -} +# Documentations list +DOCFILES=${DOCFILES:="`get_variable DOCFILES`"} +if [ -z "$DOCFILES" ]; then + DOCFILES="NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING readme.*" +fi -function mkslackbuild_config_start { +# ./configure option +OPTIONS=${OPTIONS:="`get_variable OPTIONS`"} - # Check mkslackbuild.conf and start hi - # Create mkslackbuild.conf config script if need - if [ ! -e $MK_SLACKBUILD_RC ]; then - mkdir -p `dirname $MK_SLACKBUILD_RC` 2>/dev/null - create_slackbuildrc - fi +# PREFIX +PREFIX=${PREFIX:="`get_variable PREFIX`"} +[ -z $PREFIX ] && PREFIX="/usr" - # Start mkslackbuild.conf variables - source $MK_SLACKBUILD_RC - MK_SOURCE_DIR=${MK_SOURCE_DIR:=$BASEDIR} - MK_ARCH=${MK_ARCH:="i486"} +# Number of jobs +NUMJOBS=${NUMJOBS:="`get_variable NUMJOBS`"} - # Configure mkslackbuild.conf variables - if [ "$MK_AUTHOR" = "[[AUTHOR NAME]]" ]; then - MK_TITLE=" Personal Config " - edit_author - MK_TITLE="" - fi +# Make slack-required file. +SLACK_REQUIRED=${SLACK_REQUIRED:="`get_variable SLACK_REQUIRED`"} +[ -z "$SLACK_REQUIRED" ] && make_slack_required -} +# SlackBuild model +MODEL=${MODEL:="`get_variable MODEL`"} +[ -z $MODEL ] && MODEL="generic.mkSlackbuild" # -#-------------------------------------------------------------------- -# Start Program -#-------------------------------------------------------------------- -# -# Start variables -LANG=en_US -SLACKDESC_LEN=77 -BASEDIR=`pwd` - -# Start Files ------------------------------------------------------ -AUX_TMP=`mktemp -p /tmp/ aux_tmp.XXXXXX` -SLACKDESC_TMP=`mktemp -p /tmp/ slackdesc_tmp.XXXXXX` -DEPENDENCY_LIST=`mktemp -p /tmp/ slack-required.XXXXXX` -LOCAL_CONF_DIR=~/.local/etc/simplepkg -MK_SLACKBUILD_RC="$LOCAL_CONF_DIR/mkslackbuild.conf" -MK_MODEL_DIR="defaults/mkbuild" - -# Start common.sh functions ---------------------------------------- -COMMON="/usr/libexec/simplepkg/common.sh" -BASENAME="`basename $0`" - -if [ -f "$COMMON" ]; then - source $COMMON -else - echo "error: file $COMMON found, check your $BASENAME installation" - mk_exit 0 -fi +# Start build SlackBuild +SLACKBUILD=${PKG_NAME}.SlackBuild +SLACKBUILD_TEMP=$SLACKBUILD.tmp +cp $MODEL_DIR/$MODEL $SLACKBUILD_TEMP -# Load simplepkg.conf variables -eval_config $BASENAME +# Change Strings from model +start_build $SLACKBUILD_TEMP -# Enable debug mode ----------------------------------------------- -set -x +# On/Off sections +activate_sections -# If model isn't defined, get default model. -if [ -z $SB_MODEL ]; then - if [ -e $LOCAL_CONF_DIR/$MK_MODEL_DIR/generic.mkSlackBuild ]; then - SB_MODEL=$LOCAL_CONF_DIR/$MK_MODEL_DIR/generic.mkSlackBuild - elif [ -e $BASE_CONF/$MK_MODEL_DIR/generic.mkSlackBuild ]; then - SB_MODEL=$BASE_CONF/$MK_MODEL_DIR/generic.mkSlackBuild - else - echo "SlackBuild model (generic.mkSlackBuild) not found" - mk_exit 0 - fi -fi - -# Get mkSlackBuild input -[ $# -ne 0 ] && MKSLACKBUILD=${1//.*}.mkslackbuild - -# Clear dialog -dialog --clear +# Change sections +section_edit -# Check mkslackbuild.conf and start hi -mkslackbuild_config_start - -# Check file.mkslackbuild file to open -if [ ! -z $MKSLACKBUILD ]; then - MK_TITLE=" Open mkSlackBuild " - open_mkslackbuild -fi +# Remove off sections +build_slackbuild -MK_TITLE="" +# Make slack-required file +make_slack_required -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 - - 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" \ - "6" "Compile/install package" \ - "7" "Remove package" \ - "8" "Commit SlackBuild to Sarava tree"` - - 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 - ;; - 6) # Compile/install package - compile_install - ;; - 7) # Remove package - if [ "$USER" = "root" ]; then - removepkg $MK_PKGNAME - else - su -c "( removepkg $MK_PKGNAME )" - fi - echo -e "\nPress ENTER to continue." - read ANS1 - ;; - 8) # Commit SlackBuild to Sarava - commit_SlackBuild - ;; - 0) # Exit - ANS0=0 - ;; - esac - MK_TITLE="" - fi -done - -# Check changes -if [ ! -z $MK_PKGNAME ]; then - md5sum -c md5sum - if [ $? -ne 0 ]; then - MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild - save_mkslackbuild - mount_slackbuild - fi +if [ -e slack-required ]; then + DEPENDENCY_LIST="`cat slack-required | awk '{print $1}' | grep '^[a-z]' | tr '\012' ' '`" + edit_file "REQUIRES" "$DEPENDENCY_LIST" $SLACKBUILD fi -mk_exit 0 +# Others changes +change_others_fields +# Clear temporary files +clear_files |