Mercurial > mxe-octave
comparison src/ocaml-native-1-fixes.patch @ 2834:fe0a6e45513f
add package ocaml-native
author | William <r.3@libertysurf.fr> |
---|---|
date | Thu, 04 Oct 2012 14:47:35 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2833:5e20e0961816 | 2834:fe0a6e45513f |
---|---|
1 This file is part of MXE. | |
2 See index.html for further information. | |
3 | |
4 Contains ad hoc patches for cross building. | |
5 | |
6 From 71a88993df13ccaaab5957ad2a0aef3adf1d49ff Mon Sep 17 00:00:00 2001 | |
7 From: MXE | |
8 Date: Wed, 3 Oct 2012 09:25:11 +0200 | |
9 Subject: [PATCH 1/5] findlib.ml | |
10 | |
11 | |
12 diff --git a/ocamlbuild/findlib.ml b/ocamlbuild/findlib.ml | |
13 index b5ef878..77454ed 100644 | |
14 --- a/ocamlbuild/findlib.ml | |
15 +++ b/ocamlbuild/findlib.ml | |
16 @@ -44,7 +44,7 @@ let report_error e = | |
17 prerr_endline (string_of_error e); | |
18 exit 2 | |
19 | |
20 -let ocamlfind = "ocamlfind" | |
21 +let ocamlfind = "@target@-ocamlfind" | |
22 | |
23 type package = { | |
24 name: string; | |
25 -- | |
26 1.7.2.5 | |
27 | |
28 | |
29 From a1a25210b44d5c7064d5c7a7002676a114b5f539 Mon Sep 17 00:00:00 2001 | |
30 From: MXE | |
31 Date: Wed, 3 Oct 2012 09:26:40 +0200 | |
32 Subject: [PATCH 2/5] main.ml : warnings on use of option -use-ocamlfind | |
33 | |
34 | |
35 diff --git a/ocamlbuild/main.ml b/ocamlbuild/main.ml | |
36 index 3b9bd89..7045867 100644 | |
37 --- a/ocamlbuild/main.ml | |
38 +++ b/ocamlbuild/main.ml | |
39 @@ -152,6 +152,14 @@ let proceed () = | |
40 Ocaml_specific.init (); | |
41 Hooks.call_hook Hooks.After_rules; | |
42 | |
43 + if not !Options.use_ocamlfind then begin | |
44 + if !Param_tags.ocamlfind_tags_used <> StringSet.empty then | |
45 + Log.eprintf "Warning: Tag(s) '%s' can only work with option -use-ocamlfind" | |
46 + (String.concat "," (StringSet.elements !Param_tags.ocamlfind_tags_used)); | |
47 + if !Options.ocaml_pkgs <> [] then | |
48 + Log.eprintf "Warning: Options -pkg and -pkgs only work with -use-ocamlfind" | |
49 + end; | |
50 + | |
51 Param_tags.init (); | |
52 | |
53 Sys.chdir newpwd; | |
54 -- | |
55 1.7.2.5 | |
56 | |
57 | |
58 From aa7642e19ec9a81bcdda382d4682ab20df0013ba Mon Sep 17 00:00:00 2001 | |
59 From: MXE | |
60 Date: Wed, 3 Oct 2012 09:29:23 +0200 | |
61 Subject: [PATCH 3/5] param_tags : use of special tags considering whether state of option -use-ocamlfind | |
62 | |
63 | |
64 diff --git a/ocamlbuild/param_tags.ml b/ocamlbuild/param_tags.ml | |
65 index 02001de..1aae306 100644 | |
66 --- a/ocamlbuild/param_tags.ml | |
67 +++ b/ocamlbuild/param_tags.ml | |
68 @@ -12,15 +12,24 @@ | |
69 | |
70 (* Original author: Romain Bardou *) | |
71 | |
72 -module StringSet = Set.Make(String) | |
73 +(* 1 : 'acknowledge' while reading user input; | |
74 + 2 : 'declare ' to declare what tags are parameterised tags | |
75 + 3 : 'init' to check acknowledged vs declared tags, | |
76 + and perform declared actions *) | |
77 + | |
78 +module StringSet = My_std.StringSet | |
79 module SSOSet = Set.Make(struct | |
80 type t = string * string option | |
81 let compare = Pervasives.compare | |
82 end) | |
83 | |
84 -(* tag name -> tag action (string -> unit) *) | |
85 +(* tag (string) -> action (string -> unit) *) | |
86 +(* all parameterised tags must be declared here *) | |
87 let declared_tags = Hashtbl.create 17 | |
88 | |
89 +(* set of tags that were read (see 'acknowledge'): | |
90 + ("package",Some "lablgtk2") if "package(lablgtk2)" was read ; | |
91 + ("foo",None) if "foo" was read *) | |
92 let acknowledged_tags = ref SSOSet.empty | |
93 | |
94 let only_once f = | |
95 @@ -32,25 +41,32 @@ let only_once f = | |
96 f param | |
97 end | |
98 | |
99 -let declare name action = | |
100 - Hashtbl.add declared_tags name (only_once action) | |
101 +let declare tag action = | |
102 + Hashtbl.add declared_tags tag (only_once action) | |
103 | |
104 -let acknowledge tag = | |
105 - let tag = Lexers.tag_gen (Lexing.from_string tag) in | |
106 - acknowledged_tags := SSOSet.add tag !acknowledged_tags | |
107 +let ocamlfind_tags_used = ref StringSet.empty | |
108 | |
109 -let really_acknowledge (name, param) = | |
110 - match param with | |
111 - | None -> | |
112 - if Hashtbl.mem declared_tags name then | |
113 - Log.eprintf "Warning: tag %S expects a parameter" name | |
114 - | Some param -> | |
115 - let actions = List.rev (Hashtbl.find_all declared_tags name) in | |
116 - if actions = [] then | |
117 - Log.eprintf "Warning: tag %S does not expect a parameter, but is used with parameter %S" name param; | |
118 - List.iter (fun f -> f param) actions | |
119 +let acknowledge tag_string = | |
120 + let sso = Lexers.tag_gen (Lexing.from_string tag_string) in | |
121 + let tag = fst sso in | |
122 + (match tag with | |
123 + | "package" | "predicate" | "syntax" -> | |
124 + ocamlfind_tags_used := StringSet.add tag !ocamlfind_tags_used | |
125 + | _ -> () | |
126 + ); | |
127 + acknowledged_tags := SSOSet.add sso !acknowledged_tags | |
128 | |
129 let init () = | |
130 - SSOSet.iter really_acknowledge !acknowledged_tags | |
131 + SSOSet.iter (fun (tag,param) -> | |
132 + match param with | |
133 + | None -> | |
134 + if Hashtbl.mem declared_tags tag then | |
135 + Log.eprintf "Warning: tag %S expects a parameter" tag | |
136 + | Some param -> | |
137 + let actions = List.rev (Hashtbl.find_all declared_tags tag) in | |
138 + if actions = [] then | |
139 + Log.eprintf "Warning: tag %S does not expect a parameter, but is used with parameter %S" tag param; | |
140 + List.iter (fun f -> f param) actions | |
141 + ) !acknowledged_tags | |
142 | |
143 let make = Printf.sprintf "%s(%s)" | |
144 -- | |
145 1.7.2.5 | |
146 | |
147 | |
148 From e1f2adad03b52d5b71dea7fd6e2169d361366d60 Mon Sep 17 00:00:00 2001 | |
149 From: MXE | |
150 Date: Wed, 3 Oct 2012 09:30:21 +0200 | |
151 Subject: [PATCH 4/5] param_tags : use of special tags considering whether state of option -use-ocamlfind (mli) | |
152 | |
153 | |
154 diff --git a/ocamlbuild/param_tags.mli b/ocamlbuild/param_tags.mli | |
155 index a0047af..0839534 100644 | |
156 --- a/ocamlbuild/param_tags.mli | |
157 +++ b/ocamlbuild/param_tags.mli | |
158 @@ -12,29 +12,38 @@ | |
159 | |
160 (* Original author: Romain Bardou *) | |
161 | |
162 +(** just a check for use of tag "package" that implies ocamlfind use *) | |
163 +val ocamlfind_tags_used : My_std.StringSet.t ref | |
164 + | |
165 val declare: string -> (string -> unit) -> unit | |
166 (** Declare a parameterized tag. | |
167 | |
168 -[declare "name" action]: [action "param"] will be executed (once) by [init] | |
169 -if a tag of the form [name(param)] is [acknowledge]d. | |
170 - | |
171 -A given tag may be declared several times with different actions. All actions | |
172 -will be executed, in the order they were declared. *) | |
173 +[declare tag action] declares [tag] as a parameterized tag. | |
174 +A given tag may be declared several times with different actions. | |
175 +[init] will execute all actions in the order they were declared. | |
176 +Example : [declare "package" action] *) | |
177 | |
178 val acknowledge: string -> unit | |
179 (** Acknowledge a tag. | |
180 | |
181 -If the tag is of the form [X(Y)], and have been declared using [declare], | |
182 -then the actions given using [declare] will be executed with [Y] as parameter | |
183 -when [init] is executed. The action will only be called once per | |
184 -acknowledged parameter. *) | |
185 +[acknowledge "package(lablgtk2)"] will store the tag "package" with | |
186 +parameter [Some "lablgtk2"]. | |
187 +[acknowledge "annot"] will store the tag "annot" with | |
188 +parameter [None] *) | |
189 | |
190 val init: unit -> unit | |
191 (** Initialize parameterized tags. | |
192 | |
193 -Call this function once all tags have been [declare]d and [acknowledge]d. | |
194 +[init] checks in turn each acknowledged tag along with its parameter : | |
195 +- if the tag is declared (e.g "package"), and parameter=Some "lablgtk2", | |
196 +calls declared actions (only once) on "lablgtk2". | |
197 +- if the tag is not declared (e.g "annot"), and parameter=None, nothing is done | |
198 +- if the tag is not declared, but there is a parameter, raise a warning | |
199 +- if the tag is declared, but there is no parameter, raise a warning | |
200 If you [declare] or [acknowledge] a tag after having called [init], this will | |
201 -have no effect. [init] should only be called once. *) | |
202 +have no effect. | |
203 +[init] must be called once all tags have been marked with [declare] and | |
204 +[acknowledge]. It should only be called once. *) | |
205 | |
206 val make: Tags.elt -> string -> Tags.elt | |
207 (** Make a parameterized tag instance. | |
208 -- | |
209 1.7.2.5 | |
210 | |
211 | |
212 From 82118f5d8e0cb7a0193479d0e7459d265692551a Mon Sep 17 00:00:00 2001 | |
213 From: MXE | |
214 Date: Wed, 3 Oct 2012 09:31:13 +0200 | |
215 Subject: [PATCH 5/5] options : support for prefixed ocaml-tools with ocamlfind | |
216 | |
217 | |
218 diff --git a/ocamlbuild/options.ml b/ocamlbuild/options.ml | |
219 index 1be4b63..48f6648 100644 | |
220 --- a/ocamlbuild/options.ml | |
221 +++ b/ocamlbuild/options.ml | |
222 @@ -39,16 +39,17 @@ let use_menhir = ref false | |
223 let catch_errors = ref true | |
224 let use_ocamlfind = ref false | |
225 | |
226 -let mk_virtual_solvers = | |
227 +let mk_virtual_solvers target = | |
228 let dir = Ocamlbuild_where.bindir in | |
229 List.iter begin fun cmd -> | |
230 - let opt = cmd ^ ".opt" in | |
231 + let target_cmd = target^cmd in | |
232 + let opt = target_cmd ^ ".opt" in | |
233 let a_opt = A opt in | |
234 - let a_cmd = A cmd in | |
235 + let a_cmd = A target_cmd in | |
236 let search_in_path = memo Command.search_in_path in | |
237 let solver () = | |
238 if sys_file_exists !dir then | |
239 - let long = filename_concat !dir cmd in | |
240 + let long = filename_concat !dir target_cmd in | |
241 let long_opt = long ^ ".opt" in | |
242 if file_or_exe_exists long_opt then A long_opt | |
243 else if file_or_exe_exists long then A long | |
244 @@ -61,9 +62,9 @@ let mk_virtual_solvers = | |
245 end | |
246 | |
247 let () = | |
248 - mk_virtual_solvers | |
249 - ["ocamlc"; "ocamlopt"; "ocamldep"; "ocamldoc"; | |
250 - "ocamlyacc"; "menhir"; "ocamllex"; "ocamlmklib"; "ocamlmktop"; "ocamlfind"] | |
251 + mk_virtual_solvers "@target@-" | |
252 + ["ocamlc"; "ocamlopt"; "ocamldep"; "ocamlmklib"; "ocamlmktop"; "ocamlfind"]; | |
253 + mk_virtual_solvers "" ["ocamldoc"; "ocamlyacc"; "menhir"; "ocamllex"; "ocamlfind"] | |
254 let ocamlc = ref (V"OCAMLC") | |
255 let ocamlopt = ref (V"OCAMLOPT") | |
256 let ocamldep = ref (V"OCAMLDEP") | |
257 @@ -73,7 +74,7 @@ let ocamllex = ref (V"OCAMLLEX") | |
258 let ocamlmklib = ref (V"OCAMLMKLIB") | |
259 let ocamlmktop = ref (V"OCAMLMKTOP") | |
260 let ocamlrun = ref N | |
261 -let ocamlfind x = S[V"OCAMLFIND"; x] | |
262 +let ocamlfind = (V"OCAMLFIND") | |
263 let program_to_execute = ref false | |
264 let must_clean = ref false | |
265 let show_documentation = ref false | |
266 @@ -261,11 +262,19 @@ let init () = | |
267 (* TODO: warning message when using an option such as -ocamlc *) | |
268 (* Note that plugins can still modify these variables After_options. | |
269 This design decision can easily be changed. *) | |
270 - ocamlc := ocamlfind & A"ocamlc"; | |
271 - ocamlopt := ocamlfind & A"ocamlopt"; | |
272 - ocamldep := ocamlfind & A"ocamldep"; | |
273 - ocamldoc := ocamlfind & A"ocamldoc"; | |
274 - ocamlmktop := ocamlfind & A"ocamlmktop"; | |
275 + List.iter (fun (option,string) -> | |
276 + (match !option with | |
277 + | Sh s | |
278 + | A s -> | |
279 + Log.eprintf "Warning : Command '-%s %s' overidden by option -use-ocamlfind" string s | |
280 + | _ -> () | |
281 + ); | |
282 + option := S[ocamlfind; A string] | |
283 + ) [(ocamlc,"ocamlc"); | |
284 + (ocamlopt,"ocamlopt"); | |
285 + (ocamldep,"ocamldep"); | |
286 + (ocamldoc,"ocamldoc"); | |
287 + (ocamlmktop,"ocamlmktop")] | |
288 end; | |
289 | |
290 let reorder x y = x := !x @ (List.concat (List.rev !y)) in | |
291 -- | |
292 1.7.2.5 | |
293 |