Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-05 Thread Ajay Panyala
 if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
 ADD_CUSTOM_TARGET(...)
 ADD_CUSTOM_COMMAND(...)

 i.e I am totally avoiding the process of rebuilding the test.g file and
 copying the generated files to build/parser
 *IF* test.g has not been modified.

...and if test.g is once modified, you won't have a custom target which
regenerates the source files and copies them to the parser directory -
I'm pretty sure this is not what you intend. Recall the difference
between configuration time and build time in CMakified projects.

You are right. Once test.g is modified, just running make wont rebuild it.
I have to run cmake again and then make since the IF is evaluated only
when cmake is run.


Thanks
Ajay

On Sun, Mar 4, 2012 at 7:35 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/05/2012 01:59 AM, Ajay Panyala wrote:
  I use cmake version 2.8.3.
 
  If I use CMakeLists from your previous reply, it avoids overwriting files
  when X=0.
  I have attached the output of your script.

 Actually, this is exactly what I was talking about: The second make
 X=0 invocation rewrites the source files - i.e., they receive a new
 timestamp - but their contents do not change. Thus, the destination
 files in the parser directory are *not* touched by the second make
 X=0, and this can be seen clearly by reference to the timestamps.
 It's the subsequent make X=1 which provides for a new content of
 the source files and makes cmake -E copy_if_different copy the
 sources to the destinations. That's why I said everything works
 as expected, but you wrote:

  It does not work. The files are still overwritten.

 So, my question again: What exactly does not work?

 I.e., does cmake -E copy_if_different

 - copy a file although the destination exists
  and has the same content as the source, or

 - not copy a file although the destination does not
  exist or does not have the same content as the source?

  It works for my CMakeLists as well now. What I did now is
 
  if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
  ADD_CUSTOM_TARGET(...)
  ADD_CUSTOM_COMMAND(...)
 
  i.e I am totally avoiding the process of rebuilding the test.g file and
  copying the generated files to build/parser
  *IF* test.g has not been modified.

 ...and if test.g is once modified, you won't have a custom target which
 regenerates the source files and copies them to the parser directory -
 I'm pretty sure this is not what you intend. Recall the difference
 between configuration time and build time in CMakified projects.

  PS: Could you set up your e-mail client so that it marks quoted
 text in some way? Currently, one can't distinguish between
 the lines you are writing and the lines written by others.
 
  Sorry. I did not realize that. I use gmail and when I checked my sent
  emails,
  quoted text appears to be clearly marked. Is the quoted text in this
 email
  marked properly.

 Yes, it is.

 Regards,

 Michael

  On Sun, Mar 4, 2012 at 4:05 PM, Michael Hertling mhertl...@online.de
 wrote:
 
  On 03/04/2012 08:02 PM, Ajay Panyala wrote:
  The following project is a boiled-down version of yours but doesn't
  need any programs except for CMake - that's what I actually meant
  with minimal but complete as I don't have the org.antlr.Tool
  Java program:
 
  I am sorry. I was mainly trying to cleanup the big CMakeLists file
  I had and removed about 10 different targets - all of which were
  rebuilt because the 5 files (test*.*) were overwritten.
 
  If you want to try running the test project on your system
 
  test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq
 
  org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar
 
  After configuration, you can run the target by make X=0 and check the
  timestamps by ls -l --full-time test.tokens parser src. Issuing make
  X=0 again reveals that the copied files aren't rewritten as it happens
  after make X=1. Thus, AFAICS, everything works as expected. Could you
  check if the above-noted example also works on your system?
 
  It does not work. The files are still overwritten.
 
  Could you run the following shell script in a build tree configured
  with the CMakeLists.txt from my previous reply and post the output?
 
  # check.sh:
  make X=0 21  /dev/null
  echo After make X=0 (1):
  echo ---
  echo 
  ls --full-time test.tokens src parser
  echo -ne \n\n
  sleep 3
  make X=0 21  /dev/null
  echo After make X=0 (2):
  echo ---
  echo 
  ls --full-time test.tokens src parser
  echo -ne \n\n
  sleep 3
  make X=1 21  /dev/null
  echo After make X=1:
  echo ---
  echo 
  ls --full-time test.tokens src parser
  # End of check.sh
 
  BTW, which CMake version do you use?
 
  Regards,
 
  Michael
 
  PS: Could you set up your e-mail client so that it marks quoted
 text in some way? Currently, one can't distinguish between
 the lines you are writing and the lines written by 

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Michael Hertling
On 03/04/2012 01:06 AM, Ajay Panyala wrote:
 Please provide a minimal but complete example for this issue.
 
 Please find it in the following link
 http://pastie.org/private/pd13u33s9xpfihf2dbzc1q

The following project is a boiled-down version of yours but doesn't
need any programs except for CMake - that's what I actually meant
with minimal but complete as I don't have the org.antlr.Tool
Java program:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(P NONE)
SET(CMAKE_VERBOSE_MAKEFILE ON)

SET(GrammarSource ${PROJECT_BINARY_DIR}/src)
FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src)

ADD_CUSTOM_TARGET(GrammarBuild ALL
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${PROJECT_BINARY_DIR}/test.tokens
)

