[Distutils] Access to Python config info

John Skaller skaller@maxtal.com.au
Wed, 23 Dec 1998 01:40:15 +1000

At 08:07 22/12/98 -0500, Greg Ward wrote:
>Quoth John Skaller, on 20 December 1998:
>>         I think you are missing the point here: if the configuration
>> doesn't work, the client has NO CHOICE but to edit it.
>> And if it isn't editable, the client has NO CHOICE, full stop.
>> Now, you don't want to leave the client without options, in
>> case something as complex as configuring a compiler fails, do you?
>John -- I don't think not being able to edit sysconfig leaves people out 
>in the cold.  Fred's current implementation is, in fact, quite
>non-editable, as it scans Makefile and friends as late as possible
>(ie. when sysconfig is itself imported).

        Let me cut the arguments, and simply phrase a request.
This gives us BOTH what we want.  :-)


        1. module parse_configuration, function get_config
          returns a dictionary of config data parsed from
          the makefile

        2. module sysconfig exhibits attributes corresponding
           to the result of executing get_config when loaded

        3. module build_config, by default, exhibits the attributes 
           corresponding to the result of executing get_config AT BUILD TIME

           This module may be edited by the client.

        4. The tool 'refresh_config.py' can be executed to print
           the (dynamic) configuration to standard output,
           and thus be used to generate a configuration module,
           including the standard one (3).


Allow me to assume sysconfig.py, as it stands, is copied to
parse_configuration, renamed get_config, and edited
slightly to conform to the specified interface.

Here is the new implementation of module sysconfig, with the
same semantics as the existing one:

        # distutils.sysconfig
        from distutils.parse_configuration import get_config

Nifty, eh? :-)

Here is 'refresh_config.py':

        # refresh_config.py
        from distutils.parse_configuration import get_config
        for key, value in get_config().items(): print key+'='+repr(value)

As you can see, both these auxilliary things are a single line
of code. This is packaging. It is possible just by isolating
the parser, and not doing anything tricky. :-)

I think that invoking the refresh utility in the make process
is also a single line change to the makefile! 

It is best to have stateless entities do the work, and then
provide state as required by the architecture. Separating
out the functionality is crucial to building multiple
architectures: it allows the architectural implementation
to be largely independent of the implementation of the

This is the secret of Python methods: they're just plain
old stateless functions. Bound methods are just architecture,
independent of the functionality encoded in the unbound
method. We should emulate this good, orthogonal, design!

John Skaller    email: skaller@maxtal.com.au
		phone: 61-2-96600850
		snail: 10/1 Toxteth Rd, Glebe NSW 2037, Australia