On 24 September 1999, Gordon McMillan said:
Greg wrote: <braindump> Possible modes of operation: - require an explicit manifest that lists every single file (presumably along with a way to auto-generate the manifest) - require an explicit manifest, but allow it to have globs or filename patterns of some kind (and also have auto-generation) - allow an explict manifest, but automatically augment it at runtime with the source files mentioned in 'packages', 'py_modules', and 'ext_modules' (and any other such things that might come along)
Since you can't possibly anticipate the preferences of every sicko out there, I'd suggest a 2 phase approach. Use specifiers / filters to create an explicit manifest. Let the programmer edit the manifest, then go on to phase 2.
Gordon, Fred, Marc-André:
thanks for your ideas. They're all, ummm, interesting. However, I'm trying to balance simplicity and utility here, and I think my original manifest syntax does an adequate job of that. At least it works fine for generating a source distribution for Distutils 0.1. The MANIFEST file is simplicity itself:
# # List of files to ship in the Distutils source distribution (apart from # the standard stuff -- Python source files, README and setup script, # test scripts). # # GPW 1999/09/23 # # $Id$ #
examples * !*~ !*.py[co]
Gee, I haven't even checked it in yet. Oh well, I've got *tons* of changes from the weekend still to checkin. And then I finish writing the USAGE file, which should probably be added to the MANIFEST. (Hmmm: perhaps the "list of default files" should include /^[A-Z_]+(.txt)?$/, to handle README and USAGE and LICENCE and TODO and INSTALL and all those conventional all-uppercase filenames...)
So yes, I'm ignoring Fred's idea and using the "default" files (all source files implied by 'py_modules', 'ext_modules', and 'packages', plus README and setup.py) even when there's a MANIFEST. And I'm ignoring Marc-André's idea: there's only one MANIFEST. I don't need anything fancy for *my* little module distribution, so it's hard for me to predict what more complex distributions might throw in. Oh yeah, I'm ignoring Gordon's suggestion too: if you want to list every file explictly, you're welcome to do so! If you want automated help in doing so, may I suggest the 'find(1)' command? >smirk<
Oh, one comment on the idea of separate MANIFESTs for source and binary distributions: no. The binary distribution should be built from the 'build' directory; the whole point of that directory is to make installation and the generation of binary (err, built) distributions trivial. The information about what goes in the built distribution should come from an extra 'build' phase, eg. 'build_doc'.
Wow, I never thought there'd come a day when I would refuse complexity and featuritis. This Python thing must be getting to me. Better go spend some time hacking Perl to remind myself of the joys of unbridled complexity. ;-)