eggs/zc.recipe.egg-1.3.2-py2.6.egg/EGG-INFO/PKG-INFO
changeset 69 c6bca38c1cbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eggs/zc.recipe.egg-1.3.2-py2.6.egg/EGG-INFO/PKG-INFO	Sat Jan 08 11:20:57 2011 +0530
@@ -0,0 +1,1708 @@
+Metadata-Version: 1.0
+Name: zc.recipe.egg
+Version: 1.3.2
+Summary: Recipe for installing Python package distributions as eggs
+Home-page: http://cheeseshop.python.org/pypi/zc.recipe.egg
+Author: Jim Fulton
+Author-email: jim@zope.com
+License: ZPL 2.1
+Description: ********************************
+        Buildout Egg-Installation Recipe
+        ********************************
+        
+        .. contents::
+        
+        The egg-installation recipe installs eggs into a buildout eggs
+        directory.  It also generates scripts in a buildout bin directory with 
+        egg paths baked into them.
+        
+        
+        Change History
+        **************
+        
+        1.3.2 (2010-08-23)
+        ==================
+        
+        - Bugfix for the change introduced in 1.3.1.
+        
+        1.3.1 (2010-08-23)
+        ==================
+        
+        - Support recipes that are using zc.recipe.egg by passing in a dict, rather
+          than a zc.buildout.buildout.Options object as was expected/tested.
+        
+        1.3.0 (2010-08-23)
+        ==================
+        
+        - Small further refactorings past 1.2.3b1 to be compatible with zc.buildout
+          1.5.0.
+        
+        1.2.3b1 (2010-04-29)
+        ====================
+        
+        - Refactored to be used with z3c.recipe.scripts and zc.buildout 1.5.0.  No
+          new user-visible features.
+        
+        1.2.2 (2009-03-18)
+        ==================
+        
+        - Fixed a dependency information. zc.buildout >1.2.0 is required.
+        
+        1.2.1 (2009-03-18)
+        ==================
+        
+        - Refactored generation of relative egg paths to generate simpler code.
+        
+        1.2.0 (2009-03-17)
+        ==================
+        
+        - Added the `dependent-scripts` option.  When set to `true`, scripts will
+          be generated for all required eggs in addition to the eggs named
+          specifically.  This idea came from two forks of this recipe,
+          `repoze.recipe.egg` and `pylons_sandbox`, but the option name is
+          spelled with a dash instead of underscore and it defaults to `false`.
+        
+        - Added a relative-paths option. When true, egg paths in scripts are generated
+          relative to the script names.
+        
+        1.1.0 (2008-07-19)
+        ==================
+        
+        - Refactored to work honor the new buildout-level unzip option.
+        
+        
+        1.1.0b1 (2008-06-27)
+        ====================
+        
+        - Added `environment` option to custom extension building options.
+        
+        1.0.0 (2007-11-03)
+        ==================
+        
+        - No code changes from last beta, just some small package meta-data
+          improvements.
+        
+        1.0.0b5 (2007-02-08)
+        ====================
+        
+        Feature Changes
+        ---------------
+        
+        - Added support for the buildout newest option.
+        
+        1.0.0b4 (2007-01-17)
+        ====================
+        
+        Feature Changes
+        ---------------
+        
+        - Added initialization and arguments options to the scripts recipe.
+        
+        - Added an eggs recipe that *just* installes eggs.
+        
+        - Advertized the scripts recipe for creating scripts.
+        
+        1.0.0b3 (2006-12-04)
+        ====================
+        
+        Feature Changes
+        ---------------
+        
+        - Added a develop recipe for creating develop eggs.
+        
+          This is useful to:
+        
+          - Specify custom extension building options,
+        
+          - Specify a version of Python to use, and to
+        
+          - Cause develop eggs to be created after other parts.
+        
+        - The develop and build recipes now return the paths created, so that
+          created eggs or egg links are removed when a part is removed (or
+          changed).
+        
+        
+        1.0.0b2 (2006-10-16)
+        ====================
+        
+        Updated to work with (not get a warning from) zc.buildout 1.0.0b10.
+        
+        1.0.0b1
+        =======
+        
+        Updated to work with zc.buildout 1.0.0b3.
+        
+        1.0.0a3
+        =======
+        
+        - Extra path elements to be included in generated scripts can now be
+          set via the extra-paths option.
+        
+        - No longer implicitly generate py\_ scripts fo reach egg. There is
+          now an interpreter option to generate a script that, when run
+          without arguments, launches the Python interactive interpreter with
+          the path set based on a parts eggs and extra paths.  If this script
+          is run with the name of a Python script and arguments, then the
+          given script is run with the path set.
+        
+        - You can now specify explicit entry points.  This is useful for use
+          with packages that don't declare their own entry points.
+        
+        - Added Windows support.
+        
+        - Now-longer implicitly generate "py\_" scripts for each egg.  You can
+          now generate a script for launching a Python interpreter or for
+          running scripts based on the eggs defined for an egg part.
+        
+        - You can now specify custom entry points for packages that don't
+          declare their entry points.
+        
+        - You can now specify extra-paths to be included in generated scripts.
+        
+        
+        1.0.0a2
+        =======
+        
+        Added a custom recipe for building custom eggs using custom distrutils
+        build_ext arguments.
+        
+        1.0.0a1
+        =======
+        
+        Initial public version
+        
+        Detailed Documentation
+        **********************
+        
+        Installation of distributions as eggs
+        =====================================
+        
+        The zc.recipe.egg:eggs recipe can be used to install various types if
+        distutils distributions as eggs.  It takes a number of options:
+        
+        eggs
+            A list of eggs to install given as one or more setuptools
+            requirement strings.  Each string must be given on a separate
+            line.
+        
+        find-links
+           A list of URLs, files, or directories to search for distributions.
+        
+        index
+           The URL of an index server, or almost any other valid URL. :)
+        
+           If not specified, the Python Package Index,
+           http://cheeseshop.python.org/pypi, is used.  You can specify an
+           alternate index with this option.  If you use the links option and
+           if the links point to the needed distributions, then the index can
+           be anything and will be largely ignored.  In the examples, here,
+           we'll just point to an empty directory on our link server.  This
+           will make our examples run a little bit faster.
+        
+        python
+           The name of a section to get the Python executable from.
+           If not specified, then the buildout python option is used.  The
+           Python executable is found in the executable option of the named
+           section.
+        
+        We have a link server that has a number of distributions:
+        
+            >>> print get(link_server),
+            <html><body>
+            <a href="bigdemo-0.1-py2.3.egg">bigdemo-0.1-py2.3.egg</a><br>
+            <a href="demo-0.1-py2.3.egg">demo-0.1-py2.3.egg</a><br>
+            <a href="demo-0.2-py2.3.egg">demo-0.2-py2.3.egg</a><br>
+            <a href="demo-0.3-py2.3.egg">demo-0.3-py2.3.egg</a><br>
+            <a href="demo-0.4c1-py2.3.egg">demo-0.4c1-py2.3.egg</a><br>
+            <a href="demoneeded-1.0.zip">demoneeded-1.0.zip</a><br>
+            <a href="demoneeded-1.1.zip">demoneeded-1.1.zip</a><br>
+            <a href="demoneeded-1.2c1.zip">demoneeded-1.2c1.zip</a><br>
+            <a href="extdemo-1.4.zip">extdemo-1.4.zip</a><br>
+            <a href="index/">index/</a><br>
+            <a href="other-1.0-py2.3.egg">other-1.0-py2.3.egg</a><br>
+            </body></html>
+        
+        We have a sample buildout.  Let's update its configuration file to
+        install the demo package.
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg:eggs
+            ... eggs = demo<0.3
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... """ % dict(server=link_server))
+        
+        In this example, we limited ourselves to revisions before 0.3. We also
+        specified where to find distributions using the find-links option.
+        
+        Let's run the buildout:
+        
+            >>> import os
+            >>> print system(buildout),
+            Installing demo.
+            Getting distribution for 'demo<0.3'.
+            Got demo 0.2.
+            Getting distribution for 'demoneeded'.
+            Got demoneeded 1.2c1.
+        
+        Now, if we look at the buildout eggs directory:
+        
+            >>> ls(sample_buildout, 'eggs')
+            -  demo-0.2-py2.3.egg
+            -  demoneeded-1.2c1-py2.3.egg
+            -  setuptools-0.6-py2.3.egg
+            -  zc.buildout-1.0-py2.3.egg
+        
+        We see that we got an egg for demo that met the requirement, as well
+        as the egg for demoneeded, which demo requires.  (We also see an egg
+        link for the recipe in the develop-eggs directory.  This egg link was
+        actually created as part of the sample buildout setup. Normally, when
+        using the recipe, you'll get a regular egg installation.)
+        
+        Script generation
+        -----------------
+        
+        The demo egg defined a script, but we didn't get one installed:
+        
+            >>> ls(sample_buildout, 'bin')
+            -  buildout
+        
+        If we want scripts provided by eggs to be installed, we should use the
+        scripts recipe:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg:scripts
+            ... eggs = demo<0.3
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        Now we also see the script defined by the demo script:
+        
+            >>> ls(sample_buildout, 'bin')
+            -  buildout
+            -  demo
+        
+        The scripts recipe defines some additional options:
+        
+        entry-points
+           A list of entry-point identifiers of the form:
+        
+           name=module:attrs
+        
+           where name is a script name, module is a dotted name resolving to a
+           module name, and attrs is a dotted name resolving to a callable
+           object within a module.
+        
+           This option is useful when working with distributions that don't
+           declare entry points, such as distributions not written to work
+           with setuptools.
+        
+           Examples can be seen in the section "Specifying entry points" below.
+        
+        scripts
+           Control which scripts are generated.  The value should be a list of
+           zero or more tokens.  Each token is either a name, or a name
+           followed by an '=' and a new name.  Only the named scripts are
+           generated.  If no tokens are given, then script generation is
+           disabled.  If the option isn't given at all, then all scripts
+           defined by the named eggs will be generated.
+        
+        dependent-scripts
+           If set to the string "true", scripts will be generated for all
+           required eggs in addition to the eggs specifically named.
+        
+        interpreter
+           The name of a script to generate that allows access to a Python
+           interpreter that has the path set based on the eggs installed.
+           (See the ``z3c.recipe.scripts`` recipe for a more full-featured
+           interpreter.)
+        
+        extra-paths
+           Extra paths to include in a generated script.
+        
+        initialization
+           Specify some Python initialization code.  This is very limited.  In
+           particular, be aware that leading whitespace is stripped from the
+           code given.
+        
+        arguments
+           Specify some arguments to be passed to entry points as Python source.
+        
+        relative-paths
+           If set to true, then egg paths will be generated relative to the
+           script path.  This allows a buildout to be moved without breaking
+           egg paths.  This option can be set in either the script section or
+           in the buildout section.
+        
+        Let's add an interpreter option:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... eggs = demo<0.3
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... interpreter = py-demo
+            ... """ % dict(server=link_server))
+        
+        Note that we omitted the entry point name from the recipe
+        specification. We were able to do this because the scripts recipe is
+        the default entry point for the zc.recipe.egg egg.
+        
+           >>> print system(buildout),
+           Uninstalling demo.
+           Installing demo.
+           Generated script '/sample-buildout/bin/demo'.
+           Generated interpreter '/sample-buildout/bin/py-demo'.
+        
+        Now we also get a py-demo script for giving us a Python prompt with
+        the path for demo and any eggs it depends on included in sys.path.
+        This is useful for debugging and testing.
+        
+            >>> ls(sample_buildout, 'bin')
+            -  buildout
+            -  demo
+            -  py-demo
+        
+        If we run the demo script, it prints out some minimal data:
+        
+            >>> print system(join(sample_buildout, 'bin', 'demo')),
+            2 2
+        
+        The value it prints out happens to be some values defined in the
+        modules installed.
+        
+        We can also run the py-demo script.  Here we'll just print out
+        the bits if the path added to reflect the eggs:
+        
+            >>> print system(join(sample_buildout, 'bin', 'py-demo'),
+            ... """import os, sys
+            ... for p in sys.path:
+            ...     if 'demo' in p:
+            ...         print os.path.basename(p)
+            ...
+            ... """).replace('>>> ', '').replace('... ', ''),
+            ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+            demo-0.2-py2.4.egg
+            demoneeded-1.2c1-py2.4.egg
+        
+        Egg updating
+        ------------
+        
+        The recipe normally gets the most recent distribution that satisfies the
+        specification.  It won't do this is the buildout is either in
+        non-newest mode or in offline mode.  To see how this works, we'll
+        remove the restriction on demo:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... """ % dict(server=link_server))
+        
+        and run the buildout in non-newest mode:
+        
+            >>> print system(buildout+' -N'),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        Note that we removed the eggs option, and the eggs defaulted to the
+        part name. Because we removed the eggs option, the demo was
+        reinstalled.
+        
+        We'll also run the buildout in off-line mode:
+        
+            >>> print system(buildout+' -o'),
+            Updating demo.
+        
+        We didn't get an update for demo:
+        
+            >>> ls(sample_buildout, 'eggs')
+            -  demo-0.2-py2.3.egg
+            -  demoneeded-1.2c1-py2.3.egg
+            -  setuptools-0.6-py2.3.egg
+            -  zc.buildout-1.0-py2.3.egg
+        
+        If we run the buildout on the default online and newest modes,
+        we'll get an update for demo:
+        
+            >>> print system(buildout),
+            Updating demo.
+            Getting distribution for 'demo'.
+            Got demo 0.4c1.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        Then we'll get a new demo egg:
+        
+            >>> ls(sample_buildout, 'eggs')
+            -  demo-0.2-py2.3.egg
+            -  demo-0.4c1-py2.3.egg
+            -  demoneeded-1.2c1-py2.3.egg
+            -  setuptools-0.6-py2.4.egg
+            -  zc.buildout-1.0-py2.4.egg
+        
+        The script is updated too:
+        
+            >>> print system(join(sample_buildout, 'bin', 'demo')),
+            4 2
+        
+        Controlling script generation
+        -----------------------------
+        
+        You can control which scripts get generated using the scripts option.
+        For example, to suppress scripts, use the scripts option without any
+        arguments:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts =
+            ... """ % dict(server=link_server))
+        
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+        
+            >>> ls(sample_buildout, 'bin')
+            -  buildout
+        
+        You can also control the name used for scripts:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts = demo=foo
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+            >>> ls(sample_buildout, 'bin')
+            -  buildout
+            -  foo
+        
+        Specifying extra script paths
+        -----------------------------
+        
+        If we need to include extra paths in a script, we can use the
+        extra-paths option:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts = demo=foo
+            ... extra-paths =
+            ...    /foo/bar
+            ...    ${buildout:directory}/spam
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+        Let's look at the script that was generated:
+        
+            >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE
+            #!/usr/local/bin/python2.4
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              '/sample-buildout/eggs/demo-0.4c1-py2.4.egg',
+              '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg',
+              '/foo/bar',
+              '/sample-buildout/spam',
+              ]
+            <BLANKLINE>
+            import eggrecipedemo
+            <BLANKLINE>
+            if __name__ == '__main__':
+                eggrecipedemo.main()
+        
+        Relative egg paths
+        ------------------
+        
+        If the relative-paths option is specified with a true value, then
+        paths will be generated relative to the script. This is useful when
+        you want to be able to move a buildout directory around without
+        breaking scripts.
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts = demo=foo
+            ... relative-paths = true
+            ... extra-paths =
+            ...    /foo/bar
+            ...    ${buildout:directory}/spam
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+        Let's look at the script that was generated:
+        
+            >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE
+            #!/usr/local/bin/python2.4
+            <BLANKLINE>
+            import os
+            <BLANKLINE>
+            join = os.path.join
+            base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
+            base = os.path.dirname(base)
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              join(base, 'eggs/demo-0.4c1-pyN.N.egg'),
+              join(base, 'eggs/demoneeded-1.2c1-pyN.N.egg'),
+              '/foo/bar',
+              join(base, 'spam'),
+              ]
+            <BLANKLINE>
+            import eggrecipedemo
+            <BLANKLINE>
+            if __name__ == '__main__':
+                eggrecipedemo.main()
+        
+        You can specify relative paths in the buildout section, rather than in
+        each individual script section:
+        
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ... relative-paths = true
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts = demo=foo
+            ... extra-paths =
+            ...    /foo/bar
+            ...    ${buildout:directory}/spam
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+            >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE
+            #!/usr/local/bin/python2.4
+            <BLANKLINE>
+            import os
+            <BLANKLINE>
+            join = os.path.join
+            base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
+            base = os.path.dirname(base)
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              join(base, 'eggs/demo-0.4c1-pyN.N.egg'),
+              join(base, 'eggs/demoneeded-1.2c1-pyN.N.egg'),
+              '/foo/bar',
+              join(base, 'spam'),
+              ]
+            <BLANKLINE>
+            import eggrecipedemo
+            <BLANKLINE>
+            if __name__ == '__main__':
+                eggrecipedemo.main()
+        
+        Specifying initialialization code and arguments
+        -----------------------------------------------
+        
+        Sometimes, we need to do more than just calling entry points.  We can
+        use the initialialization and arguments options to specify extra code
+        to be included in generated scripts:
+        
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... scripts = demo=foo
+            ... extra-paths =
+            ...    /foo/bar
+            ...    ${buildout:directory}/spam
+            ... initialization = a = (1, 2
+            ...                       3, 4)
+            ... arguments = a, 2
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+            >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE
+            #!/usr/local/bin/python2.4
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              '/sample-buildout/eggs/demo-0.4c1-py2.4.egg',
+              '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg',
+              '/foo/bar',
+              '/sample-buildout/spam',
+              ]
+            <BLANKLINE>
+            a = (1, 2
+            3, 4)
+            <BLANKLINE>
+            import eggrecipedemo
+            <BLANKLINE>
+            if __name__ == '__main__':
+                eggrecipedemo.main(a, 2)
+        
+        Here we see that the initialization code we specified was added after
+        setting the path.  Note, as mentioned above, that leading whitespace
+        has been stripped.  Similarly, the argument code we specified was
+        added in the entry point call (to main).
+        
+        Specifying entry points
+        -----------------------
+        
+        Scripts can be generated for entry points declared explicitly.  We can
+        declare entry points using the entry-points option:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... extra-paths =
+            ...    /foo/bar
+            ...    ${buildout:directory}/spam
+            ... entry-points = alt=eggrecipedemo:alt other=foo.bar:a.b.c
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling demo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+            Generated script '/sample-buildout/bin/alt'.
+            Generated script '/sample-buildout/bin/other'.
+        
+            >>> ls(sample_buildout, 'bin')
+            -  alt
+            -  buildout
+            -  demo
+            -  other
+        
+            >>> cat(sample_buildout, 'bin', 'other') # doctest: +NORMALIZE_WHITESPACE
+            #!/usr/local/bin/python2.4
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              '/sample-buildout/eggs/demo-0.4c1-py2.4.egg',
+              '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg',
+              '/foo/bar',
+              '/sample-buildout/spam',
+              ]
+            <BLANKLINE>
+            import foo.bar
+            <BLANKLINE>
+            if __name__ == '__main__':
+                foo.bar.a.b.c()
+        
+        Generating all scripts
+        ----------------------
+        
+        The `bigdemo` package doesn't have any scripts, but it requires the `demo`
+        package, which does have a script.  Specify `dependent-scripts = true` to
+        generate all scripts in required packages:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = bigdemo
+            ...
+            ... [bigdemo]
+            ... recipe = zc.recipe.egg
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... dependent-scripts = true
+            ... """ % dict(server=link_server))
+            >>> print system(buildout+' -N'),
+            Uninstalling demo.
+            Installing bigdemo.
+            Getting distribution for 'bigdemo'.
+            Got bigdemo 0.1.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        Offline mode
+        ------------
+        
+        If the buildout offline option is set to "true", then no attempt will
+        be made to contact an index server:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ... offline = true
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... index = eek!
+            ... scripts = demo=foo
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Uninstalling bigdemo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/foo'.
+        
+        
+        Controlling which Python to use
+        -------------------------------
+        
+        The following assumes that you have Python 2.4 installed.
+        
+        We can specify the python to use by specifying the name of a section
+        to read the Python executable from.  The default is the section
+        defined by the python buildout option.
+        
+        We have a link server:
+        
+            >>> print get(link_server),
+            <html><body>
+            <a href="bigdemo-0.1-py2.4.egg">bigdemo-0.1-py2.4.egg</a><br>
+            <a href="demo-0.1-py2.4.egg">demo-0.1-py2.4.egg</a><br>
+            <a href="demo-0.2-py2.4.egg">demo-0.2-py2.4.egg</a><br>
+            <a href="demo-0.3-py2.4.egg">demo-0.3-py2.4.egg</a><br>
+            <a href="demo-0.4c1-py2.4.egg">demo-0.4c1-py2.4.egg</a><br>
+            <a href="demoneeded-1.0.zip">demoneeded-1.0.zip</a><br>
+            <a href="demoneeded-1.1.zip">demoneeded-1.1.zip</a><br>
+            <a href="demoneeded-1.2c1.zip">demoneeded-1.2c1.zip</a><br>
+            <a href="extdemo-1.4.zip">extdemo-1.4.zip</a><br>
+            <a href="index/">index/</a><br>
+            <a href="other-1.0-py2.4.egg">other-1.0-py2.4.egg</a><br>
+            </body></html>
+        
+        We have a sample buildout.  Let's update its configuration file to
+        install the demo package using Python 2.4.
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = demo
+            ... eggs-directory = eggs
+            ... index = http://www.python.org/pypi/
+            ...
+            ... [python2.4]
+            ... executable = %(python24)s
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... eggs = demo <0.3
+            ... find-links = %(server)s
+            ... python = python2.4
+            ... interpreter = py-demo
+            ... """ % dict(server=link_server, python24=other_executable))
+        
+        Now, if we run the buildout:
+        
+           >>> import os
+           >>> os.chdir(sample_buildout)
+           >>> buildout = os.path.join(sample_buildout, 'bin', 'buildout')
+           >>> print system(buildout),
+           Installing demo.
+           Getting distribution for 'demo<0.3'.
+           Got demo 0.2.
+           Getting distribution for 'demoneeded'.
+           Got demoneeded 1.2c1.
+           Generated script '/sample-buildout/bin/demo'.
+           Generated interpreter '/sample-buildout/bin/py-demo'.
+        
+        we'll get the Python 2.4 eggs for demo and demoneeded:
+        
+            >>> ls(sample_buildout, 'eggs')
+            -  demo-0.2-py2.4.egg
+            -  demoneeded-1.2c1-py2.4.egg
+            d  setuptools-0.6-py2.5.egg
+            -  zc.buildout-1.0-py2.5.egg
+        
+        And the generated scripts invoke Python 2.4:
+        
+            >>> import sys
+            >>> if sys.platform == 'win32':
+            ...    script_name = 'demo-script.py'
+            ... else:
+            ...    script_name = 'demo'
+            >>> f = open(os.path.join(sample_buildout, 'bin', script_name))
+            >>> shebang = f.readline().strip()
+            >>> if shebang[:3] == '#!"' and shebang[-1] == '"':
+            ...     shebang = '#!'+shebang[3:-1]
+            >>> shebang == '#!' + other_executable
+            True
+            >>> print f.read(), # doctest: +NORMALIZE_WHITESPACE
+            <BLANKLINE>
+            import sys
+            sys.path[0:0] = [
+              '/sample-buildout/eggs/demo-0.2-py2.4.egg',
+              '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg',
+              ]
+            <BLANKLINE>
+            import eggrecipedemo
+            <BLANKLINE>
+            if __name__ == '__main__':
+                eggrecipedemo.main()
+        
+            >>> if sys.platform == 'win32':
+            ...     f = open(os.path.join(sample_buildout, 'bin', 'py-demo-script.py'))
+            ... else:
+            ...     f = open(os.path.join(sample_buildout, 'bin', 'py-demo'))
+        
+            >>> shebang = f.readline().strip()
+            >>> if shebang[:3] == '#!"' and shebang[-1] == '"':
+            ...     shebang = '#!'+shebang[3:-1]
+            >>> shebang == '#!' + other_executable
+            True
+            >>> print f.read(), # doctest: +NORMALIZE_WHITESPACE
+            <BLANKLINE>
+            import sys
+            <BLANKLINE>
+            sys.path[0:0] = [
+              '/sample-buildout/eggs/demo-0.2-py2.4.egg',
+              '/sample-buildout/eggs/demoneeded-1.2c1-py2.4.egg',
+              ]
+            <BLANKLINE>
+            _interactive = True
+            if len(sys.argv) > 1:
+                _options, _args = __import__("getopt").getopt(sys.argv[1:], 'ic:m:')
+                _interactive = False
+                for (_opt, _val) in _options:
+                    if _opt == '-i':
+                        _interactive = True
+                    elif _opt == '-c':
+                        exec _val
+                    elif _opt == '-m':
+                        sys.argv[1:] = _args
+                        _args = []
+                        __import__("runpy").run_module(
+                             _val, {}, "__main__", alter_sys=True)
+            <BLANKLINE>
+                if _args:
+                    sys.argv[:] = _args
+                    __file__ = _args[0]
+                    del _options, _args
+                    execfile(__file__)
+            <BLANKLINE>
+            if _interactive:
+                del _interactive
+                __import__("code").interact(banner="", local=globals())
+        
+            >>> f.close()
+        
+        Creating eggs with extensions needing custom build settings
+        =============================================================
+        
+        Sometimes, It's necessary to provide extra control over how an egg is
+        created.  This is commonly true for eggs with extension modules that
+        need to access libraries or include files.
+        
+        The zc.recipe.egg:custom recipe can be used to define an egg with
+        custom build parameters.  The currently defined parameters are:
+        
+        include-dirs
+           A new-line separated list of directories to search for include
+           files.
+        
+        library-dirs
+           A new-line separated list of directories to search for libraries
+           to link with.
+        
+        rpath
+           A new-line separated list of directories to search for dynamic libraries
+           at run time.
+        
+        define
+           A comma-separated list of names of C preprocessor variables to
+           define.
+        
+        undef
+           A comman separated list of names of C preprocessor variables to
+           undefine.
+        
+        libraries
+           The name of an additional library to link with.  Due to limitations
+           in distutils and desprite the option name, only a single library
+           can be specified.
+        
+        link-objects
+           The name of an link object to link against.  Due to limitations
+           in distutils and desprite the option name, only a single link object
+           can be specified.
+        
+        debug
+           Compile/link with debugging information
+        
+        force
+           Forcibly build everything (ignore file timestamps)
+        
+        compiler
+           Specify the compiler type
+        
+        swig
+           The path to the swig executable
+        
+        swig-cpp
+           Make SWIG create C++ files (default is C)
+        
+        swig-opts
+           List of SWIG command line options
+        
+        In addition, the following options can be used to specify the egg:
+        
+        egg
+            An specification for the egg to be created, to install given as a
+            setuptools requirement string.  This defaults to the part name.
+        
+        find-links
+           A list of URLs, files, or directories to search for distributions.
+        
+        index
+           The URL of an index server, or almost any other valid URL. :)
+        
+           If not specified, the Python Package Index,
+           http://cheeseshop.python.org/pypi, is used.  You can specify an
+           alternate index with this option.  If you use the links option and
+           if the links point to the needed distributions, then the index can
+           be anything and will be largely ignored.  In the examples, here,
+           we'll just point to an empty directory on our link server.  This
+           will make our examples run a little bit faster.
+        
+        python
+           The name of a section to get the Python executable from.
+           If not specified, then the buildout python option is used.  The
+           Python executable is found in the executable option of the named
+           section.
+        
+        environment
+           The name of a section with additional environment variables. The
+           environment variables are set before the egg is built.
+        
+        To illustrate this, we'll define a buildout that builds an egg for a
+        package that has a simple extension module::
+        
+          #include <Python.h>
+          #include <extdemo.h>
+        
+          static PyMethodDef methods[] = {};
+        
+          PyMODINIT_FUNC
+          initextdemo(void)
+          {
+              PyObject *m;
+              m = Py_InitModule3("extdemo", methods, "");
+          #ifdef TWO
+              PyModule_AddObject(m, "val", PyInt_FromLong(2));
+          #else
+              PyModule_AddObject(m, "val", PyInt_FromLong(EXTDEMO));
+          #endif
+          }
+        
+        The extension depends on a system-dependent include file, extdemo.h,
+        that defines a constant, EXTDEMO, that is exposed by the extension.
+        
+        The extension module is available as a source distribution,
+        extdemo-1.4.tar.gz, on a distribution server.
+        
+        We have a sample buildout that we'll add an include directory to with
+        the necessary include file:
+        
+            >>> mkdir('include')
+            >>> write('include', 'extdemo.h',
+            ... """
+            ... #define EXTDEMO 42
+            ... """)
+        
+        We'll also update the buildout configuration file to define a part for
+        the egg:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... parts = extdemo
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ...
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Installing extdemo.
+            zip_safe flag not set; analyzing archive contents...
+        
+        We got the zip_safe warning because the source distribution we used
+        wasn't setuptools based and thus didn't set the option.
+        
+        The egg is created in the develop-eggs directory *not* the eggs
+        directory because it depends on buildout-specific parameters and the
+        eggs directory can be shared across multiple buildouts.
+        
+            >>> ls(sample_buildout, 'develop-eggs')
+            d  extdemo-1.4-py2.4-unix-i686.egg
+            -  z3c.recipe.scripts.egg-link
+            -  zc.recipe.egg.egg-link
+        
+        Note that no scripts or dependencies are installed.  To install
+        dependencies or scripts for a custom egg, define another part and use
+        the zc.recipe.egg recipe, listing the custom egg as one of the eggs to
+        be installed.  The zc.recipe.egg recipe will use the installed egg.
+        
+        Let's define a script that uses out ext demo:
+        
+            >>> mkdir('demo')
+            >>> write('demo', 'demo.py',
+            ... """
+            ... import extdemo
+            ... def main():
+            ...     print extdemo.val
+            ... """)
+        
+            >>> write('demo', 'setup.py',
+            ... """
+            ... from setuptools import setup
+            ... setup(name='demo')
+            ... """)
+        
+        
+            >>> write('buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = demo
+            ... parts = extdemo demo
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... eggs = demo
+            ...        extdemo
+            ... entry-points = demo=demo:main
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout),
+            Develop: '/sample-buildout/demo'
+            Updating extdemo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        When we run the script, we'll 42 printed:
+        
+            >>> print system(join('bin', 'demo')),
+            42
+        
+        Updating
+        --------
+        
+        The custom recipe will normally check for new source distributions
+        that meet the given specification.  This can be suppressed using the
+        buildout non-newest and offline modes.  We'll generate a new source
+        distribution for extdemo:
+        
+            >>> update_extdemo()
+        
+        If we run the buildout in non-newest or offline modes:
+        
+            >>> print system(buildout+' -N'),
+            Develop: '/sample-buildout/demo'
+            Updating extdemo.
+            Updating demo.
+        
+            >>> print system(buildout+' -o'),
+            Develop: '/sample-buildout/demo'
+            Updating extdemo.
+            Updating demo.
+        
+        We won't get an update.
+        
+            >>> ls(sample_buildout, 'develop-eggs')
+            -  demo.egg-link
+            d  extdemo-1.4-py2.4-unix-i686.egg
+            -  z3c.recipe.scripts.egg-link
+            -  zc.recipe.egg.egg-link
+        
+        But if we run the buildout in the default on-line and newest modes, we
+        will. This time we also get the test-variable message again, because the new
+        version is imported:
+        
+            >>> print system(buildout),
+            Develop: '/sample-buildout/demo'
+            Updating extdemo.
+            zip_safe flag not set; analyzing archive contents...
+            Updating demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+            >>> ls(sample_buildout, 'develop-eggs')
+            -  demo.egg-link
+            d  extdemo-1.4-py2.4-linux-i686.egg
+            d  extdemo-1.5-py2.4-linux-i686.egg
+            -  z3c.recipe.scripts.egg-link
+            -  zc.recipe.egg.egg-link
+        
+        Controlling the version used
+        ----------------------------
+        
+        We can specify a specific version using the egg option:
+        
+            >>> write('buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = demo
+            ... parts = extdemo demo
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... egg = extdemo ==1.4
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... eggs = demo
+            ...        extdemo ==1.4
+            ... entry-points = demo=demo:main
+            ... """ % dict(server=link_server))
+        
+            >>> print system(buildout+' -D'),
+            Develop: '/sample-buildout/demo'
+            Uninstalling demo.
+            Uninstalling extdemo.
+            Installing extdemo.
+            zip_safe flag not set; analyzing archive contents...
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+            >>> ls(sample_buildout, 'develop-eggs')
+            -  demo.egg-link
+            d  extdemo-1.4-py2.4-linux-i686.egg
+            -  z3c.recipe.scripts.egg-link
+            -  zc.recipe.egg.egg-link
+        
+        
+        Controlling environment variables
+        +++++++++++++++++++++++++++++++++
+        
+        To set additional environment variables, the `environment` option is used.
+        
+        Let's create a recipe which prints out environment variables. We need this to
+        make sure the set envirionment variables are removed after the egg:custom
+        recipe was run.
+        
+            >>> mkdir(sample_buildout, 'recipes')
+            >>> write(sample_buildout, 'recipes', 'environ.py',
+            ... """
+            ... import logging, os, zc.buildout
+            ...
+            ... class Environ:
+            ...
+            ...     def __init__(self, buildout, name, options):
+            ...         self.name = name
+            ...
+            ...     def install(self):
+            ...         logging.getLogger(self.name).info(
+            ...             'test-variable left over: %s' % (
+            ...                 'test-variable' in os.environ))
+            ...         return []
+            ...
+            ...     def update(self):
+            ...         self.install()
+            ... """)
+            >>> write(sample_buildout, 'recipes', 'setup.py',
+            ... """
+            ... from setuptools import setup
+            ...
+            ... setup(
+            ...     name = "recipes",
+            ...     entry_points = {'zc.buildout': ['environ = environ:Environ']},
+            ...     )
+            ... """)
+        
+        
+        Create our buildout:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = recipes
+            ... parts = extdemo checkenv
+            ...
+            ... [extdemo-env]
+            ... test-variable = foo
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ... environment = extdemo-env
+            ...
+            ... [checkenv]
+            ... recipe = recipes:environ
+            ...
+            ... """ % dict(server=link_server))
+            >>> print system(buildout),
+            Develop: '/sample-buildout/recipes'
+            Uninstalling demo.
+            Uninstalling extdemo.
+            Installing extdemo.
+            Have environment test-variable: foo
+            zip_safe flag not set; analyzing archive contents...
+            Installing checkenv.
+            checkenv: test-variable left over: False
+        
+        
+        The setup.py also printed out that we have set the environment `test-variable`
+        to foo. After the buildout the variable is reset to its original value (i.e.
+        removed).
+        
+        When an environment variable has a value before zc.recipe.egg:custom is run,
+        the original value will be restored:
+        
+            >>> import os
+            >>> os.environ['test-variable'] = 'bar'
+            >>> print system(buildout),
+            Develop: '/sample-buildout/recipes'
+            Updating extdemo.
+            Updating checkenv.
+            checkenv: test-variable left over: True
+        
+            >>> os.environ['test-variable']
+            'bar'
+        
+        
+        Sometimes it is required to prepend or append to an existing environment
+        variable, for instance for adding something to the PATH. Therefor all variables
+        are interpolated with os.environ before the're set:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = recipes
+            ... parts = extdemo checkenv
+            ...
+            ... [extdemo-env]
+            ... test-variable = foo:%%(test-variable)s
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ... environment = extdemo-env
+            ...
+            ... [checkenv]
+            ... recipe = recipes:environ
+            ...
+            ... """ % dict(server=link_server))
+            >>> print system(buildout),
+            Develop: '/sample-buildout/recipes'
+            Uninstalling extdemo.
+            Installing extdemo.
+            Have environment test-variable: foo:bar
+            zip_safe flag not set; analyzing archive contents...
+            Updating checkenv.
+            checkenv: test-variable left over: True
+        
+            >>> os.environ['test-variable']
+            'bar'
+            >>> del os.environ['test-variable']
+        
+        
+        Create a clean buildout.cfg w/o the checkenv recipe, and delete the recipe:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = recipes
+            ... parts = extdemo
+            ...
+            ... [extdemo]
+            ... recipe = zc.recipe.egg:custom
+            ... find-links = %(server)s
+            ... index = %(server)s/index
+            ... include-dirs = include
+            ...
+            ... """ % dict(server=link_server))
+            >>> print system(buildout),
+            Develop: '/sample-buildout/recipes'
+            Uninstalling checkenv.
+            Uninstalling extdemo.
+            Installing extdemo.
+            zip_safe flag not set; analyzing archive contents...
+        
+            >>> rmdir(sample_buildout, 'recipes')
+        
+        
+        Controlling develop-egg generation
+        ==================================
+        
+        If you want to provide custom build options for a develop egg, you can
+        use the develop recipe.  The recipe has the following options:
+        
+        path
+           The path to a setup script or directory containing a startup
+           script. This is required.
+        
+        include-dirs
+           A new-line separated list of directories to search for include
+           files.
+        
+        library-dirs
+           A new-line separated list of directories to search for libraries
+           to link with.
+        
+        rpath
+           A new-line separated list of directories to search for dynamic libraries
+           at run time.
+        
+        define
+           A comma-separated list of names of C preprocessor variables to
+           define.
+        
+        undef
+           A comman separated list of names of C preprocessor variables to
+           undefine.
+        
+        libraries
+           The name of an additional library to link with.  Due to limitations
+           in distutils and desprite the option name, only a single library
+           can be specified.
+        
+        link-objects
+           The name of an link object to link against.  Due to limitations
+           in distutils and desprite the option name, only a single link object
+           can be specified.
+        
+        debug
+           Compile/link with debugging information
+        
+        force
+           Forcibly build everything (ignore file timestamps)
+        
+        compiler
+           Specify the compiler type
+        
+        swig
+           The path to the swig executable
+        
+        swig-cpp
+           Make SWIG create C++ files (default is C)
+        
+        swig-opts
+           List of SWIG command line options
+        
+        python
+           The name of a section to get the Python executable from.
+           If not specified, then the buildout python option is used.  The
+           Python executable is found in the executable option of the named
+           section.
+        
+        To illustrate this, we'll use a directory containing the extdemo
+        example from the earlier section:
+        
+            >>> ls(extdemo)
+            -  MANIFEST
+            -  MANIFEST.in
+            -  README
+            -  extdemo.c
+            -  setup.py
+        
+            >>> write('buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = demo
+            ... parts = extdemo demo
+            ...
+            ... [extdemo]
+            ... setup = %(extdemo)s
+            ... recipe = zc.recipe.egg:develop
+            ... include-dirs = include
+            ... define = TWO
+            ...
+            ... [demo]
+            ... recipe = zc.recipe.egg
+            ... eggs = demo
+            ...        extdemo
+            ... entry-points = demo=demo:main
+            ... """ % dict(extdemo=extdemo))
+        
+        Note that we added a define option to cause the preprocessor variable
+        TWO to be defined.  This will cause the module-variable, 'val', to be
+        set with a value of 2.
+        
+            >>> print system(buildout),
+            Develop: '/sample-buildout/demo'
+            Uninstalling extdemo.
+            Installing extdemo.
+            Installing demo.
+            Generated script '/sample-buildout/bin/demo'.
+        
+        Our develop-eggs now includes an egg link for extdemo:
+        
+            >>> ls('develop-eggs')
+            -  demo.egg-link
+            -  extdemo.egg-link
+            -  z3c.recipe.scripts.egg-link
+            -  zc.recipe.egg.egg-link
+        
+        and the extdemo now has a built extension:
+        
+            >>> ls(extdemo)
+            -  MANIFEST
+            -  MANIFEST.in
+            -  README
+            d  build
+            -  extdemo.c
+            d  extdemo.egg-info
+            -  extdemo.so
+            -  setup.py
+        
+        Because develop eggs take precedence over non-develop eggs, the demo
+        script will use the new develop egg:
+        
+            >>> print system(join('bin', 'demo')),
+            2
+        
+        Egg Recipe API for other Recipes
+        ================================
+        
+        It is common for recipes to accept a collection of egg specifications
+        and generate scripts based on the resulting working sets.  The egg
+        recipe provides an API that other recipes can use.
+        
+        A recipe can reuse the egg recipe, supporting the eggs, find-links,
+        index, extra-paths, and python options.  This is done by creating an
+        egg recipe instance in a recipes's contructor.  In the recipe's
+        install script, the egg-recipe instance's working_set method is used
+        to collect the requested eggs and working set.
+        
+        To illustrate, we create a sample recipe that is a very thin layer
+        around the egg recipe:
+        
+            >>> mkdir(sample_buildout, 'sample')
+            >>> write(sample_buildout, 'sample', 'sample.py',
+            ... """
+            ... import logging, os
+            ... import zc.recipe.egg
+            ...
+            ... class Sample:
+            ...
+            ...     def __init__(self, buildout, name, options):
+            ...         self.egg = zc.recipe.egg.Scripts(buildout, name, options)
+            ...         self.name = name
+            ...         self.options = options
+            ...
+            ...     def install(self):
+            ...         extras = self.options['extras'].split()
+            ...         requirements, ws = self.egg.working_set(extras)
+            ...         print 'Part:', self.name
+            ...         print 'Egg requirements:'
+            ...         for r in requirements:
+            ...             print r
+            ...         print 'Working set:'
+            ...         for d in ws:
+            ...             print d
+            ...         print 'extra paths:', self.egg.extra_paths
+            ...         return ()
+            ...
+            ...     update = install
+            ... """)
+        
+        Here we instantiated the egg recipe in the constructor, saving it in
+        an attribute.  This also initialized the options dictionary.
+        
+        In our install method, we called the working_set method on the
+        instance we saved.  The working_set method takes an optional sequence
+        of extra requirements to be included in the working set.
+        
+            >>> write(sample_buildout, 'sample', 'setup.py',
+            ... """
+            ... from setuptools import setup
+            ...
+            ... setup(
+            ...     name = "sample",
+            ...     entry_points = {'zc.buildout': ['default = sample:Sample']},
+            ...     install_requires = 'zc.recipe.egg',
+            ...     )
+            ... """)
+        
+        
+            >>> write(sample_buildout, 'sample', 'README.txt', " ")
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = sample
+            ... parts = sample-part
+            ...
+            ... [sample-part]
+            ... recipe = sample
+            ... eggs = demo<0.3
+            ... find-links = %(server)s
+            ... index = %(server)sindex
+            ... extras = other
+            ... """ % dict(server=link_server))
+        
+            >>> import os
+            >>> os.chdir(sample_buildout)
+            >>> buildout = os.path.join(sample_buildout, 'bin', 'buildout')
+            >>> print system(buildout + ' -q'),
+            Part: sample-part
+            Egg requirements:
+            demo<0.3
+            Working set:
+            demo 0.2
+            other 1.0
+            demoneeded 1.2c1
+            extra paths: []
+        
+        We can see that the options were augmented with additional data
+        computed by the egg recipe by looking at .installed.cfg:
+        
+            >>> cat(sample_buildout, '.installed.cfg')
+            ... # doctest: +NORMALIZE_WHITESPACE
+            [buildout]
+            installed_develop_eggs = /sample-buildout/develop-eggs/sample.egg-link
+            parts = sample-part
+            <BLANKLINE>
+            [sample-part]
+            __buildout_installed__ =
+            __buildout_signature__ = sample-6aWMvV2EJ9Ijq+bR8ugArQ==
+                    zc.recipe.egg-cAsnudgkduAa/Fd+WJIM6Q==
+                    setuptools-0.6-py2.4.egg
+                    zc.buildout-+rYeCcmFuD1K/aB77XTj5A==
+            _b = /sample-buildout/bin
+            _d = /sample-buildout/develop-eggs
+            _e = /sample-buildout/eggs
+            bin-directory = /sample-buildout/bin
+            develop-eggs-directory = /sample-buildout/develop-eggs
+            eggs = demo<0.3
+            eggs-directory = /sample-buildout/eggs
+            executable = /usr/local/bin/python2.3
+            extras = other
+            find-links = http://localhost:27071/
+            index = http://localhost:27071/index
+            python = buildout
+            recipe = sample
+        
+        If we use the extra-paths option:
+        
+            >>> write(sample_buildout, 'buildout.cfg',
+            ... """
+            ... [buildout]
+            ... develop = sample
+            ... parts = sample-part
+            ...
+            ... [sample-part]
+            ... recipe = sample
+            ... eggs = demo<0.3
+            ... find-links = %(server)s
+            ... index = %(server)sindex
+            ... extras = other
+            ... extra-paths = /foo/bar
+            ...               /spam/eggs
+            ... """ % dict(server=link_server))
+        
+        Then we'll see that reflected in the extra_paths attribute in the egg
+        recipe instance:
+        
+            >>> print system(buildout + ' -q'),
+            Part: sample-part
+            Egg requirements:
+            demo<0.3
+            Working set:
+            demo 0.2
+            other 1.0
+            demoneeded 1.2c1
+            extra paths: ['/foo/bar', '/spam/eggs']
+        
+        Download
+        *********
+        
+Keywords: development build
+Platform: UNKNOWN
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Framework :: Buildout
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: Zope Public License
+Classifier: Topic :: Software Development :: Build Tools
+Classifier: Topic :: Software Development :: Libraries :: Python Modules