automation/product_builder/scripts/Utils.sh
branchRCL_2_1
changeset 383 c7f424dea615
--- /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
+}