# darwinports_fastload.tcl.in
# $Id$
#
# Copyright (c) 2004 Paul Guyot, Darwinports Team.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of Apple Computer, Inc. nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#

# This script is here to fast load all the darwinports-related packages.
# This avoids the very expensive globbing of Tcl' package mechanism.
# Please note that this is not required and base/ should work even if some
# packages are moved as long as their new location is in Tcl's package paths.
# However, this file also defines a workaround to avoid conflicts between a /
# installation of DP and a user installation of DP (on the same box).
# (this workaround isn't required on 10.4.2).
#
# The package command that's replaced in this code works somewhat differently
# than the original version. In particular, users with multiple copies of a
# package such as portuninstall (due to obsolete files being left from previous
# installations) may experience problems due to different package loading
# behavior.
#
if { ($tcl_version < 8.4) ||
	(($tcl_version == 8.4) && ([lindex [split [info patchlevel] .] 3] < 7))} {
	global allpackages
	if {![info exists allpackages]} {
		# Only patch once.
		array set allpackages {}
		rename package package_native
		proc package {args} {
				global allpackages
				if {([lindex $args 0] == "ifneeded") && ([llength $args] == 4)} {
						set package_name [lindex $args 1]
						set package_version [lindex $args 2]
						set package_key ${package_name}::${package_version}
						if {![info exists allpackages($package_key)]} {
								set allpackages($package_key) 1
								set result [eval package_native $args]
						} else {
								set result ""
						}
				} else {
						set result [eval package_native $args]
				}
				return $result
		}
	}
}

set dir [file join "@TCL_PACKAGE_DIR@" darwinports1.0]
catch {source [file join $dir pkgIndex.tcl]}

foreach dir [glob -directory "@prefix_expanded@" -join share darwinports Tcl *] {
	catch {source [file join $dir pkgIndex.tcl]}
}

if { "@SQLITE3_DIR@" != "" } {
	set dir "@SQLITE3_DIR@"
	catch {source [file join $dir pkgIndex.tcl]}
}
