Hello,<br><br>I try to compare Makefiles generated by your scripts and mine. I don&#39;t see any big differences, except the copy rules.<br><br>While trying your scripts, I also reproduced a similar bug.<br><br>Generating file_node.cmx<br>

Generating message_node.cmi<br>Generating file_node.cmi<br>File &quot;/Users/judi/src/ocaml/cmake/<div id=":3k" class="ii gt">code-analysis/build/<a href="http://file_node.ml/" target="_blank">file_node.ml</a>&quot;, line 1, characters 0-1:<br>
Error: Corrupted compiled interface<br>
file_node.cmi<br>make[2]: *** [file_node.cmx] Error 2<br><br>Try with<br>while true; do make clean; make -j; done<br>and you will reproduce it.<br><br>I think dependencies in our scripts are good (or almost good). The reason may be elsewhere.<br>

<br><br>I don&#39;t see a solution yet but I have found a promising lead.
When two targets depends on the same object, make tries to build the
object twice.<br><br>If make builds the same object twice at the same
time, the command &#39;cmake -E copy_if_different&#39; may be called at the
same time and one of the cmake command fails because it can&#39;t open the
file. I suppose it&#39;s the reason of<div class="im"><br>
&gt; Error copying file (if different) from &quot;[...]/code-analysis-build/Dependencies/message_node.ml.dep.cmake.tmp&quot;<br>&gt; to &quot;[...]/code-analysis-build/Dependencies/message_node.ml.dep.cmake&quot;.<br><br>
</div>
In your code, the loc and messages executables depends both on io.cmo.
Sometimes, it tries to link loc and build io.cmo (probably for
messages) at the same time. I suppose it&#39;s the reason of<div class="im"><br><br>&gt; Building OCaml object io.cmo<br>

&gt; Building OCaml object files.cmo<br>
&gt; [  0%] Linking OCaml executable loc<br>&gt; File &quot;_none_&quot;, line 1, characters 0-1:<br>
&gt; Error: The file /Users/judi/src/ocaml/cmake/code-analysis/build/io.cmo is not a bytecode object file<br><br><br></div>I
add a third target which depends on io.cmo (create a common library and
make loc and messages depend on this library). It appears that make
tries to build the object io.cmo three times and build fails are almost
systematic.<br>
<br><br>If you keep only one target, there is never no problems.<br><br><br>An idea ? Too late in the night for me :-(<br><br><br>Bye,<br><br>J. Bedouet<br><br><br></div><br><br><div class="gmail_quote">2010/1/20 Keyan <span dir="ltr">&lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt;</span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">hi,<br>
<br>
i started to work on your scripts. very nice work!<br>
<br>
unfortunately, i couldnt find the problem, and i cant reproduce it with my scripts. there must be a difference somewhere.<br>
<div class="im"><br>
cheers,<br>
keyan<br>
<br>
<br>
<br>
On 19 Jan 2010, at 00:30, Judicaël Bedouet wrote:<br>
<br>
</div><div><div></div><div class="h5">&gt; Hi,<br>
&gt;<br>
&gt; Effectively, I have reproduced your two bugs by using make -j. It&#39;s not systematic (once in ten).<br>
&gt;<br>
&gt; &gt;&gt; Error: The file /Users/zahedi/Downloads/code-analysis-build/io.cmo is not a bytecode object file<br>
&gt; When this error occurs, it also appears that the object is being built. And if I rerun make, linking is correct, without rebuilding io.cmo.<br>
&gt;<br>
&gt; Building OCaml object io.cmo<br>
&gt; Building OCaml object files.cmo<br>
&gt; [  0%] Linking OCaml executable loc<br>
&gt; File &quot;_none_&quot;, line 1, characters 0-1:<br>
&gt; Error: The file /Users/judi/src/ocaml/cmake/code-analysis/build/io.cmo is not a bytecode object file<br>
&gt;<br>
&gt; Dependencies in the generated Makefile seem to be correct :<br>
&gt; loc: file_node.cmo<br>
&gt; loc: files.cmo<br>
&gt; loc: io.cmo<br>
&gt; loc: file_statistics.cmo<br>
&gt; loc: message_node.cmo<br>
&gt; loc: loc.cmo<br>
&gt;<br>
&gt; Is OCaml parallel make safe ? I&#39;m not sure... I readd CMake address : maybe someone has an idea...<br>
&gt;<br>
&gt; To speed up compilation, I could look for ocamlc.opt and if not found ocamlc. Bytecode compilations should be faster.<br>
&gt;<br>
&gt; J. Bedouet<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2010/1/18 Keyan &lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt;<br>
&gt; hi,<br>
&gt;<br>
&gt; i am just trying to reproduce the message i posted. i cant, but i got something else:<br>
&gt;<br>
&gt; Error: The file /Users/zahedi/Downloads/code-analysis-build/io.cmo is not a bytecode object file<br>
&gt;<br>
&gt; i use make -j 2 (at least 2), and my guess is that it has to do with parallel compilation. could that be the case?<br>
&gt;<br>
&gt; cheers,<br>
&gt; keyan<br>
&gt;<br>
&gt; On 18 Jan 2010, at 18:01, Judicaël Bedouet wrote:<br>
&gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; first of all, wow, good job! very nice scripts, much more sophisticated then mine :)<br>
&gt; &gt; Thanks :-)<br>
&gt; &gt;<br>
&gt; &gt; &gt;&gt; I only had one error when first trying: Error copying file (if different) from &quot;[...]/code-analysis-build/Dependencies<br>
&gt; &gt; &gt;&gt; /message_node.ml.dep.cmake.tmp&quot; to &quot;[...]/code-analysis-build/Dependencies/message_node.ml.dep.cmake&quot;.<br>
&gt; &gt; Maybe the Dependencies directory is not created. It is done at line 32 of OCamlDep, though. Let me know if you find something.<br>
&gt; &gt;<br>
&gt; &gt; I have tested my scripts with OCaml 3.10 and I have found that ocamlfind is officially distributed with OCaml since 3.11. Maybe, I should put ocamlfind stuff in a FindOCamlFind script...<br>
&gt; &gt;<br>
&gt; &gt; J. Bedouet<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; 2010/1/18 Keyan &lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; i am sorry that i could not reply any sooner.<br>
&gt; &gt;<br>
&gt; &gt; first of all, wow, good job! very nice scripts, much more sophisticated then mine :)<br>
&gt; &gt;<br>
&gt; &gt; i only had one error when first trying:<br>
&gt; &gt;<br>
&gt; &gt; Error copying file (if different) from &quot;[...]/code-analysis-build/Dependencies/message_node.ml.dep.cmake.tmp&quot; to &quot;[...]/code-analysis-build/Dependencies/message_node.ml.dep.cmake&quot;.<br>
&gt; &gt;<br>
&gt; &gt; i will try to solve that myself. this way i know if i understand your scripts.<br>
&gt; &gt;<br>
&gt; &gt; cheers,<br>
&gt; &gt; keyan<br>
&gt; &gt;<br>
&gt; &gt; On 16 Jan 2010, at 14:51, Judicaël Bedouet wrote:<br>
&gt; &gt;<br>
&gt; &gt; &gt; Hi,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Here are my OCaml scripts, with your OCaml code (it helped me to find a bug about a source file included in two targets).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I have kept your idea about an only macro to compile and link, reused your macro ocaml_parse_arguments (I should use for my other macros :-) ) and added a macro find_ocaml_package to find ocaml packages with ocamlfind.<br>

