# DEFAULT_VERSION="12.2"
# Temporary folder
-TMP="/tmp"
+TMP="/tmp/simplepkg"
#---------------------------------------------------------------------
# MKBUILD AND CREATEPKG SECTION
ERROR_PATCH=40 # patch error
ERROR_VCS=41 # cvs error
ERROR_MKDIR=42 # make directory error
+ ERROR_MANIFEST=43 # manifest error
# Slackbuilds error codes ** not change **
# Commum error codes
eecho $error "$BASENAME: error downloading $2 source from version control system" ;;
$ERROR_MKDIR)
eecho $error "$BASENAME: make directory $2 error, aborting" ;;
+ $ERROR_MANIFEST)
+ eecho $error "$BASENAME: problem with Manifest file, aborting" ;;
#
# General errors
function check_gnupg {
- # check if there's a keyring
+ # setup gnupg keyring if needed
# usage: check_gnupg [username]
local user="$1" home
}
+function rmd160sum {
+
+ # computes RIPEMD-160 message digest
+ # usage: rmd160sum <file>
+
+ local sum file="$1"
+
+ if [ ! -e "$file" ]; then
+ return 1
+ fi
+
+ sum="`openssl rmd160 $file | awk '{ print $2 }'`"
+ echo "$sum $file"
+
+}
+
+function gethash {
+
+ # get a file's hash
+ # usage: gethash <algorithm> <file>
+
+ if [ ! -e "$2" ]; then
+ return 1
+ fi
+
+ $1sum $file | awk '{ print $1 }'
+
+}
+
+function file_size {
+
+ # get file size
+ # usage: filesize <file>
+
+ if [ ! -e "$1" ]; then
+ return 1
+ fi
+
+ wc -c $file | awk '{ print $1 }'
+
+}
+
+function file_extension {
+
+ # output file extension
+ # usage: filesize <filename>
+
+ echo $1 | sed -e 's/.*\.\(.*\)$/\1/'
+
+}
+
function check_installed {
# checks if a package is installed
ERROR_MD5=34; ERROR_CONF=35; ERROR_HELP=36
ERROR_TAR=37; ERROR_MKPKG=38; ERROR_GPG=39
ERROR_PATCH=40; ERROR_VCS=41; ERROR_MKDIR=42
+ERROR_MANIFEST=43;
</error_codes>
<start_structure> off
</git_source>
<md5sum_check> off
+# MD5 checksum
MD5SUM_URL="[[MD5SUM CODE]]"
if [ ${#MD5SUM_URL} -eq 32 ]; then
fi
</patch_source>
+<manifest_check> off
+# Check Manifest file
+if [ -e "$CWD/Manifest" ]; then
+
+ for MANIFEST_LINE in `grep -E -v "^(MKBUILD|SLACKBUILD)" $CWD/Manifest`; do
+
+ MANIFEST_FILE="`echo $MANIFEST_LINE | awk '{ print $2 }'`"
+ if [ -e "$SRC_DIR/$MANIFEST_FILE" ]; then
+ MANIFEST_FILE="$SRC_DIR/$MANIFEST_FILE"
+ else
+ MANIFEST_FILE="`find $CWD -name $MANIFEST_FILE`"
+ fi
+
+ if [ ! -e "$MANIFEST_FILE" ]; then
+ continue
+ fi
+
+ SIZE_SRC="`wc -c $MANIFEST_FILE`"
+ SIZE_MANIFEST="`echo $MANIFEST_LINE | awk '{ print $3 }`"
+
+ # Check source code size
+ if [ "$SIZE_SRC" != "$SIZE_MANIFEST" ]; then
+ echo "SIZE Manifest: $SIZE_MANIFEST; SIZE $SRC: $SIZE_SRC"
+ exit $ERROR_MANIFEST
+ fi
+
+ # Check source code integrity
+ for ALGO in md5 sha1 sha256 sha512 rmd160; do
+ if [ $ALGO = "rmd160" ]; then
+ ALGO_SRC="`openssl rmd160 $MANIFEST_FILE | awk '{ print $1 }'`"
+ else
+ ALGO_SRC="`"$ALGO"sum $MANIFEST_FILE | awk '{ print $1 }'`"
+ fi
+ ALGO_MANIFEST=$(echo $MANIFEST_LINE | sed 's/.* $ALGO //' | awk '{ print $1 }')
+ if [ "$ALGO_SRC" == "$ALGO_MANIFEST" ]; then
+ echo "$ALGO Manifest: $ALGO_MANIFEST; $ALGO $SRC: $ALGO_SRC"
+ exit $ERROR_MANIFEST
+ fi
+ done
+
+ done
+
+else
+ exit $ERROR_MANIFEST
+fi
+</manifest_check>
+
<files_permissions> off
# Set permissions
chown -R root:root .
off: gpg_signature_check
on: untar_source
off: patch_source
+ on: manifest_check
on: configure
on: make_package
on: install_package
OUTPUT=`find $SLACKBUILDS_DIR -iname $1.SlackBuild`
[ "$OUTPUT" != "" ] && EXIT_CODE=0 || EXIT_CODE=1
echo $OUTPUT
+
}
function info_builds {
svn_copy $WORK/$MKBUILD_NAME $MKBUILD_PATH
for i in `ls $WORK | grep -E -v '(SlackBuild|old|slack-required|.mkbuild$|.tmp$)\*{0,1}$'`; do
- svn_copy $WORK/$i $MKBUILD_PATH
+ if ! is_the_same $(dirname $MKBUILD_PATH) $WORK; then
+ svn_copy $WORK/$i $MKBUILD_PATH
+ else
+ svn_add $WORK/$i
+ fi
done
# remove stuff in old places
TMP="`eval_parameter TMP /tmp`"
}
+
+function file_metainfo {
+
+ # get integrity file metainformation
+ # usage: file_metainfo <file> <file_type>
+
+ local size algo sum="" file="$1" file_type="$2"
+
+ if [ ! -e "$file" ] || [ -z "$file_type" ]; then
+ return 1
+ fi
+
+ for algo in md5 sha1 sha256 sha512 rmd160; do
+ sum="$sum `echo $algo | tr '[:lower:]' '[:upper:]'` `gethash $algo $file`"
+ done
+
+ echo $file_type `basename $file` `file_size $file` $sum
+
+}
+
+function update_manifest_info {
+
+ # update Manifest meatinfo for a given file
+ # usage: update_manifest_info <file> <file_type>
+
+ local tmpfile file="$1" file_type="`echo $2 | tr '[:lower:]' '[:upper:]'`"
+
+ if [ ! -e "$file" ]; then
+ return 1
+ fi
+
+ if [ -z "$file_type" ]; then
+ file_type="`file_extension $file | tr '[:lower:]' '[:upper:]'`"
+ fi
+
+ # Update Manifest file
+ if [ ! -e "`dirname $file`/Manifest" ]; then
+ touch $WORK/Manifest
+ fi
+
+ # Set temporary file
+ tmpfile="`mktemp $TMP/mkbuild_manifest.XXXXXX`"
+
+ # Update metainfo
+ sed -e "/^$file_type `basename $file` /d" `dirname $file`/Manifest > $tmpfile
+ file_metainfo $file $file_type >> $tmpfile
+ sort $tmpfile > `dirname $file`/Manifest
+
+ rm -f $tmpfile
+
+}
+
+function update_manifest {
+
+ # Update Manifest file
+
+ # Update mkbuild metainformation
+ uptate_manifest_info $WORK/$MKBUILD_NAME
+
+ # Update slack-required information
+ uptate_manifest_info $WORK/slack-required
+
+ # Update SlackBuild information
+ update_manifest_info $WORK/$SLACKBUILD
+
+ # Update patches
+ for i in `find $WORK | grep -E '(.diff$|.diff.gz$|.diff.bz2$|.patch$|.patch.gz$|.patch.bz2$)\*{0,1}$'`; do
+ if [ ! -d "$WORK/$i" ]; then
+ update_manifest_info $i patch
+ fi
+ done
+
+ # Update miscelaneous information
+ for i in `find $WORK | grep -E -v '(SlackBuild|old|slack-required|.mkbuild$|.tmp$)\*{0,1}$'`; do
+ if [ ! -d "$WORK/$i" ]; then
+ update_manifest_info $i misc
+ fi
+ done
+
+}
+
# ----------------------------------------------------------------
#=============================
[ $VERBOSE -eq $on ] && echo -e "\nEdit others [[]] parameters ..."
change_others_parameters
+ # Update Manifest file
+ update_manifest
+
# Commit SlackBuild
[ $SUBMIT_SLACKBUILD -eq $on ] && submit_slackbuild