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,225 @@
1
+ -- Working with manifest and dist.info files
2
+
3
+ module ("dist.manifest", package.seeall)
4
+
5
+ local cfg = require "dist.config"
6
+ local git = require "dist.git"
7
+ local sys = require "dist.sys"
8
+ local utils = require "dist.utils"
9
+
10
+ -- Return the manifest table from 'manifest_file'. If the manifest is in cache,
11
+ -- then the cached version is used. You can set the cache timeout value in
12
+ -- 'config.cache_timeout' variable.
13
+ -- If optional 'force_no_cache' parameter is true, then the cache is not used.
14
+ function get_manifest(manifest_file, force_no_cache)
15
+ manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
16
+ force_no_cache = force_no_cache or false
17
+
18
+ assert(type(manifest_file) == "string", "manifest.get_manifest: Argument 'manifest_file' is not a string.")
19
+ assert(type(force_no_cache) == "boolean", "manifest.get_manifest: Argument 'force_no_cache' is not a boolean.")
20
+ manifest_file = sys.abs_path(manifest_file)
21
+
22
+ -- download new manifest to the cache if not present or cache not used or cache expired
23
+ if not sys.exists(manifest_file) or force_no_cache or not cfg.cache or utils.cache_timeout_expired(cfg.cache_timeout, manifest_file) then
24
+ local manifest_dest = sys.parent_dir(manifest_file) or sys.current_dir()
25
+ local ok, err = download_manifest(manifest_dest, cfg.repos)
26
+ if not ok then return nil, "Error when downloading manifest: " .. err end
27
+ end
28
+
29
+ -- load manifest from cache
30
+ local manifest, err = load_manifest(manifest_file)
31
+ if not manifest then return nil, "Error when loading manifest: " .. err end
32
+
33
+ return manifest
34
+ end
35
+
36
+ -- Download manifest from the table of git 'repository_urls' to 'dest_dir' and return true on success
37
+ -- and nil and error message on error.
38
+ function download_manifest(dest_dir, repository_urls)
39
+ dest_dir = dest_dir or sys.make_path(cfg.root_dir, cfg.cache_dir)
40
+ repository_urls = repository_urls or cfg.repos
41
+ if type(repository_urls) == "string" then repository_urls = {repository_urls} end
42
+
43
+ assert(type(dest_dir) == "string", "manifest.download_manifest: Argument 'dest_dir' is not a string.")
44
+ assert(type(repository_urls) == "table", "manifest.download_manifest: Argument 'repository_urls' is not a table or string.")
45
+ dest_dir = sys.abs_path(dest_dir)
46
+
47
+ -- define used files and directories
48
+ local manifest_filename = sys.extract_name(cfg.manifest_file)
49
+ local manifest_file = sys.make_path(dest_dir, manifest_filename)
50
+ local temp_dir = sys.make_path(cfg.root_dir, cfg.temp_dir)
51
+
52
+ -- ensure that destination directory exists
53
+ local ok, err = sys.make_dir(dest_dir)
54
+ if not ok then return nil, err end
55
+
56
+ -- retrieve manifests from repositories and collect them into one manifest table
57
+ local manifest = {}
58
+
59
+ if #repository_urls == 0 then return nil, "No repository url specified." end
60
+
61
+ print("Downloading repository information...")
62
+ for k, repo in pairs(repository_urls) do
63
+ local clone_dir = sys.make_path(temp_dir, "repository_" .. tostring(k))
64
+
65
+ -- clone the repo and add its '.gitmodules' file to the manifest table
66
+
67
+ ok, err = git.create_repo(clone_dir)
68
+
69
+ local sha
70
+ if ok then sha, err = git.fetch_branch(clone_dir, repo, "master") end
71
+ if sha then ok, err = git.checkout_sha(sha, clone_dir) end
72
+
73
+ if not (ok and sha) then
74
+ if not cfg.debug then sys.delete(clone_dir) end
75
+ return nil, "Error when downloading the manifest from repository with url: '" .. repo .. "': " .. err
76
+ else
77
+ for _, pkg in pairs(load_manifest(sys.make_path(clone_dir, ".gitmodules"))) do
78
+ table.insert(manifest, pkg)
79
+ end
80
+ end
81
+ if not cfg.debug then sys.delete(clone_dir) end
82
+ end
83
+
84
+ -- save the new manifest table to the file
85
+ ok, err = save_manifest(manifest, manifest_file)
86
+ if not ok then return nil, err end
87
+
88
+ return true
89
+ end
90
+
91
+ -- Load and return manifest table from the manifest file.
92
+ -- If manifest file not present, return nil.
93
+ function load_manifest(manifest_file)
94
+ manifest_file = manifest_file or sys.make_path(cfg.root_dir, cfg.manifest_file)
95
+ assert(type(manifest_file) == "string", "manifest.load_manifest: Argument 'manifest_file' is not a string.")
96
+ manifest_file = sys.abs_path(manifest_file)
97
+
98
+ if sys.exists(manifest_file) then
99
+ -- load the manifest file
100
+ local file, err = io.open(manifest_file, "r")
101
+ if not file then return nil, "Error when opening the manifest file '" .. manifest_file .. "':" .. err end
102
+
103
+ local mf_text = file:read("*a")
104
+ file:close()
105
+ if not mf_text then return nil, "Error when reading the manifest file '" .. manifest_file .. "':" .. err end
106
+
107
+ manifest = {}
108
+ for url in mf_text:gmatch("git://%S+.git") do
109
+ pkg = {name = url:match("git:/.+/.+/(.*).git$"), version = "scm", path = url}
110
+ table.insert(manifest, pkg)
111
+ end
112
+
113
+ return manifest
114
+ else
115
+ return nil, "Error when loading the manifest: file '" .. manifest_file .. "' doesn't exist."
116
+ end
117
+ end
118
+
119
+ -- Save manifest table to the 'file'
120
+ function save_manifest(manifest_table, file)
121
+ assert(type(manifest_table) == "table", "manifest.save_distinfo: Argument 'manifest_table' is not a table.")
122
+ assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
123
+ file = sys.abs_path(file)
124
+
125
+ -- Print table 'tbl' to io stream 'file'.
126
+ local function print_table(file, tbl, in_nested_table)
127
+ for k, v in pairs(tbl) do
128
+ -- print key
129
+ if in_nested_table then file:write("\t\t") end
130
+ if type(k) ~= "number" then
131
+ file:write("['" .. k .. "']" .. " = ")
132
+ end
133
+ -- print value
134
+ if type(v) == "table" then
135
+ file:write("{\n")
136
+ print_table(file, v, true)
137
+ if in_nested_table then file:write("\t") end
138
+ file:write("\t}")
139
+ else
140
+ if in_nested_table then file:write("\t") end
141
+ if type(v) == "string" then
142
+ file:write('[[' .. v .. ']]')
143
+ else
144
+ file:write(v)
145
+ end
146
+ end
147
+ file:write(",\n")
148
+ end
149
+ end
150
+
151
+ local manifest_file = io.open(file, "w")
152
+ if not manifest_file then return nil, "Error when saving manifest: cannot open the file '" .. file .. "'." end
153
+
154
+ manifest_file:write('return {\n')
155
+ print_table(manifest_file, manifest_table)
156
+ manifest_file:write('},\ntrue')
157
+ manifest_file:close()
158
+
159
+ return true
160
+ end
161
+
162
+ -- Load and return package info table from the distinfo_file file.
163
+ -- If file not present, return nil.
164
+ function load_distinfo(distinfo_file)
165
+ assert(type(distinfo_file) == "string", "manifest.load_distinfo: Argument 'distinfo_file' is not a string.")
166
+ distinfo_file = sys.abs_path(distinfo_file)
167
+
168
+ if not sys.exists(distinfo_file) then
169
+ return nil, "Error when loading the package info: file '" .. distinfo_file .. "' doesn't exist."
170
+ end
171
+
172
+ -- load the distinfo file
173
+ local distinfo, err = loadfile(distinfo_file)
174
+ if not distinfo then return nil, "Error when loading package info:" .. err end
175
+
176
+ -- set clear environment for the distinfo file execution and collect values into it
177
+ local distinfo_env = {}
178
+ setfenv(distinfo, distinfo_env)
179
+ distinfo()
180
+
181
+ return distinfo_env
182
+ end
183
+
184
+ -- Save distinfo table to the 'file'
185
+ function save_distinfo(distinfo_table, file)
186
+ assert(type(distinfo_table) == "table", "manifest.save_distinfo: Argument 'distinfo_table' is not a table.")
187
+ assert(type(file) == "string", "manifest.save_distinfo: Argument 'file' is not a string.")
188
+ file = sys.abs_path(file)
189
+
190
+ -- Print table 'tbl' to io stream 'file'.
191
+ local function print_table(file, tbl, in_nested_table)
192
+ for k, v in pairs(tbl) do
193
+ -- print key
194
+ if type(k) ~= "number" then
195
+ file:write(k .. " = ")
196
+ end
197
+ -- print value
198
+ if type(v) == "table" then
199
+ file:write("{\n")
200
+ print_table(file, v, true)
201
+ file:write("}\n")
202
+ elseif type(v) == "string" then
203
+ if in_nested_table then
204
+ file:write('[[' .. v .. ']]')
205
+ else
206
+ file:write('"' .. v .. '"')
207
+ end
208
+ else
209
+ file:write(v)
210
+ end
211
+ if in_nested_table then
212
+ file:write(",")
213
+ end
214
+ file:write("\n")
215
+ end
216
+ end
217
+
218
+ local distinfo_file = io.open(file, "w")
219
+ if not distinfo_file then return nil, "Error when saving dist-info table: cannot open the file '" .. file .. "'." end
220
+
221
+ print_table(distinfo_file, distinfo_table)
222
+ distinfo_file:close()
223
+
224
+ return true
225
+ end
@@ -0,0 +1,583 @@
1
+ -- Package functions
2
+
3
+ module ("dist.package", package.seeall)
4
+
5
+ local cfg = require "dist.config"
6
+ local git = require "dist.git"
7
+ local sys = require "dist.sys"
8
+ local mf = require "dist.manifest"
9
+ local utils = require "dist.utils"
10
+ local depends = require "dist.depends"
11
+
12
+ -- Remove package from 'pkg_distinfo_dir' of 'deploy_dir'.
13
+ function remove_pkg(pkg_distinfo_dir, deploy_dir)
14
+ deploy_dir = deploy_dir or cfg.root_dir
15
+ assert(type(pkg_distinfo_dir) == "string", "package.remove_pkg: Argument 'pkg_distinfo_dir' is not a string.")
16
+ assert(type(deploy_dir) == "string", "package.remove_pkg: Argument 'deploy_dir' is not a string.")
17
+ deploy_dir = sys.abs_path(deploy_dir)
18
+
19
+ local abs_pkg_distinfo_dir = sys.make_path(deploy_dir, pkg_distinfo_dir)
20
+
21
+ -- check for 'dist.info'
22
+ local info, err = mf.load_distinfo(sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
23
+ if not info then return nil, "Error removing package from '" .. pkg_distinfo_dir .. "' - it doesn't contain valid 'dist.info' file." end
24
+ if not info.files then return nil, "File '" .. sys.make_path(pkg_distinfo_dir, "dist.info") .."' doesn't contain list of installed files." end
25
+
26
+ -- remove files installed as components of this package
27
+ for _, component in ipairs(cfg.components) do
28
+ if info.files[component] then
29
+ for i = #info.files[component], 1, -1 do
30
+ local f = info.files[component][i]
31
+ f = sys.make_path(deploy_dir,f)
32
+ if sys.is_file(f) then
33
+ sys.delete(f)
34
+ elseif sys.is_dir(f) then
35
+ local dir_files, err = sys.get_file_list(f)
36
+ if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
37
+ if #dir_files == 0 then sys.delete(f) end
38
+ end
39
+ -- delete also all parent directories if empty
40
+ local parents = sys.parents_up_to(f, deploy_dir)
41
+ for _, parent in ipairs(parents) do
42
+ if sys.is_dir(parent) then
43
+ local dir_files, err = sys.get_file_list(parent)
44
+ if not dir_files then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "': " .. err end
45
+ if #dir_files == 0 then
46
+ sys.delete(parent)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ -- remove removed components also from 'dist.info'
55
+ for _, component in ipairs(cfg.components) do
56
+ info.files[component] = nil
57
+ end
58
+
59
+ -- delete the package information from deploy_dir
60
+ local ok = sys.delete(abs_pkg_distinfo_dir)
61
+ if not ok then return nil, "Error removing package in '" .. abs_pkg_distinfo_dir .. "'." end
62
+
63
+ -- if the package was not completely removed (e.g. some components remain),
64
+ -- save the new version of its 'dist.info'
65
+ local comp_num = 0
66
+ for _, _ in pairs(info.files) do comp_num = comp_num + 1 end
67
+ if comp_num ~= 0 then
68
+ sys.make_dir(abs_pkg_distinfo_dir)
69
+ local ok, err = mf.save_distinfo(info, sys.make_path(abs_pkg_distinfo_dir, "dist.info"))
70
+ if not ok then return nil, "Error resaving the 'dist.info': " .. err end
71
+ end
72
+
73
+ return ok
74
+ end
75
+
76
+ -- Install package from 'pkg_dir' to 'deploy_dir', using optional CMake 'variables'.
77
+ -- Optional 'preserve_pkg_dir' argument specified whether to preserve the 'pkg_dir'.
78
+ function install_pkg(pkg_dir, deploy_dir, variables, preserve_pkg_dir)
79
+ deploy_dir = deploy_dir or cfg.root_dir
80
+ variables = variables or {}
81
+ preserve_pkg_dir = preserve_pkg_dir or false
82
+
83
+ assert(type(pkg_dir) == "string", "package.install_pkg: Argument 'pkg_dir' is not a string.")
84
+ assert(type(deploy_dir) == "string", "package.install_pkg: Argument 'deploy_dir' is not a string.")
85
+ assert(type(variables) == "table", "package.install_pkg: Argument 'variables' is not a table.")
86
+ assert(type(preserve_pkg_dir) == "boolean", "package.install_pkg: Argument 'preserve_pkg_dir' is not a boolean.")
87
+
88
+ pkg_dir = sys.abs_path(pkg_dir)
89
+ deploy_dir = sys.abs_path(deploy_dir)
90
+
91
+ -- check for dist.info
92
+ local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
93
+ if not info then return nil, "Error installing: the directory '" .. pkg_dir .. "' doesn't exist or doesn't contain valid 'dist.info' file." end
94
+
95
+ -- check if the package is source
96
+ if sys.exists(sys.make_path(pkg_dir, "CMakeLists.txt")) then
97
+ info.arch = info.arch or "Universal"
98
+ info.type = info.type or "source"
99
+ end
100
+
101
+ -- check package's architecture
102
+ if info.arch ~= "Universal" and info.arch ~= cfg.arch then
103
+ return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture '" .. info.arch .. "' is not suitable for this machine."
104
+ end
105
+
106
+ -- check package's type
107
+ if info.type ~= "all" and info.type ~= "source" and info.type ~= cfg.type then
108
+ return nil, "Error installing '" .. info.name .. "-" .. info.version .. "': architecture type '" .. info.type .. "' is not suitable for this machine."
109
+ end
110
+
111
+ local ok, err
112
+
113
+ -- if package is of binary type, just deploy it
114
+ if info.type ~= "source" then
115
+ ok, err = deploy_binary_pkg(pkg_dir, deploy_dir)
116
+
117
+ -- else build and then deploy
118
+ else
119
+
120
+ -- check if we have cmake
121
+ ok = utils.system_dependency_available("cmake", "cmake --version")
122
+ if not ok then return nil, "Error when installing: Command 'cmake' not available on the system." end
123
+
124
+ -- set cmake variables
125
+ local cmake_variables = {}
126
+
127
+ -- set variables from config file
128
+ for k, v in pairs(cfg.variables) do
129
+ cmake_variables[k] = v
130
+ end
131
+
132
+ -- set variables specified as argument
133
+ for k, v in pairs(variables) do
134
+ cmake_variables[k] = v
135
+ end
136
+
137
+ cmake_variables.CMAKE_INCLUDE_PATH = table.concat({cmake_variables.CMAKE_INCLUDE_PATH or "", sys.make_path(deploy_dir, "include")}, ";")
138
+ cmake_variables.CMAKE_LIBRARY_PATH = table.concat({cmake_variables.CMAKE_LIBRARY_PATH or "", sys.make_path(deploy_dir, "lib"), sys.make_path(deploy_dir, "bin")}, ";")
139
+ cmake_variables.CMAKE_PROGRAM_PATH = table.concat({cmake_variables.CMAKE_PROGRAM_PATH or "", sys.make_path(deploy_dir, "bin")}, ";")
140
+
141
+ -- build the package and deploy it
142
+ ok, err = build_pkg(pkg_dir, deploy_dir, cmake_variables)
143
+ if not ok then return nil, err end
144
+
145
+ end
146
+
147
+ -- delete directory of fetched package
148
+ if not (cfg.debug or preserve_pkg_dir) then sys.delete(pkg_dir) end
149
+
150
+ return ok, err
151
+ end
152
+
153
+ -- Build and deploy package from 'src_dir' to 'deploy_dir' using 'variables'.
154
+ -- Return directory to which the package was built or nil on error.
155
+ -- 'variables' is table of optional CMake variables.
156
+ function build_pkg(src_dir, deploy_dir, variables)
157
+ deploy_dir = deploy_dir or cfg.root_dir
158
+ variables = variables or {}
159
+
160
+ assert(type(src_dir) == "string", "package.build_pkg: Argument 'src_dir' is not a string.")
161
+ assert(type(deploy_dir) == "string", "package.build_pkg: Argument 'deploy_dir' is not a string.")
162
+ assert(type(variables) == "table", "package.build_pkg: Argument 'variables' is not a table.")
163
+
164
+ src_dir = sys.abs_path(src_dir)
165
+ deploy_dir = sys.abs_path(deploy_dir)
166
+
167
+ -- check for dist.info
168
+ local info, err = mf.load_distinfo(sys.make_path(src_dir, "dist.info"))
169
+ if not info then return nil, "Error building package from '" .. src_dir .. "': it doesn't contain valid 'dist.info' file." end
170
+ local pkg_name = info.name .. "-" .. info.version
171
+
172
+ -- set machine information
173
+ info.arch = cfg.arch
174
+ info.type = cfg.type
175
+
176
+ -- create CMake build dir
177
+ local cmake_build_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir, pkg_name .. "-CMake-build"))
178
+ sys.make_dir(cmake_build_dir)
179
+
180
+ -- create cmake cache
181
+ variables["CMAKE_INSTALL_PREFIX"] = deploy_dir
182
+ local cache_file = io.open(sys.make_path(cmake_build_dir, "cache.cmake"), "w")
183
+ if not cache_file then return nil, "Error creating CMake cache file in '" .. cmake_build_dir .. "'" end
184
+
185
+ -- Fill in cache variables
186
+ for k,v in pairs(variables) do
187
+ cache_file:write("SET(" .. k .. " " .. sys.quote(v):gsub("\\+", "/") .. " CACHE STRING \"\" FORCE)\n")
188
+ end
189
+
190
+ -- If user cache file is provided then append it
191
+ if cfg.cache_file ~= "" then
192
+ local user_cache = io.open(sys.abs_path(cfg.cache_file), "r")
193
+ if user_cache then
194
+ cache_file:write(user_cache:read("*all").."\n")
195
+ user_cache:close()
196
+ end
197
+ end
198
+ cache_file:close()
199
+
200
+ src_dir = sys.abs_path(src_dir)
201
+ print("Building " .. sys.extract_name(src_dir) .. "...")
202
+
203
+ -- set cmake cache command
204
+ local cache_command = cfg.cache_command
205
+ if cfg.debug then cache_command = cache_command .. " " .. cfg.cache_debug_options end
206
+
207
+ -- set cmake build command
208
+ local build_command = cfg.build_command
209
+ if cfg.debug then build_command = build_command .. " " .. cfg.build_debug_options end
210
+
211
+ -- set the cmake cache
212
+ local ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. cache_command .. " " .. sys.quote(src_dir))
213
+ if not ok then return nil, "Error preloading the CMake cache script '" .. sys.make_path(cmake_build_dir, "cmake.cache") .. "'" end
214
+
215
+ -- build with cmake
216
+ ok = sys.exec("cd " .. sys.quote(cmake_build_dir) .. " && " .. build_command)
217
+ if not ok then return nil, "Error building with CMake in directory '" .. cmake_build_dir .. "'" end
218
+
219
+ -- if this is only simulation, exit sucessfully, skipping the next actions
220
+ if cfg.simulate then
221
+ return true, "Simulated build and deployment of package '" .. pkg_name .. "' sucessfull."
222
+ end
223
+
224
+ -- table to collect files installed in the components
225
+ info.files = {}
226
+
227
+ local build_dir = sys.quote(cmake_build_dir)
228
+ -- install the components
229
+ for _, component in ipairs(cfg.components) do
230
+ local strip_option = ""
231
+ if not cfg.debug and component ~= "Library" then strip_option = cfg.strip_option end
232
+
233
+ local ok = sys.exec("cd " .. build_dir .. " && " .. cfg.cmake .. " " .. strip_option .. " " ..cfg.install_component_command:gsub("#COMPONENT#", component))
234
+
235
+ if not ok then return nil, "Error when installing the component '" .. component .. "' with CMake in directory '" .. cmake_build_dir .. "'" end
236
+
237
+ local install_mf = sys.make_path(cmake_build_dir, "install_manifest_" .. component .. ".txt")
238
+ local mf, err
239
+ local component_files = {}
240
+
241
+ -- collect files installed in this component
242
+ if sys.exists(install_mf) then
243
+ mf, err = io.open(install_mf, "r")
244
+ if not mf then return nil, "Error when opening the CMake installation manifest '" .. install_mf .. "': " .. err end
245
+ for line in mf:lines() do
246
+ line = sys.check_separators(line)
247
+ local file = line:gsub(utils.escape_magic(deploy_dir .. sys.path_separator()), "")
248
+ table.insert(component_files, file)
249
+ end
250
+ mf:close()
251
+
252
+ -- add list of component files to the 'dist.info'
253
+ if #component_files > 0 then info.files[component] = component_files end
254
+ end
255
+ end
256
+ -- if bookmark == 0 then return nil, "Package did not install any files!" end
257
+
258
+ -- test with ctest
259
+ if cfg.test then
260
+ print("Testing " .. sys.extract_name(src_dir) .. " ...")
261
+ ok = sys.exec("cd " .. sys.quote(deploy_dir) .. " && " .. cfg.test_command)
262
+ if not ok then return nil, "Error when testing the module '" .. pkg_name .. "' with CTest." end
263
+ end
264
+
265
+ -- save modified 'dist.info' file
266
+ local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
267
+ sys.make_dir(pkg_distinfo_dir)
268
+ ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
269
+ if not ok then return nil, err end
270
+
271
+ -- clean up
272
+ if not cfg.debug then sys.delete(cmake_build_dir) end
273
+
274
+ return true, "Package '" .. pkg_name .. "' successfully builded and deployed to '" .. deploy_dir .. "'."
275
+ end
276
+
277
+ -- Deploy binary package from 'pkg_dir' to 'deploy_dir' by copying.
278
+ function deploy_binary_pkg(pkg_dir, deploy_dir)
279
+ deploy_dir = deploy_dir or cfg.root_dir
280
+
281
+ assert(type(pkg_dir) == "string", "package.deploy_binary_pkg: Argument 'pkg_dir' is not a string.")
282
+ assert(type(deploy_dir) == "string", "package.deploy_binary_pkg: Argument 'deploy_dir' is not a string.")
283
+
284
+ pkg_dir = sys.abs_path(pkg_dir)
285
+ deploy_dir = sys.abs_path(deploy_dir)
286
+
287
+ -- check for dist.info
288
+ local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
289
+ if not info then return nil, "Error deploying package from '" .. pkg_dir .. "': it doesn't contain valid 'dist.info' file." end
290
+ local pkg_name = info.name .. "-" .. info.version
291
+
292
+ -- if this is only simulation, exit sucessfully, skipping the next actions
293
+ if cfg.simulate then
294
+ return true, "Simulated deployment of package '" .. pkg_name .. "' sucessfull."
295
+ end
296
+
297
+ -- copy all components of the module to the deploy_dir
298
+ for _, component in ipairs(cfg.components) do
299
+ if info.files[component] then
300
+ for _, file in ipairs(info.files[component]) do
301
+ local dest_dir = sys.make_path(deploy_dir, sys.parent_dir(file))
302
+
303
+ local ok, err = sys.make_dir(dest_dir)
304
+ if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot create directory '" .. dest_dir .. "': " .. err end
305
+
306
+ ok, err = sys.copy(sys.make_path(pkg_dir, file), dest_dir)
307
+ if not ok then return nil, "Error when deploying package '" .. pkg_name .. "': cannot copy file '" .. file .. "' to the directory '" .. dest_dir .. "': " .. err end
308
+ end
309
+ end
310
+ end
311
+
312
+ -- copy dist.info to register the module as installed
313
+ local pkg_distinfo_dir = sys.make_path(deploy_dir, cfg.distinfos_dir, pkg_name)
314
+ sys.make_dir(pkg_distinfo_dir)
315
+ ok, err = mf.save_distinfo(info, sys.make_path(pkg_distinfo_dir, "dist.info"))
316
+ if not ok then return nil, err end
317
+
318
+ return true, "Package '" .. pkg_name .. "' successfully deployed to '" .. deploy_dir .. "'."
319
+ end
320
+
321
+ -- Fetch package (table 'pkg') to download_dir. Return path to the directory of
322
+ -- downloaded package on success or an error message on error.
323
+ function fetch_pkg(pkg, download_dir)
324
+ download_dir = download_dir or sys.current_dir()
325
+ assert(type(pkg) == "table", "package.fetch_pkg: Argument 'pkg' is not a table.")
326
+ assert(type(download_dir) == "string", "package.fetch_pkg: Argument 'download_dir' is not a string.")
327
+ assert(type(pkg.name) == "string", "package.fetch_pkg: Argument 'pkg.name' is not a string.")
328
+ assert(type(pkg.version) == "string", "package.fetch_pkg: Argument 'pkg.version' is not a string.")
329
+ assert(type(pkg.path) == "string", "package.fetch_pkg: Argument 'pkg.path' is not a string.")
330
+ download_dir = sys.abs_path(download_dir)
331
+
332
+ local pkg_full_name = pkg.name .. "-" .. pkg.version
333
+ local repo_url = pkg.path
334
+ local clone_dir = sys.abs_path(sys.make_path(download_dir, pkg_full_name))
335
+
336
+ -- check if download_dir already exists, assuming the package was already downloaded
337
+ if sys.exists(sys.make_path(clone_dir, "dist.info")) then
338
+ if cfg.cache and not utils.cache_timeout_expired(cfg.cache_timeout, clone_dir) then
339
+ print("'" .. pkg_full_name .. "' already in cache, skipping downloading (use '-cache=false' to force download).")
340
+ return clone_dir
341
+ else
342
+ sys.delete(sys.make_path(clone_dir))
343
+ end
344
+ end
345
+
346
+ local bin_tag = pkg.version .. "-" .. cfg.arch .. "-" .. cfg.type
347
+ local use_binary = false
348
+
349
+ if cfg.binary then
350
+ -- check if binary version of the module for this arch & type available
351
+ local avail_tags, err = git.get_remote_tags(repo_url)
352
+ if not avail_tags then return nil, err end
353
+
354
+ if utils.contains(avail_tags, bin_tag) then
355
+ use_binary = true
356
+ end
357
+ end
358
+
359
+ -- init the git repository
360
+ local ok, err = git.create_repo(clone_dir)
361
+ if not ok then return nil, err end
362
+
363
+ -- Fetch the desired ref (from the pkg's remote repo) and checkout into it.
364
+
365
+ if use_binary then
366
+
367
+ print("Getting " .. pkg_full_name .. " (binary)...")
368
+
369
+ -- We fetch the binary tag.
370
+ local sha
371
+ if ok then sha, err = git.fetch_tag(clone_dir, repo_url, bin_tag) end
372
+ if sha then ok, err = git.checkout_sha(sha, clone_dir) end
373
+
374
+ elseif cfg.source then
375
+
376
+ print("Getting " .. pkg_full_name .. " (source)...")
377
+
378
+ -- If we want the 'scm' version, we fetch the 'master' branch, otherwise
379
+ -- we fetch the tag, matching the desired package version.
380
+ if ok and pkg.version ~= "scm" then
381
+ local sha
382
+ sha, err = git.fetch_tag(clone_dir, repo_url, pkg.version)
383
+ if sha then ok, err = git.checkout_sha(sha, clone_dir) end
384
+ elseif ok then
385
+ local sha
386
+ sha, err = git.fetch_branch(clone_dir, repo_url, "master")
387
+ if sha then ok, err = git.checkout_sha(sha, clone_dir) end
388
+ end
389
+
390
+ else
391
+ ok = false
392
+ if cfg.binary then
393
+ err = "Binary version of module not available and using source modules disabled."
394
+ else
395
+ err = "Using both binary and source modules disabled."
396
+ end
397
+ end
398
+
399
+ if not ok then
400
+ -- clean up
401
+ if not cfg.debug then sys.delete(clone_dir) end
402
+ return nil, "Error fetching package '" .. pkg_full_name .. "' from '" .. pkg.path .. "' to '" .. download_dir .. "': " .. err
403
+ end
404
+
405
+ -- delete '.git' directory
406
+ if not cfg.debug then sys.delete(sys.make_path(clone_dir, ".git")) end
407
+
408
+ return clone_dir
409
+ end
410
+
411
+ -- Fetch packages (table 'packages') to 'download_dir'. Return table of paths
412
+ -- to the directories on success or an error message on error.
413
+ function fetch_pkgs(packages, download_dir)
414
+ download_dir = download_dir or sys.current_dir()
415
+ assert(type(packages) == "table", "package.fetch_pkgs: Argument 'packages' is not a table.")
416
+ assert(type(download_dir) == "string", "package.fetch_pkgs: Argument 'download_dir' is not a string.")
417
+ download_dir = sys.abs_path(download_dir)
418
+
419
+ local fetched_dirs = {}
420
+ local dir, err
421
+
422
+ for _, pkg in pairs(packages) do
423
+ -- if package was downloaded by dependency resolving function, do not download it again.
424
+ if pkg.download_dir then
425
+ dir, err = pkg.download_dir, nil
426
+ -- else download it.
427
+ else
428
+ dir, err = fetch_pkg(pkg, download_dir)
429
+ end
430
+ if not dir then
431
+ return nil, err
432
+ else
433
+ table.insert(fetched_dirs, dir)
434
+ end
435
+ end
436
+
437
+ return fetched_dirs
438
+ end
439
+
440
+ -- Return table with information about available versions of 'package'.
441
+ function retrieve_versions(package, manifest)
442
+ assert(type(package) == "string", "package.retrieve_versions: Argument 'string' is not a string.")
443
+ assert(type(manifest) == "table", "package.retrieve_versions: Argument 'manifest' is not a table.")
444
+
445
+ -- get package table
446
+ local pkg_name = depends.split_name_constraint(package)
447
+ local tmp_packages = depends.find_packages(pkg_name, manifest)
448
+
449
+ if #tmp_packages == 0 then
450
+ return nil, "No suitable candidate for package '" .. package .. "' found."
451
+ else
452
+ package = tmp_packages[1]
453
+ end
454
+
455
+ print("Finding out available versions of " .. package.name .. "...")
456
+
457
+ -- get available versions
458
+ local tags, err = git.get_remote_tags(package.path)
459
+ if not tags then return nil, "Error when retrieving versions of package '" .. package.name .. "': " .. err end
460
+
461
+ -- filter out tags of binary packages
462
+ local versions = utils.filter(tags, function (tag) return tag:match("^[^%-]+%-?[^%-]*$") and true end)
463
+
464
+ packages = {}
465
+
466
+ -- create package information
467
+ for _, version in pairs(versions) do
468
+ pkg = {}
469
+ pkg.name = package.name
470
+ pkg.version = version
471
+ pkg.path = package.path
472
+ table.insert(packages, pkg)
473
+ end
474
+
475
+ return packages
476
+ end
477
+
478
+ -- Return table with information from package's dist.info and path to downloaded
479
+ -- package. Optional argument 'deploy_dir' is used just as a temporary
480
+ -- place to place the downloaded packages into.
481
+ function retrieve_pkg_info(package, deploy_dir)
482
+ deploy_dir = deploy_dir or cfg.root_dir
483
+ assert(type(package) == "table", "package.retrieve_pkg_info: Argument 'package' is not a table.")
484
+ assert(type(deploy_dir) == "string", "package.retrieve_pkg_info: Argument 'deploy_dir' is not a string.")
485
+ deploy_dir = sys.abs_path(deploy_dir)
486
+
487
+ local tmp_dir = sys.abs_path(sys.make_path(deploy_dir, cfg.temp_dir))
488
+
489
+ -- download the package
490
+ local pkg_dir, err = fetch_pkg(package, tmp_dir)
491
+ if not pkg_dir then return nil, "Error when retrieving the info about '" .. package.name .. "': " .. err end
492
+
493
+ -- load information from 'dist.info'
494
+ local info, err = mf.load_distinfo(sys.make_path(pkg_dir, "dist.info"))
495
+ if not info then return nil, err end
496
+
497
+ -- add 'path' attribute
498
+ if package.path then info.path = package.path end
499
+
500
+ -- set default arch/type if not explicitly stated and package is of source type
501
+ if sys.exists(sys.make_path(pkg_dir, "CMakeLists.txt")) then
502
+ info.arch = info.arch or "Universal"
503
+ info.type = info.type or "source"
504
+ elseif not (info.arch and info.type) then
505
+ return nil, pkg_dir .. ": binary package missing arch or type in 'dist.info'."
506
+ end
507
+
508
+ return info, pkg_dir
509
+ end
510
+
511
+ -- Return manifest, augmented with info about all available versions
512
+ -- of package 'pkg'. Optional argument 'deploy_dir' is used just as a temporary
513
+ -- place to place the downloaded packages into.
514
+ -- Optional argument 'installed' is manifest of all installed packages. When
515
+ -- specified, info from installed packages won't be downloaded from repo,
516
+ -- but the dist.info from installed package will be used.
517
+ function get_versions_info(pkg, manifest, deploy_dir, installed)
518
+ deploy_dir = deploy_dir or cfg.root_dir
519
+ assert(type(pkg) == "string", "package.get_versions_info: Argument 'pkg' is not a string.")
520
+ assert(type(manifest) == "table", "package.get_versions_info: Argument 'manifest' is not a table.")
521
+ assert(type(deploy_dir) == "string", "package.get_versions_info: Argument 'deploy_dir' is not a string.")
522
+ deploy_dir = sys.abs_path(deploy_dir)
523
+
524
+ -- find all available versions of package
525
+ local versions, err = retrieve_versions(pkg, manifest)
526
+ if not versions then return nil, err end
527
+
528
+ -- collect info about all retrieved versions
529
+ local infos = {}
530
+ for _, version in pairs(versions) do
531
+
532
+ local info, path_or_err
533
+ local installed_version = {}
534
+
535
+ -- find out whether this 'version' is installed so we can use it's dist.info
536
+ if type(installed) == "table" then installed_version = depends.find_packages(version.name .. "-" .. version.version, installed) end
537
+
538
+ -- get info
539
+ if #installed_version > 0 then
540
+ print("Using dist.info from installed " .. version.name .. "-" .. version.version)
541
+ info = installed_version[1]
542
+ info.path = version.path
543
+ info.from_installed = true -- flag that dist.info of installed package was used
544
+ else
545
+ info, path_or_err = retrieve_pkg_info(version, deploy_dir)
546
+ if not info then return nil, path_or_err end
547
+ sys.delete(path_or_err)
548
+ end
549
+ table.insert(infos, info)
550
+ end
551
+
552
+ -- found and add an implicit 'scm' version
553
+ local pkg_name = depends.split_name_constraint(pkg)
554
+ local found = depends.find_packages(pkg_name, manifest)
555
+ if #found == 0 then return nil, "No suitable candidate for package '" .. pkg .. "' found." end
556
+ local scm_info, path_or_err = retrieve_pkg_info({name = pkg_name, version = "scm", path = found[1].path})
557
+ if not scm_info then return nil, path_or_err end
558
+ sys.delete(path_or_err)
559
+ scm_info.version = "scm"
560
+ table.insert(infos, scm_info)
561
+
562
+ local tmp_manifest = utils.deepcopy(manifest)
563
+
564
+ -- add collected info to the temp. manifest, replacing existing tables
565
+ for _, info in pairs(infos) do
566
+ local already_in_manifest = false
567
+ -- find if this version is already in manifest
568
+ for idx, pkg in ipairs(tmp_manifest) do
569
+ -- if yes, replace it
570
+ if pkg.name == info.name and pkg.version == info.version then
571
+ tmp_manifest[idx] = info
572
+ already_in_manifest = true
573
+ break
574
+ end
575
+ end
576
+ -- if not, just normally add to the manifest
577
+ if not already_in_manifest then
578
+ table.insert(tmp_manifest, info)
579
+ end
580
+ end
581
+
582
+ return tmp_manifest
583
+ end