1 #
2 # tk/package.rb : package command
3 #
4 require 'tk'
5
6 module TkPackage
7 include TkCore
8 extend TkPackage
9
10 TkCommandNames = ['package'.freeze].freeze
11
12 def add_path(path)
13 Tk::AUTO_PATH.value = Tk::AUTO_PATH.to_a << path
14 end
15
16 def forget(package)
17 tk_call('package', 'forget', package)
18 nil
19 end
20
21 def if_needed(pkg, ver, *arg, &b)
22 size = arg.size
23
24 if size==0 && !b
25 # proc info
26 procedure(tk_call('package', 'ifneeded', pkg, ver))
27
28 elsif size==0 && b
29 # set proc
30 cmd = proc(&b)
31 tk_call('package', 'ifneeded', pkg, ver, cmd)
32 cmd
33
34 elsif size==1 && !b
35 # set proc
36 cmd = arg[0]
37 if cmd
38 tk_call('package', 'ifneeded', pkg, ver, cmd)
39 cmd
40 else
41 # remove proc
42 tk_call('package', 'ifneeded', pkg, ver, '')
43 nil
44 end
45
46 else
47 fail ArgumentError, 'too many arguments'
48 end
49 end
50
51 def names
52 tk_split_simplelist(tk_call('package', 'names'))
53 end
54
55 def provide(package, version=nil)
56 if version
57 tk_call('package', 'provide', package, version)
58 end
59 if (ret = tk_call('package', 'provide', package)) == ''
60 nil
61 else
62 ret
63 end
64 end
65
66 def present(package, version=None)
67 begin
68 tk_call('package', 'present', package, version)
69 rescue => e
70 fail e.class, 'TkPackage ' << e.message
71 end
72 end
73
74 def present_exact(package, version)
75 begin
76 tk_call('package', 'present', '-exact', package, version)
77 rescue => e
78 fail e.class, 'TkPackage ' << e.message
79 end
80 end
81
82 def require(package, version=None)
83 begin
84 tk_call('package', 'require', package, version)
85 rescue => e
86 fail e.class, 'TkPackage ' << e.message
87 end
88 end
89
90 def require_exact(package, version)
91 begin
92 tk_call('package', 'require', '-exact', package, version)
93 rescue => e
94 fail e.class, 'TkPackage ' << e.message
95 end
96 end
97
98 def unknown_proc(*arg, &b)
99 size = arg.size
100
101 if size==0 && !b
102 # proc info
103 procedure(tk_call('package', 'unknown'))
104
105 elsif size==0 && b
106 # set proc
107 cmd = proc(&b)
108 tk_call('package', 'unknown', cmd)
109 cmd
110
111 elsif size==1 && !b
112 # set proc
113 cmd = arg[0]
114 if cmd
115 tk_call('package', 'unknown', cmd)
116 cmd
117 else
118 # remove proc
119 tk_call('package', 'unknown', '')
120 nil
121 end
122
123 else
124 fail ArgumentError, 'too many arguments'
125 end
126 end
127
128 def versions(package)
129 tk_split_simplelist(tk_call('package', 'versions', package))
130 end
131
132 def vcompare(version1, version2)
133 number(tk_call('package', 'vcompare', version1, version2))
134 end
135
136 def vsatisfies(version1, version2)
137 bool(tk_call('package', 'vsatisfies', version1, version2))
138 end
139
140 def prefer(setting = None)
141 tk_call('package', 'prefer', setting)
142 end
143 end