pidgin/win32/nsis/generate_gtk_zip.sh

changeset 36308
4432aff3b90d
parent 36106
54633b4e4a98
parent 36307
714ba418d0aa
child 37901
41e45e18f3b2
child 39251
c6a81a49ef65
--- a/pidgin/win32/nsis/generate_gtk_zip.sh	Wed Dec 17 09:37:56 2014 -0500
+++ b/pidgin/win32/nsis/generate_gtk_zip.sh	Sat Jan 03 17:50:28 2015 -0500
@@ -20,6 +20,7 @@
 CERT_PATH=`readlink -f $PIDGIN_BASE/pidgin/win32/nsis`/cacert.pem
 #Subdirectory of $STAGE_DIR
 INSTALL_DIR=Gtk
+SRC_INSTALL_DIR=src_install
 CONTENTS_FILE=$INSTALL_DIR/CONTENTS
 PIDGIN_VERSION=$( < $PIDGIN_BASE/VERSION )
 
@@ -27,6 +28,7 @@
 BUNDLE_VERSION=2.24.18.0
 BUNDLE_SHA1SUM="5957b0bf3f5e520863cf8ba64db7592383e9dd42"
 ZIP_FILE="$PIDGIN_BASE/pidgin/win32/nsis/gtk-runtime-$BUNDLE_VERSION.zip"
+SRC_ZIP_FILE="$PIDGIN_BASE/pidgin/win32/nsis/gtk-runtime-$BUNDLE_VERSION-src.zip"
 #BUNDLE_URL="https://pidgin.im/win32/download_redir.php?version=$PIDGIN_VERSION&gtk_version=$BUNDLE_VERSION&dl_pkg=gtk"
 BUNDLE_URL="https://pidgin.im/~twasilczyk/win32/gtk-runtime-$BUNDLE_VERSION.zip"
 
@@ -92,6 +94,8 @@
 DOWNLOAD_HOST="https://pidgin.im/~twasilczyk/win32/runtime-deps/"
 
 ALL=""
+#Format for packages is "binary_url name version binary_validation src_url src_validation"
+#TODO: Fix packages SRC handling
 
 ARC_ATK="${DOWNLOAD_HOST}mingw32-atk-2.8.0-1.5.noarch.rpm ATK 2.8.0-1.5 sha1sum:0c682eadc299963aaa5d7998d655e46ead7d7515"
 ALL+="ARC_ATK "
@@ -280,11 +284,15 @@
 ALL+="ARC_ZLIB "
 
 mkdir -p $STAGE_DIR
+mkdir -p $STAGE_DIR/src
 cd $STAGE_DIR
 
 rm -rf $INSTALL_DIR
 mkdir $INSTALL_DIR
 
+rm -rf $SRC_INSTALL_DIR
+mkdir $SRC_INSTALL_DIR
+
 #new CONTENTS file
 echo Bundle Version $BUNDLE_VERSION > $CONTENTS_FILE
 
@@ -334,27 +342,16 @@
 	fi
 }
 
