1#
2# tk/package.rb : package command
3#
4require 'tk'
5
6module 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
143end
144