diff options
author | William Deegan <bill@baddogconsulting.com> | 2022-07-25 21:01:16 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-25 21:01:16 (GMT) |
commit | 4d903a77f5b244b3560693f03b02dfa6c2ffd81f (patch) | |
tree | 8c0460ec7253cb0ec146a1a39b66d2ce6ed9ab91 | |
parent | 785e3e63924f528eab19da541802228526ada91b (diff) | |
parent | 520572726995a8563f61d4216925697ea5bbbdc5 (diff) | |
download | SCons-4d903a77f5b244b3560693f03b02dfa6c2ffd81f.zip SCons-4d903a77f5b244b3560693f03b02dfa6c2ffd81f.tar.gz SCons-4d903a77f5b244b3560693f03b02dfa6c2ffd81f.tar.bz2 |
Merge pull request #4197 from mwichmann/doc/CONTRIB
Update the CONTRIBUTING file
-rw-r--r-- | CONTRIBUTING.rst | 135 |
1 files changed, 84 insertions, 51 deletions
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index c179678..d4df14a 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -4,9 +4,9 @@ Contributing to SCons Introduction =========== -Thanks for taking the time to contribute! +Thanks for taking the time to contribute to SCons! -This page will talk a bit about the development process, +This will give a brief overview of the development process, and about the SCons tree (right here, if you're reading this in Github, or in a cloned repository). @@ -24,7 +24,7 @@ there is a web interface. Resources ========= -Here are some important pointers: +Here are some important pointers to other resources: * `SCons Home Page <https://scons.org>`_ * `Github Project Page <https://github.com/scons/scons>`_ @@ -38,8 +38,8 @@ Reporting Bugs One of the easiest ways to contribute is by filing bugs. The SCons project welcomes bug reports and feature requests, -but we have do a preference for having talked about it first - -we request you send an email to the +but we *do* have a preference for having talked about them first - +we request you send an email to the `SCons Users Mailing List <https://two.pairlist.net/mailman/listinfo/scons-users>`_ or hop on the Discord channel (see link above), and if so instructed, then proceed to an issue report. @@ -54,23 +54,29 @@ workarounds for the problem you've run into:: About the Development Tree ========================== -This tree has more logic than just the SCons code itself - -there's quite a bit to do with packaging it in a couple +This tree contains a lot more than just the SCons engine itself. +Some of it has to do with packaging it in a couple of forms: a Python-installable package (source distribution -and installable wheel file), a portable zip (or tar) distribution +and installable wheel file, which get uploaded to the Python +Package Index), a portable zip (or tar) distribution called "scons-local", and a full source bundle. You usually -don't need to worry about the packaging methods when working -on a source or doc contribution. - -To the extent that this tree is about building SCons packages, the *full* -development cycle is not just to test the code directly, but to package SCons, -unpack the package, "install" SCons in a test subdirectory, and then to run -the tests against the unpacked and installed software. This helps eliminate -problems caused by, for example, failure to update the list of files to be -packaged. +don't need to worry about the packaging parts when working +on a source or doc contribution - unless you're adding an entirely +new file, then the packaging bits may need to know about it. The +project maintainers can usually help with that part. +There are also tests and tools in the tree. + +The *full* development cycle is not just to test code changes directly, +but also to package SCons, unpack the package, install SCons in a test +location, and then run the tests against the unpacked and installed +software. This helps eliminate problems caused by the development +tree being different than the tree anyone else would see (files +not checked in to git, files not added to package manifest, etc.) +Most of that is handled by the CI setup driven through GitHub, +which runs checks for each update to a Pull Request. For just working on making an individual change to the SCons source, however, -you don't actually need to build or install SCons; you *can* actually edit and +you don't actually need to build or install SCons; you just edit and execute SCons in-place. See the following sections below for more information: @@ -91,10 +97,10 @@ information: Executing SCons Without Installing ================================== -Being a project written in Python, you don't have to "build" -SCons to run it, "build" actually refers to the steps taken to prepare +Since SCons is written entirely in Python, you don't have to "build" +SCons to run it. "Building" refers to the steps taken to prepare for constructing packages, the most time-consuing of which is -building the documentation. +building the documentation. Documentation is written in a markup language which is a light extension of Docbook-XML, and the doc build consists @@ -119,11 +125,45 @@ unless you are doing development that relates to the packaging. Often when doing SCons development, you have a sample project that isn't working right, and it's useful to be able to build that -project from place you're working on changes to SCons. You +project from the place you're working on changes to SCons. You can do that with the ``C`` (change directory) option:: $ python scripts/scons.py -C /some/other/location [arguments] +There is another approach that kind of reverses that order: +construct a Python virtualenv and install the development tree in it. +If you're not familiar with virtualenvs, there's an example here:: + + https://scons-cookbook.readthedocs.io/en/latest/#setting-up-a-python-virtualenv-for-scons + +Follow the initial steps, except omit installing ``scons`` as a package. +When the virtualenv is contructed and activated, go to your working SCons +git tree and perform a development install instead:: + + (myvenv) $ pip install --editable . + +Now while this virtualenv is activated, the command ``scons`` will refer +to this editable version, and you don't have to be "in" this tree +to run it. + +You can also arrange to execute ``scons.py`` from the command line +by adding it to the ``PATH``, like:: + + # on Linux/Mac + $ export PATH=$PATH:`pwd`/scripts + + # on Windows + C:\> set PATH="%PATH%;C:\path\to\scripts" + +Be careful on Windows, the path has a limit of 1024 characters which +is pretty easy to exceed, and it will just truncate. + +You may first need to make ``scons.py`` executable (it should be +by default, but sometimes things happen):: + + $ chmod +x scripts/scons.py + + Other Required Software ======================= @@ -148,15 +188,7 @@ modules in the local ``SCons`` subdirectory tree and then run $ python scripts/scons.py [arguments] -If you want to be able to just execute your modified version of SCons from the -command line, you can make it executable and add its directory to your $PATH -like so:: - - $ chmod 755 scripts/scons.py - $ export PATH=$PATH:`pwd`/scripts - -You should then be able to run this version of SCons by just typing ``scons.py`` -at your UNIX or Linux command line. +(or, if using the virtualenv/editable approach, ``scons [arguents]``) Note that the regular SCons development process makes heavy use of automated testing. See the `Testing`_ and `Typical Development Workflow`_ sections below for more @@ -170,7 +202,7 @@ Debugging Python comes with a good interactive debugger. When debugging changes by hand (i.e., when not using the automated tests), you can invoke SCons under control -of the Python debugger by specifying the --debug=pdb option:: +of the Python debugger by specifying the ``--debug=pdb`` option:: $ scons --debug=pdb [arguments] > /home/knight/scons/SCons/Script/Main.py(927)_main() @@ -191,20 +223,21 @@ the debugger at that point. The debugger supports single stepping, stepping into functions, printing variables, etc. -Trying to debug problems found by running the automated tests (see the -`Testing`_ section, below) is more difficult, because the test automation -harness re-invokes SCons and captures output. Consequently, there isn't an -easy way to invoke the Python debugger in a useful way on any particular SCons -call within a test script. - -The most effective technique for debugging problems that occur during an -automated test is to use the good old tried-and-true technique of adding -statements to print tracing information. But note that you can't just use -the ``print`` function, or even ``sys.stdout.write()`` because those change the -SCons output, and the automated tests usually look for matches of specific -output strings to decide if a given SCons invocation passes the test - -so these additions may cause apparent failures different than the one you -are trying to debug. +When debugging unexpected behavior when running the test suite +(see the `Testing`_ section, below), it can get a bit more complicated. +For the Unit Tests, you will be running in-process, and so the +``runtest.py`` script's debug option is helpful in getting things set up. + +Trying to debug problems found by running the end-to-end tests is +more difficult, because the test automation harness re-invokes SCons and +captures output - essentially, an instance of SCons is being runs as +a "black box", and so it is considerably harder to interact with it +effectively. The way forward is usually to add statements to trace progress. +You can't just use the ``print`` function directly, or even ``sys.stdout.write()`` +because those change the SCons output, and the end-to-end tests usually +look for matches of specific output strings to decide if a given SCons +invocation has behaved as expected - so interleaving your trace information +would cause lots of mismatches, and often obscure what you are trying to debug. To deal with this, SCons supports a ``Trace()`` function that (by default) will print messages to your console screen (``/dev/tty`` on UNIX or Linux, ``con`` on @@ -441,8 +474,8 @@ debian/ project (and thus inherited by projects which derive from it, if they haven't made their own packages). See: - - <https://packages.debian.org/bullseye/scons>_ - - <https://packages.ubuntu.com/impish/scons>_ + - `Debian scons packages <https://packages.debian.org/search?keywords=scons&searchon=names&suite=all§ion=all>`_ + - `Ubuntu scons packages <https://packages.ubuntu.com/search?keywords=scons&searchon=names&suite=all§ion=all>`_ doc/ SCons documentation. A variety of things here, in various stages of @@ -491,12 +524,12 @@ SConstruct software.) SCons/ - Where the actual source code is kept, of course. + This is the source code of the engine, plus unit tests and + documentation stubs kept together with pieces of the engine. test/ End-to-end tests of the SCons utility itself. These are separate from the - individual module unit tests, which live side-by-side with the modules - under SCons. + individual module unit tests. testing/ SCons testing framework. |