ADD_CUSTOM_COMMAND(TARGET GrammarBuild POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.h
${PROJECT_BINARY_DIR}/parser/testLexer.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.c
${PROJECT_BINARY_DIR}/parser/testLexer.c
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testParser.h
${PROJECT_BINARY_DIR}/parser/testParser.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testParser.c
${PROJECT_BINARY_DIR}/parser/testParser.c
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_BINARY_DIR}/test.tokens
${PROJECT_BINARY_DIR}/parser/test.tokens
)

After configuration, you can run the target by make X=0 and check the
timestamps by ls -l --full-time test.tokens parser src. Issuing make
X=0 again reveals that the copied files aren't rewritten as it happens
after make X=1. Thus, AFAICS, everything works as expected. Could you
check if the above-noted example also works on your system?

What exactly does not work with your example? You wrote:

 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). [...]

Does this mean that the last file out of four - in fact, your example
handles five files - is not copied *although* the source file and the
destination file are different, i.e. similar but not equal?

You wrote further:

 [...] The others are copied
 even if they are the same.

 I verfied that they are the same with a diff.

Does this mean that source files are copied *although* they are equal
to their respective destination file? How do you determine that they
have been copied? Do you check the timestamps? With --full-time?

Regards,

Michael

PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.

 On Sat, Mar 3, 2012 at 3:54 PM, Michael Hertling mhertl...@online.dewrote:
 
 On 03/04/2012 12:14 AM, Ajay Panyala wrote:
 No, it wouldn't; check it out:

 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b

 It works with one file, but I have 4 files that are generated.
 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). The others are copied
 even if they are the same.

 I verfied that they are the same with a diff.

 Any idea what might be happening here ?

 Please provide a minimal but complete example for this issue.

 Regards,

 Michael

 On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling mhertl...@online.de
 wrote:

 On 03/03/2012 10:36 PM, Ajay Panyala wrote:
 Try cmake -E copy_if_different ...

 cmake -E copy_if_different build/test1.c build/tests/test1.c

 That would work when make is run atleast once.
 When running make for the 1st time test1.c was never
 copied to build/tests before. So I would be comparing a file with
 another non-existant file and that would result in an error halting
 the make process.

 No, it wouldn't; check it out:

 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b

 Regards,

 Michael

 On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler 
 p...@hendrik-sattler.de
 wrote:

 Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
 I have a custom target which runs a command to generate
 a C source file say test1.c

 ADD_CUSTOM_TARGET(TestGen ALL
 COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
 DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
 )

 And I have a custom command that moves the generated *test1.c *
 to a new directory inside the build directory.

 ADD_CUSTOM_COMMAND(
 TARGET TestGen
 POST_BUILD
 COMMAND mv
 ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
 )

 Each time I run make, the custom 

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Ajay Panyala
The following project is a boiled-down version of yours but doesn't
need any programs except for CMake - that's what I actually meant
with minimal but complete as I don't have the org.antlr.Tool
Java program:

I am sorry. I was mainly trying to cleanup the big CMakeLists file
I had and removed about 10 different targets - all of which were
rebuilt because the 5 files (test*.*) were overwritten.

If you want to try running the test project on your system

test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq

org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar

After configuration, you can run the target by make X=0 and check the
timestamps by ls -l --full-time test.tokens parser src. Issuing make
X=0 again reveals that the copied files aren't rewritten as it happens
after make X=1. Thus, AFAICS, everything works as expected. Could you
check if the above-noted example also works on your system?

It does not work. The files are still overwritten.

What exactly does not work with your example? You wrote:

 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). [...]

Does this mean that the last file out of four - in fact, your example
handles five files - is not copied *although* the source file and the
destination file are different, i.e. similar but not equal?

Yes the file test.tokens is not copied overwritten since they are
exactly (diff) similar files. This is the case with the other 4 files as
well,
but they are still copied over and rewritten.


You wrote further:

 [...] The others are copied
 even if they are the same.

 I verfied that they are the same with a diff.

Does this mean that source files are copied *although* they are equal
to their respective destination file? How do you determine that they
have been copied? Do you check the timestamps? With --full-time?

Yes, I do check with ls -l --full-time. Except test.tokens, all the other
files
are copied over (rewritten) even though they are exactly the same (diff
same I mean).

This is what is confusing me about the behavior of copy_if_different.
that is why it works only with test.tokens and not others.

PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.

Yes, it generates the files in the source dir itself (where test.g is
present)
I now modified CMakeLists to copy test.g to the project build folder and
run it there. The new CMakeLists is at

http://pastie.org/private/p1yi0l8so9cqimqlywfmhw


Thank You
Ajay

