recursive feature dependency checking
authorMåns Rullgård <mans@mansr.com>
Sun, 11 Feb 2007 15:49:37 +0000 (15:49 +0000)
committerMåns Rullgård <mans@mansr.com>
Sun, 11 Feb 2007 15:49:37 +0000 (15:49 +0000)
Originally committed as revision 7930 to svn://svn.ffmpeg.org/ffmpeg/trunk

configure

index 66ace8c..359caf6 100755 (executable)
--- a/configure
+++ b/configure
@@ -216,6 +216,25 @@ set_all(){
     done
 }
 
+pushvar(){
+    for var in $*; do
+        eval level=\${${var}_level:=0}
+        eval ${var}_${level}="\$$var"
+        eval ${var}_level=$(($level+1))
+    done
+}
+
+popvar(){
+    for var in $*; do
+        eval level=\${${var}_level:-0}
+        test $level = 0 && continue
+        eval level=$(($level-1))
+        eval $var="\${${var}_${level}}"
+        eval ${var}_level=$level
+        eval unset ${var}_${level}
+    done
+}
+
 enable(){
     set_all yes $*
 }
@@ -258,10 +277,21 @@ disabled_any(){
 
 check_deps(){
     for cfg; do
+        enabled ${cfg}_checking && die "Circular dependency for $cfg."
+        disabled ${cfg}_checking && continue
+        enable ${cfg}_checking
+
         eval dep_all="\$${cfg}_deps"
         eval dep_any="\$${cfg}_deps_any"
+
+        pushvar cfg dep_all dep_any
+        check_deps $dep_all $dep_any
+        popvar cfg dep_all dep_any
+
         enabled_all $dep_all || disable $cfg
         enabled_any $dep_any || disable $cfg
+
+        disable ${cfg}_checking
     done
 }