Index: ChangeLog
==================================================================
--- ChangeLog
+++ ChangeLog
@@ -1,5 +1,19 @@
+2012-07-30  Trevor Davel  <twylite@crypt.co.za>
+
+	* win/Makefile.in: [Bug 3549770] All tests that use registry or dde packages
+	* win/makefile.vc: should try the static extension first, then the DLL
+	* tests/clock.test: indicated by the build system, then fall back to
+	* tests/fCmd.test: package require.
+	* tests/registry.test:
+	* tests/winDde.test:            
+	* library/dde/pkgIndex.tcl: Communicate library file back to tests so that  
+	* library/reg/pkgIndex.tcl: the test suite can be executed outside the build
+	environment.   
+	* tests/info.test: Fix regression caused by inserted lines that affected
+	hard-coded expected results for [info frame].  
+
 2012-07-29  Jan Nijtmans  <nijtmans@users.sf.net>
 
 	* win/Makefile.in:  No longer build tcltest.exe to run the tests,
 	but use tclsh86.exe in combination with tcltest86.dll to do that.
 	* tests/*.test:     load tcltest86.dll if necessary.

Index: library/dde/pkgIndex.tcl
==================================================================
--- library/dde/pkgIndex.tcl
+++ library/dde/pkgIndex.tcl
@@ -3,5 +3,9 @@
 if {[::tcl::pkgconfig get debug]} {
     package ifneeded dde 1.4.0b1 [list load [file join $dir tcldde14g.dll] dde]
 } else {
     package ifneeded dde 1.4.0b1 [list load [file join $dir tcldde14.dll] dde]
 }
+if { [info exists ::ddelib] } {
+  # ::ddelib is required by windde.test
+  set ::ddelib [lindex [package ifneeded dde 1.4.0b1] 1]
+}

Index: library/reg/pkgIndex.tcl
==================================================================
--- library/reg/pkgIndex.tcl
+++ library/reg/pkgIndex.tcl
@@ -5,5 +5,9 @@
             [list load [file join $dir tclreg13g.dll] registry]
 } else {
     package ifneeded registry 1.3.0 \
             [list load [file join $dir tclreg13.dll] registry]
 }
+if { [info exists ::reglib] } {
+  # ::reglib is required by clock.test, fCmd.test and registry.test
+  set ::reglib [lindex [package ifneeded dde 1.4.0b1] 1]
+}

Index: tests/clock.test
==================================================================
--- tests/clock.test
+++ tests/clock.test
@@ -15,14 +15,13 @@
     package require tcltest 2
     namespace import -force ::tcltest::*
 }
 
 if {[testConstraint win]} {
-    if {[catch {
-	    ::tcltest::loadTestedCommands
-	    package require registry
-	}]} {
+  if { (0 != [catch { load {} Registry; set ::reglib {} }])
+    && (0 != [catch { ::tcltest::loadTestedCommands; load $::reglib Registry }])
+    && (0 != [catch { set ::reglib {}; package require registry 1.1 }]) } {
 	namespace eval ::tcl::clock {variable NoRegistry {}}
     }
 }
 
 package require msgcat 1.4

Index: tests/fCmd.test
==================================================================
--- tests/fCmd.test
+++ tests/fCmd.test
@@ -26,20 +26,13 @@
 testConstraint win2000orXP 0
 # Don't know how to determine this constraint correctly
 testConstraint notNetworkFilesystem 0
 testConstraint reg 0
 if {[testConstraint win]} {
-    catch {
-	# Is the registry extension already static to this shell?
-	try {
-	    load {} Registry
-	    set ::reglib {}
-	} on error {} {
-	    # try the location given to use on the commandline to tcltest
-	    ::tcltest::loadTestedCommands
-	    load $::reglib Registry
-	}
+  if { (0 == [catch { load {} Registry; set ::reglib {} }])
+    || (0 == [catch { ::tcltest::loadTestedCommands; load $::reglib Registry }])
+    || (0 == [catch { set ::reglib {}; package require registry }]) } {
 	testConstraint reg 1
     }
 }
 
 set tmpspace /tmp;# default value

Index: tests/info.test
==================================================================
--- tests/info.test
+++ tests/info.test
@@ -17,17 +17,14 @@
 
 if {{::tcltest} ni [namespace children]} {
     package require tcltest 2
     namespace import -force ::tcltest::*
 }
-
-::tcltest::loadTestedCommands
-catch [list package require -exact Tcltest [info patchlevel]]
+::tcltest::loadTestedCommands; catch [list package require -exact Tcltest [info patchlevel]]
 
 # Set up namespaces needed to test operation of "info args", "info body",
 # "info default", and "info procs" with imported procedures.
-
 catch {namespace delete test_ns_info1 test_ns_info2}
 
 namespace eval test_ns_info1 {
     namespace export *
     proc p {x} {return "x=$x"}

Index: tests/registry.test
==================================================================
--- tests/registry.test
+++ tests/registry.test
@@ -15,14 +15,13 @@
     namespace import -force ::tcltest::*
 }
 
 testConstraint reg 0
 if {[testConstraint win]} {
-    if {![catch {
-	    ::tcltest::loadTestedCommands
-	    package require registry
-	}]} {
+  if { (0 == [catch { load {} Registry; set ::reglib {} }])
+    || (0 == [catch { ::tcltest::loadTestedCommands; load $::reglib Registry }])
+    || (0 == [catch { set ::reglib {}; package require registry }]) } {
 	testConstraint reg 1
     }
 }
 
 # determine the current locale

Index: tests/winDde.test
==================================================================
--- tests/winDde.test
+++ tests/winDde.test
@@ -14,17 +14,14 @@
     #tcltest::configure -verbose {pass start}
     namespace import -force ::tcltest::*
 }
 
 testConstraint dde 0
-if {[testConstraint win]} {
-    if {![catch {
-	    ::tcltest::loadTestedCommands
-	    package require dde 1.4.0b1
-	    set ::ddelib [lindex [package ifneeded dde 1.4.0b1] 1]}]} {
+if { (0 == [catch { load {} Dde; set ::ddelib {} }])
+  || (0 == [catch { ::tcltest::loadTestedCommands; load $::ddelib Dde }])
+  || (0 == [catch { set ::ddelib {}; package require dde }]) } {
 	testConstraint dde 1
-    }
 }
 
 
 # -------------------------------------------------------------------------
 # Setup a script for a test server

Index: win/Makefile.in
==================================================================
--- win/Makefile.in
+++ win/Makefile.in
@@ -715,19 +715,19 @@
 
 test-tcl: binaries $(TCLSH) $(CAT32) $(TEST_DLL_FILE) $(DDE_DLL_FILE) $(REG_DLL_FILE)
 	TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
 	./$(TCLSH) "$(ROOT_DIR_NATIVE)/tests/all.tcl" $(TESTFLAGS) \
 	-load "package ifneeded Tcltest ${VERSION}@TCL_PATCH_LEVEL@ [list load [file normalize ${TEST_DLL_FILE}] Tcltest]; \
-	package ifneeded dde 1.4.0b1 [list load [file normalize ${DDE_DLL_FILE}] dde]; \
-	package ifneeded registry 1.3.0 [list load [file normalize ${REG_DLL_FILE}] registry]" | ./$(CAT32)
+	set ::ddelib [file normalize ${DDE_DLL_FILE}]; \
+	set ::reglib [file normalize ${REG_DLL_FILE}]" | ./$(CAT32)
 
 # Useful target to launch a built tcltest with the proper path,...
 runtest: binaries $(TCLSH) $(TEST_DLL_FILE) $(DDE_DLL_FILE) $(REG_DLL_FILE)
 	@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \
 	./$(TCLSH) $(TESTFLAGS) -load "package ifneeded Tcltest ${VERSION}@TCL_PATCH_LEVEL@ [list load [file normalize ${TEST_DLL_FILE}] Tcltest]; \
-	package ifneeded dde 1.4.0b1 [list load [file normalize ${DDE_DLL_FILE}] dde]; \
-	package ifneeded registry 1.3.0 [list load [file normalize ${REG_DLL_FILE}] registry]" $(SCRIPT)
+	set ::ddelib [file normalize ${DDE_DLL_FILE}]; \
+	set ::reglib [file normalize ${REG_DLL_FILE}]" $(SCRIPT)
 
 # This target can be used to run tclsh from the build directory via
 # `make shell SCRIPT=foo.tcl`
 shell: binaries
 	@TCL_LIBRARY="$(LIBRARY_DIR)"; export TCL_LIBRARY; \

Index: win/makefile.vc
==================================================================
--- win/makefile.vc
+++ win/makefile.vc
@@ -566,18 +566,18 @@
 test: test-core test-pkgs
 test-core: setup $(TCLTEST) dlls $(CAT32)
 	set TCL_LIBRARY=$(ROOT:\=/)/library
 !if "$(OS)" == "Windows_NT"  || "$(MSVCDIR)" == "IDE"
 	$(DEBUGGER) $(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile <<
-		package ifneeded dde 1.4.0b1 [list load "$(TCLDDELIB:\=/)" dde]
-		package ifneeded registry 1.3.0 [list load "$(TCLREGLIB:\=/)" registry]
+		set ::ddelib [file normalize "$(TCLDDELIB:\=/)"]
+		set ::reglib [file normalize "$(TCLREGLIB:\=/)"]
 <<
 !else
 	@echo Please wait while the tests are collected...
 	$(TCLTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) -loadfile << > tests.log
-		package ifneeded dde 1.4.0b1 "$(TCLDDELIB:\=/)" dde]
-		package ifneeded registry 1.3.0 "$(TCLREGLIB:\=/)" registry]
+		set ::ddelib [file normalize "$(TCLDDELIB:\=/)"]
+		set ::reglib [file normalize "$(TCLREGLIB:\=/)"]
 <<
 	type tests.log | more
 !endif
 
 runtest: setup $(TCLTEST) dlls $(CAT32)