On Sun, Mar 4, 2012 at 12:52 AM, Michael Hertling mhertl...@online.dewrote:

 On 03/04/2012 01:06 AM, Ajay Panyala wrote:
  Please provide a minimal but complete example for this issue.
 
  Please find it in the following link
  http://pastie.org/private/pd13u33s9xpfihf2dbzc1q




 The following project is a boiled-down version of yours but doesn't
 need any programs except for CMake - that's what I actually meant
 with minimal but complete as I don't have the org.antlr.Tool
 Java program:

 CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
 PROJECT(P NONE)
 SET(CMAKE_VERBOSE_MAKEFILE ON)

 SET(GrammarSource ${PROJECT_BINARY_DIR}/src)
 FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src)

 ADD_CUSTOM_TARGET(GrammarBuild ALL
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${PROJECT_BINARY_DIR}/test.tokens
 )

 ADD_CUSTOM_COMMAND(TARGET GrammarBuild POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.h
${PROJECT_BINARY_DIR}/parser/testLexer.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.c
${PROJECT_BINARY_DIR}/parser/testLexer.c
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testParser.h
${PROJECT_BINARY_DIR}/parser/testParser.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testParser.c
${PROJECT_BINARY_DIR}/parser/testParser.c
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${PROJECT_BINARY_DIR}/test.tokens
${PROJECT_BINARY_DIR}/parser/test.tokens
 )

 After configuration, you can run the target by make X=0 and check the
 timestamps by ls -l --full-time test.tokens parser src. Issuing make
 X=0 again reveals that the copied files aren't rewritten as it happens
 after make X=1. Thus, AFAICS, everything works as expected. Could you
 check if the above-noted example also works on your system?

 What exactly does not work with your example? You wrote:

  I have 4 cmake -E copy_if_different commands, one for each file.
  Only the last file is not copied (if similar). [...]

 Does this mean that the last file out of four - in fact, your 

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Michael Hertling
On 03/04/2012 08:02 PM, Ajay Panyala wrote:
 The following project is a boiled-down version of yours but doesn't
 need any programs except for CMake - that's what I actually meant
 with minimal but complete as I don't have the org.antlr.Tool
 Java program:
 
 I am sorry. I was mainly trying to cleanup the big CMakeLists file
 I had and removed about 10 different targets - all of which were
 rebuilt because the 5 files (test*.*) were overwritten.
 
 If you want to try running the test project on your system
 
 test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq
 
 org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar
 
 After configuration, you can run the target by make X=0 and check the
 timestamps by ls -l --full-time test.tokens parser src. Issuing make
 X=0 again reveals that the copied files aren't rewritten as it happens
 after make X=1. Thus, AFAICS, everything works as expected. Could you
 check if the above-noted example also works on your system?
 
 It does not work. The files are still overwritten.

Could you run the following shell script in a build tree configured
with the CMakeLists.txt from my previous reply and post the output?

# check.sh:
make X=0 21  /dev/null
echo After make X=0 (1):
echo ---
echo 
ls --full-time test.tokens src parser
echo -ne \n\n
sleep 3
make X=0 21  /dev/null
echo After make X=0 (2):
echo ---
echo 
ls --full-time test.tokens src parser
echo -ne \n\n
sleep 3
make X=1 21  /dev/null
echo After make X=1:
echo ---
echo 
ls --full-time test.tokens src parser
# End of check.sh

BTW, which CMake version do you use?

Regards,

Michael

