35
36:- module(prolog_install,
37 [ qcompile_libraries/0,
38 cmake_qcompile/0,
39 cmake_qcompile/2, 40 cmake_save_man_index/0
41 ]). 42:- autoload(library(apply),[maplist/3]). 43:- autoload(library(lists),[append/3,member/2,subtract/3]). 44:- autoload(library(make),[make/0]). 45:- autoload(library(pldoc/man_index), [save_man_index/0]). 46
47
52
56
57qcompile_libraries :-
58 make, 59 qcompile_xpce.
60
61qcompile_xpce :- 62 \+ absolute_file_name(swi(xpce),
63 [ access(exist),
64 file_type(directory),
65 file_errors(fail)
66 ], _),
67 !,
68 print_message(informational, qcompile(no(xpce))).
69qcompile_xpce :-
70 ( absolute_file_name(swi('swipl-win.rc'), _,
71 [ access(read),
72 file_errors(fail)
73 ])
74 -> use_module(swi('swipl-win.rc'))
75 ; true
76 ),
77 qcompile_libs.
78
79
80 83
84qmodule(pce, library(pce)).
85qmodule(lib, library(pce_manual)).
86qmodule(lib, library(pcedraw)).
87qmodule(lib, library('emacs/emacs')).
88qmodule(lib, library('dialog/dialog')).
89qmodule(lib, library('trace/trace')).
90qmodule(lib, library('cql/cql')).
91
92qcompile_libs :-
93 forall(qmodule(_Type, Module),
94 ( exists_source(Module)
95 -> print_message(informational, qcompile(Module)),
96 qcompile(Module)
97 ; print_message(informational, qcompile(no(Module)))
98 )).
99
100 103
109
110cmake_qcompile :-
111 current_prolog_flag(argv, ['--compile', File, '--qlfdeps' | Rest]),
112 ( append(Deps, ['--preload'|Preload], Rest)
113 -> true
114 ; Deps = Rest,
115 Preload = []
116 ),
117 forall(member(X, Preload), preload(X)),
118 cmake_qcompile(File, Deps).
119
120preload(X) :-
121 atom_concat('lib:', File, X),
122 !,
123 use_module(user:library(File)).
124preload(X) :-
125 use_module(user:X).
126
127
128cmake_qcompile(File, Deps) :-
129 qcompile(File),
130 file_name_extension(File, qlf, QlfFile),
131 '$qlf_sources'(QlfFile, Files),
132 maplist(absolute_file_name, Deps, Canonical),
133 subtract(Files, Canonical, Missing),
134 subtract(Canonical, Files, Extra),
135 ( Missing == []
136 -> true
137 ; print_message(warning, qcompile(missing, File, Missing))
138 ),
139 ( Extra == []
140 -> true
141 ; print_message(warning, qcompile(extra, File, Extra))
142 ).
143
144 147
151
152cmake_save_man_index :-
153 save_man_index.
154
155
156 159
160:- multifile prolog:message//1. 161
162prolog:message(qcompile(no(What))) -->
163 [ 'Cannot find ~w'-[What] ].
164prolog:message(qcompile(library(Lib))) -->
165 [ nl, '~*c'-[64, 0'*], nl ],
166 [ 'Qcompile library ~q'-[Lib], nl ],
167 [ '~*c'-[64, 0'*] ].
168prolog:message(qcompile(missing, File, Dependencies)) -->
169 [ 'The following dependencies for ~p are not listed'-[File] ],
170 deps(Dependencies).
171prolog:message(qcompile(extra, File, Dependencies)) -->
172 [ 'The following dependencies for ~p are not needed'-[File] ],
173 deps(Dependencies).
174
175deps([]) -->
176 [].
177deps([H|T]) -->
178 [ nl, ' ~p'-[H] ],
179 deps(T)