[Distutils] Auto configuration
M.-A. Lemburg
mal@lemburg.com
Wed Dec 6 13:57:01 2000
Bastian Kleineidam wrote:
>
> >How can I enable running the "config" command prior to
> >all "build" commands ?
> Suppose your custom "config" command writes out a file "configdata". When
> running the install command you can check if this file exists and if not
> raise an exception which demands to run "python setup.py config":
>
> class MyDistribution(Distribution):
> def __init__(self, attrs=None):
> Distribution.__init__(self, attrs=attrs)
> self.config_file = "configdata"
>
> def run_commands(self):
> if "config" not in self.commands:
> if not os.path.exists(self.config_file):
> raise SystemExit, "please run 'python setup.py config'"
> Distribution.run_commands(self)
>
> class MyConfig(config):
> def run(self):
> # ... write "configdata" file
Thanks for the example. What I was thinking of is a little
different though: I have a configuration class which will
do some environment testing in order to determine flags
and options for the build_ext class. Now in order to have
this information available before the build I need to
assure that the config command is executed before the
build step.
After some hacking I found that the following trick enables
this:
from distutils.command.config import config
from distutils.command.build import build
class autoconf(config):
def run(self):
...config code...
build_ext = self.distribution.reinitialize_command('build_ext')
# Set options
build_ext.define = mydefines
class autoconf_build(build):
def run(self):
self.run_command('autoconf')
build.run(self)
and then in setup():
cmdclass = {'autoconf': autoconf,
'build': autoconf_build},
With this setup you can execute "setup.py bdist_rpm" and the
autoconf command will get executed automatically or you can
run "setup.py autoconf --autoconf-option build" to pass
additional options to the autoconf command.
Unfortunately, bdist_rpm doesn't seem to inherit the command
options you passed to the setup.py script -- the build is
done in a separate process which is invoked by RPM rather
than from the original setup.py process.
Thanks,
--
Marc-Andre Lemburg
______________________________________________________________________
Company: http://www.egenix.com/
Consulting: http://www.lemburg.com/
Python Pages: http://www.lemburg.com/python/