#!/bin/bash
###############################################################################
# @@@ START COPYRIGHT @@@
#
# (C) Copyright 2007-2014 Hewlett-Packard Development Company, L.P.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
# @@@ END COPYRIGHT @@@
#
# File:         genverhdr.ksh
# Description:  Script to automate creation of files with version strings and values
#
# Created:      04 Apr 2007
# Language:     bash
#
#
###############################################################################

# bash colorize
bldwht='\e[1;37m' # White
txtrst='\e[0m'    # Text Reset

#---------
# usage()
#---------

function print_usage_line {

    printf "       ${bldwht}$1${txtrst}\n"
    printf "$2" | fmt -w 70 | xargs -i printf "               %s\n" "{}"
}

function usage {
   printf "${bldwht}"
   echo "genverhdr.ksh - a script to create a version string "
   echo "Usage:  genverhdr.ksh [-r] [-l label_string] [-e version_string]"
   printf "${txtrst}"
   echo
   print_usage_line "-branch" "Specifies branch id in the version string."
   print_usage_line "-build" "Specifies build id in the version string."
   print_usage_line "-date" "Specifies date in the version string."
   print_usage_line "-flavor" "Specifies build number in the version string."
   print_usage_line "-funbranch" "Specifies branch id in the version string."
   print_usage_line "-h" "print this usage message"
   print_usage_line "-major" "Specifies major number in the version string."
   print_usage_line "-minor" "Specifies minor number in the version string."
   print_usage_line "-update" "Specifies update number in the version string."
}

#---------------
# writeVerHdr()
#---------------

function writeVerHdr {

	umask 002

	cat > $TMPFILE <<EOF
/******************************************************************************
*
* File:         SCMBuildStr.h
* Description:  Autogenerated header file with current build version string
*               -- generated by genverhdr.ksh in build-scripts
* Language:     C
*
*******************************************************************************/

#ifndef SCMBUILDSTR_H
#define SCMBUILDSTR_H 1

/* unused for now */
static const char * SCMBuildStr = "";

/* product version */
#define VERS_PV_MAJ $major
#define VERS_PV_MIN $minor
#define VERS_PV_UPD $update

/* build version */
#define VERS_BR        $branch
#define VERS_BR2       $(echo $funbranch | sed -e "s:-:_dh_:g" -e "s:\.:_dt_:g" -e "s:\/:_sl_:g")
#define VERS_BV        $flavor
#define VERS_SCMBV     $build
#define VERS_SCMBV2    $(echo $build | sed -e "s:-:_dh_:g" -e "s:\.:_dt_:g" -e "s:\/:_sl_:g")

/* build date */
#define VERS_DT        $buildDate

#endif

EOF

	cat > $TMPFILEJ <<EOF
Implementation-Version-2: Release $major.$minor.$update
Implementation-Version-3: Build $flavor
Implementation-Version-4: [$build]
Implementation-Version-5: branch $branch
Implementation-Version-6: date $buildDate
EOF
	cat > $TMPFILEJ2 <<EOF
#!/bin/sh
echo "Implementation-Version-1: Version \$*"
cat \$MY_SQROOT/export/include/SCMBuildMan.mf
EOF
	chmod +x $TMPFILEJ2

	diff --brief --new-file $TMPFILE $hdrFile 2>&1 >/dev/null
	dh=$?
	diff --brief --new-file $TMPFILEJ $hdrFileJ 2>&1 >/dev/null
	dj=$?
	diff --brief --new-file $TMPFILEJ2 $hdrFileJ2 2>&1 >/dev/null
	dj2=$?
	if [[ $dh -ne 0 || $dj -ne 0 || $dj2 -ne 0 ]]; then
		echo "Creating file $hdrFile"
		cp -f $TMPFILE $hdrFile
		echo "Creating file $hdrFileJ"
		cp -f $TMPFILEJ $hdrFileJ
		echo "Creating file $hdrFileJ2"
		cp -f $TMPFILEJ2 $hdrFileJ2
	fi
	rm -f $TMPFILE $TMPFILEJ $TMPFILEJ2
}


#------------
# Main body
#------------

#  Define the name of the header file
typeset TMPFILE=$(mktemp /tmp/SCMBuildStr.XXX)
typeset TMPFILEJ=$(mktemp /tmp/SCMBuildStr.XXX)
typeset TMPFILEJ2=$(mktemp /tmp/SCMBuildStr.XXX)
typeset hdrFile="../export/include/SCMBuildStr.h"
typeset hdrFileJ="../export/include/SCMBuildMan.mf"
typeset hdrFileJ2="../export/include/SCMBuildJava.sh"

#  Input file
typeset VERFILE="../sqenvcom.sh"

#  Parse the command options:
typeset branch=
typeset build=
typeset flavor=
typeset funbranch=
typeset buildDate=
typeset major=
typeset minor=
typeset update=

while [ $# -gt 0 ]; do
   case $1 in
      -branch|-br)
         branch="${2}"
         shift
         ;;
      -build|-b)
         build="${2}"
         shift
         ;;
      -date|-d)
         buildDate="${2}"
         shift
         ;;
      -flavor|-f)
         flavor="${2}"
         shift
         ;;
      -funbranch|-fb)
         funbranch="${2}"
         shift
         ;;
      -major|-ma)
         major="${2}"
         shift
         ;;
      -minor|-mi)
         minor="${2}"
         shift
         ;;
      -update|-u)
         update="${2}"
         shift
         ;;
      -h|*)
         usage
         exit 1
         ;;
  esac
  shift
done

# Set some defaults
[ -z "$branch" ] && branch=BRANCH
[ -z "$build" ] && build=DEV
[ -z "$buildDate" ] && buildDate=$(date +%d%b%y)
[ -z "$flavor" ] && flavor=debug
[ -z "$funbranch" ] && funbranch=FUNBRANCH

VER_VARIABLES="TRAFODION_VER_MAJOR  TRAFODION_VER_MINOR  TRAFODION_VER_UPDATE"
if [[ -z "${major}${minor}${update}" ]]; then
	for AVAR in $VER_VARIABLES ; do
		if [[ -z "$( eval "echo \$$(eval "echo $AVAR")" )" ]]; then
			echo "ERROR: Environment variable is null : $AVAR"
			exit 1
		fi
	done
fi

[ -z "$major" ]  && major="$( grep TRAFODION_VER_MAJOR=  $VERFILE | cut -f2 -d=)"
[ -z "$minor" ]  && minor="$( grep TRAFODION_VER_MINOR=  $VERFILE | cut -f2 -d=)"
[ -z "$update" ] && update="$(grep TRAFODION_VER_UPDATE= $VERFILE | cut -f2 -d=)"

writeVerHdr
