diff options
Diffstat (limited to 'trunk/utils/mkbuild')
-rwxr-xr-x | trunk/utils/mkbuild | 962 |
1 files changed, 962 insertions, 0 deletions
diff --git a/trunk/utils/mkbuild b/trunk/utils/mkbuild new file mode 100755 index 0000000..b9cda66 --- /dev/null +++ b/trunk/utils/mkbuild @@ -0,0 +1,962 @@ +#!/bin/bash -x +# +# Script para gerar Slackbuild +# Por Rudson R. Alves +# +# Este script auxilia a criação de SlackBuilds, com o modelo +# do Luiz do Sarava Linux +# +# Slackbuilds são scripts utilizados no Slackware para gerar +# pacotes tgz. +# +# Version 0.9.10 +# +#-------------------------------------------------------------------- +# Functions +#-------------------------------------------------------------------- +# Show ./configure --help +function config_help() +{ + view_file "Check ./configure --help" $CONFIG_HELP +} + +# Show file +# INPUT: $1 string textbox +# $2 file +function view_file() +{ + [ $# -ne 2 ] && return 1 + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " $1 " --textbox $2 20 75 +} + +# Exit function +function mk_exit() +{ + #[ ! -z $SLACKBUILD ] && [ -e $SLACKBUILD ] && echo "SlackBuild save in $SLACKBUILD" + #[ ! -z $MKSLACKBUILD ] && [ -e $MKSLACKBUILD ] && echo "mkSlackBuild save in $SLACKBUILD" + + clean_all + exit $1 +} + +# Clear all temp files +function clean_all() +{ + [ -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 + fi +} + +# Print from file $2, the lines betwen <$1> and </$1> lines +function print_lines() +{ + [ $# -ne 2 ] && mk_exit 1 + eval "sed -n '/<$1>/,/<\/$1>/ { /<$1>/ b; /<\/$1>/ b; p; }' $2" +} + +# Print from file $2, the lines betwen <$1> and $2 lines +function print_lines_to() +{ + [ $# -ne 3 ] && mk_exit 1 + eval "sed -n '/<$1>/,/$2/ { /<$1>/ b; /$2/ b; p; }' $3" +} + +# Make slack-desc file +function mk_slackdesc() +{ + 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" + done + print_lines "slackdesc" $SB_MODEL | sed '1,/\]\]/ d' +} + +# Get label status from Slackbuild model +function get_status() +{ + [ $# -ne 2 ] && mk_exit 1 + eval "sed -n '/<$1>/ p' $2 | sed 's/.*> \([a-z]\+\)/\1/'" +} + +# Get status from edited SlackBuild +# input: $1 -> section name +# output: section status and section number +function mk_status() +{ + for i in `seq 0 $MAXSECTION`;do + if [ "${SECTION_NAME[i]}" = "$1" ]; then + echo "${SECTION_FLAG[i]} $i" + return 0 + fi + done + return 1 +} + +# Edit file $3, by change string [[$1]] to $2 +function edit_file() +{ + local STR_OLD + local STR_NEW + + [ $# -ne 3 ] && mk_exit 1 + 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 +} + +# Unpackage source +function unpkg_source() +{ + # FIXME: if MK_DECOMPRESSOR -ne bunzip2 or gunzip... + if [ $MK_DECOMPRESSOR = "bunzip2" -o $MK_DECOMPRESSOR = "gunzip" ]; then + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Main Menu" --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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --msgbox "$MK_DECOMPRESSOR not configurated..." 5 45 + fi +} + +# Download source +function download_url() +{ + clear + mkdir -p $MK_SOURCEDIR/$MK_PKGNAME 2>/dev/null + wget --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 +} + +# Select source file +function select_source() +{ + MK_SOURCE=$BASEDIR + while [ ! -f $MK_SOURCE ]; do + MK_SOURCE=`dialog --stdout --backtitle "mkSlackBuild $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` +} + +#-------------------------------------------------------------------- +# Edit functions +#-------------------------------------------------------------------- +# Edit authot, Initials and editor +function edit_author() +{ + MK_AUTHOR=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --inputbox "Enter with author assignature:" 8 60 "$MK_AUTHOR_INITIALS"` + edit_file "AUTHOR INITIALS" "$MK_AUTHOR_INITIALS" ~/.mkslackbuild + MK_EDITOR=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --inputbox "Enter with editor command:" 8 60 "pico"` + edit_file "EDITOR" "$MK_EDITOR" ~/.mkslackbuild +} + +# Edit source URL +function edit_url() +{ + MK_URL=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --inputbox "Enter with complite URL from source:" 8 60 "$MK_URL"` + [ $? -ne 0 ] && return 100 +} + +# Edit source name +function edit_source_name() +{ + # Carrega nome do arquivo + MK_SRCNAME=`basename $MK_URL` + MK_SRCNAME=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --cancel-label "Main Menu" --inputbox "Enter with complite source file name:" 8 60 "$MK_SRCNAME"` + [ $? -ne 0 ] && return 100 +} + +# Edit MK_PKGNAME, MK_VERSION and MK_EXTENSION +function edit_pkgname() +{ + # 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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Main Menu" --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}'` +} + +# Edit MK_DECOMPRESSOR and MK_DECOMPRESSOR_TEST_FLAG +function edit_decompress_arg() +{ + # 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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Main Menu" --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}'` +} + +# Edit configure options +function edit_configure() +{ + 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_OPTIONS="" + local ANS0=1 + + while [ $ANS0 -eq 1 ]; do + local ANS1="7" + while [ $ANS1 -ne 0 ]; do + ANS1=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Continue" --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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --inputbox "Enter with prefix for install $MK_PKGNAME" 8 60 "$MK_PREFIX"` + ;; + '4') + MK_OPTIONS=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --inputbox "Enter with configure options for compile $MK_PKGNAME" 8 60 "$MK_OPTIONS"` + ;; + *) + ANS1=0 + ;; + esac + done + + # Configure + dialog --backtitle "mkSlackBuild $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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " Configure line is ok? " --yesno "./configure --prefix=$MK_PREFIX $MK_OPTIONS" 6 70 + + ANS0=$? + done +} + +# Show Documentations files +function view_docs() +{ + 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 \"mkSlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Continue\" --title \" Documentations files \" --menu \"Select doc-file below:\" 20 45 13 $MENU"` + ANS2=$? + [ $ANS2 -eq 0 ] && view_file "File: $SELECT" $MK_TMPSRC/$SELECT + done +} + +# Edit documentations files +function edit_docfiles() +{ + [ -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 \"mkSlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \" Documentations files \" --cancel-label \"Continue\" --checklist \"Select documentation files below:\" 20 45 13 $DOCMENU"` + fi + + MK_DOCFILES="`echo $SELECTDOCS | sed ':i; N; s/\n/ /; bi'`" +} + +# Edit compiler architecture +function edit_arch() +{ + MK_ARCH=`dialog --stdout --backtitle "mkSlackBuild documentation files below:" --cancel-label "Main Menu" --inputbox "Set an architecture to compiler:" 8 45 $MK_ARCH` + [ $? -ne 0 ] && return 100 +} + +#-------------------------------------------------------------------- +# Mount files +#-------------------------------------------------------------------- +# Change string $1 to $2 in all files in the current directory +function change_strings() +{ + # echo "$1 -> $2" + [ $# -ne 2 ] && mk_exit 1 + eval "grep -l \"\[\[$1\]\]\" *" | while read FILE; do + edit_file "$1" "$2" $FILE + done +} + +# Build initial sections +function start_build() +{ + 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`" + change_strings "OTHER CONFIGURE ARGS" "$MK_OPTIONS" + change_strings "DOCUMENTATION FILES" "$MK_DOCFILES" + change_strings "PREFIX" "$MK_PREFIX" +} + +# Mount final SlackBuild +function mount_slackbuild() +{ + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --infobox "SlackBuild save in $SLACKBUILD" 5 30 + + rm $SLACKBUILD 2>/dev/null +# [ ! -e `dirname $SLACKBUILD` ] && mkdir `dirname $SLACKBUILD` + 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 +} + +# Mount SlackBuild to section $1 +function mount_slackbuild_to() +{ + if [ $# -eq 1 ]; then + END_SECTION=$1 + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --infobox "SlackBuild save in $SLACKBUILD.test" 5 30 + + rm $SLACKBUILD.test 2>/dev/null +# [ ! -e `dirname $SLACKBUILD` ] && mkdir `dirname $SLACKBUILD` + 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 +} + +# Make files section +function make_file_sections() +{ + 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 +} + +function get_source_dialog() +{ + if [ ! -e $MK_SOURCE ]; then + dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --yesno " Download $MK_SRCNAME? " 5 50 + if [ $? -eq 0 ]; then + download_url + else + select_source + [ $? -eq 100 ] && return 100 + fi + fi +} + + +function test_source() +{ + local TEST=1 + local ANS=0 + + while [ $TEST -ne 0 ]; do + $MK_DECOMPRESSOR $MK_DECOMPRESSOR_TEST_FLAG $MK_SOURCE + TEST=$? + if [ $TEST -ne 0 ]; then + dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --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 set_source_test() +{ + 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" + else + edit_decompress_arg + [ $? -eq 100 ] && return 100 + fi +} + +# Enable MD5 or GPG signature check +function edit_signature() +{ + # GPG and MD5 test + local ANS=0 + + ANS=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --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 +} + +# Enable GPG signature check +function edit_gpg() +{ + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --msgbox "Enter with gpg minimized signing key." 5 50 + $EDITOR $MK_GPGFILEKEY +} + +# Enable MD5SUM signature check +function edit_md5sum() +{ + echo "none" +} + +#-------------------------------------------------------------------- +# Main functions +#-------------------------------------------------------------------- +# Create new Slackbuild +function create_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 vadiables + set_source_test + [ $? -eq 100 ] && return 100 + + # Get source file + 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 +} + +# Open mkslackbuild dialog input +function open_mkslackbuild_dialog() +{ + MKSLACKBUILD=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --title " Select source file name (use spaces to select): " \ + --fselect "$BASEDIR/" 10 70` + [ $? -ne 0 ] && return 100 + + open_mkslackbuild + [ $? -eq 100 ] || return 100 +} + +# Open mkslackbuild +function 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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --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 +} + +# Save mkSlackbuild +function save_mkslackbuild() +{ + dialog --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --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 + + [ -s $DEPENDENCY_LIST ] && cp $DEPENDENCY_LIST $BASEDIR/slack-required +} + +# Edit Menu +function 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 \"mkSlackBuild $PROG_VERSION [$MK_PKGNAME]\" --ok-label \"Edit\" --cancel-label \"Main Menu\" --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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --radiolist "Change status from $SELECT" 0 0 0 "on" "enable section" "on" "off" "desable section" "off"` + elif [ "$FLAG" = "off" ]; then + SECTION_FLAG[$INDEX]=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" --radiolist "Change status from $SELECT" 0 0 0 "on" "enable section" "off" "off" "desable section" "on"` + fi + if [ "${SECTION_FLAG[$INDEX]}" = "on" -o "${SECTION_FLAG[$INDEX]}" = "all" ]; then + $MK_EDITOR ${SELECT}_${MK_PKGNAME}.mkbuild + fi + fi + done +} + +# Test Menu +function test_menu() +{ + local ANST=0 + local SECTION=0 + local EDITMENU="" + + # 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 + + EDITMENU="all \"SlackBuild\" $EDITMENU" + + while [ "$ANST" != "1" ]; do + SECTION=`eval "dialog --stdout --backtitle \"mkSlackBuild $PROG_VERSION [$MK_PKGNAME]\" --cancel-label \"Exit\" --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 "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "no debug" --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 +} + +# Dependency Menu +function menu_dependency() +{ + local ANSD=11 + while [ $ANSD -ne 0 ]; do + ANSD=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Main Menu" --menu "Main Menu:" 0 0 0 \ + "1" "Edit Dependency List" \ + "2" "Test Dependency List" \ + "0" "Main Menu"` + + [ $? -ne 0 ] && ANSD=0 + + case $ANSD in + 1) + edit_dependency + ;; + 2) + test_dependency + ;; + esac + + done +} + +# Dependency list edit +function edit_dependency() +{ + 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 +} + +# Check dependency and comment not found dependencies +function test_dependency() +{ + local DEP_LIST="" + + if [ -s $DEPENDENCY_LIST ]; then + for i in `grep '^[^#]' $DEPENDENCY_LIST | 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 \"mkSlackBuild $PROG_VERSION [$MK_PKGNAME]\" --title \" Dependency install check \" --cancel-label \"Continue\" --checklist \"Select packages to remove from dependency list:\" 20 45 13 $DEP_LIST"` + + 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 +} + +# +#-------------------------------------------------------------------- +# Start Program +#-------------------------------------------------------------------- +# +# Turn off debug +set +x +# Start variables +PROG_VERSION=0.9.10 +LANG=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 [ -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 + +[ $# -ne 0 ] && MKSLACKBUILD=$1 + +# Clear dialog +dialog --clear + +# 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_LIMITRATE="120k" +MK_SOURCEDIR=\`pwd\` +MK_ARCH="i468" +#MK_URL="ftp://localhost" +EOF +) +fi +source ~/.mkslackbuild +MK_SOURCEDIR=${MK_SOURCEDIR:=$BASEDIR} +MK_ARCH=${MK_ARCH:="i486"} +#MK_MD5SUM_EXT="md5sum" + +# Config Author +if [ "$MK_AUTHOR" = "[[AUTHOR NAME]]" ]; then + edit_author +fi + +if [ ! -z $MKSLACKBUILD ]; then + open_mkslackbuild +fi + +ANS0=11 +while [ $ANS0 -ne 0 ]; do + if [ -z $MK_PKGNAME ]; then + ANS0=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \ + "1" "Create New SlackBuild" \ + "2" "Open edited SlackBuild" \ + "0" "Exit"` + EXIT_STATUS=$? + else + ANS0=`dialog --stdout --backtitle "mkSlackBuild $PROG_VERSION [$MK_PKGNAME]" \ + --cancel-label "Exit" --menu "Main Menu:" 0 0 0 \ + "1" "Create New SlackBuild" \ + "2" "Open MkSlackBuild" \ + "3" "Edit Sections" \ + "4" "Dependency Menu" \ + "5" "Test Script" \ + "6" "View Doc-Files" \ + "0" "Exit and Save..."` + EXIT_STATUS=$? + fi + + if [ $EXIT_STATUS -ne 0 ]; then + ANS0=0 + fi + + case $ANS0 in + 1) + create_slackbuild + [ $? -eq 100 ] && MK_PKGNAME="" + ;; + 2) + open_mkslackbuild_dialog + [ $? -eq 100 ] && MK_PKGNAME="" + ;; + 3) + edit_menu + ;; + 4) + menu_dependency + ;; + 5) + test_menu + ;; + 6) + view_docs + ;; + *) + echo "Exit..." + ;; + esac +done + +if [ ! -z $MK_PKGNAME ]; then + MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild + save_mkslackbuild + mount_slackbuild +fi + +mk_exit 0 +# _________________________________END_______________________________ |