-
Notifications
You must be signed in to change notification settings - Fork 1
/
pkgIndex.tcl.in
165 lines (140 loc) · 5.4 KB
/
pkgIndex.tcl.in
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# TclXML combo package index file - handcrafted
#
# $Id: pkgIndex.tcl.in,v 1.13 2003/12/03 20:06:34 balls Exp $
namespace eval ::xml {
variable _init 0
}
namespace eval ::xml::libxml2 {
variable _init 0
}
namespace eval ::dom {
variable _init 0
}
namespace eval ::dom::libxml2 {
variable _init 0
}
namespace eval ::xslt {
variable _init 0
}
# From http://wiki.tcl.tk/9427
proc ::xml::_platform {} {
global tcl_platform
set plat [lindex $tcl_platform(os) 0]
set mach $tcl_platform(machine)
switch -glob -- $mach {
sun4* {
set mach sparc
}
intel -
i*86* {
set mach x86
}
{Power Macintosh} {
set mach ppc
}
}
return "$plat-$mach"
}
proc ::xml::_loadlib {dir package version} {
global tcl_platform
set lib $package[info sharedlibextension]
return [file join $dir [_platform] $lib]
}
namespace eval ::xml {
variable pkginit
if {![info exists pkginit]} {
set pkginit 0
}
# Try to locate the binary library:
# 1) Using TEA conventions
# 2) Using StarKit conventions
# 3) Using platform-specific conventions
proc pkgload {dir {binary 0} {cmd {}}} {
variable pkginit
if {$pkginit} {return {}}
namespace eval :: [format {
package require xmldefs @PACKAGE_VERSION@
package require xml::tcl @PACKAGE_VERSION@
# TEA style
if {[catch {load [file join [list %s] @PKG_LIB_FILE@] Tclxml}]} {
# StarKit style
if {[catch {load [::xml::_loadlib [list %s] Tclxml @PACKAGE_VERSION@]}]} {
# Mac OS X frameworks are different
if {[catch {load [file join [list %s] .. .. Tclxml] Tclxml}]} {
# Unable to load binary implmentation,
# just use pure-Tcl implmentation instead
if {$binary} {
return -code error "unable to load shared library"
}
} else {
set ::xml::libxml2::_init 1
set ::dom::libxml2::_init 1
set ::xslt::_init 1
source [file join [list %s] tcldom-libxml2.tcl]
source [file join [list %s] tclxslt-libxslt.tcl]
}
} else {
set ::xml::libxml2::_init 1
set ::dom::libxml2::_init 1
set ::xslt::_init 1
source [file join [list %s] tcldom-libxml2.tcl]
source [file join [list %s] tclxslt-libxslt.tcl]
}
} else {
set ::xml::libxml2::_init 1
set ::dom::libxml2::_init 1
set ::xslt::_init 1
source [file join [list %s] tcldom-libxml2.tcl]
source [file join [list %s] tclxslt-libxslt.tcl]
}
package require xml::tclparser @PACKAGE_VERSION@
package provide tclparser @PACKAGE_VERSION@
package provide xml::libxml2 @PACKAGE_VERSION@
package provide xml @PACKAGE_VERSION@
package provide dom @PACKAGE_VERSION@
package provide dom::libxml2 @PACKAGE_VERSION@
package provide xslt @PACKAGE_VERSION@
package provide xslt::libxslt @PACKAGE_VERSION@
set pkginit 1
} $dir $dir $dir $dir $dir $dir $dir $dir $dir $dir]
eval $cmd
}
}
package ifneeded xml::tcl @PACKAGE_VERSION@ [list source [file join $dir xml__tcl.tcl]]
package ifneeded sgmlparser 1.1 [list source [file join $dir sgmlparser.tcl]]
package ifneeded xpath 1.0 [list source [file join $dir xpath.tcl]]
package ifneeded xmldep 1.0 [list source [file join $dir xmldep.tcl]]
# Requesting a specific package means we want it to be the default parser class.
package ifneeded xml::libxml2 @PACKAGE_VERSION@ [list ::xml::pkgload $dir 1 {::xml::parser default libxml2}]
# tclparser works with either xml::c or xml::tcl
package ifneeded tclparser @PACKAGE_VERSION@ [list ::xml::pkgload $dir 0 {
::xml::parser default tclparser
package provide tclparser @PACKAGE_VERSION@
}]
# use tcl only (mainly for testing)
package ifneeded puretclparser @PACKAGE_VERSION@ "
package require xml::tcl @PACKAGE_VERSION@
package require xmldefs
package require xml::tclparser @PACKAGE_VERSION@
package provide puretclparser @PACKAGE_VERSION@
"
# Requesting the generic package leaves the choice of default parser automatic
package ifneeded xml @PACKAGE_VERSION@ [list ::xml::pkgload $dir 0]
package ifneeded dom @PACKAGE_VERSION@ [list ::xml::pkgload $dir 0]
package ifneeded dom::libxml2 @PACKAGE_VERSION@ [list ::xml::pkgload $dir 1]
package ifneeded xslt @PACKAGE_VERSION@ [list ::xml::pkgload $dir 1]
package ifneeded xslt::libxslt @PACKAGE_VERSION@ [list ::xml::pkgload $dir 1]
package ifneeded xmlswitch @PACKAGE_VERSION@ [list source [file join $dir xmlswitch.tcl]]
package ifneeded xslt::cache @PACKAGE_VERSION@ [list source [file join $dir xsltcache.tcl]]
package ifneeded xslt::utilities 1.2 [list source [file join $dir utilities.tcl]]
package ifneeded xslt::process 1.1 [list source [file join $dir process.tcl]]
package ifneeded xslt::resources 1.3 [list source [file join $dir resources.tcl]]
if {[info tclversion] <= 8.0} {
package ifneeded sgml 1.9 [list source [file join $dir sgml-8.0.tcl]]
package ifneeded xmldefs @PACKAGE_VERSION@ [list source [file join $dir xml-8.0.tcl]]
package ifneeded xml::tclparser @PACKAGE_VERSION@ [list source [file join $dir tclparser-8.0.tcl]]
} else {
package ifneeded sgml 1.9 [list source [file join $dir sgml-8.1.tcl]]
package ifneeded xmldefs @PACKAGE_VERSION@ [list source [file join $dir xml-8.1.tcl]]
package ifneeded xml::tclparser @PACKAGE_VERSION@ [list source [file join $dir tclparser-8.1.tcl]]
}