diff options
author | PJ Eby <distutils-sig@python.org> | 2005-04-02 02:43:21 +0000 |
---|---|---|
committer | PJ Eby <distutils-sig@python.org> | 2005-04-02 02:43:21 +0000 |
commit | 6d3753cc8d96814a99cedd8a24a57977e5ef7766 (patch) | |
tree | 025f6cb23e724bdefed8bd372490bfe65fb742f8 /setuptools/command/bdist_egg.py | |
parent | 0ad2e2ea4e3814a8ce02149878932c036f02477b (diff) | |
download | external_python_setuptools-6d3753cc8d96814a99cedd8a24a57977e5ef7766.tar.gz external_python_setuptools-6d3753cc8d96814a99cedd8a24a57977e5ef7766.tar.bz2 external_python_setuptools-6d3753cc8d96814a99cedd8a24a57977e5ef7766.zip |
Rough draft of version requirement parser. Make bdist_egg look for a
distname.egg-info directory instead of EGG-INFO.in; this will be used later
to support development of egg-distributed packages that an application
under development expects to 'require()'. (Thanks to Fred Drake for
pointing out this use case, and Bob Ippolito for helping me figure out how
to support it, although the runtime support doesn't actually exist yet.)
--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4040999
Diffstat (limited to 'setuptools/command/bdist_egg.py')
-rw-r--r-- | setuptools/command/bdist_egg.py | 117 |
1 files changed, 79 insertions, 38 deletions
diff --git a/setuptools/command/bdist_egg.py b/setuptools/command/bdist_egg.py index b1913cf6..7a30c1cf 100644 --- a/setuptools/command/bdist_egg.py +++ b/setuptools/command/bdist_egg.py @@ -3,7 +3,6 @@ Build .egg distributions""" # This module should be kept compatible with Python 2.3 - import os from distutils.core import Command from distutils.util import get_platform @@ -11,14 +10,15 @@ from distutils.dir_util import create_tree, remove_tree, ensure_relative,mkpath from distutils.sysconfig import get_python_version from distutils.errors import * from distutils import log +from pkg_resources import parse_requirements class bdist_egg(Command): description = "create an \"egg\" distribution" - user_options = [('egg-info=', 'e', - "directory containing EGG-INFO for the distribution " - "(default: EGG-INFO.in)"), + user_options = [('egg-base=', 'e', + "directory containing .egg-info directories" + "(default: top of the source tree)"), ('bdist-dir=', 'd', "temporary directory for creating the distribution"), ('plat-name=', 'p', @@ -40,6 +40,9 @@ class bdist_egg(Command): def initialize_options (self): + self.egg_name = None + self.egg_version = None + self.egg_base = None self.egg_info = None self.bdist_dir = None self.plat_name = None @@ -47,27 +50,35 @@ class bdist_egg(Command): self.dist_dir = None self.skip_build = 0 self.relative = 0 - - # initialize_options() def finalize_options (self): - - if self.egg_info is None and os.path.isdir('EGG-INFO.in'): - self.egg_info = 'EGG-INFO.in' - - elif self.egg_info: - self.ensure_dirname('egg_info') - + self.egg_name = self.distribution.get_name().replace('-','_') + self.egg_version = self.distribution.get_version().replace('-','_') + try: + list( + parse_requirements('%s==%s' % (self.egg_name,self.egg_version)) + ) + except ValueError: + raise DistutilsOptionError( + "Invalid distribution name or version syntax: %s-%s" % + (self.egg_name,self.egg_version) + ) + if self.egg_base is None: + dirs = self.distribution.package_dir + self.egg_base = (dirs or {}).get('','.') + + self.ensure_dirname('egg_base') + self.egg_info = os.path.join( + self.egg_base, self.egg_name+'.egg-info' + ) if self.bdist_dir is None: bdist_base = self.get_finalized_command('bdist').bdist_base self.bdist_dir = os.path.join(bdist_base, 'egg') - self.set_undefined_options('bdist', ('dist_dir', 'dist_dir'), ('plat_name', 'plat_name')) - # finalize_options() def write_stub(self, resource, pyfile): f = open(pyfile,'w') @@ -84,9 +95,33 @@ class bdist_egg(Command): ])) f.close() - - def run (self): + + + + + + + + + + + + + + + + + + + + + + + + + + def run(self): if not self.skip_build: self.run_command('build') @@ -113,46 +148,50 @@ class bdist_egg(Command): if to_compile: install.byte_compile(to_compile) - + # And make an archive relative to the root of the # pseudo-installation tree. - archive_basename = "%s-py%s" % (self.distribution.get_fullname(), + archive_basename = "%s-%s-py%s" % (self.egg_name, self.egg_version, get_python_version()) if ext_outputs: archive_basename += "-" + self.plat_name # OS/2 objects to any ":" characters in a filename (such as when - # a timestamp is used in a version) so change them to hyphens. + # a timestamp is used in a version) so change them to underscores. if os.name == "os2": - archive_basename = archive_basename.replace(":", "-") + archive_basename = archive_basename.replace(":", "_") pseudoinstall_root = os.path.join(self.dist_dir, archive_basename) archive_root = self.bdist_dir # Make the EGG-INFO directory - log.info("creating EGG-INFO directory") egg_info = os.path.join(archive_root,'EGG-INFO') self.mkpath(egg_info) + self.mkpath(self.egg_info) - if self.egg_info: - for filename in os.listdir(self.egg_info): - path = os.path.join(self.egg_info,filename) - if os.path.isfile(path): - self.copy_file(path,os.path.join(egg_info,filename)) - - log.info("writing EGG-INFO/PKG-INFO") + log.info("writing %s" % os.path.join(self.egg_info,'PKG-INFO')) if not self.dry_run: - self.distribution.metadata.write_pkg_info(egg_info) + self.distribution.metadata.write_pkg_info(self.egg_info) + native_libs = os.path.join(self.egg_info,"native_libs.txt") if ext_outputs: - log.info("writing EGG-INFO/native_libs.txt") + log.info("writing %s" % native_libs) if not self.dry_run: - libs_file = open( - os.path.join(egg_info,"native_libs.txt"),'wt') + libs_file = open(native_libs, 'wt') libs_file.write('\n'.join(ext_outputs)) libs_file.write('\n') libs_file.close() + elif os.path.isfile(native_libs): + log.info("removing %s" % native_libs) + if not self.dry_run: + os.unlink(native_libs) + + if self.egg_info: + for filename in os.listdir(self.egg_info): + path = os.path.join(self.egg_info,filename) + if os.path.isfile(path): + self.copy_file(path,os.path.join(egg_info,filename)) # Make the archive make_zipfile(pseudoinstall_root+'.egg', @@ -162,10 +201,6 @@ class bdist_egg(Command): if not self.keep_temp: remove_tree(self.bdist_dir, dry_run=self.dry_run) - # run() - -# class bdist_egg - def make_zipfile (zip_filename, base_dir, verbose=0, dry_run=0): @@ -176,7 +211,7 @@ def make_zipfile (zip_filename, base_dir, verbose=0, dry_run=0): raises DistutilsExecError. Returns the name of the output zip file. """ import zipfile - + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) # If zipfile module is not available, try spawning an external @@ -203,3 +238,9 @@ def make_zipfile (zip_filename, base_dir, verbose=0, dry_run=0): # make_zipfile () + + + + + + |