diff --git a/wmake/wmakeBuildInfo b/wmake/wmakeBuildInfo
index 5914b310735c874160cd6280e4c6478523ddb90c..cb86b267d049023dbe33d004162fa428aa00c492 100755
--- a/wmake/wmakeBuildInfo
+++ b/wmake/wmakeBuildInfo
@@ -1,9 +1,9 @@
-#!/bin/bash
+#!/bin/sh
 #------------------------------------------------------------------------------
 # =========                 |
 # \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
 #  \\    /   O peration     |
-#   \\  /    A nd           | Copyright (C) 2018 OpenCFD Ltd.
+#   \\  /    A nd           | Copyright (C) 2018-2019 OpenCFD Ltd.
 #    \\/     M anipulation  |
 #-------------------------------------------------------------------------------
 # License
@@ -26,7 +26,7 @@
 #     wmakeBuildInfo
 #
 # Description
-#     Print the version used when building the project
+#     Print the api/version and other build information for the project.
 #
 # Environment
 #     - WM_PROJECT_DIR
@@ -51,7 +51,7 @@ usage() {
 Usage: ${0##*/} [OPTION]
        ${0##*/} [-update] -filter FILE
 options:
-  -check        Compare make and meta information (exit 0 for no changes)
+  -cmp, -check  Compare make and meta information (exit 0 for no changes)
   -diff         Display differences between make and meta information
                 (exit code 0 for no changes)
   -dry-run      In combination with -update
@@ -96,7 +96,7 @@ do
     -h | -help*)
         usage
         ;;
-    -check)
+    -cmp | -check)
         optCheck=true
         ;;
     -diff)
@@ -156,12 +156,11 @@ fi
 
 #------------------------------------------------------------------------------
 
-# Variables
-declare -A makeInfo
-declare -A metaInfo
+# Variables - for portability, avoiding bash associative arrays
+unset make_info meta_info
 
-#
-# Populate makeInfo array
+
+# Populate make_* variables
 #
 #  - api    : from rules/General/general
 #  - patch  : cached value from previous make
@@ -177,10 +176,9 @@ declare -A metaInfo
 #
 # - Working on detached head.
 #   -> branch has value "HEAD" instead of something more readable.
-#
 getMakeInfo()
 {
-    if [ "${#makeInfo[*]}" -eq 4 ]
+    if [ -n "$make_info" ]
     then
         ##echo "use cached value for make info" 1>&2
         return 0
@@ -188,7 +186,7 @@ getMakeInfo()
     ##echo "get make info" 1>&2
 
     local api patch build branch
-    makeInfo=()
+    unset make_api make_patch make_branch make_build
 
     # (api) from WM_DIR/rules/General/general
     # - extract WM_VERSION = OPENFOAM=<digits>
@@ -211,15 +209,15 @@ getMakeInfo()
         branch="$(git --git-dir=$WM_PROJECT_DIR/.git rev-parse --abbrev-ref HEAD 2>/dev/null)"
     fi
 
-    makeInfo[api]="$api"
-    makeInfo[patch]="${patch:-0}"  # default is 0
-    makeInfo[branch]="$branch"
-    makeInfo[build]="$build"
+    make_api="$api"
+    make_patch="${patch:-0}"  # Default is 0 (unpatched)
+    make_branch="$branch"
+    make_build="$build"
+    make_info=true
 }
 
 
-#
-# Populate metaInfo array
+# Populate meta_* variables
 #
 #  - api    : from META-INFO/api-info
 #  - patch  : from META-INFO/api-info
@@ -229,10 +227,9 @@ getMakeInfo()
 # Failure modes:
 # - Directory, file or entry not found.
 #   -> corresponding entries are empty strings
-#
 getMetaInfo()
 {
-    if [ "${#metaInfo[*]}" -eq 4 ]
+    if [ -n "$meta_info" ]
     then
         ##echo "use cached value for meta info" 1>&2
         return 0
@@ -240,7 +237,7 @@ getMetaInfo()
     ##echo "get meta info" 1>&2
 
     local api patch build branch
-    metaInfo=()
+    unset meta_api meta_patch meta_branch meta_build
 
     if [ -d "$metaInfoDir" ]
     then
@@ -253,14 +250,14 @@ getMetaInfo()
         build="$(sed -ne 's@^build *= *\([^ ]*\).*@\1@p' $metaInfoDir/build-info 2>/dev/null)"
     fi
 
-    metaInfo[api]="$api"
-    metaInfo[patch]="${patch:-0}"  # default is 0
-    metaInfo[branch]="$branch"
-    metaInfo[build]="$build"
+    meta_api="$api"
+    meta_patch="${patch:-0}"  # Default is 0 (unpatched)
+    meta_branch="$branch"
+    meta_build="$build"
+    meta_info=true
 }
 
 
