# macports_fastload.tcl.in # $Id: macports_fastload.tcl.in 52218 2009-06-12 08:57:53Z enl@macports.org $ # # Copyright (c) 2004 Paul Guyot, The MacPorts Project. # 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 MacPorts 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 MacPorts and a user installation of MacPorts (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 { [regexp {\d+\.\d+\.\d+} [info patchlevel]] && ([package vcompare [info patchlevel] 8.4.7] < 0) } { 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@" macports1.0] catch {source [file join $dir pkgIndex.tcl]} set sharetcldir [file join "@prefix_expanded@" share macports Tcl] if {[file exists $sharetcldir]} { foreach dir [glob -directory $sharetcldir *] { catch {source [file join $dir pkgIndex.tcl]} } } if { "@SQLITE3_DIR@" != "" } { set dir "@SQLITE3_DIR@" catch {source [file join $dir pkgIndex.tcl]} }