BuildNumGenScript 

Category: Programming,

  1. Build number generator

Build number generator  

http://www.cobb.uk.net/Rex/build_info

Build number generation script(bash)

Shell script (build_info) to automatically track information about the last time the program was built (which can be displayed in an "About" screen for example). This can be used by the standard makefile in Cygwin or any of *nix

#!/bin/bash
#
# Create the build info header file
#
# Usage: build_info [--build] [build-info-data-file build-info-header-file]
#         build_info --create build-info-data-file title author [major-version minor-version build-sequence]
#         build_info --help
#
# Author: Graham Cobb 10-Dec-2001
#
#
USAGE="Usage: $0 [--help] [[--build] [build-info-data-file build-info-header-file]] [--create build-info-data-file title author [major-version minor-version build-sequence]]"
BUILD_INFO_VERSION=1

do_help=
do_create=
while [ $# -gt 0 ]; do
        case "$1" in
        --help)                shift ; do_help=y ;;
        --create)        shift ; do_create=y ;;
        --build)        shift ;;
        --)                shift ; break ;;
        -*)                echo "$0: ${1}: invalid option" >&2
                        echo "$USAGE" >& 2
                        exit 2 ;;
        *)                break ;;
        esac
done

if [ -n "$do_help" ]; then
        echo "This is build_info version $BUILD_INFO_VERSION"
        echo
        cat << HERE_EOF
    build_info --help

This help text.

    build_info [--build] [build-info-data-file build-info-header-file]

build_info creates a C header file which provides information about the build
environment for a program which can be used to display version information to
a user of the program.

The script creates build_info.h (by default) which defines the following
constants (macros):

BUILD_TITLE - The program title.  This can be any text string but is usually
either a short name (e.g. build_info) or a one-line description (e.g. 
"Create build information header file"). (*)

BUILD_AUTHOR - The program author.  This can be any text string but is usually
either the original author or the most recent modifier. (*)

BUILD_VER - The program version.  This is a text string of the form
<major-version>.<minor-version> (e.g. "10.3"). (*)

BUILD_VER_MAJOR - Major version number.  This is a numeric form of the major
version (e.g. 10). (*)

BUILD_VER_MINOR - Minor version number.  This is a numeric form of the minor
version (e.g. 3). (*)

BUILD_SEQ_NUM - The sequential build number.  This is a number which is
incremented by one each time the script is run. (*)

BUILD_SEQ_ID - Text form of the sequential build number.  This is BUILD_SEQ_NUM
as a string (e.g. "305"). (*)

BUILD_FULL_VER - Major, minor and build number: <major-version>.
<minor-version>-<build-number> (e.g. "10.3-305"). (*)

BUILD_BUILDER - Builder username.  This is the username of the user running
the script (e.g. "cobb").

BUILD_HOST - Builder hostname.  This is the hostname of the system running
the script.

BUILD_DATE - Build date.

BUILD_TIME - Build time

BUILD_YEAR - Year from build date (as a text string)

* - These items are derived from information stored in the build information
data file (build_info.dat by default).

    build_info --create build-info-data-file title author [major-version minor-version build-sequence]

The data file can be created using the --create option.  This requires the
data file name (usually build_info.dat), the title and the author.  The version
numbers and initial build sequence number can also be specified as required
(default is 1.0-0).
HERE_EOF
        exit 0
fi

if [ -n "$do_create" ]; then
# Create the data file
        if [ $# -lt 3 ]; then
                echo "$0: Create option must specify file name, title and author" >&2
                echo "$USAGE" >& 2
                exit 2 
        fi
        data_file=$1
        BUILD_TITLE=$2
        BUILD_AUTHOR=$3
        BUILD_VER_MAJOR=${4-1}
        BUILD_VER_MINOR=${5-0}
        BUILD_SEQ_NUM=${6-0}
        
        # Drop through to creating the data file
        
else
# Normal case: output the header file
        data_file=${1-build_info.dat}
        header_file=${1-build_info.h}

        # Read data file
        . $data_file
        BUILD_SEQ_NUM=$((BUILD_SEQ_NUM+1))
        HOSTNAME=`hostname`
        DATE=`date "+%d-%b-%Y"`
        TIME=`date "+%T %Z"`
        YEAR=`date "+%Y"`

        # Create header file
        echo "#define BUILD_TITLE \"${BUILD_TITLE}\"" >$header_file
        echo "#define BUILD_AUTHOR \"${BUILD_AUTHOR}\"" >>$header_file
        echo "#define BUILD_VER \"${BUILD_VER_MAJOR}.${BUILD_VER_MINOR}\"" >>$header_file
        echo "#define BUILD_VER_MAJOR ${BUILD_VER_MAJOR}" >>$header_file
        echo "#define BUILD_VER_MINOR ${BUILD_VER_MINOR}" >>$header_file
        echo "#define BUILD_SEQ_NUM ${BUILD_SEQ_NUM}" >>$header_file
        echo "#define BUILD_SEQ_ID \"${BUILD_SEQ_NUM}\"" >>$header_file
        echo "#define BUILD_FULL_VER \"${BUILD_VER_MAJOR}.${BUILD_VER_MINOR}-${BUILD_SEQ_NUM}\"" >>$header_file
        echo "#define BUILD_BUILDER \"${USER}\"" >>$header_file
        echo "#define BUILD_HOST \"${HOSTNAME}\"" >>$header_file
        echo "#define BUILD_DATE \"${DATE}\"" >>$header_file
        echo "#define BUILD_TIME \"${TIME}\"" >>$header_file
        echo "#define BUILD_YEAR \"${YEAR}\"" >>$header_file

fi

# Create data file
echo "BUILD_INFO_DATA_VERSION=${BUILD_INFO_VERSION}" >$data_file
echo "BUILD_TITLE=\"${BUILD_TITLE}\"" >>$data_file
echo "BUILD_AUTHOR=\"${BUILD_AUTHOR}\"" >>$data_file
echo "BUILD_VER_MAJOR=${BUILD_VER_MAJOR}" >>$data_file
echo "BUILD_VER_MINOR=${BUILD_VER_MINOR}" >>$data_file
echo "BUILD_SEQ_NUM=${BUILD_SEQ_NUM}" >>$data_file