PS: Could you set up your e-mail client so that it marks quoted
text in some way? Currently, one can't distinguish between
the lines you are writing and the lines written by others.

 What exactly does not work with your example? You wrote:
 
 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). [...]
 
 Does this mean that the last file out of four - in fact, your example
 handles five files - is not copied *although* the source file and the
 destination file are different, i.e. similar but not equal?
 
 Yes the file test.tokens is not copied overwritten since they are
 exactly (diff) similar files. This is the case with the other 4 files as
 well,
 but they are still copied over and rewritten.
 
 
 You wrote further:
 
 [...] The others are copied
 even if they are the same.

 I verfied that they are the same with a diff.
 
 Does this mean that source files are copied *although* they are equal
 to their respective destination file? How do you determine that they
 have been copied? Do you check the timestamps? With --full-time?
 
 Yes, I do check with ls -l --full-time. Except test.tokens, all the other
 files
 are copied over (rewritten) even though they are exactly the same (diff
 same I mean).
 
 This is what is confusing me about the behavior of copy_if_different.
 that is why it works only with test.tokens and not others.
 
 PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.
 
 Yes, it generates the files in the source dir itself (where test.g is
 present)
 I now modified CMakeLists to copy test.g to the project build folder and
 run it there. The new CMakeLists is at
 
 http://pastie.org/private/p1yi0l8so9cqimqlywfmhw
 
 
 Thank You
 Ajay
 
 On Sun, Mar 4, 2012 at 12:52 AM, Michael Hertling mhertl...@online.dewrote:
 
 On 03/04/2012 01:06 AM, Ajay Panyala wrote:
 Please provide a minimal but complete example for this issue.

 Please find it in the following link
 http://pastie.org/private/pd13u33s9xpfihf2dbzc1q


 
 
 The following project is a boiled-down version of yours but doesn't
 need any programs except for CMake - that's what I actually meant
 with minimal but complete as I don't have the org.antlr.Tool
 Java program:

 CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
 PROJECT(P NONE)
 SET(CMAKE_VERBOSE_MAKEFILE ON)

 SET(GrammarSource ${PROJECT_BINARY_DIR}/src)
 FILE(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src)

 ADD_CUSTOM_TARGET(GrammarBuild ALL
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testLexer.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.h
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${GrammarSource}/testParser.c
COMMAND ${CMAKE_COMMAND} -E echo \${X}
 ${PROJECT_BINARY_DIR}/test.tokens
 )

 ADD_CUSTOM_COMMAND(TARGET GrammarBuild POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.h
${PROJECT_BINARY_DIR}/parser/testLexer.h
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testLexer.c
${PROJECT_BINARY_DIR}/parser/testLexer.c
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${GrammarSource}/testParser.h

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Ajay Panyala
I use cmake version 2.8.3.

If I use CMakeLists from your previous reply, it avoids overwriting files
when X=0.
I have attached the output of your script.

It works for my CMakeLists as well now. What I did now is

if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
ADD_CUSTOM_TARGET(...)
ADD_CUSTOM_COMMAND(...)

i.e I am totally avoiding the process of rebuilding the test.g file and
copying the generated files to build/parser
*IF* test.g has not been modified.


 Thank you very much
Ajay

PS: Could you set up your e-mail client so that it marks quoted
   text in some way? Currently, one can't distinguish between
   the lines you are writing and the lines written by others.

Sorry. I did not realize that. I use gmail and when I checked my sent
emails,
quoted text appears to be clearly marked. Is the quoted text in this email
marked properly.

On Sun, Mar 4, 2012 at 4:05 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/04/2012 08:02 PM, Ajay Panyala wrote:
  The following project is a boiled-down version of yours but doesn't
  need any programs except for CMake - that's what I actually meant
  with minimal but complete as I don't have the org.antlr.Tool
  Java program:
 
  I am sorry. I was mainly trying to cleanup the big CMakeLists file
  I had and removed about 10 different targets - all of which were
  rebuilt because the 5 files (test*.*) were overwritten.
 
  If you want to try running the test project on your system
 
  test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq
 
  org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar
 
  After configuration, you can run the target by make X=0 and check the
  timestamps by ls -l --full-time test.tokens parser src. Issuing make
  X=0 again reveals that the copied files aren't rewritten as it happens
  after make X=1. Thus, AFAICS, everything works as expected. Could you
  check if the above-noted example also works on your system?
 
  It does not work. The files are still overwritten.

 Could you run the following shell script in a build tree configured
 with the CMakeLists.txt from my previous reply and post the output?

 # check.sh:
 make X=0 21  /dev/null
 echo After make X=0 (1):
 echo ---
 echo 
 ls --full-time test.tokens src parser
 echo -ne \n\n
 sleep 3
 make X=0 21  /dev/null
 echo After make X=0 (2):
 echo ---
 echo 
 ls --full-time test.tokens src parser
 echo -ne \n\n
 sleep 3
 make X=1 21  /dev/null
 echo After make X=1:
 echo ---
 echo 
 ls --full-time test.tokens src parser
 # End of check.sh

 BTW, which CMake version do you use?

 Regards,

 Michael

 PS: Could you set up your e-mail client so that it marks quoted
text in some way? Currently, one can't distinguish between
the lines you are writing and the lines written by others.

  What exactly does not work with your example? You wrote:
 
  I have 4 cmake -E copy_if_different commands, one for each file.
  Only the last file is not copied (if similar). [...]
 
  Does this mean that the last file out of four - in fact, your example
  handles five files - is not copied *although* the source file and the
  destination file are different, i.e. similar but not equal?
 
  Yes the file test.tokens is not copied overwritten since they are
  exactly (diff) similar files. This is the case with the other 4 files as
  well,
  but they are still copied over and rewritten.
 
 
  You wrote further:
 
  [...] The others are copied
  even if they are the same.
 
  I verfied that they are the same with a diff.
 
  Does this mean that source files are copied *although* they are equal
  to their respective destination file? How do you determine that they
  have been copied? Do you check the timestamps? With --full-time?
 
  Yes, I do check with ls -l --full-time. Except test.tokens, all the other
  files
  are copied over (rewritten) even though they are exactly the same (diff
  same I mean).
 
  This is what is confusing me about the behavior of copy_if_different.
  that is why it works only with test.tokens and not others.
 
  PS: Does org.antlr.Tool write to the source tree? If so: Don't do that.
 
  Yes, it generates the files in the source dir itself (where test.g is
  present)
  I now modified CMakeLists to copy test.g to the project build folder and
  run it there. The new CMakeLists is at
 
  http://pastie.org/private/p1yi0l8so9cqimqlywfmhw
 
 
  Thank You
  Ajay
 
  On Sun, Mar 4, 2012 at 12:52 AM, Michael Hertling mhertl...@online.de
 wrote:
 
  On 03/04/2012 01:06 AM, Ajay Panyala wrote:
  Please provide a minimal but complete example for this issue.
 
  Please find it in the following link
  http://pastie.org/private/pd13u33s9xpfihf2dbzc1q
 
 
 
 
  The following project is a boiled-down version of yours but doesn't
  need any programs except for CMake - that's what I actually meant
  with minimal but complete as I don't have the org.antlr.Tool
  Java program:
 
  

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Michael Hertling
On 03/05/2012 01:59 AM, Ajay Panyala wrote:
 I use cmake version 2.8.3.
 
 If I use CMakeLists from your previous reply, it avoids overwriting files
 when X=0.
 I have attached the output of your script.

Actually, this is exactly what I was talking about: The second make
X=0 invocation rewrites the source files - i.e., they receive a new
timestamp - but their contents do not change. Thus, the destination
files in the parser directory are *not* touched by the second make
X=0, and this can be seen clearly by reference to the timestamps.
It's the subsequent make X=1 which provides for a new content of
the source files and makes cmake -E copy_if_different copy the
sources to the destinations. That's why I said everything works
as expected, but you wrote:

 It does not work. The files are still overwritten.

So, my question again: What exactly does not work?

I.e., does cmake -E copy_if_different

- copy a file although the destination exists
  and has the same content as the source, or

- not copy a file although the destination does not
  exist or does not have the same content as the source?

 It works for my CMakeLists as well now. What I did now is
 
 if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
 ADD_CUSTOM_TARGET(...)
 ADD_CUSTOM_COMMAND(...)
 
 i.e I am totally avoiding the process of rebuilding the test.g file and
 copying the generated files to build/parser
 *IF* test.g has not been modified.

...and if test.g is once modified, you won't have a custom target which
regenerates the source files and copies them to the parser directory -
I'm pretty sure this is not what you intend. Recall the difference
between configuration time and build time in CMakified projects.

 PS: Could you set up your e-mail client so that it marks quoted
text in some way? Currently, one can't distinguish between
the lines you are writing and the lines written by others.
 
 Sorry. I did not realize that. I use gmail and when I checked my sent
 emails,
 quoted text appears to be clearly marked. Is the quoted text in this email
 marked properly.

Yes, it is.

Regards,

Michael

 On Sun, Mar 4, 2012 at 4:05 PM, Michael Hertling mhertl...@online.dewrote:
 
 On 03/04/2012 08:02 PM, Ajay Panyala wrote:
 The following project is a boiled-down version of yours but doesn't
 need any programs except for CMake - that's what I actually meant
 with minimal but complete as I don't have the org.antlr.Tool
 Java program:

 I am sorry. I was mainly trying to cleanup the big CMakeLists file
 I had and removed about 10 different targets - all of which were
 rebuilt because the 5 files (test*.*) were overwritten.

 If you want to try running the test project on your system

 test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq

 org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar

 After configuration, you can run the target by make X=0 and check the
 timestamps by ls -l --full-time test.tokens parser src. Issuing make
 X=0 again reveals that the copied files aren't rewritten as it happens
 after make X=1. Thus, AFAICS, everything works as expected. Could you
 check if the above-noted example also works on your system?

 It does not work. The files are still overwritten.

 Could you run the following shell script in a build tree configured
 with the CMakeLists.txt from my previous reply and post the output?

 # check.sh:
 make X=0 21  /dev/null
 echo After make X=0 (1):
 echo ---
 echo 
 ls --full-time test.tokens src parser
 echo -ne \n\n
 sleep 3
 make X=0 21  /dev/null
 echo After make X=0 (2):
 echo ---
 echo 
 ls --full-time test.tokens src parser
 echo -ne \n\n
 sleep 3
 make X=1 21  /dev/null
 echo After make X=1:
 echo ---
 echo 
 ls --full-time test.tokens src parser
 # End of check.sh

 BTW, which CMake version do you use?

 Regards,

 Michael

 PS: Could you set up your e-mail client so that it marks quoted
text in some way? Currently, one can't distinguish between
the lines you are writing and the lines written by others.

 What exactly does not work with your example? You wrote:

 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). [...]

 Does this mean that the last file out of four - in fact, your example
 handles five files - is not copied *although* the source file and the
 destination file are different, i.e. similar but not equal?

 Yes the file test.tokens is not copied overwritten since they are
 exactly (diff) similar files. This is the case with the other 4 files as
 well,
 but they are still copied over and rewritten.


 You wrote further:

 [...] The others are copied
 even if they are the same.

 I verfied that they are the same with a diff.

 Does this mean that source files are copied *although* they are equal
 to their respective destination file? How do you determine that they
 have been copied? Do you check the timestamps? With --full-time?


Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-04 Thread Ajay Panyala
So, my question again: What exactly does not work?

