rufus-lua-win 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,654 @@
1
+
2
+ --- Dependency handling functions.
3
+ -- Dependencies are represented in LuaRocks through strings with
4
+ -- a package name followed by a comma-separated list of constraints.
5
+ -- Each constraint consists of an operator and a version number.
6
+ -- In this string format, version numbers are represented as
7
+ -- naturally as possible, like they are used by upstream projects
8
+ -- (e.g. "2.0beta3"). Internally, LuaRocks converts them to a purely
9
+ -- numeric representation, allowing comparison following some
10
+ -- "common sense" heuristics. The precise specification of the
11
+ -- comparison criteria is the source code of this module, but the
12
+ -- test/test_deps.lua file included with LuaRocks provides some
13
+ -- insights on what these criteria are.
14
+ module("luarocks.deps", package.seeall)
15
+
16
+ local cfg = require("luarocks.cfg")
17
+ local manif_core = require("luarocks.manif_core")
18
+ local path = require("luarocks.path")
19
+ local dir = require("luarocks.dir")
20
+ local util = require("luarocks.util")
21
+
22
+ local operators = {
23
+ ["=="] = "==",
24
+ ["~="] = "~=",
25
+ [">"] = ">",
26
+ ["<"] = "<",
27
+ [">="] = ">=",
28
+ ["<="] = "<=",
29
+ ["~>"] = "~>",
30
+ -- plus some convenience translations
31
+ [""] = "==",
32
+ ["="] = "==",
33
+ ["!="] = "~="
34
+ }
35
+
36
+ local deltas = {
37
+ scm = 1000,
38
+ cvs = 1000,
39
+ rc = -1000,
40
+ pre = -10000,
41
+ beta = -100000,
42
+ alpha = -1000000
43
+ }
44
+
45
+ local version_mt = {
46
+ --- Equality comparison for versions.
47
+ -- All version numbers must be equal.
48
+ -- If both versions have revision numbers, they must be equal;
49
+ -- otherwise the revision number is ignored.
50
+ -- @param v1 table: version table to compare.
51
+ -- @param v2 table: version table to compare.
52
+ -- @return boolean: true if they are considered equivalent.
53
+ __eq = function(v1, v2)
54
+ if #v1 ~= #v2 then
55
+ return false
56
+ end
57
+ for i = 1, #v1 do
58
+ if v1[i] ~= v2[i] then
59
+ return false
60
+ end
61
+ end
62
+ if v1.revision and v2.revision then
63
+ return (v1.revision == v2.revision)
64
+ end
65
+ return true
66
+ end,
67
+ --- Size comparison for versions.
68
+ -- All version numbers are compared.
69
+ -- If both versions have revision numbers, they are compared;
70
+ -- otherwise the revision number is ignored.
71
+ -- @param v1 table: version table to compare.
72
+ -- @param v2 table: version table to compare.
73
+ -- @return boolean: true if v1 is considered lower than v2.
74
+ __lt = function(v1, v2)
75
+ for i = 1, math.max(#v1, #v2) do
76
+ local v1i, v2i = v1[i] or 0, v2[i] or 0
77
+ if v1i ~= v2i then
78
+ return (v1i < v2i)
79
+ end
80
+ end
81
+ if v1.revision and v2.revision then
82
+ return (v1.revision < v2.revision)
83
+ end
84
+ return false
85
+ end
86
+ }
87
+
88
+ local version_cache = {}
89
+ setmetatable(version_cache, {
90
+ __mode = "kv"
91
+ })
92
+
93
+ --- Parse a version string, converting to table format.
94
+ -- A version table contains all components of the version string
95
+ -- converted to numeric format, stored in the array part of the table.
96
+ -- If the version contains a revision, it is stored numerically
97
+ -- in the 'revision' field. The original string representation of
98
+ -- the string is preserved in the 'string' field.
99
+ -- Returned version tables use a metatable
100
+ -- allowing later comparison through relational operators.
101
+ -- @param vstring string: A version number in string format.
102
+ -- @return table or nil: A version table or nil
103
+ -- if the input string contains invalid characters.
104
+ function parse_version(vstring)
105
+ if not vstring then return nil end
106
+ assert(type(vstring) == "string")
107
+
108
+ local cached = version_cache[vstring]
109
+ if cached then
110
+ return cached
111
+ end
112
+
113
+ local version = {}
114
+ local i = 1
115
+
116
+ local function add_token(number)
117
+ version[i] = version[i] and version[i] + number/100000 or number
118
+ i = i + 1
119
+ end
120
+
121
+ -- trim leading and trailing spaces
122
+ vstring = vstring:match("^%s*(.*)%s*$")
123
+ version.string = vstring
124
+ -- store revision separately if any
125
+ local main, revision = vstring:match("(.*)%-(%d+)$")
126
+ if revision then
127
+ vstring = main
128
+ version.revision = tonumber(revision)
129
+ end
130
+ while #vstring > 0 do
131
+ -- extract a number
132
+ local token, rest = vstring:match("^(%d+)[%.%-%_]*(.*)")
133
+ if token then
134
+ add_token(tonumber(token))
135
+ else
136
+ -- extract a word
137
+ token, rest = vstring:match("^(%a+)[%.%-%_]*(.*)")
138
+ if not token then
139
+ util.printerr("Warning: version number '"..vstring.."' could not be parsed.")
140
+ version[i] = 0
141
+ break
142
+ end
143
+ local last = #version
144
+ version[i] = deltas[token] or (token:byte() / 1000)
145
+ end
146
+ vstring = rest
147
+ end
148
+ setmetatable(version, version_mt)
149
+ version_cache[vstring] = version
150
+ return version
151
+ end
152
+
153
+ --- Utility function to compare version numbers given as strings.
154
+ -- @param a string: one version.
155
+ -- @param b string: another version.
156
+ -- @return boolean: True if a > b.
157
+ function compare_versions(a, b)
158
+ return parse_version(a) > parse_version(b)
159
+ end
160
+
161
+ --- Consumes a constraint from a string, converting it to table format.
162
+ -- For example, a string ">= 1.0, > 2.0" is converted to a table in the
163
+ -- format {op = ">=", version={1,0}} and the rest, "> 2.0", is returned
164
+ -- back to the caller.
165
+ -- @param input string: A list of constraints in string format.
166
+ -- @return (table, string) or nil: A table representing the same
167
+ -- constraints and the string with the unused input, or nil if the
168
+ -- input string is invalid.
169
+ local function parse_constraint(input)
170
+ assert(type(input) == "string")
171
+
172
+ local no_upgrade, op, version, rest = input:match("^(@?)([<>=~!]*)%s*([%w%.%_%-]+)[%s,]*(.*)")
173
+ op = operators[op]
174
+ version = parse_version(version)
175
+ if not op or not version then return nil end
176
+ return { op = op, version = version, no_upgrade = no_upgrade=="@" and true or nil }, rest
177
+ end
178
+
179
+ --- Convert a list of constraints from string to table format.
180
+ -- For example, a string ">= 1.0, < 2.0" is converted to a table in the format
181
+ -- {{op = ">=", version={1,0}}, {op = "<", version={2,0}}}.
182
+ -- Version tables use a metatable allowing later comparison through
183
+ -- relational operators.
184
+ -- @param input string: A list of constraints in string format.
185
+ -- @return table or nil: A table representing the same constraints,
186
+ -- or nil if the input string is invalid.
187
+ function parse_constraints(input)
188
+ assert(type(input) == "string")
189
+
190
+ local constraints, constraint = {}, nil
191
+ while #input > 0 do
192
+ constraint, input = parse_constraint(input)
193
+ if constraint then
194
+ table.insert(constraints, constraint)
195
+ else
196
+ return nil
197
+ end
198
+ end
199
+ return constraints
200
+ end
201
+
202
+ --- Convert a dependency from string to table format.
203
+ -- For example, a string "foo >= 1.0, < 2.0"
204
+ -- is converted to a table in the format
205
+ -- {name = "foo", constraints = {{op = ">=", version={1,0}},
206
+ -- {op = "<", version={2,0}}}}. Version tables use a metatable
207
+ -- allowing later comparison through relational operators.
208
+ -- @param dep string: A dependency in string format
209
+ -- as entered in rockspec files.
210
+ -- @return table or nil: A table representing the same dependency relation,
211
+ -- or nil if the input string is invalid.
212
+ function parse_dep(dep)
213
+ assert(type(dep) == "string")
214
+
215
+ local name, rest = dep:match("^%s*([a-zA-Z][a-zA-Z0-9%.%-%_]*)%s*(.*)")
216
+ if not name then return nil end
217
+ local constraints = parse_constraints(rest)
218
+ if not constraints then return nil end
219
+ return { name = name, constraints = constraints }
220
+ end
221
+
222
+ --- Convert a version table to a string.
223
+ -- @param v table: The version table
224
+ -- @param internal boolean or nil: Whether to display versions in their
225
+ -- internal representation format or how they were specified.
226
+ -- @return string: The dependency information pretty-printed as a string.
227
+ function show_version(v, internal)
228
+ assert(type(v) == "table")
229
+ assert(type(internal) == "boolean" or not internal)
230
+
231
+ return (internal
232
+ and table.concat(v, ":")..(v.revision and tostring(v.revision) or "")
233
+ or v.string)
234
+ end
235
+
236
+ --- Convert a dependency in table format to a string.
237
+ -- @param dep table: The dependency in table format
238
+ -- @param internal boolean or nil: Whether to display versions in their
239
+ -- internal representation format or how they were specified.
240
+ -- @return string: The dependency information pretty-printed as a string.
241
+ function show_dep(dep, internal)
242
+ assert(type(dep) == "table")
243
+ assert(type(internal) == "boolean" or not internal)
244
+
245
+ local pretty = {}
246
+ for _, c in ipairs(dep.constraints) do
247
+ table.insert(pretty, c.op .. " " .. show_version(c.version, internal))
248
+ end
249
+ return dep.name.." "..table.concat(pretty, ", ")
250
+ end
251
+
252
+ --- A more lenient check for equivalence between versions.
253
+ -- This returns true if the requested components of a version
254
+ -- match and ignore the ones that were not given. For example,
255
+ -- when requesting "2", then "2", "2.1", "2.3.5-9"... all match.
256
+ -- When requesting "2.1", then "2.1", "2.1.3" match, but "2.2"
257
+ -- doesn't.
258
+ -- @param version string or table: Version to be tested; may be
259
+ -- in string format or already parsed into a table.
260
+ -- @param requested string or table: Version requested; may be
261
+ -- in string format or already parsed into a table.
262
+ -- @return boolean: True if the tested version matches the requested
263
+ -- version, false otherwise.
264
+ local function partial_match(version, requested)
265
+ assert(type(version) == "string" or type(version) == "table")
266
+ assert(type(requested) == "string" or type(version) == "table")
267
+
268
+ if type(version) ~= "table" then version = parse_version(version) end
269
+ if type(requested) ~= "table" then requested = parse_version(requested) end
270
+ if not version or not requested then return false end
271
+
272
+ for i, ri in ipairs(requested) do
273
+ local vi = version[i] or 0
274
+ if ri ~= vi then return false end
275
+ end
276
+ if requested.revision then
277
+ return requested.revision == version.revision
278
+ end
279
+ return true
280
+ end
281
+
282
+ --- Check if a version satisfies a set of constraints.
283
+ -- @param version table: A version in table format
284
+ -- @param constraints table: An array of constraints in table format.
285
+ -- @return boolean: True if version satisfies all constraints,
286
+ -- false otherwise.
287
+ function match_constraints(version, constraints)
288
+ assert(type(version) == "table")
289
+ assert(type(constraints) == "table")
290
+ local ok = true
291
+ setmetatable(version, version_mt)
292
+ for _, constr in pairs(constraints) do
293
+ local constr_version = constr.version
294
+ setmetatable(constr.version, version_mt)
295
+ if constr.op == "==" then ok = version == constr_version
296
+ elseif constr.op == "~=" then ok = version ~= constr_version
297
+ elseif constr.op == ">" then ok = version > constr_version
298
+ elseif constr.op == "<" then ok = version < constr_version
299
+ elseif constr.op == ">=" then ok = version >= constr_version
300
+ elseif constr.op == "<=" then ok = version <= constr_version
301
+ elseif constr.op == "~>" then ok = partial_match(version, constr_version)
302
+ end
303
+ if not ok then break end
304
+ end
305
+ return ok
306
+ end
307
+
308
+ --- Attempt to match a dependency to an installed rock.
309
+ -- @param dep table: A dependency parsed in table format.
310
+ -- @param blacklist table: Versions that can't be accepted. Table where keys
311
+ -- are program versions and values are 'true'.
312
+ -- @return table or nil: A table containing fields 'name' and 'version'
313
+ -- representing an installed rock which matches the given dependency,
314
+ -- or nil if it could not be matched.
315
+ local function match_dep(dep, blacklist)
316
+ assert(type(dep) == "table")
317
+
318
+ local versions
319
+ if dep.name == "lua" then
320
+ versions = { cfg.lua_version }
321
+ else
322
+ versions = manif_core.get_versions(dep.name)
323
+ end
324
+ if not versions then
325
+ return nil
326
+ end
327
+ if blacklist then
328
+ local i = 1
329
+ while versions[i] do
330
+ if blacklist[versions[i]] then
331
+ table.remove(versions, i)
332
+ else
333
+ i = i + 1
334
+ end
335
+ end
336
+ end
337
+ local candidates = {}
338
+ for _, vstring in ipairs(versions) do
339
+ local version = parse_version(vstring)
340
+ if match_constraints(version, dep.constraints) then
341
+ table.insert(candidates, version)
342
+ end
343
+ end
344
+ if #candidates == 0 then
345
+ return nil
346
+ else
347
+ table.sort(candidates)
348
+ return {
349
+ name = dep.name,
350
+ version = candidates[#candidates].string
351
+ }
352
+ end
353
+ end
354
+
355
+ --- Attempt to match dependencies of a rockspec to installed rocks.
356
+ -- @param rockspec table: The rockspec loaded as a table.
357
+ -- @param blacklist table or nil: Program versions to not use as valid matches.
358
+ -- Table where keys are program names and values are tables where keys
359
+ -- are program versions and values are 'true'.
360
+ -- @return table, table: A table where keys are dependencies parsed
361
+ -- in table format and values are tables containing fields 'name' and
362
+ -- version' representing matches, and a table of missing dependencies
363
+ -- parsed as tables.
364
+ function match_deps(rockspec, blacklist)
365
+ assert(type(rockspec) == "table")
366
+ assert(type(blacklist) == "table" or not blacklist)
367
+ local matched, missing, no_upgrade = {}, {}, {}
368
+
369
+ for _, dep in ipairs(rockspec.dependencies) do
370
+ local found = match_dep(dep, blacklist and blacklist[dep.name] or nil)
371
+ if found then
372
+ if dep.name ~= "lua" then
373
+ matched[dep] = found
374
+ end
375
+ else
376
+ if dep.constraints[1] and dep.constraints[1].no_upgrade then
377
+ no_upgrade[dep.name] = dep
378
+ else
379
+ missing[dep.name] = dep
380
+ end
381
+ end
382
+ end
383
+ return matched, missing, no_upgrade
384
+ end
385
+
386
+ --- Return a set of values of a table.
387
+ -- @param tbl table: The input table.
388
+ -- @return table: The array of keys.
389
+ local function values_set(tbl)
390
+ local set = {}
391
+ for _, v in pairs(tbl) do
392
+ set[v] = true
393
+ end
394
+ return set
395
+ end
396
+
397
+ --- Check dependencies of a rock and attempt to install any missing ones.
398
+ -- Packages are installed using the LuaRocks "install" command.
399
+ -- Aborts the program if a dependency could not be fulfilled.
400
+ -- @param rockspec table: A rockspec in table format.
401
+ -- @return boolean or (nil, string, [string]): True if no errors occurred, or
402
+ -- nil and an error message if any test failed, followed by an optional
403
+ -- error code.
404
+ function fulfill_dependencies(rockspec)
405
+
406
+ local search = require("luarocks.search")
407
+ local install = require("luarocks.install")
408
+
409
+ if rockspec.supported_platforms then
410
+ if not platforms_set then
411
+ platforms_set = values_set(cfg.platforms)
412
+ end
413
+ local supported = nil
414
+ for _, plat in pairs(rockspec.supported_platforms) do
415
+ local neg, plat = plat:match("^(!?)(.*)")
416
+ if neg == "!" then
417
+ if platforms_set[plat] then
418
+ return nil, "This rockspec for "..rockspec.package.." does not support "..plat.." platforms."
419
+ end
420
+ else
421
+ if platforms_set[plat] then
422
+ supported = true
423
+ else
424
+ if supported == nil then
425
+ supported = false
426
+ end
427
+ end
428
+ end
429
+ end
430
+ if supported == false then
431
+ local plats = table.concat(cfg.platforms, ", ")
432
+ return nil, "This rockspec for "..rockspec.package.." does not support "..plats.." platforms."
433
+ end
434
+ end
435
+
436
+ local matched, missing, no_upgrade = match_deps(rockspec)
437
+
438
+ if next(no_upgrade) then
439
+ util.printerr("Missing dependencies for "..rockspec.name.." "..rockspec.version..":")
440
+ for _, dep in pairs(no_upgrade) do
441
+ util.printerr(show_dep(dep))
442
+ end
443
+ if next(missing) then
444
+ for _, dep in pairs(missing) do
445
+ util.printerr(show_dep(dep))
446
+ end
447
+ end
448
+ util.printerr()
449
+ for _, dep in pairs(no_upgrade) do
450
+ util.printerr("This version of "..rockspec.name.." is designed for use with")
451
+ util.printerr(show_dep(dep)..", but is configured to avoid upgrading it")
452
+ util.printerr("automatically. Please upgrade "..dep.name.." with")
453
+ util.printerr(" luarocks install "..dep.name)
454
+ util.printerr("or choose an older version of "..rockspec.name.." with")
455
+ util.printerr(" luarocks search "..rockspec.name)
456
+ end
457
+ return nil, "Failed matching dependencies."
458
+ end
459
+
460
+ if next(missing) then
461
+ util.printerr()
462
+ util.printerr("Missing dependencies for "..rockspec.name..":")
463
+ for _, dep in pairs(missing) do
464
+ util.printerr(show_dep(dep))
465
+ end
466
+ util.printerr()
467
+
468
+ for _, dep in pairs(missing) do
469
+ -- Double-check in case dependency was filled during recursion.
470
+ if not match_dep(dep) then
471
+ local rock = search.find_suitable_rock(dep)
472
+ if not rock then
473
+ return nil, "Could not satisfy dependency: "..show_dep(dep)
474
+ end
475
+ local ok, err, errcode = install.run(rock)
476
+ if not ok then
477
+ return nil, "Failed installing dependency: "..rock.." - "..err, errcode
478
+ end
479
+ end
480
+ end
481
+ end
482
+ return true
483
+ end
484
+
485
+ --- Set up path-related variables for external dependencies.
486
+ -- For each key in the external_dependencies table in the
487
+ -- rockspec file, four variables are created: <key>_DIR, <key>_BINDIR,
488
+ -- <key>_INCDIR and <key>_LIBDIR. These are not overwritten
489
+ -- if already set (e.g. by the LuaRocks config file or through the
490
+ -- command-line). Values in the external_dependencies table
491
+ -- are tables that may contain a "header" or a "library" field,
492
+ -- with filenames to be tested for existence.
493
+ -- @param rockspec table: The rockspec table.
494
+ -- @param mode string: if "build" is given, checks all files;
495
+ -- if "install" is given, do not scan for headers.
496
+ -- @return boolean or (nil, string): True if no errors occurred, or
497
+ -- nil and an error message if any test failed.
498
+ function check_external_deps(rockspec, mode)
499
+ assert(type(rockspec) == "table")
500
+
501
+ local fs = require("luarocks.fs")
502
+
503
+ local vars = rockspec.variables
504
+ local patterns = cfg.external_deps_patterns
505
+ local subdirs = cfg.external_deps_subdirs
506
+ if mode == "install" then
507
+ patterns = cfg.runtime_external_deps_patterns
508
+ subdirs = cfg.runtime_external_deps_subdirs
509
+ end
510
+ if rockspec.external_dependencies then
511
+ for name, files in pairs(rockspec.external_dependencies) do
512
+ local ok = true
513
+ local failed_file = nil
514
+ local failed_dirname = nil
515
+ for _, extdir in ipairs(cfg.external_deps_dirs) do
516
+ ok = true
517
+ local prefix = vars[name.."_DIR"]
518
+ local dirs = {
519
+ BINDIR = { subdir = subdirs.bin, testfile = "program", pattern = patterns.bin },
520
+ INCDIR = { subdir = subdirs.include, testfile = "header", pattern = patterns.include },
521
+ LIBDIR = { subdir = subdirs.lib, testfile = "library", pattern = patterns.lib }
522
+ }
523
+ if mode == "install" then
524
+ dirs.INCDIR = nil
525
+ end
526
+ if not prefix then
527
+ prefix = extdir
528
+ end
529
+ if type(prefix) == "table" then
530
+ if prefix.bin then
531
+ dirs.BINDIR.subdir = prefix.bin
532
+ end
533
+ if prefix.include then
534
+ if dirs.INCDIR then
535
+ dirs.INCDIR.subdir = prefix.include
536
+ end
537
+ end
538
+ if prefix.lib then
539
+ dirs.LIBDIR.subdir = prefix.lib
540
+ end
541
+ prefix = prefix.prefix
542
+ end
543
+ for dirname, dirdata in pairs(dirs) do
544
+ dirdata.dir = vars[name.."_"..dirname] or dir.path(prefix, dirdata.subdir)
545
+ local file = files[dirdata.testfile]
546
+ if file then
547
+ local files = {}
548
+ if not file:match("%.") then
549
+ for _, pattern in ipairs(dirdata.pattern) do
550
+ table.insert(files, (pattern:gsub("?", file)))
551
+ end
552
+ else
553
+ table.insert(files, file)
554
+ end
555
+ local found = false
556
+ failed_file = nil
557
+ for _, f in pairs(files) do
558
+ -- small convenience hack
559
+ if f:match("%.so$") or f:match("%.dylib$") or f:match("%.dll$") then
560
+ f = f:gsub("%.[^.]+$", "."..cfg.external_lib_extension)
561
+ end
562
+ if f:match("%*") then
563
+ local replaced = f:gsub("%.", "%%."):gsub("%*", ".*")
564
+ for _, entry in ipairs(fs.list_dir(dirdata.dir)) do
565
+ if entry:match(replaced) then
566
+ found = true
567
+ break
568
+ end
569
+ end
570
+ else
571
+ found = fs.is_file(dir.path(dirdata.dir, f))
572
+ end
573
+ if found then
574
+ break
575
+ else
576
+ if failed_file then
577
+ failed_file = failed_file .. ", or " .. f
578
+ else
579
+ failed_file = f
580
+ end
581
+ end
582
+ end
583
+ if not found then
584
+ ok = false
585
+ failed_dirname = dirname
586
+ break
587
+ end
588
+ end
589
+ end
590
+ if ok then
591
+ for dirname, dirdata in pairs(dirs) do
592
+ vars[name.."_"..dirname] = dirdata.dir
593
+ end
594
+ vars[name.."_DIR"] = prefix
595
+ break
596
+ end
597
+ end
598
+ if not ok then
599
+ return nil, "Could not find expected file "..failed_file.." for "..name.." -- you may have to install "..name.." in your system and/or pass "..name.."_DIR or "..name.."_"..failed_dirname.." to the luarocks command. Example: luarocks install "..rockspec.name.." "..name.."_DIR=/usr/local", "dependency"
600
+ end
601
+ end
602
+ end
603
+ return true
604
+ end
605
+
606
+ --- Recursively scan dependencies, to build a transitive closure of all
607
+ -- dependent packages.
608
+ -- @param results table: The results table being built.
609
+ -- @param missing table: The table of missing dependencies being recursively built.
610
+ -- @param manifest table: The manifest table containing dependencies.
611
+ -- @param name string: Package name.
612
+ -- @param version string: Package version.
613
+ -- @return (table, table): The results and a table of missing dependencies.
614
+ function scan_deps(results, missing, manifest, name, version)
615
+ assert(type(results) == "table")
616
+ assert(type(missing) == "table")
617
+ assert(type(manifest) == "table")
618
+ assert(type(name) == "string")
619
+ assert(type(version) == "string")
620
+
621
+ local fetch = require("luarocks.fetch")
622
+
623
+ local err
624
+ if results[name] then
625
+ return results, missing
626
+ end
627
+ if not manifest.dependencies then manifest.dependencies = {} end
628
+ local dependencies = manifest.dependencies
629
+ if not dependencies[name] then dependencies[name] = {} end
630
+ local dependencies_name = dependencies[name]
631
+ local deplist = dependencies_name[version]
632
+ local rockspec, err
633
+ if not deplist then
634
+ rockspec, err = fetch.load_local_rockspec(path.rockspec_file(name, version))
635
+ if err then
636
+ missing[name.." "..version] = err
637
+ return results, missing
638
+ end
639
+ dependencies_name[version] = rockspec.dependencies
640
+ else
641
+ rockspec = { dependencies = deplist }
642
+ end
643
+ local matched, failures = match_deps(rockspec)
644
+ for _, match in pairs(matched) do
645
+ results, missing = scan_deps(results, missing, manifest, match.name, match.version)
646
+ end
647
+ if next(failures) then
648
+ for _, failure in pairs(failures) do
649
+ missing[show_dep(failure)] = "failed"
650
+ end
651
+ end
652
+ results[name] = version
653
+ return results, missing
654
+ end