-#
 # Get api from rules/General/general
 #
 # Failure modes:
@@ -268,18 +265,17 @@ getMetaInfo()
 #   -> Fatal for building, but could be OK for a stripped down version
 #
 # Fallback. Get from api-info
-#
 getApi()
 {
     getMakeInfo
 
     # Local copy
-    local api="${makeInfo[api]}"
+    local api="${make_api}"
 
     if [ -z "$api" ]
     then
         getMetaInfo
-        api="${metaInfo[api]}"
+        api="${meta_api}"
     fi
 
     if [ -n "$api" ]
@@ -295,53 +291,69 @@ getApi()
 #
 # Failure modes:
 # - No patch information (can't find file etc).
-#
 getPatchLevel()
 {
     getMetaInfo
 
     # Local copy
-    local value="${metaInfo[patch]}"
+    local patch="${meta_patch}"
 
-    if [ -n "$value" ]
+    if [ -n "$patch" ]
     then
-        echo "$value"
+        echo "$patch"
     else
         return 1
     fi
 }
 
 
+#
 # Report make info
+#
 reportMakeInfo()
 {
     getMakeInfo
     getMetaInfo
 
-    local patch="${metaInfo[patch]}" # <- From meta-info only
-    makeInfo[patch]="${patch:=0}"    # Extra safety
-
     echo "make"
-    for key in api patch branch build
-    do
-        echo "    $key = ${makeInfo[$key]}"
-    done
+    echo "    api = ${make_api}"
+    echo "    patch = ${meta_patch:-0}"  # <- From meta-info only
+    echo "    branch = ${make_branch}"
+    echo "    build = ${make_build}"
 }
 
 
+#
 # Report meta info
+#
 reportMetaInfo()
 {
     getMetaInfo
 
-    local patch="${metaInfo[patch]}" # <- From meta-info only
-    metaInfo[patch]="${patch:=0}"    # Extra safety
-
     echo "meta"
-    for key in api patch branch build
-    do
-        echo "    $key = ${metaInfo[$key]}"
-    done
+    echo "    api = ${meta_api}"
+    echo "    patch = ${meta_patch:-0}"  # <- From meta-info only
+    echo "    branch = ${meta_branch}"
+    echo "    build = ${meta_build}"
+}
+
+
+# Report diff between make and meta info (single key).
+# Set diff_header prior to the first call.
+# $1 == key
+# $2 == make value
+# $3 == meta value
+unset diff_header
+_reportDiff()
+{
+    if [ -n "$diff_header" ]
+    then
+        echo "$diff_header"
+        unset diff_header
+    fi
+    echo "$1:"
+    echo "    make $2"
+    echo "    meta $3"
 }
 
 
@@ -350,50 +362,68 @@ reportMetaInfo()
 # $1 == verbose, print as diff. Silent otherwise
 checkDiff()
 {
-    local verbose="$1"
-    local key diff
+    local diff verbose
+
+    if [ "$1" = "verbose" ]
+    then
+        diff_header="Differences"
+        verbose=true
+    fi
 
     getMakeInfo
     getMetaInfo
 
-    for key in api patch branch build
-    do
-        if [ "${makeInfo[$key]}" != "${metaInfo[$key]}" ]
+    # api
+    if [ "${make_api}" != "${meta_api}" ]
+    then
+        diff=true
+
+        if [ -n "$verbose" ]
         then
-            case "$key" in
-            (branch | build)
-                # Only trigger when make info (branch, build) are non-empty
-                if [ -n "${makeInfo[$key]}" ]
-                then
-                    diff="$diff $key"
-                fi
-
-                ;;
-            (*)
-                diff="$diff $key"
-                ;;
-            esac
+            _reportDiff "api" "${make_api}" "${meta_api}"
         fi
-    done
+    fi
 
-    if [ "$verbose" = verbose ] && [ -n "$diff" ]
+    # patch
+    if [ "${make_patch}" != "${meta_patch}" ]
     then
-        echo "Differences"
-        for key in $diff
-        do
-            echo "$key:"
-            echo "     make ${makeInfo[$key]}"
-            echo "     meta ${metaInfo[$key]}"
-        done
+        diff=true
+
+        if [ -n "$verbose" ]
+        then
+            _reportDiff "patch" "${make_patch}" "${meta_patch}"
+        fi
+    fi
+
+    # branch - only test when make info is non-empty
+    if [ -n "${make_branch}" ] && [ "${make_branch}" != "${meta_branch}" ]
+    then
+        diff=true
+
+        if [ -n "$verbose" ]
+        then
+            _reportDiff "branch" "${make_branch}" "${meta_branch}"
+        fi
+    fi
+
+    # build - only test when make info is non-empty
+    if [ -n "${make_build}" ] && [ "${make_build}" != "${meta_build}" ]
+    then
+        diff=true
+
+        if [ -n "$verbose" ]
+        then
+            _reportDiff "build" "${make_build}" "${meta_build}"
+        fi
     fi
 
     # No diffs, but never permit entirely empty values for build.
-    test -z "$diff" || test -z "${makeInfo[build]}${metaInfo[build]}"
+    test -z "$diff" || test -z "${make_build}${meta_build}"
 }
 
 
 #
-# Update metaInfo (on disk) based on the makeInfo
+# Update meta info (on disk) based on the make info
 #
 performUpdate()
 {
@@ -401,16 +431,16 @@ performUpdate()
     getMetaInfo
 
     # Local copies of the make info
-    local api="${makeInfo[api]}"
-    local branch="${makeInfo[branch]}"
-    local build="${makeInfo[build]}"
-    local patch="${makeInfo[patch]}"
+    local api="${make_api}"
+    local branch="${make_branch}"
+    local build="${make_build}"
+    local patch="${make_patch}"
 
     # If any of the make-info are empty (bad),
     # use the meta-info to avoid spurious changes
-    [ -n "$api" ] || api="${metaInfo[api]}"
-    [ -n "$branch" ] || branch="${metaInfo[branch]}"
-    [ -n "$build" ] || build="${metaInfo[build]}"
+    [ -n "$api" ] || api="${meta_api}"
+    [ -n "$branch" ] || branch="${meta_branch}"
+    [ -n "$build" ] || build="${meta_build}"
 
     # Fallback to WM_PROJECT_VERSION alone
     [ -n "$build" ] || build="${WM_PROJECT_VERSION:-unknown}"
@@ -419,12 +449,11 @@ performUpdate()
 
     # build-info
     outputFile="$metaInfoDir/build-info"
-    if [ "$branch" != "${metaInfo[branch]}" ] || \
-       [ "$build" != "${metaInfo[build]}" ] || \
-       [ "$patch" != "${metaInfo[patch]}" ]
+    if [ "$branch" != "${meta_branch}" ] || \
+       [ "$build" != "${meta_build}" ] || \
+       [ "$patch" != "${meta_patch}" ]
     then
-        patch="${metaInfo[patch]}"      # <- From meta-info only
-        : "${patch:=0}"                 # Extra safety
+        patch="${meta_patch:-0}"        # <- From meta-info only
 
         if [ -n "$optDryRun" ]
         then
@@ -441,10 +470,9 @@ performUpdate()
 
     # api-info
     outputFile="$metaInfoDir/api-info"
-    if [ "$api" != "${metaInfo[api]}" ]
+    if [ "$api" != "${meta_api}" ]
     then
-        patch="${metaInfo[patch]}"      # <- From meta-info only
-        : "${patch:=0}"                 # Extra safety
+        patch="${meta_patch:-0}"        # <- From meta-info only
 
         if [ -n "$optDryRun" ]
         then
@@ -461,8 +489,7 @@ performUpdate()
 
 
 #
-# Update metaInfo (on disk) based on the makeInfo
-# This is the
+# Update meta info (on disk) based on the make info
 #
 performFiltering()
 {
@@ -477,11 +504,10 @@ performFiltering()
     getMetaInfo
 
     # Local copies of the make info
-    local api="${makeInfo[api]}"
-    local branch="${makeInfo[branch]}"
-    local build="${makeInfo[build]}"
-    local patch="${metaInfo[patch]}"   # <- From meta-info only
-    : "${patch:=0}"                    # Extra safety
+    local api="${make_api}"
+    local branch="${make_branch}"
+    local build="${make_build}"
+    local patch="${meta_patch:-0}"  # <- From meta-info only
 
 
     # If any of the make-info are empty (bad),
@@ -492,19 +518,20 @@ performFiltering()
 
     if [ -z "$api" ]
     then
-        api="${metaInfo[api]}"
+        api="${meta_api}"
         api="${api:-0}"  # integer value
     fi
 
     # branch/build could be missing for non-git
     if [ -z "$branch" ]
     then
-        branch="${metaInfo[branch]}"
+        branch="${meta_branch}"
         branch="${branch:-unknown}"
     fi
+
     if [ -z "$build" ]
     then
-        build="${metaInfo[build]}"
+        build="${meta_build}"
         # Fallback to WM_PROJECT_VERSION
         build="${build:-${WM_PROJECT_VERSION:-unknown}}"
     fi
@@ -523,7 +550,7 @@ performFiltering()
 
 #------------------------------------------------------------------------------
 
-# Dispatching
+# Dispatch
 
 if [ -n "$optCheck" ]
 then