I.e., does cmake -E copy_if_different

- copy a file although the destination exists
 and has the same content as the source, or

Sorry for the confusion.
I thought something like the above mentioned happened, but in reality
nothing like it happened. I must have done something
wrong by overlooking some detail. It works now.
*I did not initially run the CMakeLists you had provided.*
I had run my own version of CMakeLists by inserting some rules
from the CMakeLists file you had provided and I did something
wrong there. Hence, that did not work.


 It works for my CMakeLists as well now. What I did now is

 if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
 ADD_CUSTOM_TARGET(...)
 ADD_CUSTOM_COMMAND(...)

 i.e I am totally avoiding the process of rebuilding the test.g file and
 copying the generated files to build/parser
 *IF* test.g has not been modified.

...and if test.g is once modified, you won't have a custom target which
regenerates the source files and copies them to the parser directory -
I'm pretty sure this is not what you intend. Recall the difference
between configuration time and build time in CMakified projects.

No, if test.g is modified the *if* condition is true and the new version
is copied over to the build directory; the custom target builds it
and the custom command moves the generated files into build/parser.

For the initial run of make test.g is not present in the build folder,
since it
was never copied before. For this case, I have another IF(EXISTS
build/test.g) conditional
which copies it from src to build folder and then executes it.

Thanks
Ajay


