kibi-swipl-linux-x64-gnu 1.0.0

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 (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,670 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: jan@swi-prolog.org
5
+ WWW: https://www.swi-prolog.org
6
+ Copyright (c) 1995-2026, University of Amsterdam
7
+ VU University Amsterdam
8
+ CWI, Amsterdam
9
+ SWI-Prolog Solutions b.v.
10
+ All rights reserved.
11
+
12
+ Redistribution and use in source and binary forms, with or without
13
+ modification, are permitted provided that the following conditions
14
+ are met:
15
+
16
+ 1. Redistributions of source code must retain the above copyright
17
+ notice, this list of conditions and the following disclaimer.
18
+
19
+ 2. Redistributions in binary form must reproduce the above copyright
20
+ notice, this list of conditions and the following disclaimer in
21
+ the documentation and/or other materials provided with the
22
+ distribution.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
+ POSSIBILITY OF SUCH DAMAGE.
36
+ */
37
+
38
+ :- module(shlib,
39
+ [ load_foreign_library/1, % :LibFile
40
+ load_foreign_library/2, % :LibFile, +Options
41
+ unload_foreign_library/1, % +LibFile
42
+ unload_foreign_library/2, % +LibFile, +UninstallFunc
43
+ current_foreign_library/2, % ?LibFile, ?Public
44
+ reload_foreign_libraries/0,
45
+ % Directives
46
+ use_foreign_library/1, % :LibFile
47
+ use_foreign_library/2 % :LibFile, +Options
48
+ ]).
49
+ :- if(current_predicate(win_add_dll_directory/2)).
50
+ :- export(win_add_dll_directory/1).
51
+ :- endif.
52
+
53
+ :- autoload(library(error),[existence_error/2]).
54
+ :- autoload(library(lists),[member/2,reverse/2]).
55
+
56
+ :- set_prolog_flag(generate_debug_info, false).
57
+
58
+ /** <module> Utility library for loading foreign objects (DLLs, shared objects)
59
+
60
+ This section discusses the functionality of the (autoload)
61
+ library(shlib), providing an interface to manage shared libraries. We
62
+ describe the procedure for using a foreign resource (DLL in Windows and
63
+ shared object in Unix) called =mylib=.
64
+
65
+ First, one must assemble the resource and make it compatible to
66
+ SWI-Prolog. The details for this vary between platforms. The
67
+ ``swipl-ld(1)`` utility can be used to deal with this in a portable
68
+ manner. The typical commandline is:
69
+
70
+ ```
71
+ swipl-ld -shared -o mylib file.{c,o,cc,C} ...
72
+ ```
73
+
74
+ Make sure that one of the files provides a global function
75
+ ``install_mylib()`` that initialises the module using calls to
76
+ PL_register_foreign(). Below is a simple example file ``mylib.c``, which
77
+ prints a "hello" message. Note that we use SWI-Prolog's Sprintf() rather
78
+ than C standard printf() to print the outout through Prolog's
79
+ `current_output` stream, making the example work in a windowed
80
+ environment. The standard C printf() works in a console environment, but
81
+ this bypasses Prolog's output redirection. Also note the use of the
82
+ standard C ``bool`` type, which is supported in 9.2.x and more actively
83
+ promoted in the 9.3.x development series.
84
+
85
+ ```
86
+ #include <SWI-Prolog.h>
87
+ #include <SWI-Stream.h>
88
+ #include <stdbool.h>
89
+
90
+ static foreign_t
91
+ pl_say_hello(term_t to)
92
+ { char *s;
93
+
94
+ if ( PL_get_chars(to, &s, CVT_ALL|REP_UTF8) )
95
+ { Sprintf("hello %Us", s);
96
+
97
+ return true;
98
+ }
99
+
100
+ return false;
101
+ }
102
+
103
+ install_t
104
+ install_mylib(void)
105
+ { PL_register_foreign("say_hello", 1, pl_say_hello, 0);
106
+ }
107
+ ```
108
+
109
+ Now write a file mylib.pl:
110
+
111
+ ```
112
+ :- module(mylib, [ say_hello/1 ]).
113
+ :- use_foreign_library(foreign(mylib)).
114
+ ```
115
+
116
+ The file mylib.pl can be loaded as a normal Prolog file and provides the
117
+ predicate defined in C. The generated ``mylib.so`` (or ``.dll``, etc.)
118
+ must be placed in a directory searched for using the Prolog search path
119
+ `foreign` (see absolute_file_name/3). To load this from the current
120
+ directory, we can use the ``-p alias=dir`` option:
121
+
122
+ ```
123
+ swipl -p foreign=. mylib.pl
124
+ ?- say_hello(world).
125
+ hello world
126
+ true.
127
+ ```
128
+ */
129
+
130
+ :- meta_predicate
131
+ load_foreign_library(:),
132
+ load_foreign_library(:, +).
133
+
134
+ :- dynamic
135
+ loading/1, % Lib
136
+ error/2, % File, Error
137
+ foreign_predicate/2, % Lib, Pred
138
+ current_library/5. % Lib, Entry, Path, Module, Handle
139
+
140
+ :- volatile % Do not store in state
141
+ loading/1,
142
+ error/2,
143
+ foreign_predicate/2,
144
+ current_library/5.
145
+
146
+ :- '$notransact'((loading/1,
147
+ error/2,
148
+ foreign_predicate/2,
149
+ current_library/5)).
150
+
151
+ :- ( current_prolog_flag(open_shared_object, true)
152
+ -> true
153
+ ; print_message(warning, shlib(not_supported)) % error?
154
+ ).
155
+
156
+ % The flag `res_keep_foreign` prevents deleting temporary files created
157
+ % to load shared objects when set to `true`. This may be needed for
158
+ % debugging purposes.
159
+
160
+ :- create_prolog_flag(res_keep_foreign, false,
161
+ [ keep(true) ]).
162
+
163
+
164
+ %! use_foreign_library(+FileSpec) is det.
165
+ %! use_foreign_library(+FileSpec, +Options:list) is det.
166
+ %
167
+ % Load and install a foreign library as load_foreign_library/1,2 and
168
+ % register the installation using initialization/2 with the option
169
+ % `now`. This is similar to using:
170
+ %
171
+ % ```
172
+ % :- initialization(load_foreign_library(foreign(mylib))).
173
+ % ```
174
+ %
175
+ % but using the initialization/1 wrapper causes the library to be
176
+ % loaded _after_ loading of the file in which it appears is completed,
177
+ % while use_foreign_library/1 loads the library _immediately_. I.e.
178
+ % the difference is only relevant if the remainder of the file uses
179
+ % functionality of the C-library.
180
+ %
181
+ % As of SWI-Prolog 8.1.22, use_foreign_library/1,2 is in provided as a
182
+ % built-in predicate that, if necessary, loads library(shlib). This
183
+ % implies that these directives can be used without explicitly loading
184
+ % library(shlib) or relying on demand loading.
185
+
186
+
187
+ /*******************************
188
+ * DISPATCHING *
189
+ *******************************/
190
+
191
+ %! find_library(+LibSpec, -Lib, -Delete) is det.
192
+ %
193
+ % Find a foreign library from LibSpec. If LibSpec is available as
194
+ % a resource, the content of the resource is copied to a temporary
195
+ % file and Delete is unified with =true=.
196
+
197
+ find_library(Spec, TmpFile, true) :-
198
+ '$rc_handle'(Zipper),
199
+ term_to_atom(Spec, Name),
200
+ setup_call_cleanup(
201
+ zip_lock(Zipper),
202
+ setup_call_cleanup(
203
+ open_foreign_in_resources(Zipper, Name, In),
204
+ setup_call_cleanup(
205
+ tmp_file_stream(binary, TmpFile, Out),
206
+ copy_stream_data(In, Out),
207
+ close(Out)),
208
+ close(In)),
209
+ zip_unlock(Zipper)),
210
+ !.
211
+ find_library(Spec, Lib, Copy) :-
212
+ absolute_file_name(Spec, Lib0,
213
+ [ file_type(executable),
214
+ access(read),
215
+ file_errors(fail)
216
+ ]),
217
+ !,
218
+ lib_to_file(Lib0, Lib, Copy).
219
+ find_library(Spec, Spec, false) :-
220
+ atom(Spec),
221
+ !. % use machines finding schema
222
+ find_library(foreign(Spec), Spec, false) :-
223
+ atom(Spec),
224
+ !. % use machines finding schema
225
+ find_library(Spec, _, _) :-
226
+ throw(error(existence_error(source_sink, Spec), _)).
227
+
228
+ %! lib_to_file(+Lib0, -Lib, -Copy) is det.
229
+ %
230
+ % If Lib0 is not a regular file we need to copy it to a temporary
231
+ % regular file because dlopen() and Windows LoadLibrary() expect a
232
+ % file name. On some systems this can be avoided. Roughly using two
233
+ % approaches (after discussion with Peter Ludemann):
234
+ %
235
+ % - On FreeBSD there is shm_open() to create an anonymous file in
236
+ % memory and than fdlopen() to link this.
237
+ % - In general, we could redefine the system calls open(), etc. to
238
+ % make dlopen() work on non-files. This is highly non-portably
239
+ % though.
240
+ % - We can mount the resource zip using e.g., `fuse-zip` on Linux.
241
+ % This however fails if we include the resources as a string in
242
+ % the executable.
243
+ %
244
+ % @see https://github.com/fancycode/MemoryModule for Windows
245
+
246
+ lib_to_file(Res, TmpFile, true) :-
247
+ sub_atom(Res, 0, _, _, 'res://'),
248
+ !,
249
+ setup_call_cleanup(
250
+ open(Res, read, In, [type(binary)]),
251
+ setup_call_cleanup(
252
+ tmp_file_stream(binary, TmpFile, Out),
253
+ copy_stream_data(In, Out),
254
+ close(Out)),
255
+ close(In)).
256
+ lib_to_file(Lib, Lib, false).
257
+
258
+
259
+ open_foreign_in_resources(Zipper, ForeignSpecAtom, Stream) :-
260
+ term_to_atom(foreign(Name), ForeignSpecAtom),
261
+ zipper_members_(Zipper, Entries),
262
+ entries_for_name(Entries, Name, Entries1),
263
+ compatible_architecture_lib(Entries1, Name, CompatibleLib),
264
+ zipper_goto(Zipper, file(CompatibleLib)),
265
+ zipper_open_current(Zipper, Stream,
266
+ [ type(binary),
267
+ release(true)
268
+ ]).
269
+
270
+ %! zipper_members_(+Zipper, -Members) is det.
271
+ %
272
+ % Simplified version of zipper_members/2 from library(zip). We already
273
+ % have a lock on the zipper and by moving this here we avoid
274
+ % dependency on another library.
275
+ %
276
+ % @tbd: should we cache this?
277
+
278
+ zipper_members_(Zipper, Members) :-
279
+ zipper_goto(Zipper, first),
280
+ zip_members__(Zipper, Members).
281
+
282
+ zip_members__(Zipper, [Name|T]) :-
283
+ zip_file_info_(Zipper, Name, _Attrs),
284
+ ( zipper_goto(Zipper, next)
285
+ -> zip_members__(Zipper, T)
286
+ ; T = []
287
+ ).
288
+
289
+
290
+ %! compatible_architecture_lib(+Entries, +Name, -CompatibleLib) is det.
291
+ %
292
+ % Entries is a list of entries in the zip file, which are already
293
+ % filtered to match the shared library identified by `Name`. The
294
+ % filtering is done by entries_for_name/3.
295
+ %
296
+ % CompatibleLib is the name of the entry in the zip file which is
297
+ % compatible with the current architecture. The compatibility is
298
+ % determined according to the description in qsave_program/2 using the
299
+ % qsave:compat_arch/2 hook.
300
+ %
301
+ % The entries are of the form 'shlib(Arch, Name)'
302
+
303
+ compatible_architecture_lib([], _, _) :- !, fail.
304
+ compatible_architecture_lib(Entries, Name, CompatibleLib) :-
305
+ current_prolog_flag(arch, HostArch),
306
+ ( member(shlib(EntryArch, Name), Entries),
307
+ qsave_compat_arch1(HostArch, EntryArch)
308
+ -> term_to_atom(shlib(EntryArch, Name), CompatibleLib)
309
+ ; existence_error(arch_compatible_with(Name), HostArch)
310
+ ).
311
+
312
+ qsave_compat_arch1(Arch1, Arch2) :-
313
+ qsave:compat_arch(Arch1, Arch2), !.
314
+ qsave_compat_arch1(Arch1, Arch2) :-
315
+ qsave:compat_arch(Arch2, Arch1), !.
316
+
317
+ %! qsave:compat_arch(Arch1, Arch2) is semidet.
318
+ %
319
+ % User definable hook to establish if Arch1 is compatible with Arch2
320
+ % when running a shared object. It is used in saved states produced by
321
+ % qsave_program/2 to determine which shared object to load at runtime.
322
+ %
323
+ % @see `foreign` option in qsave_program/2 for more information.
324
+
325
+ :- multifile qsave:compat_arch/2.
326
+
327
+ qsave:compat_arch(A,A).
328
+
329
+ entries_for_name([], _, []).
330
+ entries_for_name([H0|T0], Name, [H|T]) :-
331
+ shlib_atom_to_term(H0, H),
332
+ match_filespec(Name, H),
333
+ !,
334
+ entries_for_name(T0, Name, T).
335
+ entries_for_name([_|T0], Name, T) :-
336
+ entries_for_name(T0, Name, T).
337
+
338
+ shlib_atom_to_term(Atom, shlib(Arch, Name)) :-
339
+ sub_atom(Atom, 0, _, _, 'shlib('),
340
+ !,
341
+ term_to_atom(shlib(Arch,Name), Atom).
342
+ shlib_atom_to_term(Atom, Atom).
343
+
344
+ match_filespec(Name, shlib(_,Name)).
345
+
346
+ base(Path, Base) :-
347
+ atomic(Path),
348
+ !,
349
+ file_base_name(Path, File),
350
+ file_name_extension(Base, _Ext, File).
351
+ base(_/Path, Base) :-
352
+ !,
353
+ base(Path, Base).
354
+ base(Path, Base) :-
355
+ Path =.. [_,Arg],
356
+ base(Arg, Base).
357
+
358
+ entry(_, Function, Function) :-
359
+ Function \= default(_),
360
+ !.
361
+ entry(Spec, default(FuncBase), Function) :-
362
+ base(Spec, Base),
363
+ atomic_list_concat([FuncBase, Base], '_', Function).
364
+ entry(_, default(Function), Function).
365
+
366
+ /*******************************
367
+ * (UN)LOADING *
368
+ *******************************/
369
+
370
+ %! load_foreign_library(:FileSpec) is det.
371
+ %! load_foreign_library(:FileSpec, +Options:list) is det.
372
+ %
373
+ % Load a _|shared object|_ or _DLL_. After loading the Entry function
374
+ % is called without arguments. The default entry function is composed
375
+ % from =install_=, followed by the file base-name. E.g., the load-call
376
+ % below calls the function =|install_mylib()|=. If the platform
377
+ % prefixes extern functions with =_=, this prefix is added before
378
+ % calling. Options provided are below. Other options are passed to
379
+ % open_shared_object/3.
380
+ %
381
+ % - install(+Function)
382
+ % Installation function to use. Default is default(install),
383
+ % which derives the function from FileSpec.
384
+ %
385
+ % ```
386
+ % ...
387
+ % load_foreign_library(foreign(mylib)),
388
+ % ...
389
+ % ```
390
+ %
391
+ % @arg FileSpec is a specification for absolute_file_name/3. If searching
392
+ % the file fails, the plain name is passed to the OS to try the default
393
+ % method of the OS for locating foreign objects. The default definition
394
+ % of file_search_path/2 searches <prolog home>/lib/<arch> on Unix and
395
+ % <prolog home>/bin on Windows.
396
+ %
397
+ % @see use_foreign_library/1,2 are intended for use in directives.
398
+
399
+ load_foreign_library(Library) :-
400
+ load_foreign_library(Library, []).
401
+
402
+ load_foreign_library(Module:LibFile, InstallOrOptions) :-
403
+ ( is_list(InstallOrOptions)
404
+ -> Options = InstallOrOptions
405
+ ; Options = [install(InstallOrOptions)]
406
+ ),
407
+ with_mutex('$foreign',
408
+ load_foreign_library(LibFile, Module, Options)).
409
+
410
+ load_foreign_library(LibFile, _Module, _) :-
411
+ current_library(LibFile, _, _, _, _),
412
+ !.
413
+ load_foreign_library(LibFile, Module, Options) :-
414
+ retractall(error(_, _)),
415
+ find_library(LibFile, Path, Delete),
416
+ asserta(loading(LibFile)),
417
+ retractall(foreign_predicate(LibFile, _)),
418
+ catch(Module:open_shared_object(Path, Handle, Options), E, true),
419
+ ( nonvar(E)
420
+ -> delete_foreign_lib(Delete, Path),
421
+ assert(error(Path, E)),
422
+ fail
423
+ ; delete_foreign_lib(Delete, Path)
424
+ ),
425
+ !,
426
+ '$option'(install(DefEntry), Options, default(install)),
427
+ ( entry(LibFile, DefEntry, Entry),
428
+ Module:call_shared_object_function(Handle, Entry)
429
+ -> retractall(loading(LibFile)),
430
+ assert_shlib(LibFile, Entry, Path, Module, Handle)
431
+ ; foreign_predicate(LibFile, _)
432
+ -> retractall(loading(LibFile)), % C++ object installed predicates
433
+ assert_shlib(LibFile, 'C++', Path, Module, Handle)
434
+ ; retractall(loading(LibFile)),
435
+ retractall(foreign_predicate(LibFile, _)),
436
+ close_shared_object(Handle),
437
+ findall(Entry, entry(LibFile, DefEntry, Entry), Entries),
438
+ throw(error(existence_error(foreign_install_function,
439
+ install(Path, Entries)),
440
+ _))
441
+ ).
442
+ load_foreign_library(LibFile, _, _) :-
443
+ retractall(loading(LibFile)),
444
+ ( error(_Path, E)
445
+ -> retractall(error(_, _)),
446
+ throw(E)
447
+ ; throw(error(existence_error(foreign_library, LibFile), _))
448
+ ).
449
+
450
+ delete_foreign_lib(true, Path) :-
451
+ \+ current_prolog_flag(res_keep_foreign, true),
452
+ !,
453
+ catch(delete_file(Path), _, true).
454
+ delete_foreign_lib(_, _).
455
+
456
+
457
+ %! unload_foreign_library(+FileSpec) is det.
458
+ %! unload_foreign_library(+FileSpec, +Exit:atom) is det.
459
+ %
460
+ % Unload a _|shared object|_ or _DLL_. After calling the Exit
461
+ % function, the shared object is removed from the process. The
462
+ % default exit function is composed from =uninstall_=, followed by
463
+ % the file base-name.
464
+
465
+ unload_foreign_library(LibFile) :-
466
+ unload_foreign_library(LibFile, default(uninstall)).
467
+
468
+ unload_foreign_library(LibFile, DefUninstall) :-
469
+ with_mutex('$foreign', do_unload(LibFile, DefUninstall)).
470
+
471
+ do_unload(LibFile, DefUninstall) :-
472
+ current_library(LibFile, _, _, Module, Handle),
473
+ retractall(current_library(LibFile, _, _, _, _)),
474
+ ( entry(LibFile, DefUninstall, Uninstall),
475
+ Module:call_shared_object_function(Handle, Uninstall)
476
+ -> true
477
+ ; true
478
+ ),
479
+ abolish_foreign(LibFile),
480
+ close_shared_object(Handle).
481
+
482
+ abolish_foreign(LibFile) :-
483
+ ( retract(foreign_predicate(LibFile, Module:Head)),
484
+ functor(Head, Name, Arity),
485
+ abolish(Module:Name, Arity),
486
+ fail
487
+ ; true
488
+ ).
489
+
490
+ system:'$foreign_registered'(M, H) :-
491
+ ( loading(Lib)
492
+ -> true
493
+ ; Lib = '<spontaneous>'
494
+ ),
495
+ assert(foreign_predicate(Lib, M:H)).
496
+
497
+ assert_shlib(File, Entry, Path, Module, Handle) :-
498
+ retractall(current_library(File, _, _, _, _)),
499
+ asserta(current_library(File, Entry, Path, Module, Handle)).
500
+
501
+
502
+ /*******************************
503
+ * ADMINISTRATION *
504
+ *******************************/
505
+
506
+ %! current_foreign_library(?File, ?Public)
507
+ %
508
+ % Query currently loaded shared libraries.
509
+
510
+ current_foreign_library(File, Public) :-
511
+ current_library(File, _Entry, _Path, _Module, _Handle),
512
+ findall(Pred, foreign_predicate(File, Pred), Public).
513
+
514
+
515
+ /*******************************
516
+ * RELOAD *
517
+ *******************************/
518
+
519
+ %! reload_foreign_libraries
520
+ %
521
+ % Reload all foreign libraries loaded (after restore of a state
522
+ % created using qsave_program/2.
523
+
524
+ reload_foreign_libraries :-
525
+ findall(lib(File, Entry, Module),
526
+ ( retract(current_library(File, Entry, _, Module, _)),
527
+ File \== -
528
+ ),
529
+ Libs),
530
+ reverse(Libs, Reversed),
531
+ reload_libraries(Reversed).
532
+
533
+ reload_libraries([]).
534
+ reload_libraries([lib(File, Entry, Module)|T]) :-
535
+ ( load_foreign_library(File, Module, [install(Entry)])
536
+ -> true
537
+ ; print_message(error, shlib(File, load_failed))
538
+ ),
539
+ reload_libraries(T).
540
+
541
+
542
+ /*******************************
543
+ * CLEANUP (WINDOWS ...) *
544
+ *******************************/
545
+
546
+ /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
547
+ Called from Halt() in pl-os.c (if it is defined), *after* all at_halt/1
548
+ hooks have been executed, and after dieIO(), closing and flushing all
549
+ files has been called.
550
+
551
+ On Unix, this is not very useful, and can only lead to conflicts.
552
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
553
+
554
+ unload_all_foreign_libraries :-
555
+ current_prolog_flag(unload_foreign_libraries, true),
556
+ !,
557
+ forall(current_library(File, _, _, _, _),
558
+ unload_foreign(File)).
559
+ unload_all_foreign_libraries.
560
+
561
+ %! unload_foreign(+File)
562
+ %
563
+ % Unload the given foreign file and all `spontaneous' foreign
564
+ % predicates created afterwards. Handling these spontaneous
565
+ % predicates is a bit hard, as we do not know who created them and
566
+ % on which library they depend.
567
+
568
+ unload_foreign(File) :-
569
+ unload_foreign_library(File),
570
+ ( clause(foreign_predicate(Lib, M:H), true, Ref),
571
+ ( Lib == '<spontaneous>'
572
+ -> functor(H, Name, Arity),
573
+ abolish(M:Name, Arity),
574
+ erase(Ref),
575
+ fail
576
+ ; !
577
+ )
578
+ -> true
579
+ ; true
580
+ ).
581
+
582
+
583
+ :- if(current_predicate(win_add_dll_directory/2)).
584
+
585
+ %! win_add_dll_directory(+AbsDir) is det.
586
+ %
587
+ % Add AbsDir to the directories where dependent DLLs are searched on
588
+ % Windows systems. This call uses the AddDllDirectory() API when
589
+ % provided. On older Windows systems it extends ``%PATH%``.
590
+ %
591
+ % @error existence_error(directory, AbsDir) if the target directory
592
+ % does not exist.
593
+ % @error domain_error(absolute_file_name, AbsDir) if AbsDir is not an
594
+ % absolute file name.
595
+
596
+ win_add_dll_directory(Dir) :-
597
+ win_add_dll_directory(Dir, _),
598
+ !.
599
+ win_add_dll_directory(Dir) :-
600
+ prolog_to_os_filename(Dir, OSDir),
601
+ getenv('PATH', Path0),
602
+ atomic_list_concat([Path0, OSDir], ';', Path),
603
+ setenv('PATH', Path).
604
+
605
+ % Environments such as MSYS2 and CONDA install DLLs in some separate
606
+ % directory. We add these directories to the search path for indirect
607
+ % dependencies from ours foreign plugins.
608
+
609
+ add_dll_directories :-
610
+ current_prolog_flag(msys2, true),
611
+ !,
612
+ env_add_dll_dir('MINGW_PREFIX', '/bin').
613
+ add_dll_directories :-
614
+ current_prolog_flag(conda, true),
615
+ !,
616
+ env_add_dll_dir('CONDA_PREFIX', '/Library/bin'),
617
+ ignore(env_add_dll_dir('PREFIX', '/Library/bin')).
618
+ add_dll_directories.
619
+
620
+ env_add_dll_dir(Var, Postfix) :-
621
+ getenv(Var, Prefix),
622
+ atom_concat(Prefix, Postfix, Dir),
623
+ win_add_dll_directory(Dir).
624
+
625
+ :- initialization
626
+ add_dll_directories.
627
+
628
+ :- endif.
629
+
630
+ /*******************************
631
+ * SEARCH PATH *
632
+ *******************************/
633
+
634
+ :- dynamic
635
+ user:file_search_path/2.
636
+ :- multifile
637
+ user:file_search_path/2.
638
+
639
+ :- if((current_prolog_flag(apple, true),
640
+ current_prolog_flag(bundle, true))).
641
+ user:file_search_path(foreign, swi('../../PlugIns/swipl')).
642
+ :- elif(current_prolog_flag(apple_universal_binary, true)).
643
+ user:file_search_path(foreign, swi('lib/fat-darwin')).
644
+ :- elif((current_prolog_flag(windows, true),
645
+ current_prolog_flag(bundle, true))).
646
+ user:file_search_path(foreign, swi(bin)).
647
+ :- else.
648
+ user:file_search_path(foreign, swi(ArchLib)) :-
649
+ current_prolog_flag(arch, Arch),
650
+ atom_concat('lib/', Arch, ArchLib).
651
+ :- endif.
652
+
653
+ /*******************************
654
+ * MESSAGES *
655
+ *******************************/
656
+
657
+ :- multifile
658
+ prolog:message//1,
659
+ prolog:error_message//1.
660
+
661
+ prolog:message(shlib(LibFile, load_failed)) -->
662
+ [ '~w: Failed to load file'-[LibFile] ].
663
+ prolog:message(shlib(not_supported)) -->
664
+ [ 'Emulator does not support foreign libraries' ].
665
+
666
+ prolog:error_message(existence_error(foreign_install_function,
667
+ install(Lib, List))) -->
668
+ [ 'No install function in ~q'-[Lib], nl,
669
+ '\tTried: ~q'-[List]
670
+ ].