Revision
100302
Author
cal@macports.org
Date
2012-12-07 13:46:00 -0800 (Fri, 07 Dec 2012)

Log Message

active_variants 1.1: fix incorrect attempt at putting require_active_variants into pre-configure automatically

Modified Paths

Diff

Modified: trunk/dports/_resources/port1.0/group/active_variants-1.1.tcl (100301 => 100302)


--- trunk/dports/_resources/port1.0/group/active_variants-1.1.tcl	2012-12-07 20:43:08 UTC (rev 100301)
+++ trunk/dports/_resources/port1.0/group/active_variants-1.1.tcl	2012-12-07 21:46:00 UTC (rev 100302)
@@ -137,8 +137,32 @@
 	return 1
 }
 
+proc _variant_in_variant_list {needle haystack} {
+	foreach variant $haystack {
+		if {$variant == $needle} {
+			return 1
+		}
+	}
+	return 0
+}
+
+# global list holding all items the should be checked for and cause an error if
+# not present
+set _require_active_variants_list [list]
+
 proc require_active_variants {name required {forbidden {}}} {
-	pre-configure {
+	global _require_active_variants_list
+	lappend _require_active_variants_list [list $name $required $forbidden]
+}
+
+# function to be called in pre-configure to check for all items added using
+# require_active_variants
+proc _check_require_active_variants {} {
+	global _require_active_variants_list
+	foreach _require_active_variant $_require_active_variants_list {
+		set name [lindex $_require_active_variant 0]
+		set required [lindex $_require_active_variant 1]
+		set forbidden [lindex $_require_active_variant 2]
 		if {[catch {set result [active_variants $name $required $forbidden]}] != 0} {
 			error "$name is required, but not active."
 		}
@@ -160,11 +184,7 @@
 	}
 }
 
-proc _variant_in_variant_list {needle haystack} {
-	foreach variant $haystack {
-		if {$variant == $needle} {
-			return 1
-		}
-	}
-	return 0
+# register pre-configure handler that checks for all requested variants
+pre-configure {
+	_check_require_active_variants
 }