diff --git a/etc/config.sh/petsc b/etc/config.sh/petsc
index 937d4ff50824dac6bd3b56accf86c26758cce4ad..3104702764723b2e65d50df1e95941dbfc5c4266 100644
--- a/etc/config.sh/petsc
+++ b/etc/config.sh/petsc
@@ -43,6 +43,16 @@ then
 
     unset petsc_version
 
+elif [ "$1" = "-force" ]
+then
+    # Forced command-line sourcing
+
+    if output="$($WM_PROJECT_DIR/bin/tools/lib-dir -sh $PETSC_ARCH_PATH 2>/dev/null)"
+    then
+        eval "$output"
+    fi
+
+    unset petsc_version output
 fi
 
 #------------------------------------------------------------------------------
diff --git a/wmake/scripts/have_petsc b/wmake/scripts/have_petsc
index c4665c7322e00084618b38db542c6e3243e0282d..f3f301b420d18488b6115efa304760913d473576 100644
--- a/wmake/scripts/have_petsc
+++ b/wmake/scripts/have_petsc
@@ -55,9 +55,17 @@ echo_petsc()
 have_petsc()
 {
     local header library static label settings warn
-    # warn="==> skip petsc"
+    warn="==> skip petsc"
 
-    # Basic setup/checks
+    # Basic setup/checks. Prefer current environment value? (TDB)
+    if [ ! -d "$PETSC_ARCH_PATH" ]
+    then
+        settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/petsc) || {
+            [ -n "$warn" ] && echo "$warn (no config.sh/petsc settings)"
+            return 1
+        }
+        . $settings
+    fi
     if isNone "$PETSC_ARCH_PATH"
     then
         [ -n "$warn" ] && echo "$warn (not available)"