On Sun, Mar 4, 2012 at 7:35 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/05/2012 01:59 AM, Ajay Panyala wrote:
  I use cmake version 2.8.3.
 
  If I use CMakeLists from your previous reply, it avoids overwriting files
  when X=0.
  I have attached the output of your script.

 Actually, this is exactly what I was talking about: The second make
 X=0 invocation rewrites the source files - i.e., they receive a new
 timestamp - but their contents do not change. Thus, the destination
 files in the parser directory are *not* touched by the second make
 X=0, and this can be seen clearly by reference to the timestamps.
 It's the subsequent make X=1 which provides for a new content of
 the source files and makes cmake -E copy_if_different copy the
 sources to the destinations. That's why I said everything works
 as expected, but you wrote:

  It does not work. The files are still overwritten.

 So, my question again: What exactly does not work?

 I.e., does cmake -E copy_if_different

 - copy a file although the destination exists
  and has the same content as the source, or

 - not copy a file although the destination does not
  exist or does not have the same content as the source?

  It works for my CMakeLists as well now. What I did now is
 
  if(${GrammarSource}/test.g IS_NEWER_THAN ${PROJECT_BINARY_DIR}/test.g)
  ADD_CUSTOM_TARGET(...)
  ADD_CUSTOM_COMMAND(...)
 
  i.e I am totally avoiding the process of rebuilding the test.g file and
  copying the generated files to build/parser
  *IF* test.g has not been modified.

 ...and if test.g is once modified, you won't have a custom target which
 regenerates the source files and copies them to the parser directory -
 I'm pretty sure this is not what you intend. Recall the difference
 between configuration time and build time in CMakified projects.

  PS: Could you set up your e-mail client so that it marks quoted
 text in some way? Currently, one can't distinguish between
 the lines you are writing and the lines written by others.
 
  Sorry. I did not realize that. I use gmail and when I checked my sent
  emails,
  quoted text appears to be clearly marked. Is the quoted text in this
 email
  marked properly.

 Yes, it is.

 Regards,

 Michael

  On Sun, Mar 4, 2012 at 4:05 PM, Michael Hertling mhertl...@online.de
 wrote:
 
  On 03/04/2012 08:02 PM, Ajay Panyala wrote:
  The following project is a boiled-down version of yours but doesn't
  need any programs except for CMake - that's what I actually meant
  with minimal but complete as I don't have the org.antlr.Tool
  Java program:
 
  I am sorry. I was mainly trying to cleanup the big CMakeLists file
  I had and removed about 10 different targets - all of which were
  rebuilt because the 5 files (test*.*) were overwritten.
 
  If you want to try running the test project on your system
 
  test.g is at http://pastie.org/private/agzor3ibzoa5pom6q31qq
 
  org.antlr.Tool is at www.antlr.org/download/antlr-3.4-complete.jar
 
  After configuration, you can run the target by make X=0 and check the
  timestamps by ls -l --full-time test.tokens parser src. Issuing make
  X=0 again reveals that the copied files aren't rewritten as it happens
  after make X=1. Thus, AFAICS, everything works as expected. Could you
  check if the above-noted example 

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Hendrik Sattler
Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
 I have a custom target which runs a command to generate
 a C source file say test1.c
 
 ADD_CUSTOM_TARGET(TestGen ALL
 COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
 DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
 )
 
 And I have a custom command that moves the generated *test1.c *
 to a new directory inside the build directory.
 
 ADD_CUSTOM_COMMAND(
 TARGET TestGen
 POST_BUILD
 COMMAND mv
 ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
 )
 
 Each time I run make, the custom target is run (since custom targets are
 always
 out-of-date). But I want to avoid moving the new test1.c generated each
 time if build/test1.c is the same as build/tests/test1.c since there are
 other targets
 like add_executable and add_library later in the CMakelists file that are
  re-built
 each time since they depend on test1.c

Try cmake -E copy_if_different ...

HS
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Ajay Panyala
Try cmake -E copy_if_different ...

cmake -E copy_if_different build/test1.c build/tests/test1.c

That would work when make is run atleast once.
When running make for the 1st time test1.c was never
copied to build/tests before. So I would be comparing a file with
another non-existant file and that would result in an error halting
the make process.

Thanks
Ajay

On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler p...@hendrik-sattler.dewrote:

 Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
  I have a custom target which runs a command to generate
  a C source file say test1.c
 
  ADD_CUSTOM_TARGET(TestGen ALL
  COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
  DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
  )
 
  And I have a custom command that moves the generated *test1.c *
  to a new directory inside the build directory.
 
  ADD_CUSTOM_COMMAND(
  TARGET TestGen
  POST_BUILD
  COMMAND mv
  ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
  )
 
  Each time I run make, the custom target is run (since custom targets are
  always
  out-of-date). But I want to avoid moving the new test1.c generated each
  time if build/test1.c is the same as build/tests/test1.c since there are
  other targets
  like add_executable and add_library later in the CMakelists file that are
   re-built
  each time since they depend on test1.c

 Try cmake -E copy_if_different ...

 HS
 --

 Powered by www.kitware.com

 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html

 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ

 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Michael Hertling
