diff --git a/configure b/configure
index 542c9a79493d8f8c66249c742d8da21f105ba7ad..5c7315b9c073c3a174828f145616850772e98f09 100755
--- a/configure
+++ b/configure
@@ -250,6 +250,14 @@ set_all(){
     done
 }
 
+set_weak(){
+    value=$1
+    shift
+    for var; do
+        eval : \${$var:=$value}
+    done
+}
+
 pushvar(){
     for var in $*; do
         eval level=\${${var}_level:=0}
@@ -277,6 +285,14 @@ disable(){
     set_all no $*
 }
 
+enable_weak(){
+    set_weak yes $*
+}
+
+disable_weak(){
+    set_weak no $*
+}
+
 do_enable_deep(){
     for var; do
         enabled $var && continue
@@ -292,6 +308,11 @@ enable_deep(){
     enable $*
 }
 
+enable_deep_weak(){
+    do_enable_deep $*
+    enable_weak $*
+}
+
 enabled(){
     test "${1#!}" = "$1" && op== || op=!=
     eval test "x\$${1#!}" $op "xyes"