--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/automation/product_builder/scripts/Utils.sh Thu Jul 30 13:29:28 2009 -0500
@@ -0,0 +1,301 @@
+#!/bin/bash
+#
+# utilities used by build scripts
+#
+# To include these utilites, add these lines to another script in the same folder.
+#
+# utilsDir=`dirname $0`
+# [ "$utilsDir" = "." ] && utilsDir=`pwd`
+# source $utilsDir/Utils.sh
+#
+
+program=$0
+
+
+# ------------------------------------------------------------------
+#
+# prepare to parse command line args
+# usage: prepare_parse_args arg1 [arg2] ...
+#
+# To parse command line args, add these lines after source $utilsDir/Utils.sh
+#
+# argsText="--ARG1:<varlue> --ARG2:<value>"
+# prepare_parse_args ARG1 ARG2 > /tmp/$$.parse_args
+# source /tmp/$$.parse_args
+# rm -f /tmp/$$.parse_args
+#
+
+function prepare_parse_args {
+ local name
+ local sedcmd='`echo $i | sed 's/[-a-zA-Z0-9_]*://'`'
+
+ echo 'for i in $*'
+ echo 'do'
+ echo ' case $i in'
+
+ for name in $*
+ do
+ echo " --$name:*)"
+ echo " $name=$sedcmd"
+ echo " echo $name=\$$name"
+ echo ' ;;'
+ done
+
+ echo ' --help)'
+ echo ' usage $argsText'
+ echo ' ;;'
+ echo ' --verbose)'
+ echo ' verbose=YES'
+ echo ' ;;'
+ echo ' *)'
+ echo ' ;;'
+ echo 'esac'
+ echo 'done'
+
+}
+
+this_step=0
+total_errors=0
+return_code=0
+
+#
+# count and print number of errors
+#
+function set_returncode {
+ this_step=$(($this_step+1))
+ if [ $1 -ne 0 ]; then
+ total_errors=$(($total_errors+1))
+ fi
+ return_code=$1
+ echo time = `date +%R`, step = $this_step, return code = $1, total errors = $total_errors
+}
+
+#
+# print error message and exit
+#
+function error_exit {
+ echo $program ERROR: $*
+ echo BUILD FAILED
+ set_returncode 1
+ exit $total_errors
+}
+
+#
+# print a command line
+# run the command line
+# remember the exit status
+#
+function run {
+ echo $*
+ $*
+ set_returncode $?
+}
+
+#
+# run and exit if non-zero return code
+#
+function must_run {
+ echo $*
+ $*
+ return_code=$?
+ set_returncode $return_code
+ if [ $return_code -ne 0 ]; then
+ exit $total_errors
+ fi
+}
+
+#
+# run the command line
+# remember the exit status
+#
+function run_quiet {
+ $*
+ set_returncode $?
+}
+
+#
+# show a usage message and exit
+#
+function usage {
+ echo usage: $program $* --help --verbose
+ set_returncode 1
+ exit $total_errors
+}
+
+# ------------------------------------------------------------------
+#
+# move or copy plugins from one layout to another
+# usage: move_or_copy_plugins <move_plugins | copy_plugins> [ -q] src_folder dst_folder map_file [map_file...]
+#
+function move_or_copy_plugins {
+ if [ "$1" != "move_plugins" -a "$1" != "copy_plugins" ]; then
+ echo 'usage: move_or_copy_plugins <move_plugins | copy_plugins> [ -q] src_folder dst_folder map_file [map_file...]'
+ return 1
+ fi
+
+ local move_or_copy=$1
+ shift
+
+ local verbose=1
+ if [ "$1" = "-q" ]; then
+ verbose=0
+ shift
+ fi
+
+ if [ $# -lt 3 ]; then
+ echo usage: $move_or_copy [ -q] src_folder dst_folder map_file [map_file...]
+ return 1
+ fi
+
+ local src_folder=$1
+ shift
+ local dst_folder=$1
+ shift
+
+ if [ ! -d $src_folder ]; then
+ echo ERROR: $move_or_copy: cannot find $src_folder
+ return 1
+ fi
+
+ [ -d $dst_folder/features ] || mkdir -p $dst_folder/features
+ [ -d $dst_folder/plugins ] || mkdir -p $dst_folder/plugins
+
+ local name
+ local name2
+ local have_x86_eol
+
+ for name in $*
+ do
+ if [ ! -f $name ]; then
+ echo ERROR: $move_or_copy: cannot find map file: $name
+ return 1
+ fi
+ done
+
+ for name in `cat $* | grep -v "^#" | grep , | cut -d"," -f2`
+ do
+ #echo $src_folder/${name} $src_folder/${name}_*
+ # Except for x86_64 plugins, plugins follow the convention that they do not have underscores in the name
+ # For example: org.eclipse.swt.win32.win32.x86_* matches
+ # org.eclipse.swt.win32.win32.x86_3.4.1.v3449c.jar
+ # org.eclipse.swt.win32.win32.x86_64.source_3.4.1.v3449c.jar
+ # org.eclipse.swt.win32.win32.x86_64_3.4.1.v3449c.jar
+ # Check for x86_64 and handle the exception
+ echo $name | grep x86$ > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ have_x86_eol=1
+ else
+ have_x86_eol=0
+ fi
+
+ features_or_plugins=`echo $name | cut -d"/" -f1`
+
+ # The x86 names may expand to more than one filename
+ for name2 in $src_folder/${name}_*
+ do
+ if [ "$name2" = '$src_folder/${name}_*' ]; then
+ # no match found
+ [ $verbose -eq 1 ] && echo WARNING: $move_or_copy: cannot find $src_folder/${name}
+ else
+ echo $name2 | grep x86_64 > /dev/null 2>&1
+ if [ $? -ne 0 -o $have_x86_eol -eq 0 ]; then
+ # do this if name2 does not have x86_64 OR if pattern does end in x86
+ if [ "$move_or_copy" = "move_plugins" ]; then
+ run mv $name2 $dst_folder/$features_or_plugins
+ else
+ run cp -pr $name2 $dst_folder/$features_or_plugins
+ fi
+ fi
+ fi
+ done
+ done
+}
+
+#
+# move plugins from one layout to another
+# usage: move_plugins [ -q] src_folder dst_folder map_file [map_file...]
+#
+function move_plugins {
+ move_or_copy_plugins move_plugins $*
+}
+
+#
+# copy plugins from one layout to another
+# usage: copy_plugins [ -q] src_folder dst_folder map_file [map_file...]
+#
+function copy_plugins {
+ move_or_copy_plugins copy_plugins $*
+}
+
+# ------------------------------------------------------------------
+#
+# clone mercurial repository
+# usage: hg_clone checkout_folder buildtags_file username password host revision repo [repo...]
+#
+function hg_clone {
+ if [ $# -lt 7 ]; then
+ echo usage: usage: hg_clone checkout_folder buildtags_file username password host revision repo [repo...]
+ set_returncode 1
+ return 1
+ fi
+
+ local checkout_folder=$1
+ shift
+ local buildtags_file=$1
+ shift
+ local username=$1
+ shift
+ local password=$1
+ shift
+ local host=$1
+ shift
+ local revision=$1
+ shift
+
+ if [ ! -d $checkout_folder ]; then
+ echo ERROR: hg_clone: cannot find $checkout_folder
+ set_returncode 1
+ return 1
+ fi
+
+ local url=http://${username}:${password}@$host
+
+ local name
+ for name in $*
+ do
+ if [ ! -d $checkout_folder/$name ]; then
+ run cd $checkout_folder
+ run mkdir -p $name
+ run rmdir $name
+ echo hg clone http://$host/$name $name
+ run_quiet hg clone $url/$name $name
+ else
+ run cd $checkout_folder/$name
+ echo hg pull http://$host/$name
+ run_quiet hg pull $url/$name
+ fi
+ run cd $checkout_folder/$name
+ run hg update -C $revision
+ echo http://$host/$name `hg identify` >> $buildtags_file
+ done
+}
+
+
+# ------------------------------------------------------------------
+#
+# remove update site URLs from feature.xml
+#
+
+function remove_update_site_urls {
+ local feature_xml=$1
+ local temp_file=$2
+
+ xml2oneline $feature_xml > $temp_file
+ grep tools.ext.nokia.com/updates $temp_file > /dev/null
+ if [ $? -eq 0 ]; then
+ echo remove update site tools.ext.nokia.com/updates from $feature_xml
+ grep -v tools.ext.nokia.com/updates $temp_file | grep -v \<url\> | grep -v \</url\> > $feature_xml
+ unix2dos $feature_xml
+ fi
+ rm -f $temp_file
+}