-function download_and_extract {
-	URL=${1%%\ *}
-	VALIDATION=${1##*\ }
-	NAME=${1%\ *}
-	NAME=${NAME#*\ }
-	FILE=$(basename $URL)
-	MINGW_DIR="usr/i686-w64-mingw32/sys-root/mingw"
-	MINGW_DIR_TOP="usr"
-	if [ ! -e $FILE ]; then
-		echo "Downloading $NAME"
-		download "$URL" "$FILE" || exit 1
-	else
-		echo "Extracting $NAME"
-	fi
+function validate_file {
+	VALIDATION=$1
+	FILE=$2
 	VALIDATION_TYPE=${VALIDATION%%:*}
 	VALIDATION_VALUE=${VALIDATION##*:}
-	if [ $VALIDATION_TYPE == 'sha1sum' ]; then
-		CHECK_SHA1SUM=`sha1sum $FILE`
-		CHECK_SHA1SUM=${CHECK_SHA1SUM%%\ *}
-		if [ "$CHECK_SHA1SUM" != "$VALIDATION_VALUE" ]; then
-			echo "sha1sum ($CHECK_SHA1SUM) for $FILE doesn't match expected value of $VALIDATION_VALUE"
+	if [ $VALIDATION_TYPE == 'sha1sum' -o $VALIDATION_TYPE == 'sha256sum' ]; then
+		CHECK_SUM=`$VALIDATION_TYPE "$FILE"`
+		CHECK_SUM=${CHECK_SUM%%\ *}
+		if [ "$CHECK_SUM" != "$VALIDATION_VALUE" ]; then
+			echo "$VALIDATION_TYPE ($CHECK_SUM) for $FILE doesn't match expected value of $VALIDATION_VALUE"
 			exit 1
 		fi
 	elif [ $VALIDATION_TYPE == 'gpg' ]; then
@@ -364,36 +361,99 @@
 		fi
 		#Use our own keyring to avoid adding stuff to the main keyring
 		#This doesn't use $GPG_SIGN because we don't this validation to be bypassed when people are skipping signing output
-		GPG_BASE="gpg -q --keyring $STAGE_DIR/$VALIDATION_VALUE-keyring.gpg" 
-		if [[ ! -e $STAGE_DIR/$VALIDATION_VALUE-keyring.gpg \
+		GPG_BASE="gpg -q --keyring $STAGE_DIR/$VALIDATION_VALUE-keyring.gpg"
+		if [[ ! -e "$STAGE_DIR/$VALIDATION_VALUE-keyring.gpg" \
 				|| `$GPG_BASE --list-keys "$VALIDATION_VALUE" > /dev/null && echo -n "0"` -ne 0 ]]; then
-			touch $STAGE_DIR/$VALIDATION_VALUE-keyring.gpg
-		       	$GPG_BASE --no-default-keyring --keyserver pgp.mit.edu --recv-key "$VALIDATION_VALUE" || exit 1
+			touch "$STAGE_DIR/$VALIDATION_VALUE-keyring.gpg"
+			$GPG_BASE --no-default-keyring --keyserver pgp.mit.edu --recv-key "$VALIDATION_VALUE" || exit 1
 		fi
 		$GPG_BASE --verify "$FILE.asc" || (echo "$FILE failed signature verification"; exit 1) || exit 1
 	else
 		echo "Unrecognized validation type of $VALIDATION_TYPE"
 		exit 1
 	fi
-	EXTENSION=${FILE##*.}
-	#This is an OpenSuSE build service RPM
-	if [ $EXTENSION == 'rpm' ]; then
-		rm -rf $MINGW_DIR_TOP
-		$BSDCPIO --quiet -f etc/fonts/conf.d -di < $FILE || exit 1
-		rpm_install
-		rm -rf $MINGW_DIR_TOP
-	else
-		unzip -q $FILE -d $INSTALL_DIR || exit 1
+}
+
+function download_and_validate {
+	PREFIX=$1
+	URLS=$2
+	VALIDATIONS=$3
+	EXTRACT=$4
+	OLD_IFS=$IFS
+	IFS='|'
+	URL_SPLIT=($URLS)
+	VALIDATION_SPLIT=($VALIDATIONS)
+	IFS=$OLD_IFS
+
+	if [ ${#URL_SPLIT[@]} -ne ${#VALIDATION_SPLIT[@]} ]; then
+		echo "URL and validation counts don't match for $VAL"
+		exit 1
+	fi
+
+	if [ "x$PREFIX" != "x" ]; then
+		mkdir -p "$PREFIX"
 	fi
+
+	LEN=${#URL_SPLIT[@]}
+	for (( i = 0; i < ${LEN}; i++ )); do
+		URL=${URL_SPLIT[$i]}
+		VALIDATION=${VALIDATION_SPLIT[$i]}
+		FILE=${PREFIX}$(basename $URL)
+		if [ ! -e "$FILE" ]; then
+			echo Downloading $FILE for $NAME ...
+			download "$URL" "$FILE" || exit 1
+		else
+			echo "Extracting $NAME"
+		fi
+		validate_file "$VALIDATION" "$FILE"
+		EXTENSION=${FILE##*.}
+		#This is an OpenSuSE build service RPM
+		if [ $EXTRACT == "1" ]; then
+			if [ $EXTENSION == 'rpm' ]; then
+				rm -rf $MINGW_DIR_TOP
+				$BSDCPIO --quiet -f etc/fonts/conf.d -di < $FILE || exit 1
+				rpm_install
+				rm -rf $MINGW_DIR_TOP
+			else
+				unzip -q "$FILE" -d "$INSTALL_DIR" || exit 1
+			fi
+		else
+			mkdir -p "$SRC_INSTALL_DIR/$PREFIX"
+			cp "$FILE" "$SRC_INSTALL_DIR/$FILE"
+		fi
+	done
+}
+
+function process_package {
+	SPLIT=($1)
+	URL=${SPLIT[0]}
+	NAME="${SPLIT[1]} ${SPLIT[2]}"
+	VALIDATION=${SPLIT[3]}
+	download_and_validate "" "$URL" "$VALIDATION" "1"
+
+#	SRC_URL=${SPLIT[4]}
+#	SRC_VALIDATION=${SPLIT[5]}
+#	download_and_validate "src/$NAME/" "$SRC_URL" "$SRC_VALIDATION" "0"
+
 	echo "$NAME" >> $CONTENTS_FILE
 }
 
+MINGW_DIR="usr/i686-w64-mingw32/sys-root/mingw"
+MINGW_DIR_TOP="usr"
+
 echo "Downloading and extracting components..."
 for VAL in $ALL
 do
 	VAR=${!VAL}
-	download_and_extract "$VAR"
+	SPLIT=($VAR)
+#	if [ ${#SPLIT[@]} -lt 6 ]; then
+	if [ ${#SPLIT[@]} -lt 4 ]; then
+		echo "$VAL has only ${#SPLIT[@]} attributes"
+		exit 1
+	fi
+	process_package "$VAR"
 done
+
 rm -rf $CPIO_DIR
 rm "$CERT_PATH"
 
@@ -422,6 +482,8 @@
 
 if [ "`$GPG_SIGN -K 2> /dev/null`" != "" ]; then
 	($GPG_SIGN -ab $ZIP_FILE && $GPG_SIGN --verify $ZIP_FILE.asc) || exit 1
+	(cd $SRC_INSTALL_DIR/src && zip -9 -r $SRC_ZIP_FILE *)
+	($GPG_SIGN -ab $SRC_ZIP_FILE && $GPG_SIGN --verify $SRC_ZIP_FILE.asc) || exit 1
 else
 	echo "Warning: cannot sign generated bundle"
 fi

mercurial