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