aboutsummaryrefslogtreecommitdiff
path: root/trunk/src/mkbuild
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/mkbuild')
-rwxr-xr-xtrunk/src/mkbuild1042
1 files changed, 1042 insertions, 0 deletions
diff --git a/trunk/src/mkbuild b/trunk/src/mkbuild
new file mode 100755
index 0000000..eb8b6a7
--- /dev/null
+++ b/trunk/src/mkbuild
@@ -0,0 +1,1042 @@
+#!/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.
+#
+# Turn off debug
+set +x
+#
+# Version 0.9.14
+PROG_VERSION=0.9.14
+
+#--------------------------------------------------------------------
+# 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 "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title " $1 " --textbox $2 20 75
+}
+
+# Exit function
+function mk_exit()
+{
+ clean_all
+ clear
+ 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 "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
+}
+
+# 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 "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`
+}
+
+#--------------------------------------------------------------------
+# Edit functions
+#--------------------------------------------------------------------
+# Edit authot, Initials and editor
+function edit_author()
+{
+ 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
+
+ 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
+}
+
+# Edit source URL
+function edit_url()
+{
+ 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
+}
+
+# Edit source name
+function 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
+}
+
+# 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 "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}'`
+}
+
+# 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 "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}'`
+}
+
+# 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 "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? " --title "$MK_TITLE" --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? " --title "$MK_TITLE" --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 \"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
+}
+
+# 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 \"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'`"
+}
+
+# Edit compiler architecture
+function edit_arch()
+{
+ 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
+}
+
+#--------------------------------------------------------------------
+# 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
+ [ -z "$2" ] && return 0
+ 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"
+ #[ ! -z $MK_MD5SUM_EXT ] && change_strings "MD5SUM EXTENSION" "$MK_MD5SUM_EXT"
+}
+
+# Mount final SlackBuild
+function mount_slackbuild()
+{
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD" 5 45
+
+ 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 "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" --title "$MK_TITLE" --infobox "SlackBuild save in $SLACKBUILD.test" 5 45
+
+ 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 "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
+}
+
+
+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
+ fi
+ done
+}
+
+# Configure test source variables
+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 "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
+}
+
+# Enable GPG signature check
+function edit_gpg()
+{
+ dialog --backtitle "Make SlackBuild $PROG_VERSION [$MK_PKGNAME]" \
+ --title "$MK_TITLE" --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 variables
+ set_source_test
+ [ $? -eq 100 ] && return 100
+
+ # 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
+
+ # 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 "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
+}
+
+# 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 "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
+}
+
+# Save mkSlackbuild
+function 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
+
+ [ -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 \"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 status from $SELECT" 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 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
+ 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
+ fi
+ done
+}
+
+# Edit md5sum
+function md5sum_edit()
+{
+ local SELECT=0
+ local FILE=$1
+
+ 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" "{SRC//.tar.[[SOURCE EXTENSION]]}.[[MD5SUM EXTENSION]]" on "2" "SRC.[[MD5SUM EXTENSION]]" 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
+}
+
+# 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 \"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
+}
+
+# Dependency Menu
+function menu_dependency()
+{
+ 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" \
+ "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 | 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
+}
+
+#
+#--------------------------------------------------------------------
+# Start Program
+#--------------------------------------------------------------------
+#
+# Start variables
+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 [ -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
+
+# 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=[[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
+
+if [ ! -z $MKSLACKBUILD ]; then
+ MK_TITLE=" Open mkSlackBuild "
+ open_mkslackbuild
+fi
+
+MK_TITLE=""
+
+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 edited SlackBuild" \
+ "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 Sections" \
+ "2" "Dependency Menu" \
+ "3" "Test Script" \
+ "4" "View Doc-Files" \
+ "0" "Exit and Save..."`
+
+ if [ $? -ne 0 ]; then
+ ANS0=0
+ fi
+ case $ANS0 in
+ 1)
+ MK_TITLE=" Edit Menu "
+ edit_menu
+ ;;
+ 2)
+ MK_TITLE=" Dependency Menu "
+ menu_dependency
+ ;;
+ 3)
+ MK_TITLE=" Test Menu "
+ test_menu
+ ;;
+ 4)
+ MK_TITLE=" View Docs "
+ view_docs
+ ;;
+ *)
+ echo "Exit..."
+ ANS0=0
+ ;;
+ esac
+ MK_TITLE=""
+ fi
+done
+
+if [ ! -z $MK_PKGNAME ]; then
+ MKSLACKBUILD=$BASEDIR/$MK_PKGNAME.mkslackbuild
+ save_mkslackbuild
+ mount_slackbuild
+fi
+
+mk_exit 0
+# _________________________________END_______________________________