More User's Guide updates.
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 31 Mar 2003 22:37:35 +0000 (22:37 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Mon, 31 Mar 2003 22:37:35 +0000 (22:37 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@631 fdb21ef1-2011-0410-befe-b5e4ea1792b1

doc/scons.mod
doc/user/depends.sgml
doc/user/environments.sgml
doc/user/main.sgml
doc/user/separate.sgml
doc/user/simple.sgml

index 1c2653ef774d39e2ac966548d465ba38d1f0974a..32283c31d2ca278a4e16b29dc9f0a5a90bdd05fa 100644 (file)
 <!ENTITY Module "<function>Module</function>">
 <!ENTITY Objects "<function>Objects</function>">
 <!ENTITY Precious "<function>Precious</function>">
+<!ENTITY Prepend "<function>Prepend</function>">
+<!ENTITY Replace "<function>Replace</function>">
 <!ENTITY Repository "<function>Repository</function>">
 <!ENTITY RuleSet "<function>RuleSet</function>">
 <!ENTITY Salt "<function>Salt</function>">
index 8669c722a52a181e1d3f4fcb6ca1ab6b1b8e70e5..bc466181615f752205b23e26d291dd0eab9a1553 100644 (file)
@@ -124,10 +124,10 @@ operating system on which the build is performed (as reported by C<uname
 
     <para>
 
-    This saves time by avoiding unnecessary rebuilds when,
+    This avoids unnecessary rebuilds when,
     for example, someone rewrites the
     contents of a file without making a change.
-    But if the contents of the file change,
+    But if the contents of the file really change,
     then &SCons; detects the change
     and rebuilds the program as required:
 
@@ -145,29 +145,8 @@ operating system on which the build is performed (as reported by C<uname
        %
     </literallayout>
 
-    <para>
-
-    X
-
-    </para>
-
   </section>
 
- <!--
-
- Now it turns out that F<hello.c> also includes the interface definition
- file, F<world.h>:
-
- How does Cons know that F<hello.c> includes F<world.h>, and that F<hello.o>
- must therefore be recompiled? For now, suffice it to say that when
- considering whether or not F<hello.o> is up-to-date, Cons invokes a scanner
- for its dependency, F<hello.c>. This scanner enumerates the files included
- by F<hello.c> to come up with a list of further dependencies, beyond those
- made explicit by the Cons script. This process is recursive: any files
- included by included files will also be scanned.
-
- -->
-
   <section>
   <title>Implicit Dependencies</title>
 
@@ -257,9 +236,24 @@ operating system on which the build is performed (as reported by C<uname
 
     </para>
 
+  </section>
+
+  <section>
+  <title>Caching Implicit Dependencies</title>
+
     <para>
 
-    X
+    Scanning each file for <literal>#include</literal> lines
+    does take some extra processing time.
+    When you're doing a full build of a large system,
+    the scanning time is a small percentage
+    of the overall time spent on the build.
+    You're most likely to notice the scanning time,
+    however, when you rebuild all or part of a large system:
+    &SCons; will take some extra time to "think about"
+    what must be built before it issues the
+    first build command,
+    or decides that nothing must be rebuilt.
 
  <!--
  Isn't this expensive? The answer is, it depends. If you do a full build of a
@@ -272,6 +266,35 @@ operating system on which the build is performed (as reported by C<uname
 
     </para>
 
+    <para>
+
+    In practice, having &SCons; scan files saves time
+    relative to the amount of potential time
+    lost to tracking down subtle problems
+    introduced by incorrect dependencies.
+    Nevertheless, the "waiting time"
+    while &SCons; scans files can annoy
+    individual developers waiting for their builds.
+    Consequently, &SCons; lets you cache
+    the implicit dependencies
+
+    </para>
+
+    <literallayout>
+       % <userinput>scons --implicit-cache hello</userinput>
+       cc -c hello.c -o hello.o
+       cc -o hello hello.o
+       % <userinput>scons hello</userinput>
+       scons: `hello' is up to date.
+    </literallayout>
+
+    <para>
+
+    &SCons; does not cache implicit dependencies like this by default
+    because XXX
+
+    </para>
+
   </section>
 
   <section>
index 8117cf04a652f19a823034195cef7b2f3903c8c3..77d9c6b970caf4a59240e6703d99eb53435a25dc 100644 (file)
@@ -592,6 +592,11 @@ environment undisturbed.
    variables when you create each &consenv;,
    you can use the &Copy; method
    to create a copy of a &consenv;.
+
+   </para>
+
+   <para>
+
    Like the &Environment; call that creates a &consenv;,
    the &Copy; method takes &consvar; assignments,
    which will override the values in the copied &consenv;.
@@ -643,16 +648,47 @@ environment undisturbed.
 
    <para>
 
-   X
+   You can fetch individual construction variables
+   using the normal Python syntax
+   for accessing individual named items in a dictionary:
+
+   </para>
+
+   <programlisting>
+      env = Environment()
+      print "CCCOM is:", env['CCCOM']
+   </programlisting>
+
+   <literallayout>
+      % <userinput>scons</userinput>
+      CCCOM is: $CC $CCFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES
+   </literallayout>
+
+   <para>
+
+   Note, however, that a &consenv;
+   is actually a Python object with
+   associated methods, etc.
+   If you want to have direct access to only the
+   dictionary of construction variables,
+   you can fetch this using the &Dictionary; method.
+   This provides the
 
    </para>
 
    <programlisting>
       env = Environment()
+      dict = env.Dictionary()
+      # XXX SOMETHING WHERE A DICT IS NEEDED
    </programlisting>
 
+   <para>
+
+   </para>
+
    <literallayout>
       % <userinput>scons</userinput>
+      # XXX
    </literallayout>
 
  </section>
@@ -660,21 +696,42 @@ environment undisturbed.
  <section>
  <title>Modifying a &ConsEnv;</title>
 
+   <para>
+
+   &SCons; provides various methods that
+   support modifying existing values in a &consenv;.
+
+   </para>
+
    <section>
    <title>Replacing Values in a &ConsEnv;</title>
 
      <para>
 
-     X
+     You can replace existing construction variable values
+     using the &Replace; method:
 
      </para>
 
      <programlisting>
-        env = Environment()
+        env = Environment(CCFLAGS = '-DDEFINE1)
+        env.Program('foo.c')
+        env.Replace(CCFLAGS = '-DDEFINE2')
+        env.Program('bar.c')
      </programlisting>
 
+     <para>
+
+     The replaced value completely overwrites
+
+     </para>
+
      <literallayout>
         % <userinput>scons</userinput>
+        gcc -DDEFINE2 -c bar.c -o bar.o
+        gcc -o bar bar.o
+        gcc -DDEFINE2 -c foo.c -o foo.o
+        gcc -o foo foo.o
      </literallayout>
 
    </section>
@@ -684,16 +741,22 @@ environment undisturbed.
 
      <para>
 
-     X
+     You can append a value to
+     an existing construction variable
+     using the &Append; method:
 
      </para>
 
      <programlisting>
-        env = Environment()
+        env = Environment(CCFLAGS = '-DMY_VALUE')
+        env.Append(CCFLAGS = ' -DLAST')
+        env.Program('foo.c')
      </programlisting>
 
      <literallayout>
         % <userinput>scons</userinput>
+        gcc -DMY_VALUE -DLAST -c foo.c -o foo.o
+        gcc -o foo foo.o
      </literallayout>
 
    </section>
@@ -703,16 +766,22 @@ environment undisturbed.
 
      <para>
 
-     X
+     You can append a value to the beginning
+     an existing construction variable
+     using the &Prepend; method:
 
      </para>
 
      <programlisting>
-        env = Environment()
+        env = Environment(CCFLAGS = '-DMY_VALUE')
+        env.Prepend(CCFLAGS = '-DFIRST ')
+        env.Program('foo.c')
      </programlisting>
 
      <literallayout>
         % <userinput>scons</userinput>
+        gcc -DFIRST -DMY_VALUE -c foo.c -o foo.o
+        gcc -o foo foo.o
      </literallayout>
 
    </section>
index 68bc59c73f4a07ec7e952d1f2e47a684bb0960be..9ea4dd5af0aa3f2eca4685f94b051517e63c5beb 100644 (file)
   </chapter>
 
   <chapter id="chap-command">
-    <title>Avoiding Having to Write Builders</title>
+    <title>Not Writing a Builder (for One-Time Builds)</title>
     &command;
   </chapter>
 
index 9050eb7f43e73faaf34f490e79fe66e1732d3792..21fcabc37eabca018d8cb0b62d3bc5bb1095a025 100644 (file)
@@ -129,7 +129,9 @@ program using the F<build/foo.c> path name.
 
    <para>
 
-   X
+   Use the &BuildDir; function to establish that target
+   files should be built in a separate directory
+   from the source files:
 
    </para>
 
@@ -141,7 +143,7 @@ program using the F<build/foo.c> path name.
 
    <para>
 
-   X
+   Note that XXX
 
    </para>
 
index a86fd344023c0a15fa6648b780b3be0193bb1b4c..2acd669e8b3e0df3ac37ad155e27b5cead8a193f 100644 (file)
@@ -105,7 +105,7 @@ requirements of a build.
 
  <para>
 
- Second, notice that the same input &SConstruct; file
+ Second, notice that the same input &SConstruct; file,
  without any changes,
  generates the correct output file names on both systems:
  <filename>hello.o</filename> and <filename>hello</filename>