On 03/03/2012 10:36 PM, Ajay Panyala wrote:
 Try cmake -E copy_if_different ...
 
 cmake -E copy_if_different build/test1.c build/tests/test1.c
 
 That would work when make is run atleast once.
 When running make for the 1st time test1.c was never
 copied to build/tests before. So I would be comparing a file with
 another non-existant file and that would result in an error halting
 the make process.

No, it wouldn't; check it out:

% touch a
% rm -f b
% ls b
ls: cannot access b: No such file or directory
% cmake -E copy_if_different a b
% ls b
b
% cksum a b
4294967295 0 a
4294967295 0 b

Regards,

Michael

 On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler 
 p...@hendrik-sattler.dewrote:
 
 Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
 I have a custom target which runs a command to generate
 a C source file say test1.c

 ADD_CUSTOM_TARGET(TestGen ALL
 COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
 DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
 )

 And I have a custom command that moves the generated *test1.c *
 to a new directory inside the build directory.

 ADD_CUSTOM_COMMAND(
 TARGET TestGen
 POST_BUILD
 COMMAND mv
 ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
 )

 Each time I run make, the custom target is run (since custom targets are
 always
 out-of-date). But I want to avoid moving the new test1.c generated each
 time if build/test1.c is the same as build/tests/test1.c since there are
 other targets
 like add_executable and add_library later in the CMakelists file that are
  re-built
 each time since they depend on test1.c

 Try cmake -E copy_if_different ...

 HS
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Ajay Panyala
No, it wouldn't;

Thanks. It works now. I might have done something wrong earlier.

- Ajay

On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/03/2012 10:36 PM, Ajay Panyala wrote:
  Try cmake -E copy_if_different ...
 
  cmake -E copy_if_different build/test1.c build/tests/test1.c
 
  That would work when make is run atleast once.
  When running make for the 1st time test1.c was never
  copied to build/tests before. So I would be comparing a file with
  another non-existant file and that would result in an error halting
  the make process.

 No, it wouldn't; check it out:

 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b

 Regards,

 Michael

  On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler p...@hendrik-sattler.de
 wrote:
 
  Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
  I have a custom target which runs a command to generate
  a C source file say test1.c
 
  ADD_CUSTOM_TARGET(TestGen ALL
  COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
  DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
  )
 
  And I have a custom command that moves the generated *test1.c *
  to a new directory inside the build directory.
 
  ADD_CUSTOM_COMMAND(
  TARGET TestGen
  POST_BUILD
  COMMAND mv
  ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
  )
 
  Each time I run make, the custom target is run (since custom targets
 are
  always
  out-of-date). But I want to avoid moving the new test1.c generated each
  time if build/test1.c is the same as build/tests/test1.c since there
 are
  other targets
  like add_executable and add_library later in the CMakelists file that
 are
   re-built
  each time since they depend on test1.c
 
  Try cmake -E copy_if_different ...
 
  HS
 --

 Powered by www.kitware.com

 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html

 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ

 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Ajay Panyala
No, it wouldn't; check it out:

% touch a
% rm -f b
% ls b
ls: cannot access b: No such file or directory
% cmake -E copy_if_different a b
% ls b
b
% cksum a b
4294967295 0 a
4294967295 0 b

It works with one file, but I have 4 files that are generated.
I have 4 cmake -E copy_if_different commands, one for each file.
Only the last file is not copied (if similar). The others are copied
even if they are the same.

I verfied that they are the same with a diff.

Any idea what might be happening here ?

Thank You
Ajay

On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/03/2012 10:36 PM, Ajay Panyala wrote:
  Try cmake -E copy_if_different ...
 
  cmake -E copy_if_different build/test1.c build/tests/test1.c
 
  That would work when make is run atleast once.
  When running make for the 1st time test1.c was never
  copied to build/tests before. So I would be comparing a file with
  another non-existant file and that would result in an error halting
  the make process.

 No, it wouldn't; check it out:

 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b

 Regards,

 Michael

  On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler p...@hendrik-sattler.de
 wrote:
 
  Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
  I have a custom target which runs a command to generate
  a C source file say test1.c
 
  ADD_CUSTOM_TARGET(TestGen ALL
  COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
  DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
  )
 
  And I have a custom command that moves the generated *test1.c *
  to a new directory inside the build directory.
 
  ADD_CUSTOM_COMMAND(
  TARGET TestGen
  POST_BUILD
  COMMAND mv
  ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
  )
 
  Each time I run make, the custom target is run (since custom targets
 are
  always
  out-of-date). But I want to avoid moving the new test1.c generated each
  time if build/test1.c is the same as build/tests/test1.c since there
 are
  other targets
  like add_executable and add_library later in the CMakelists file that
 are
   re-built
  each time since they depend on test1.c
 
  Try cmake -E copy_if_different ...
 
  HS
 --

 Powered by www.kitware.com

 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html

 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ

 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Michael Hertling
On 03/04/2012 12:14 AM, Ajay Panyala wrote:
 No, it wouldn't; check it out:
 
 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b
 
 It works with one file, but I have 4 files that are generated.
 I have 4 cmake -E copy_if_different commands, one for each file.
 Only the last file is not copied (if similar). The others are copied
 even if they are the same.
 
 I verfied that they are the same with a diff.
 
 Any idea what might be happening here ?

