summaryrefslogtreecommitdiff
path: root/doc/user/depends.in
diff options
context:
space:
mode:
Diffstat (limited to 'doc/user/depends.in')
-rw-r--r--doc/user/depends.in61
1 files changed, 57 insertions, 4 deletions
diff --git a/doc/user/depends.in b/doc/user/depends.in
index 69bb242..190670c 100644
--- a/doc/user/depends.in
+++ b/doc/user/depends.in
@@ -1,6 +1,6 @@
<!--
- Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 The SCons Foundation
+ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 The SCons Foundation
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -386,7 +386,7 @@
<para>
- So configured, &SCons will still behave like
+ So configured, &SCons; will still behave like
it does when using <literal>Decider('MD5')</literal>:
</para>
@@ -487,7 +487,7 @@
only its section of the input file.
However, since the input file may contain a lot of data,
we want to open the input file only if its timestamp has changed.
- This could done with a custom
+ This could be done with a custom
&Decider; function that might look something like this:
</para>
@@ -591,6 +591,59 @@
</para>
+ <para>
+
+ Another thing to look out for, is the fact that the three
+ attributes above may not be present at the time of the first run.
+ Without any prior build, no targets got created and no
+ <filename>.sconsign</filename> DB file exists yet.
+ So, it is recommended to always check whether the
+ <varname>prev_ni</varname> attribute in question is available.
+
+ </para>
+
+ <para>
+
+ We finally present a small example for a
+ <varname>csig</varname>-based decider function. Note how the
+ signature information for the <varname>dependency</varname> file
+ has to get initialized via <function>get_csig</function>
+ during each function call (this is mandatory!).
+
+ </para>
+
+ <sconstruct>
+ env = Environment()
+
+ def config_file_decider(dependency, target, prev_ni):
+ import os.path
+
+ # We always have to init the .csig value...
+ dep_csig = dependency.get_csig()
+ # .csig may not exist, because no target was built yet...
+ if 'csig' not in dir(prev_ni):
+ return True
+ # Target file may not exist yet
+ if not os.path.exists(str(target.abspath)):
+ return True
+ if dep_csig != prev_ni.csig:
+ # Some change on source file => update installed one
+ return True
+ return False
+
+ def update_file():
+ f = open("test.txt","a")
+ f.write("some line\n")
+ f.close()
+
+ update_file()
+
+ # Activate our own decider function
+ env.Decider(config_file_decider)
+
+ env.Install("install","test.txt")
+ </sconstruct>
+
</section>
<section>
@@ -861,7 +914,7 @@
</section>
- <section>
+ <section id="sect-implicit-dependencies">
<title>Implicit Dependencies: The &cv-CPPPATH; Construction Variable</title>
<para>