Build bugs in Python 2.2.1?
Michael Hudson
mwh at python.net
Mon Aug 19 12:32:12 EDT 2002
Hmm, I thought this deserved a proper reply, that I should take some
time writing, so of course I haven't got around to writing it yet.
Jonathan Hogg <jonathan at onegoodidea.com> writes:
> On 12/8/2002 14:14, in article lkvg6gmddn.fsf at pc150.maths.bris.ac.uk,
> "Michael Hudson" <mwh at python.net> wrote:
>
> > Please don't get discouraged from working on distutils or Python's
> > build process! But please also understand that there is a reason for
> > most of the extant stuff, and as Martin says, vague comments along the
> > lines of "it would be nice if ..." are not really helpful.
>
> *sigh*
>
> If I have appeared vague before, I'm sorry. I haven't come here with a
> solution because I don't have one. I tried to demonstrate where and why I
> think there is a problem and suggest a possible idea for a solution.
Well, time has passed sufficiently that I can't remember your possible
idea for a solution. Was it to use autoconf for more or less
everything?
> In the interests of not seeming like a spoiled child (I was pretty tired
> last night when I gave up), I'll explain one more time. If someone doesn't
> understand or sees that I've missed something, please say so. I'm not trying
> to call-for-the-head-of distutils. It just doesn't work for me and here's
> why:
>
> One of my day jobs is managing multi-platform UNIX sites. I use a system
> called Arusha for doing so. This allows me to manage packages by noting what
> kind of package it is and any important differences or exceptions that
> should be taken into account.
>
> For most of the autoconf-style packages I install I can just specify
> something along the lines of:
>
> <prototype team="." name="GNU"/>
>
> and it works. It gets built from source on each platform, installed,
> deployed onto all of the systems, and revealed into the users' namespace.
> For packages that have dependencies, for instance on OpenSSL, I can usually
> add a simple addition to this specifying the dependency and adding the
> necessary argument to allow configure to enable/find it:
>
> <configure>
> <constraint>
> <dependency type="normal" name="openssl" method="deploy"/>
> </constraint>
> <param name="ssldir">!field.dependencyDeployDir('openssl')</param>
> <param name="configure_args">--with-ssl-dir=@param:ssldir@</param>
> </configure>
>
> This translates into an underlying shell script something along the lines
> of:
>
> CFLAGS=... LDFLAGS=... \
> ./configure --prefix=... --with-ssl-dir=/._ark-deploy/openssl--0.96e
>
> and that's all I need to do to make it work.
Hmm, it seems that the reason this works in Arusha is that Arusha has
support for these sort of things build in? I mean there doesn't seem
to be much inherently simpler about this, it's just what everyone else
does.
> Unfortunately, life is not so simple with Python, because while having a
> configure front-end, the Python modules build process cannot be controlled
> with configure. I can't pass in the necessary CFLAGS and LDFLAGS to enable
> the SSL module to be built correctly either, because the flags are ignored
> by setup.py.
I do think setup.py should take more hints from the environment, but
I'm not sure how to do this reasonably.
Maybe it would be an idea to have *setup.py* take
--with-foo-dir=... style arguments? Though getting them past
distutils spectactularly baroque options handling stuff might be a bit
exciting.
> To compile the SSL module I have to edit Modules/Setup. This sounds fine to
> most people, but the only way to do that in a repeatable way is to generate
> a patch. Since the patch file will vary depending on which version of
> OpenSSL I compile against (I have to be able to maintain multiple different
> versions) and possibly which platform I'm compiling for, the patch must be
> generated programmatically. The patch also varies depending on the version
> of Python so I have to maintain multiple patch templates.
Would it be any easier to patch setup.py instead?
> If someone can point out the blindingly obvious thing I've missed that will
> make all this horror go away, then please let me know.
>
> It's quite funny in a way because Arusha is written in Python, and that's
> because I sold it to the main guy behind Arusha as being a fantastic
> language. And yet, Python is the hardest language to build using it ;-)
Well, this is partly because Python by its nature has a large and
mostly optional set of dependencies, some of which have a tendency to
hide in obscure corners of the file system (yes, I mean *you*, bsddb).
I know for a fact that *I* have no interest in converting setup.py to
the bizarre mix of m4 macros and sh that is configure.in, and *even
less* in maintaining said code.
Would being able to pass module specific arguments to setup.py make
your life easier? You'd still have to fight the build process a bit,
but it might be less irritating than it currently is.
And to wedge a couple of comment in at the end because they didn't
seem to fit anywhere else:
1) you realize that Python's setup.py hasn't really made your life
harder than it was before?
2) I think that setup.py's main intent was to help the "average user",
and whatever that means, I doubt it covers what you're up to.
Cheers,
M.
--
This is the fixed point problem again; since all some implementors
do is implement the compiler and libraries for compiler writing, the
language becomes good at writing compilers and not much else!
-- Brian Rogoff, comp.lang.functional
More information about the Python-list
mailing list