Please provide a minimal but complete example for this issue.

Regards,

Michael

 On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling mhertl...@online.dewrote:
 
 On 03/03/2012 10:36 PM, Ajay Panyala wrote:
 Try cmake -E copy_if_different ...

 cmake -E copy_if_different build/test1.c build/tests/test1.c

 That would work when make is run atleast once.
 When running make for the 1st time test1.c was never
 copied to build/tests before. So I would be comparing a file with
 another non-existant file and that would result in an error halting
 the make process.

 No, it wouldn't; check it out:

 % touch a
 % rm -f b
 % ls b
 ls: cannot access b: No such file or directory
 % cmake -E copy_if_different a b
 % ls b
 b
 % cksum a b
 4294967295 0 a
 4294967295 0 b

 Regards,

 Michael

 On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler p...@hendrik-sattler.de
 wrote:

 Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
 I have a custom target which runs a command to generate
 a C source file say test1.c

 ADD_CUSTOM_TARGET(TestGen ALL
 COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
 DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
 )

 And I have a custom command that moves the generated *test1.c *
 to a new directory inside the build directory.

 ADD_CUSTOM_COMMAND(
 TARGET TestGen
 POST_BUILD
 COMMAND mv
 ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
 )

 Each time I run make, the custom target is run (since custom targets
 are
 always
 out-of-date). But I want to avoid moving the new test1.c generated each
 time if build/test1.c is the same as build/tests/test1.c since there
 are
 other targets
 like add_executable and add_library later in the CMakelists file that
 are
  re-built
 each time since they depend on test1.c

 Try cmake -E copy_if_different ...

 HS
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] avoid rebuilding targets depending on generated source files

2012-03-03 Thread Ajay Panyala
Please provide a minimal but complete example for this issue.

Please find it in the following link
http://pastie.org/private/pd13u33s9xpfihf2dbzc1q

Thank You
Ajay

On Sat, Mar 3, 2012 at 3:54 PM, Michael Hertling mhertl...@online.dewrote:

 On 03/04/2012 12:14 AM, Ajay Panyala wrote:
  No, it wouldn't; check it out:
 
  % touch a
  % rm -f b
  % ls b
  ls: cannot access b: No such file or directory
  % cmake -E copy_if_different a b
  % ls b
  b
  % cksum a b
  4294967295 0 a
  4294967295 0 b
 
  It works with one file, but I have 4 files that are generated.
  I have 4 cmake -E copy_if_different commands, one for each file.
  Only the last file is not copied (if similar). The others are copied
  even if they are the same.
 
  I verfied that they are the same with a diff.
 
  Any idea what might be happening here ?

 Please provide a minimal but complete example for this issue.

 Regards,

 Michael

  On Sat, Mar 3, 2012 at 2:47 PM, Michael Hertling mhertl...@online.de
 wrote:
 
  On 03/03/2012 10:36 PM, Ajay Panyala wrote:
  Try cmake -E copy_if_different ...
 
  cmake -E copy_if_different build/test1.c build/tests/test1.c
 
  That would work when make is run atleast once.
  When running make for the 1st time test1.c was never
  copied to build/tests before. So I would be comparing a file with
  another non-existant file and that would result in an error halting
  the make process.
 
  No, it wouldn't; check it out:
 
  % touch a
  % rm -f b
  % ls b
  ls: cannot access b: No such file or directory
  % cmake -E copy_if_different a b
  % ls b
  b
  % cksum a b
  4294967295 0 a
  4294967295 0 b
 
  Regards,
 
  Michael
 
  On Sat, Mar 3, 2012 at 1:20 PM, Hendrik Sattler 
 p...@hendrik-sattler.de
  wrote:
 
  Am Samstag, 3. März 2012, 21:41:49 schrieb Ajay Panyala:
  I have a custom target which runs a command to generate
  a C source file say test1.c
 
  ADD_CUSTOM_TARGET(TestGen ALL
  COMMAND genExec ${PROJECT_SOURCE_DIR}/Main.java
  DEPENDS ${PROJECT_SOURCE_DIR}/Main.java
  )
 
  And I have a custom command that moves the generated *test1.c *
  to a new directory inside the build directory.
 
  ADD_CUSTOM_COMMAND(
  TARGET TestGen
  POST_BUILD
  COMMAND mv
  ARGS ${PROJECT_BINARY_DIR}/test1.c ${PROJECT_BINARY_DIR}/tests/
  )
 
  Each time I run make, the custom target is run (since custom targets
  are
  always
  out-of-date). But I want to avoid moving the new test1.c generated
 each
  time if build/test1.c is the same as build/tests/test1.c since there
  are
  other targets
  like add_executable and add_library later in the CMakelists file that
  are
   re-built
  each time since they depend on test1.c
 
  Try cmake -E copy_if_different ...
 
  HS
 --

 Powered by www.kitware.com

 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html

 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ

 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake




-- 
Ajay Panyala  | Email: a...@csc.lsu.edu
Department of Computer Science | Phone: +1 (225) 907 9501
Louisiana State University   |  www.csc.lsu.edu/~ajay
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake