<div>The following project is a boiled-down version of yours but doesn't<br>
need any programs except for CMake - that's what I actually meant<br>
with "minimal but complete" as I don't have the org.antlr.Tool<br>
Java program:</div><div><br></div><div>I am sorry. I was mainly trying to cleanup the big CMakeLists file</div><div>I had and removed about 10 different targets - all of which were</div><div>rebuilt because the 5 files (test*.*) were overwritten.</div>
<div><br></div><div>If you want to try running the test project on your system</div><div><br></div><div>test.g is at <a href="http://pastie.org/private/agzor3ibzoa5pom6q31qq">http://pastie.org/private/agzor3ibzoa5pom6q31qq</a></div>
<div><br></div><div>org.antlr.Tool is at <a href="http://www.antlr.org/download/antlr-3.4-complete.jar">www.antlr.org/download/antlr-3.4-complete.jar</a> </div><div><br></div><div>After configuration, you can run the target by "make X=0" and check the<br>
</div>
timestamps by "ls -l --full-time test.tokens parser src". Issuing "make<br>
X=0" again reveals that the copied files aren't rewritten as it happens<br>
after "make X=1". Thus, AFAICS, everything works as expected. Could you<br><div>
check if the above-noted example also works on your system?<br></div><div><br></div><div>It does not work. The files are still overwritten.</div><div><br></div><div><div class="im">What exactly does not work with your example? You wrote:<br>
<br>
>>> I have 4 cmake -E copy_if_different commands, one for each file.<br>
</div>>>> Only the last file is not copied (if similar). [...]<br></div><div><br></div><div>Does this mean that the last file out of four - in fact, your example<br>
handles five files - is not copied *although* the source file and the<br>
destination file are different, i.e. similar but not equal?</div><div><br></div><div>Yes the file test.tokens is not copied overwritten since they are</div><div>exactly (diff) similar files. This is the case with the other 4 files as well,</div>
<div>but they are still copied over and rewritten.</div><div><br></div><div><br></div><div>You wrote further:<br>
<br>
>>> [...] The others are copied<br>
<div class="im">>>> even if they are the same.<br>
>>><br>
>>> I verfied that they are the same with a diff.<br>
<br>
</div>Does this mean that source files are copied *although* they are equal<br>
to their respective destination file? How do you determine that they<br>
have been copied? Do you check the timestamps? With --full-time?</div><div><br></div><div>Yes, I do check with ls -l --full-time. Except test.tokens, all the other files</div><div>are copied over (rewritten) even though they are exactly the same (diff same I mean).</div>
<div><br></div><div>This is what is confusing me about the behavior of copy_if_different.</div><div>that is why it works only with test.tokens and not others.</div><div><br></div><div>PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.</div>
<div><br></div><div>Yes, it generates the files in the source dir itself (where test.g is present)</div><div>I now modified CMakeLists to copy test.g to the project build folder and</div><div>run it there. The new CMakeLists is at</div>
<div><br></div><div><a href="http://pastie.org/private/p1yi0l8so9cqimqlywfmhw">http://pastie.org/private/p1yi0l8so9cqimqlywfmhw</a></div><div><br></div><div><br></div><div>Thank You</div><div>Ajay</div><div><br></div><div class="gmail_quote">
On Sun, Mar 4, 2012 at 12:52 AM, Michael Hertling <span dir="ltr"><<a href="mailto:mhertling@online.de">mhertling@online.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 03/04/2012 01:06 AM, Ajay Panyala wrote:<br>
> Please provide a minimal but complete example for this issue.<br>
><br>
> Please find it in the following link<br>
> <a href="http://pastie.org/private/pd13u33s9xpfihf2dbzc1q" target="_blank">http://pastie.org/private/pd13u33s9xpfihf2dbzc1q</a><br>
<br>
</div></blockquote><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The following project is a boiled-down version of yours but doesn't<br>
need any programs except for CMake - that's what I actually meant<br>
with "minimal but complete" as I don't have the org.antlr.Tool<br>
Java program:<br>
<br>
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)<br>
PROJECT(P NONE)<br>
SET(CMAKE_VERBOSE_MAKEFILE ON)<br>
<br>
SET(GrammarSource ${PROJECT_BINARY_DIR}/src)<br>
FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src)<br>
<br>
ADD_CUSTOM_TARGET(GrammarBuild ALL<br>
COMMAND ${CMAKE_COMMAND} -E echo "\${X}"<br>
> ${GrammarSource}/testLexer.h<br>
COMMAND ${CMAKE_COMMAND} -E echo "\${X}"<br>
> ${GrammarSource}/testLexer.c<br>
COMMAND ${CMAKE_COMMAND} -E echo "\${X}"<br>
> ${GrammarSource}/testParser.h<br>
COMMAND ${CMAKE_COMMAND} -E echo "\${X}"<br>
> ${GrammarSource}/testParser.c<br>
COMMAND ${CMAKE_COMMAND} -E echo "\${X}"<br>
> ${PROJECT_BINARY_DIR}/test.tokens<br>
)<br>
<br>
ADD_CUSTOM_COMMAND(TARGET GrammarBuild POST_BUILD<br>
COMMAND ${CMAKE_COMMAND} -E copy_if_different<br>
${GrammarSource}/testLexer.h<br>
${PROJECT_BINARY_DIR}/parser/testLexer.h<br>
COMMAND ${CMAKE_COMMAND} -E copy_if_different<br>
${GrammarSource}/testLexer.c<br>
${PROJECT_BINARY_DIR}/parser/testLexer.c<br>
COMMAND ${CMAKE_COMMAND} -E copy_if_different<br>
${GrammarSource}/testParser.h<br>
${PROJECT_BINARY_DIR}/parser/testParser.h<br>
COMMAND ${CMAKE_COMMAND} -E copy_if_different<br>
${GrammarSource}/testParser.c<br>
${PROJECT_BINARY_DIR}/parser/testParser.c<br>
COMMAND ${CMAKE_COMMAND} -E copy_if_different<br>
${PROJECT_BINARY_DIR}/test.tokens<br>
${PROJECT_BINARY_DIR}/parser/test.tokens<br>
)<br>
<br>
After configuration, you can run the target by "make X=0" and check the<br>
timestamps by "ls -l --full-time test.tokens parser src". Issuing "make<br>
X=0" again reveals that the copied files aren't rewritten as it happens<br>
after "make X=1". Thus, AFAICS, everything works as expected. Could you<br>
check if the above-noted example also works on your system?<br>
<div class="im"><br>
What exactly does not work with your example? You wrote:<br>
<br>
>>> I have 4 cmake -E copy_if_different commands, one for each file.<br>
</div>>>> Only the last file is not copied (if similar). [...]<br>
<br>
Does this mean that the last file out of four - in fact, your example<br>
handles five files - is not copied *although* the source file and the<br>
destination file are different, i.e. similar but not equal?<br>
<br>
You wrote further:<br>
<br>
>>> [...] The others are copied<br>
<div class="im">>>> even if they are the same.<br>
>>><br>
>>> I verfied that they are the same with a diff.<br>
<br>
</div>Does this mean that source files are copied *although* they are equal<br>
to their respective destination file? How do you determine that they<br>
have been copied? Do you check the timestamps? With --full-time?<br>
<br>
Regards,<br>
<font color="#888888"><br>
Michael<br>
</font><br>
PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.<br>
<div><div class="h5"><br>
> On Sat, Mar 3, 2012 at 3:54 PM, Michael Hertling <<a href="mailto:mhertling@online.de">mhertling@online.de</a>>wrote:<br>
><br>
>> On 03/04/2012 12:14 AM, Ajay Panyala wrote:<br>
>>> No, it wouldn't; check it out:<br>
>>><br>
>>> % touch a<br>
>>> % rm -f b<br>
>>> % ls b<br>
>>> ls: cannot access b: No such file or directory<br>
>>> % cmake -E copy_if_different a b<br>
>>> % ls b<br>
>>> b<br>
>>> % cksum a b<br>
>>> 4294967295 0 a<br>
>>> 4294967295 0 b<br>
>>><br>
>>> It works with one file, but I have 4 files that are generated.<br>
>>> I have 4 cmake -E copy_if_different commands, one for each file.<br>
>>> Only the last file is not copied (if similar). The others are copied<br>
>>> even if they are the same.<br>
>>><br>
>>> I verfied that they are the same with a diff.<br>
>>><br>
>>> Any idea what might be happening here ?<br>
>><br>
>> Please provide a minimal but complete example for this issue.<br>
>><br>
>> Regards,<br>
>><br>
>> Michael<br>
>><br>
>>> On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling <<a href="mailto:mhertling@online.de">mhertling@online.de</a><br>
>>> wrote:<br>
>>><br>
>>>> On 03/03/2012 10:36 PM, Ajay Panyala wrote:<br>
>>>>> Try "cmake -E copy_if_different ..."<br>
>>>>><br>
>>>>> cmake -E copy_if_different build/test1.c build/tests/test1.c<br>
>>>>><br>
>>>>> That would work when make is run atleast once.<br>
>>>>> When running make for the 1st time test1.c was never<br>
>>>>> copied to build/tests before. So I would be comparing a file with<br>
>>>>> another non-existant file and that would result in an error halting<br>
>>>>> the make process.<br>
>>>><br>
>>>> No, it wouldn't; check it out:<br>
>>>><br>
>>>> % touch a<br>
>>>> % rm -f b<br>
>>>> % ls b<br>
>>>> ls: cannot access b: No such file or directory<br>
>>>> % cmake -E copy_if_different a b<br>
>>>> % ls b<br>
>>>> b<br>
>>>> % cksum a b<br>
>>>> 4294967295 0 a<br>
>>>> 4294967295 0 b<br>
>>>><br>
>>>> Regards,<br>
>>>><br>
>>>> Michael<br>
>>>><br>
>>>>> On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler <<br>
>> <a href="mailto:post@hendrik-sattler.de">post@hendrik-sattler.de</a><br>
>>>>> wrote:<br>
>>>>><br>
>>>>>> Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:<br>
>>>>>>> I have a custom target which runs a command to generate<br>
>>>>>>> a C source file say test1.c<br>
>>>>>>><br>
>>>>>>> ADD_CUSTOM_TARGET(TestGen ALL<br>
>>>>>>> COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java<br>
>>>>>>> DEPENDS ${PROJECT_SOURCE_DIR}/Main.java<br>
>>>>>>> )<br>
>>>>>>><br>
>>>>>>> And I have a custom command that moves the generated *test1.c *<br>
>>>>>>> to a new directory inside the build directory.<br>
>>>>>>><br>
>>>>>>> ADD_CUSTOM_COMMAND(<br>
>>>>>>> TARGET TestGen<br>
>>>>>>> POST_BUILD<br>
>>>>>>> COMMAND mv<br>
>>>>>>> ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/<br>
>>>>>>> )<br>
>>>>>>><br>
>>>>>>> Each time I run make, the custom target is run (since custom targets<br>
>>>> are<br>
>>>>>>> always<br>
>>>>>>> out-of-date). But I want to avoid moving the new test1.c generated<br>
>> each<br>
>>>>>>> time if build/test1.c is the same as build/tests/test1.c since there<br>
>>>> are<br>
>>>>>>> other targets<br>
>>>>>>> like add_executable and add_library later in the CMakelists file that<br>
>>>> are<br>
>>>>>>> re-built<br>
>>>>>>> each time since they depend on test1.c<br>
>>>>>><br>
>>>>>> Try "cmake -E copy_if_different ..."<br>
>>>>>><br>
>>>>>> HS<br>
--<br>
<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.cmake.org/mailman/listinfo/cmake" target="_blank">http://www.cmake.org/mailman/listinfo/cmake</a><br>
</div></div></blockquote></div><br><br clear="all"><br><br>