&gt; &gt; &gt;<br>
&gt; &gt; &gt; Tell me what you think,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; J. Bedouet<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2010/1/15 Keyan &lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; hi,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Indeed, it is much more sophisticated, so it may be more bugged ;-)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; i can help debugging :)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;&gt; shell i send you my scripts to take a look?<br>
&gt; &gt; &gt; &gt; It&#39;s not necessary. I have downloaded the refactoring branch of yars. Thanks.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; oh, ok, then you should have the newest version (last yars revision is 513).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I comment my OCaml scripts and I send you, so that you could also have a look.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; great.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I have took a look at your UseOCaml script. I can&#39;t see why you copy ML files into the current binary dir before compiling them. Is there a reason ?<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; no. i copied most of the stuff from the UseLATEX.cmake. it was done so there, and at the time i wrote the script, i thought its a good idea. don&#39;t ask me why :)<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Keep in touch,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; let me know when i can jump in and help. looking forward.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; cheers,<br>
&gt; &gt; &gt; keyan<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; J. Bedouet<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Fri, Jan 15, 2010 at 8:26 AM, Keyan &lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt; wrote:<br>
&gt; &gt; &gt; &gt; I totally agree.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Judicaël: how should we proceed? my first impression is that your usecaml.cmake is much more sophisticated then mine :) same for the findocaml.cmake scripts, as mine up to now does nothing more than to call a bunch of find_program commands.<br>

&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; shell i send you my scripts to take a look?<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; i have no problem with merging my stuff into your scripts, keeping you as main author, if there is anything useful for you.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; cheers,<br>
&gt; &gt; &gt; &gt; keyan<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On 15 Jan 2010, at 02:39, Philip Lowman wrote:<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; On Thu, Jan 14, 2010 at 5:11 AM, Keyan &lt;<a href="mailto:ml@pulsschlag.net">ml@pulsschlag.net</a>&gt; wrote:<br>
&gt; &gt; &gt; &gt; &gt;&gt; hi,<br>
&gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt;&gt; ups ... i thought i replied to the list. thanks for the link. i will adapt my find-script to the requirements and maintain the package.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; You should work with Judicaël to combine the best of both of your<br>
&gt; &gt; &gt; &gt; &gt; works together into one FindOCaml and UseOCaml script.  There is no<br>
&gt; &gt; &gt; &gt; &gt; sense having two of them out there.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; &gt; Philip Lowman<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br>