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,912 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker and Richard O'Keefe
4
+ E-mail: J.Wielemaker@cs.vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2014-2026, VU University Amsterdam
7
+ CWI, Amsterdam
8
+ SWI-Prolog Solutions b.v.
9
+ All rights reserved.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions
13
+ are met:
14
+
15
+ 1. Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ 2. Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer in
20
+ the documentation and/or other materials provided with the
21
+ distribution.
22
+
23
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
+ POSSIBILITY OF SUCH DAMAGE.
35
+ */
36
+
37
+ :- module(check_installation,
38
+ [ check_installation/0,
39
+ check_installation/1, % -Issues
40
+ check_config_files/0,
41
+ update_config_files/0,
42
+ test_installation/0,
43
+ test_installation/1 % +Options
44
+ ]).
45
+ :- autoload(library(apply), [maplist/2, maplist/3]).
46
+ :- autoload(library(archive), [archive_open/3, archive_close/1]).
47
+ :- autoload(library(lists), [append/3, member/2]).
48
+ :- autoload(library(occurs), [sub_term/2]).
49
+ :- autoload(library(option), [option/2, merge_options/3]).
50
+ :- autoload(library(prolog_source), [path_segments_atom/2]).
51
+ :- use_module(library(settings), [setting/2]).
52
+ :- autoload(library(dcg/high_order), [sequence//2, sequence/4]).
53
+ :- autoload(library(error), [must_be/2]).
54
+
55
+
56
+ /** <module> Check installation issues and features
57
+
58
+ This library performs checks on the installed system to verify which
59
+ optional components are available and whether all libraries that load
60
+ shared objects/DLLs can be loaded.
61
+ */
62
+
63
+ %! component(?Component, -Features) is nondet.
64
+ %
65
+ % This predicate describes the test components. Features is a dict
66
+ % with the following components:
67
+ %
68
+ % - test:Goal
69
+ % (Additional) test that must succeed for the component to be
70
+ % functional.
71
+ % - url:URL
72
+ % URL with additional information, relative to
73
+ % =|http://www.swi-prolog.org/build/issues/|=. If not provided,
74
+ % the library file with extension =|.html|= is used.
75
+ % - optional:true
76
+ % If the library does not exist, do not complain.
77
+ % - os:OS
78
+ % One of =windows=, =unix= or =linux=. If present, the component
79
+ % is only checked for if we are running on a version of the
80
+ % specified operating system.
81
+ % - features:Goal
82
+ % After successful evaluation that loading and basic operation
83
+ % of the component succeeds, run this to check additional
84
+ % features.
85
+
86
+ % Feature tests
87
+ component(tcmalloc,
88
+ #{ optional:true,
89
+ test:test_tcmalloc,
90
+ url:'tcmalloc.html',
91
+ os:linux
92
+ }).
93
+ component(gmp,
94
+ #{ test:current_prolog_flag(bounded, false),
95
+ url:'gmp.html'
96
+ }).
97
+ % Packages that depend on foreign libraries
98
+ component(library(archive), #{features:archive_features}).
99
+ component(library(cgi), #{}).
100
+ component(library(crypt), #{}).
101
+ component(library(bdb), #{}).
102
+ component(library(double_metaphone), #{}).
103
+ component(library(editline), #{}).
104
+ component(library(filesex), #{}).
105
+ component(library(http/http_stream), #{}).
106
+ component(library(json), #{}).
107
+ component(library(http/jquery), #{features:jquery_file}).
108
+ component(library(isub), #{}).
109
+ component(library(janus), #{features:python_version}).
110
+ component(library(jpl), #{}).
111
+ component(library(memfile), #{}).
112
+ component(library(odbc), #{}).
113
+ component(library(pce),
114
+ #{pre:use_foreign_library(pce_principal:foreign(pl2xpce)),
115
+ url:'xpce.html'}).
116
+ component(library(pcre), #{features:pcre_features}).
117
+ component(library(pdt_console), #{}).
118
+ component(library(porter_stem), #{}).
119
+ component(library(process), #{}).
120
+ component(library(protobufs), #{}).
121
+ component(library(readutil), #{}).
122
+ component(library(rlimit), #{os:unix}).
123
+ component(library(semweb/rdf_db), #{}).
124
+ component(library(semweb/rdf_ntriples), #{}).
125
+ component(library(semweb/turtle), #{}).
126
+ component(library(sgml), #{}).
127
+ component(library(sha), #{}).
128
+ component(library(snowball), #{}).
129
+ component(library(socket), #{}).
130
+ component(library(ssl), #{features:ssl_version}).
131
+ component(library(sweep_link), #{features:sweep_emacs_module}).
132
+ component(library(crypto), #{}).
133
+ component(library(syslog), #{os:unix}).
134
+ component(library(table), #{}).
135
+ component(library(time), #{}).
136
+ component(library(tipc/tipc), #{os:linux}).
137
+ component(library(unicode), #{}).
138
+ component(library(uri), #{}).
139
+ component(library(uuid), #{}).
140
+ component(library(yaml), #{}).
141
+ component(library(zlib), #{}).
142
+
143
+ issue_base('http://www.swi-prolog.org/build/issues/').
144
+
145
+ :- thread_local
146
+ issue/1.
147
+
148
+ :- meta_predicate
149
+ run_silent(0, +).
150
+
151
+ %! check_installation is det.
152
+ %
153
+ % Check features of the installed system. Performs the following
154
+ % tests:
155
+ %
156
+ % 1. Test whether features that depend on optional libraries
157
+ % are present (e.g., unbounded arithmetic support)
158
+ % 2. Test that all standard libraries that depend on foreign
159
+ % code are present.
160
+ % 3. provides a test_installation predicate to run the tests
161
+ % at runtime if the system was built with -DINSTALL_TESTS
162
+ %
163
+ % If issues are found it prints a diagnostic message with a link
164
+ % to a wiki page with additional information about the issue.
165
+
166
+ check_installation :-
167
+ print_message(informational, installation(checking)),
168
+ check_installation_(InstallIssues),
169
+ check_on_path,
170
+ check_config_files(ConfigIssues),
171
+ check_autoload,
172
+ maplist(print_message(warning), ConfigIssues),
173
+ append(InstallIssues, ConfigIssues, Issues),
174
+ ( Issues == []
175
+ -> print_message(informational, installation(perfect))
176
+ ; length(Issues, Count),
177
+ print_message(warning, installation(imperfect(Count)))
178
+ ).
179
+
180
+ %! check_installation(-Issues:list(pair)) is det.
181
+ %
182
+ % As check_installation/0, but additionally returns a list of
183
+ % Component-Problem pairs. Problem is one of `optional_not_found`
184
+ % (optional component is not present), `not_found` (component is
185
+ % not present) or `failed` (component is present but cannot be
186
+ % loaded).
187
+
188
+ check_installation(Issues) :-
189
+ check_installation_(Issues0),
190
+ maplist(public_issue, Issues0, Issues).
191
+
192
+ public_issue(installation(Term), Source-Issue) :-
193
+ functor(Term, Issue, _),
194
+ arg(1, Term, Properties),
195
+ Source = Properties.source.
196
+
197
+ check_installation_(Issues) :-
198
+ retractall(issue(_)),
199
+ forall(component(Source, _Properties),
200
+ check_component(Source)),
201
+ findall(I, retract(issue(I)), Issues).
202
+
203
+ check_component(Source) :-
204
+ component(Source, Properties),
205
+ !,
206
+ check_component(Source, Properties.put(source,Source)).
207
+
208
+ check_component(_Source, Properties) :-
209
+ OS = Properties.get(os),
210
+ \+ current_os(OS),
211
+ !.
212
+ check_component(Source, Properties) :-
213
+ compound(Source),
214
+ !,
215
+ check_source(Source, Properties).
216
+ check_component(Feature, Properties) :-
217
+ print_message(informational, installation(checking(Feature))),
218
+ ( call(Properties.test)
219
+ -> print_message(informational, installation(ok))
220
+ ; print_issue(installation(missing(Properties)))
221
+ ).
222
+
223
+ check_source(Source, Properties) :-
224
+ exists_source(Source),
225
+ !,
226
+ print_message(informational, installation(loading(Source))),
227
+ ( run_silent(( ( Pre = Properties.get(pre)
228
+ -> call(Pre)
229
+ ; true
230
+ ),
231
+ load_files(Source, [silent(true), if(true)])
232
+ ),
233
+ Properties.put(action, load))
234
+ -> test_component(Properties),
235
+ print_message(informational, installation(ok)),
236
+ check_features(Properties)
237
+ ; true
238
+ ).
239
+ check_source(_Source, Properties) :-
240
+ Properties.get(optional) == true,
241
+ !,
242
+ print_message(silent,
243
+ installation(optional_not_found(Properties))).
244
+ check_source(_Source, Properties) :-
245
+ print_issue(installation(not_found(Properties))).
246
+
247
+ current_os(unix) :- current_prolog_flag(unix, true).
248
+ current_os(windows) :- current_prolog_flag(windows, true).
249
+ current_os(linux) :- current_prolog_flag(arch, Arch),
250
+ sub_atom(Arch, _, _, _, linux).
251
+
252
+ %! test_component(+Properties) is semidet.
253
+ %
254
+ % Run additional tests to see whether the component really works.
255
+
256
+ test_component(Dict) :-
257
+ Test = Dict.get(test),
258
+ !,
259
+ call(Test).
260
+ test_component(_).
261
+
262
+ %! check_features(+Properties) is semidet.
263
+ %
264
+ % Check for additional features of the components.
265
+ %
266
+ % @see check_component/1 should be used for checking that the
267
+ % component works.
268
+
269
+ check_features(Dict) :-
270
+ Test = Dict.get(features),
271
+ !,
272
+ catch(Test, Error,
273
+ ( print_message(warning, Error),
274
+ fail)).
275
+ check_features(_).
276
+
277
+
278
+ %! run_silent(:Goal, +Properties) is semidet.
279
+ %
280
+ % Succeed if Goal succeeds and does not print any errors or
281
+ % warnings.
282
+
283
+ run_silent(Goal, Properties) :-
284
+ run_collect_messages(Goal, Result, Messages),
285
+ ( Result == true,
286
+ Messages == []
287
+ -> true
288
+ ; print_issue(installation(failed(Properties, Result, Messages))),
289
+ fail
290
+ ).
291
+
292
+ %! run_collect_messages(Goal, Result, Messages) is det.
293
+ %
294
+ % Run Goal, unify Result with =true=, =false= or exception(Error)
295
+ % and messages with a list of generated error and warning
296
+ % messages. Each message is a term:
297
+ %
298
+ % message(Term,Kind,Lines)
299
+ %
300
+ % @see message_hook/3.
301
+
302
+ :- thread_local
303
+ got_message/1.
304
+
305
+ run_collect_messages(Goal, Result, Messages) :-
306
+ setup_call_cleanup(
307
+ asserta((user:thread_message_hook(Term,Kind,Lines) :-
308
+ error_kind(Kind),
309
+ assertz(got_message(message(Term,Kind,Lines)))), Ref),
310
+ ( catch(Goal, E, true)
311
+ -> ( var(E)
312
+ -> Result0 = true
313
+ ; Result0 = exception(E)
314
+ )
315
+ ; Result0 = false
316
+ ),
317
+ erase(Ref)),
318
+ findall(Msg, retract(got_message(Msg)), Messages),
319
+ Result = Result0.
320
+
321
+ error_kind(warning).
322
+ error_kind(error).
323
+
324
+
325
+ /*******************************
326
+ * SPECIAL TESTS *
327
+ *******************************/
328
+
329
+ %! test_tcmalloc
330
+
331
+ :- if(current_predicate(malloc_property/1)).
332
+ test_tcmalloc :-
333
+ malloc_property('generic.current_allocated_bytes'(Bytes)),
334
+ Bytes > 1 000 000.
335
+ :- else.
336
+ test_tcmalloc :-
337
+ fail.
338
+ :- endif.
339
+
340
+ %! archive_features
341
+ %
342
+ % Report features supported by library(archive).
343
+
344
+ archive_features :-
345
+ tmp_file_stream(utf8, Name, Out),
346
+ close(Out),
347
+ findall(F, archive_filter(F, Name), Filters),
348
+ print_message(informational, installation(archive(filters, Filters))),
349
+ findall(F, archive_format(F, Name), Formats),
350
+ print_message(informational, installation(archive(formats, Formats))),
351
+ delete_file(Name).
352
+
353
+ archive_filter(F, Name) :-
354
+ a_filter(F),
355
+ catch(archive_open(Name, A, [filter(F)]), E, true),
356
+ ( var(E)
357
+ -> archive_close(A)
358
+ ; true
359
+ ),
360
+ \+ subsumes_term(error(domain_error(filter, _),_), E).
361
+
362
+ archive_format(F, Name) :-
363
+ a_format(F),
364
+ catch(archive_open(Name, A, [format(F)]), E, true),
365
+ ( var(E)
366
+ -> archive_close(A)
367
+ ; true
368
+ ),
369
+ \+ subsumes_term(error(domain_error(format, _),_), E).
370
+
371
+ a_filter(bzip2).
372
+ a_filter(compress).
373
+ a_filter(gzip).
374
+ a_filter(grzip).
375
+ a_filter(lrzip).
376
+ a_filter(lzip).
377
+ a_filter(lzma).
378
+ a_filter(lzop).
379
+ a_filter(none).
380
+ a_filter(rpm).
381
+ a_filter(uu).
382
+ a_filter(xz).
383
+
384
+ a_format('7zip').
385
+ a_format(ar).
386
+ a_format(cab).
387
+ a_format(cpio).
388
+ a_format(empty).
389
+ a_format(gnutar).
390
+ a_format(iso9660).
391
+ a_format(lha).
392
+ a_format(mtree).
393
+ a_format(rar).
394
+ a_format(raw).
395
+ a_format(tar).
396
+ a_format(xar).
397
+ a_format(zip).
398
+
399
+ %! pcre_features
400
+
401
+ pcre_features :-
402
+ findall(X, pcre_missing(X), Missing),
403
+ ( Missing == []
404
+ -> true
405
+ ; print_message(warning, installation(pcre_missing(Missing)))
406
+ ),
407
+ ( re_config(compiled_widths(Widths)),
408
+ 1 =:= Widths /\ 1
409
+ -> true
410
+ ; print_message(warning, installation(pcre_missing('8-bit support')))
411
+ ).
412
+
413
+ pcre_missing(X) :-
414
+ pcre_must_have(X),
415
+ Term =.. [X,true],
416
+ \+ catch(re_config(Term), _, fail).
417
+
418
+ pcre_must_have(unicode).
419
+
420
+ %! ssl_version
421
+
422
+ ssl_version :-
423
+ current_prolog_flag(ssl_library_version, SSLVersion),
424
+ print_message(informational, installation(version(SSLVersion))).
425
+
426
+
427
+ %! jquery_file
428
+ %
429
+ % Test whether jquery.js can be found
430
+
431
+ jquery_file :-
432
+ setting(jquery:version, File),
433
+ ( absolute_file_name(js(File), Path, [access(read), file_errors(fail)])
434
+ -> print_message(informational, installation(jquery(found(Path))))
435
+ ; print_message(warning, installation(jquery(not_found(File))))
436
+ ).
437
+
438
+ sweep_emacs_module :-
439
+ with_output_to(string(S), write_sweep_module_location),
440
+ split_string(S, "\n", "\n", [VersionInfo|Modules]),
441
+ must_be(oneof(["V 1"]), VersionInfo),
442
+ ( maplist(check_sweep_lib, Modules)
443
+ -> print_message(informational, installation(sweep(found(Modules))))
444
+ ; print_message(warning, installation(sweep(not_found(Modules))))
445
+ ).
446
+
447
+ check_sweep_lib(Line) :-
448
+ sub_atom(Line, B, _, A, ' '),
449
+ sub_atom(Line, 0, B, _, Type),
450
+ must_be(oneof(['L', 'M']), Type),
451
+ sub_atom(Line, _, A, 0, Lib),
452
+ exists_file(Lib).
453
+
454
+ python_version :-
455
+ py_call(sys:version, Version),
456
+ print_message(informational, installation(janus(Version))).
457
+
458
+
459
+ %! check_on_path
460
+ %
461
+ % Validate that Prolog is installed in $PATH. Only performed if the
462
+ % running executable is a normal executable file, assuming some
463
+ % special installation such as the WASM version otherwise.
464
+
465
+ check_on_path :-
466
+ current_prolog_flag(executable, EXEFlag),
467
+ prolog_to_os_filename(EXE, EXEFlag),
468
+ file_base_name(EXE, Prog),
469
+ absolute_file_name(EXE, AbsExe,
470
+ [ access(execute),
471
+ file_errors(fail)
472
+ ]),
473
+ !,
474
+ prolog_to_os_filename(AbsExe, OsExe),
475
+ ( absolute_file_name(path(Prog), OnPath,
476
+ [ access(execute),
477
+ file_errors(fail)
478
+ ])
479
+ -> ( same_file(EXE, OnPath)
480
+ -> true
481
+ ; absolute_file_name(path(Prog), OnPathAny,
482
+ [ access(execute),
483
+ file_errors(fail),
484
+ solutions(all)
485
+ ]),
486
+ same_file(EXE, OnPathAny)
487
+ -> print_message(warning, installation(not_first_on_path(OsExe, OnPath)))
488
+ ; print_message(warning, installation(not_same_on_path(OsExe, OnPath)))
489
+ )
490
+ ; print_message(warning, installation(not_on_path(OsExe, Prog)))
491
+ ).
492
+ check_on_path.
493
+
494
+
495
+ /*******************************
496
+ * RUN TESTS *
497
+ *******************************/
498
+
499
+ %! test_installation is semidet.
500
+ %! test_installation(+Options) is semidet.
501
+ %
502
+ % Run regression tests in the installed system. Requires the system to
503
+ % be built using
504
+ %
505
+ % cmake -DINSTALL_TESTS=ON
506
+ %
507
+ % Options processed:
508
+ %
509
+ % - packages(+Boolean)
510
+ % When `false`, do not test the packages
511
+ % - package(+Package)
512
+ % Only test package package.
513
+ %
514
+ % When running this predicate the _working directory_ must be
515
+ % writeable and allow for writing executable files. This is due to
516
+ % tests for file system interaction and tests for generating
517
+ % stand-alone executables. Note also that due to its side effects, the
518
+ % predicate should not be invoked twice in the same session.
519
+
520
+ test_installation :-
521
+ test_installation([]).
522
+
523
+ test_installation(Options) :-
524
+ absolute_file_name(swi(test/test),
525
+ TestFile,
526
+ [ access(read),
527
+ file_errors(fail),
528
+ file_type(prolog)
529
+ ]),
530
+ !,
531
+ test_installation_run(TestFile, Options).
532
+ test_installation(_Options) :-
533
+ print_message(warning, installation(testing(no_installed_tests))).
534
+
535
+ test_installation_run(TestFile, Options) :-
536
+ ( option(package(_), Options)
537
+ -> merge_options(Options,
538
+ [ core(false),
539
+ subdirs(false)
540
+ ], TestOptions)
541
+ ; merge_options(Options,
542
+ [ packages(true)
543
+ ], TestOptions)
544
+ ),
545
+ load_files(user:TestFile),
546
+ current_prolog_flag(verbose, Old),
547
+ setup_call_cleanup(
548
+ set_prolog_flag(verbose, silent),
549
+ user:test([], TestOptions),
550
+ set_prolog_flag(verbose, Old)).
551
+
552
+
553
+ /*******************************
554
+ * MESSAGES *
555
+ *******************************/
556
+
557
+ :- multifile
558
+ prolog:message//1.
559
+
560
+ print_issue(Term) :-
561
+ assertz(issue(Term)),
562
+ print_message(warning, Term).
563
+
564
+ issue_url(Properties, URL) :-
565
+ Local = Properties.get(url),
566
+ !,
567
+ issue_base(Base),
568
+ atom_concat(Base, Local, URL).
569
+ issue_url(Properties, URL) :-
570
+ Properties.get(source) = library(Segments),
571
+ !,
572
+ path_segments_atom(Segments, Base),
573
+ file_name_extension(Base, html, URLFile),
574
+ issue_base(Issues),
575
+ atom_concat(Issues, URLFile, URL).
576
+
577
+ prolog:message(installation(Message)) -->
578
+ message(Message).
579
+
580
+ message(checking) -->
581
+ { current_prolog_flag(address_bits, Bits) },
582
+ { current_prolog_flag(arch, Arch) },
583
+ { current_prolog_flag(home, Home) },
584
+ { current_prolog_flag(cpu_count, Cores) },
585
+ { current_prolog_flag(build_type, BuildType) -> true ; BuildType = "?" },
586
+ [ 'Checking your SWI-Prolog kit for common issues ...'-[], nl, nl ],
587
+ [ 'Version: ~`.t~24| '-[] ], '$messages':prolog_message(version), [nl],
588
+ [ 'CMake Build type: ~`.t~24| ~w'-[BuildType] ], [nl],
589
+ [ 'Address bits: ~`.t~24| ~d'-[Bits] ], [nl],
590
+ [ 'Architecture: ~`.t~24| ~w'-[Arch] ], [nl],
591
+ [ 'Installed at: ~`.t~24| ~w'-[Home] ], [nl],
592
+ [ 'Cores: ~`.t~24| ~w'-[Cores] ], [nl],
593
+ [ nl ].
594
+ message(perfect) -->
595
+ [ nl, 'Congratulations, your kit seems sound and complete!'-[] ].
596
+ message(imperfect(N)) -->
597
+ [ 'Found ~w issues.'-[N] ].
598
+ message(checking(Feature)) -->
599
+ [ 'Checking ~w ...'-[Feature], flush ].
600
+ message(missing(Properties)) -->
601
+ [ at_same_line, '~`.t~48| not present'-[] ],
602
+ details(Properties).
603
+ message(loading(Source)) -->
604
+ [ 'Loading ~q ...'-[Source], flush ].
605
+ message(ok) -->
606
+ [ at_same_line, '~`.t~48| ok'-[] ].
607
+ message(optional_not_found(Properties)) -->
608
+ [ 'Optional ~q ~`.t~48| not present'-[Properties.source] ].
609
+ message(not_found(Properties)) -->
610
+ [ '~q ~`.t~48| NOT FOUND'-[Properties.source] ],
611
+ details(Properties).
612
+ message(failed(Properties, false, [])) -->
613
+ !,
614
+ [ at_same_line, '~`.t~48| FAILED'-[] ],
615
+ details(Properties).
616
+ message(failed(Properties, exception(Ex0), [])) -->
617
+ !,
618
+ { strip_stack(Ex0, Ex),
619
+ message_to_string(Ex, Msg) },
620
+ [ '~w'-[Msg] ],
621
+ details(Properties).
622
+ message(failed(Properties, true, Messages)) -->
623
+ [ at_same_line, '~`.t~48| FAILED'-[] ],
624
+ explain(Messages),
625
+ details(Properties).
626
+ message(archive(What, Names)) -->
627
+ [ ' Supported ~w: '-[What] ],
628
+ list_names(Names).
629
+ message(pcre_missing(Features)) -->
630
+ [ 'Missing libpcre features: '-[] ],
631
+ list_names(Features).
632
+ message(not_first_on_path(EXE, OnPath)) -->
633
+ { public_executable(EXE, PublicEXE),
634
+ file_base_name(EXE, Prog)
635
+ },
636
+ [ 'The first ~w on '-[Prog] ], 'PATH', [ ' is ~p, while '-[OnPath], nl ],
637
+ [ 'this version is ~p.'-[PublicEXE] ].
638
+ message(not_same_on_path(EXE, OnPath)) -->
639
+ { public_executable(EXE, PublicEXE),
640
+ file_base_name(EXE, Prog)
641
+ },
642
+ [ 'The ~w on '-[Prog] ], 'PATH', [ ' is ~p, while '-[OnPath], nl ],
643
+ [ 'this version is ~p.'-[PublicEXE] ].
644
+ message(not_on_path(EXE, Prog)) -->
645
+ { public_bin_dir(EXE, Dir),
646
+ prolog_to_os_filename(Dir, OSDir)
647
+ },
648
+ [ 'Could not find ~w on '-[Prog] ], 'PATH', [ '. '-[], nl ],
649
+ [ 'You may wish to add ~p to '-[OSDir] ], 'PATH', [ '. '-[], nl ].
650
+ message(jquery(found(Path))) -->
651
+ [ ' jQuery from ~w'-[Path] ].
652
+ message(jquery(not_found(File))) -->
653
+ [ ' Cannot find jQuery (~w)'-[File] ].
654
+ message(sweep(found(Paths))) -->
655
+ [ ' GNU-Emacs plugin loads'-[] ],
656
+ sequence(list_file, Paths).
657
+ message(sweep(not_found(Paths))) -->
658
+ [ ' Could not find all GNU-Emacs libraries'-[] ],
659
+ sequence(list_file, Paths).
660
+ message(testing(no_installed_tests)) -->
661
+ [ ' Runtime testing is not enabled.', nl],
662
+ [ ' Please recompile the system with INSTALL_TESTS enabled.' ].
663
+ message(janus(Version)) -->
664
+ [ ' Python version ~w'-[Version] ].
665
+ message(ambiguous_autoload(PI, Paths)) -->
666
+ [ 'The predicate ~p can be autoloaded from multiple libraries:'-[PI]],
667
+ sequence(list_file, Paths).
668
+ message(version(Version)) -->
669
+ [ ' Using ~w'-[Version] ].
670
+ message(lib_version(What, Version)) -->
671
+ [ ' Using library ~w version ~w'-[What, Version] ].
672
+
673
+ public_executable(EXE, PublicProg) :-
674
+ file_base_name(EXE, Prog),
675
+ file_directory_name(EXE, ArchDir),
676
+ file_directory_name(ArchDir, BinDir),
677
+ file_directory_name(BinDir, Home),
678
+ file_directory_name(Home, Lib),
679
+ file_directory_name(Lib, Prefix),
680
+ atomic_list_concat([Prefix, bin, Prog], /, PublicProg),
681
+ exists_file(PublicProg),
682
+ same_file(EXE, PublicProg),
683
+ !.
684
+ public_executable(EXE, EXE).
685
+
686
+ public_bin_dir(EXE, Dir) :-
687
+ public_executable(EXE, PublicEXE),
688
+ file_directory_name(PublicEXE, Dir).
689
+
690
+
691
+
692
+ 'PATH' -->
693
+ { current_prolog_flag(windows, true) },
694
+ !,
695
+ [ '%PATH%'-[] ].
696
+ 'PATH' -->
697
+ [ '$PATH'-[] ].
698
+
699
+ strip_stack(error(Error, context(prolog_stack(S), Msg)),
700
+ error(Error, context(_, Msg))) :-
701
+ nonvar(S).
702
+ strip_stack(Error, Error).
703
+
704
+ details(Properties) -->
705
+ { issue_url(Properties, URL), !
706
+ },
707
+ [ nl, 'See '-[], url(URL) ].
708
+ details(_) --> [].
709
+
710
+ explain(Messages) -->
711
+ { shared_object_error(Messages) },
712
+ !,
713
+ [nl],
714
+ ( { current_prolog_flag(windows, true) }
715
+ -> [ 'Cannot load required DLL'-[] ]
716
+ ; [ 'Cannot load required shared library'-[] ]
717
+ ).
718
+ explain(Messages) -->
719
+ print_messages(Messages).
720
+
721
+ shared_object_error(Messages) :-
722
+ sub_term(Term, Messages),
723
+ subsumes_term(error(shared_object(open, _Message), _), Term),
724
+ !.
725
+
726
+ print_messages([]) --> [].
727
+ print_messages([message(_Term, _Kind, Lines)|T]) -->
728
+ Lines, [nl],
729
+ print_messages(T).
730
+
731
+ list_names([]) --> [].
732
+ list_names([H|T]) -->
733
+ [ '~w'-[H] ],
734
+ ( {T==[]}
735
+ -> []
736
+ ; [ ', '-[] ],
737
+ list_names(T)
738
+ ).
739
+
740
+ list_file(File) -->
741
+ [ nl, ' '-[], url(File) ].
742
+
743
+
744
+ /*******************************
745
+ * CONFIG FILES *
746
+ *******************************/
747
+
748
+ %! check_config_files
749
+ %
750
+ % Examines the locations of config files. The config files have moved
751
+ % in version 8.1.15
752
+
753
+ check_config_files :-
754
+ check_config_files(Issues),
755
+ maplist(print_message(warning), Issues).
756
+
757
+ check_config_files(Issues) :-
758
+ findall(Issue, check_config_file(Issue), Issues).
759
+
760
+ check_config_file(config(Id, move(Type, OldFile, NewFile))) :-
761
+ old_config(Type, Id, OldFile),
762
+ access_file(OldFile, exist),
763
+ \+ ( new_config(Type, Id, NewFile),
764
+ access_file(NewFile, exist)
765
+ ),
766
+ once(new_config(Type, Id, NewFile)).
767
+ check_config_file(config(Id, different(Type, OldFile, NewFile))) :-
768
+ old_config(Type, Id, OldFile),
769
+ access_file(OldFile, exist),
770
+ new_config(Type, Id, NewFile),
771
+ access_file(NewFile, exist),
772
+ \+ same_file(OldFile, NewFile).
773
+
774
+ %! update_config_files
775
+ %
776
+ % Move config files from their old location to the new if the file or
777
+ % directory exists in the old location but not in the new.
778
+
779
+ update_config_files :-
780
+ old_config(Type, Id, OldFile),
781
+ access_file(OldFile, exist),
782
+ \+ ( new_config(Type, Id, NewFile),
783
+ access_file(NewFile, exist)
784
+ ),
785
+ ( new_config(Type, Id, NewFile),
786
+ \+ same_file(OldFile, NewFile),
787
+ create_parent_dir(NewFile)
788
+ -> catch(rename_file(OldFile, NewFile), E,
789
+ print_message(warning, E)),
790
+ print_message(informational, config(Id, moved(Type, OldFile, NewFile)))
791
+ ),
792
+ fail.
793
+ update_config_files.
794
+
795
+ old_config(file, init, File) :-
796
+ current_prolog_flag(windows, true),
797
+ win_folder(appdata, Base),
798
+ atom_concat(Base, '/SWI-Prolog/swipl.ini', File).
799
+ old_config(file, init, File) :-
800
+ expand_file_name('~/.swiplrc', [File]).
801
+ old_config(directory, lib, Dir) :-
802
+ expand_file_name('~/lib/prolog', [Dir]).
803
+ old_config(directory, xpce, Dir) :-
804
+ expand_file_name('~/.xpce', [Dir]).
805
+ old_config(directory, history, Dir) :-
806
+ expand_file_name('~/.swipl-dir-history', [Dir]).
807
+ old_config(directory, pack, Dir) :-
808
+ ( catch(expand_file_name('~/lib/swipl/pack', [Dir]), _, fail)
809
+ ; absolute_file_name(swi(pack), Dir,
810
+ [ file_type(directory), solutions(all) ])
811
+ ).
812
+
813
+ new_config(file, init, File) :-
814
+ absolute_file_name(user_app_config('init.pl'), File,
815
+ [ solutions(all) ]).
816
+ new_config(directory, lib, Dir) :-
817
+ config_dir(user_app_config(lib), Dir).
818
+ new_config(directory, xpce, Dir) :-
819
+ config_dir(user_app_config(xpce), Dir).
820
+ new_config(directory, history, Dir) :-
821
+ config_dir(user_app_config('dir-history'), Dir).
822
+ new_config(directory, pack, Dir) :-
823
+ config_dir([app_data(pack), swi(pack)], Dir).
824
+
825
+ config_dir(Aliases, Dir) :-
826
+ is_list(Aliases),
827
+ !,
828
+ ( member(Alias, Aliases),
829
+ absolute_file_name(Alias, Dir,
830
+ [ file_type(directory), solutions(all) ])
831
+ *-> true
832
+ ; member(Alias, Aliases),
833
+ absolute_file_name(Alias, Dir,
834
+ [ solutions(all) ])
835
+ ).
836
+ config_dir(Alias, Dir) :-
837
+ ( absolute_file_name(Alias, Dir,
838
+ [ file_type(directory), solutions(all) ])
839
+ *-> true
840
+ ; absolute_file_name(Alias, Dir,
841
+ [ solutions(all) ])
842
+ ).
843
+
844
+ create_parent_dir(NewFile) :-
845
+ file_directory_name(NewFile, Dir),
846
+ create_parent_dir_(Dir).
847
+
848
+ create_parent_dir_(Dir) :-
849
+ exists_directory(Dir),
850
+ '$my_file'(Dir),
851
+ !.
852
+ create_parent_dir_(Dir) :-
853
+ file_directory_name(Dir, Parent),
854
+ Parent \== Dir,
855
+ create_parent_dir_(Parent),
856
+ make_directory(Dir).
857
+
858
+ prolog:message(config(Id, Issue)) -->
859
+ [ 'Config: '-[] ],
860
+ config_description(Id),
861
+ config_issue(Issue).
862
+
863
+ config_description(init) -->
864
+ [ '(user initialization file) '-[], nl ].
865
+ config_description(lib) -->
866
+ [ '(user library) '-[], nl ].
867
+ config_description(pack) -->
868
+ [ '(add-ons) '-[], nl ].
869
+ config_description(history) -->
870
+ [ '(command line history) '-[], nl ].
871
+ config_description(xpce) -->
872
+ [ '(gui) '-[], nl ].
873
+
874
+ config_issue(move(Type, Old, New)) -->
875
+ [ ' found ~w "~w"'-[Type, Old], nl ],
876
+ [ ' new location is "~w"'-[New] ].
877
+ config_issue(moved(Type, Old, New)) -->
878
+ [ ' found ~w "~w"'-[Type, Old], nl ],
879
+ [ ' moved to new location "~w"'-[New] ].
880
+ config_issue(different(Type, Old, New)) -->
881
+ [ ' found different ~w "~w"'-[Type, Old], nl ],
882
+ [ ' new location is "~w"'-[New] ].
883
+
884
+ /*******************************
885
+ * AUTO LOADING *
886
+ *******************************/
887
+
888
+ %! check_autoload
889
+ %
890
+ % Find possible ambiguous predicates in the autoload index.
891
+
892
+ check_autoload :-
893
+ findall(Name/Arity, '$in_library'(Name, Arity, _Path), PIs),
894
+ msort(PIs, Sorted),
895
+ clumped(Sorted, Clumped),
896
+ sort(2, >=, Clumped, ClumpedS),
897
+ ambiguous_autoload(ClumpedS).
898
+
899
+ ambiguous_autoload([PI-N|T]) :-
900
+ N > 1,
901
+ !,
902
+ warn_ambiguous_autoload(PI),
903
+ ambiguous_autoload(T).
904
+ ambiguous_autoload(_).
905
+
906
+ warn_ambiguous_autoload(PI) :-
907
+ PI = Name/Arity,
908
+ findall(PlFile,
909
+ ( '$in_library'(Name, Arity, File),
910
+ file_name_extension(File, pl, PlFile)
911
+ ), PlFiles),
912
+ print_message(warning, installation(ambiguous_autoload(PI, PlFiles))).