home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_2411 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  15.5 KB  |  376 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import re
  6. from setuptools import Command
  7. from distutils.errors import *
  8. from distutils import log
  9. from setuptools.command.sdist import sdist
  10. from distutils.util import convert_path
  11. from distutils.filelist import FileList
  12. from pkg_resources import parse_requirements, safe_name, parse_version, safe_version, yield_lines, EntryPoint, iter_entry_points, to_filename
  13. from sdist import walk_revctrl
  14.  
  15. class egg_info(Command):
  16.     description = "create a distribution's .egg-info directory"
  17.     user_options = [
  18.         ('egg-base=', 'e', 'directory containing .egg-info directories (default: top of the source tree)'),
  19.         ('tag-svn-revision', 'r', 'Add subversion revision ID to version number'),
  20.         ('tag-date', 'd', 'Add date stamp (e.g. 20050528) to version number'),
  21.         ('tag-build=', 'b', 'Specify explicit tag to add to version number'),
  22.         ('no-svn-revision', 'R', "Don't add subversion revision ID [default]"),
  23.         ('no-date', 'D', "Don't include date stamp [default]")]
  24.     boolean_options = [
  25.         'tag-date',
  26.         'tag-svn-revision']
  27.     negative_opt = {
  28.         'no-svn-revision': 'tag-svn-revision',
  29.         'no-date': 'tag-date' }
  30.     
  31.     def initialize_options(self):
  32.         self.egg_name = None
  33.         self.egg_version = None
  34.         self.egg_base = None
  35.         self.egg_info = None
  36.         self.tag_build = None
  37.         self.tag_svn_revision = 0
  38.         self.tag_date = 0
  39.         self.broken_egg_info = False
  40.         self.vtags = None
  41.  
  42.     
  43.     def save_version_info(self, filename):
  44.         edit_config = edit_config
  45.         import setopt
  46.         edit_config(filename, {
  47.             'egg_info': {
  48.                 'tag_svn_revision': 0,
  49.                 'tag_date': 0,
  50.                 'tag_build': self.tags() } })
  51.  
  52.     
  53.     def finalize_options(self):
  54.         self.egg_name = safe_name(self.distribution.get_name())
  55.         self.vtags = self.tags()
  56.         self.egg_version = self.tagged_version()
  57.         
  58.         try:
  59.             list(parse_requirements('%s==%s' % (self.egg_name, self.egg_version)))
  60.         except ValueError:
  61.             raise DistutilsOptionError('Invalid distribution name or version syntax: %s-%s' % (self.egg_name, self.egg_version))
  62.  
  63.         if self.egg_base is None:
  64.             dirs = self.distribution.package_dir
  65.             if not dirs:
  66.                 pass
  67.             self.egg_base = { }.get('', os.curdir)
  68.         
  69.         self.ensure_dirname('egg_base')
  70.         self.egg_info = to_filename(self.egg_name) + '.egg-info'
  71.         if self.egg_base != os.curdir:
  72.             self.egg_info = os.path.join(self.egg_base, self.egg_info)
  73.         
  74.         if '-' in self.egg_name:
  75.             self.check_broken_egg_info()
  76.         
  77.         self.distribution.metadata.version = self.egg_version
  78.         pd = self.distribution._patched_dist
  79.         if pd is not None and pd.key == self.egg_name.lower():
  80.             pd._version = self.egg_version
  81.             pd._parsed_version = parse_version(self.egg_version)
  82.             self.distribution._patched_dist = None
  83.         
  84.  
  85.     
  86.     def write_or_delete_file(self, what, filename, data, force = False):
  87.         if data:
  88.             self.write_file(what, filename, data)
  89.         elif os.path.exists(filename):
  90.             if data is None and not force:
  91.                 log.warn('%s not set in setup(), but %s exists', what, filename)
  92.                 return None
  93.             self.delete_file(filename)
  94.         
  95.  
  96.     
  97.     def write_file(self, what, filename, data):
  98.         log.info('writing %s to %s', what, filename)
  99.         if not self.dry_run:
  100.             f = open(filename, 'wb')
  101.             f.write(data)
  102.             f.close()
  103.         
  104.  
  105.     
  106.     def delete_file(self, filename):
  107.         log.info('deleting %s', filename)
  108.         if not self.dry_run:
  109.             os.unlink(filename)
  110.         
  111.  
  112.     
  113.     def tagged_version(self):
  114.         return safe_version(self.distribution.get_version() + self.vtags)
  115.  
  116.     
  117.     def run(self):
  118.         self.mkpath(self.egg_info)
  119.         installer = self.distribution.fetch_build_egg
  120.         for ep in iter_entry_points('egg_info.writers'):
  121.             writer = ep.load(installer = installer)
  122.             writer(self, ep.name, os.path.join(self.egg_info, ep.name))
  123.         
  124.         nl = os.path.join(self.egg_info, 'native_libs.txt')
  125.         if os.path.exists(nl):
  126.             self.delete_file(nl)
  127.         
  128.         self.find_sources()
  129.  
  130.     
  131.     def tags(self):
  132.         version = ''
  133.         if self.tag_build:
  134.             version += self.tag_build
  135.         
  136.         if self.tag_svn_revision:
  137.             if os.path.exists('.svn') or os.path.exists('PKG-INFO'):
  138.                 version += '-r%s' % self.get_svn_revision()
  139.             
  140.         if self.tag_date:
  141.             import time
  142.             version += time.strftime('-%Y%m%d')
  143.         
  144.         return version
  145.  
  146.     
  147.     def get_svn_revision(self):
  148.         revision = 0
  149.         urlre = re.compile('url="([^"]+)"')
  150.         revre = re.compile('committed-rev="(\\d+)"')
  151.         for base, dirs, files in os.walk(os.curdir):
  152.             if '.svn' not in dirs:
  153.                 dirs[:] = []
  154.                 continue
  155.             
  156.             dirs.remove('.svn')
  157.             f = open(os.path.join(base, '.svn', 'entries'))
  158.             data = f.read()
  159.             f.close()
  160.             if data.startswith('9') or data.startswith('8'):
  161.                 data = map(str.splitlines, data.split('\n\x0c\n'))
  162.                 del data[0][0]
  163.                 dirurl = data[0][3]
  164.                 localrev = [](_[1] + [
  165.                     0])
  166.             elif data.startswith('<?xml'):
  167.                 dirurl = urlre.search(data).group(1)
  168.                 localrev = []([ int(m.group(1)) for m in revre.finditer(data) ] + [
  169.                     0])
  170.             else:
  171.                 log.warn('unrecognized .svn/entries format; skipping %s', base)
  172.                 dirs[:] = []
  173.             if base == os.curdir:
  174.                 base_url = dirurl + '/'
  175.             elif not dirurl.startswith(base_url):
  176.                 dirs[:] = []
  177.                 continue
  178.             
  179.             revision = max(revision, localrev)
  180.         
  181.         if not revision:
  182.             pass
  183.         return str(get_pkg_info_revision())
  184.  
  185.     
  186.     def find_sources(self):
  187.         manifest_filename = os.path.join(self.egg_info, 'SOURCES.txt')
  188.         mm = manifest_maker(self.distribution)
  189.         mm.manifest = manifest_filename
  190.         mm.run()
  191.         self.filelist = mm.filelist
  192.  
  193.     
  194.     def check_broken_egg_info(self):
  195.         bei = self.egg_name + '.egg-info'
  196.         if self.egg_base != os.curdir:
  197.             bei = os.path.join(self.egg_base, bei)
  198.         
  199.         if os.path.exists(bei):
  200.             log.warn('-' * 78 + '\nNote: Your current .egg-info directory has a \'-\' in its name;\nthis will not work correctly with "setup.py develop".\n\nPlease rename %s to %s to correct this problem.\n' + '-' * 78, bei, self.egg_info)
  201.             self.broken_egg_info = self.egg_info
  202.             self.egg_info = bei
  203.         
  204.  
  205.  
  206.  
  207. class FileList(FileList):
  208.     
  209.     def append(self, item):
  210.         if item.endswith('\r'):
  211.             item = item[:-1]
  212.         
  213.         path = convert_path(item)
  214.         if os.path.exists(path):
  215.             self.files.append(path)
  216.         
  217.  
  218.  
  219.  
  220. class manifest_maker(sdist):
  221.     template = 'MANIFEST.in'
  222.     
  223.     def initialize_options(self):
  224.         self.use_defaults = 1
  225.         self.prune = 1
  226.         self.manifest_only = 1
  227.         self.force_manifest = 1
  228.  
  229.     
  230.     def finalize_options(self):
  231.         pass
  232.  
  233.     
  234.     def run(self):
  235.         self.filelist = FileList()
  236.         if not os.path.exists(self.manifest):
  237.             self.write_manifest()
  238.         
  239.         self.filelist.findall()
  240.         self.add_defaults()
  241.         if os.path.exists(self.template):
  242.             self.read_template()
  243.         
  244.         self.prune_file_list()
  245.         self.filelist.sort()
  246.         self.filelist.remove_duplicates()
  247.         self.write_manifest()
  248.  
  249.     
  250.     def write_manifest(self):
  251.         files = self.filelist.files
  252.         self.execute(write_file, (self.manifest, files), "writing manifest file '%s'" % self.manifest)
  253.  
  254.     
  255.     def warn(self, msg):
  256.         if not msg.startswith('standard file not found:'):
  257.             sdist.warn(self, msg)
  258.         
  259.  
  260.     
  261.     def add_defaults(self):
  262.         sdist.add_defaults(self)
  263.         self.filelist.append(self.template)
  264.         self.filelist.append(self.manifest)
  265.         rcfiles = list(walk_revctrl())
  266.         if rcfiles:
  267.             self.filelist.extend(rcfiles)
  268.         elif os.path.exists(self.manifest):
  269.             self.read_manifest()
  270.         
  271.         ei_cmd = self.get_finalized_command('egg_info')
  272.         self.filelist.include_pattern('*', prefix = ei_cmd.egg_info)
  273.  
  274.     
  275.     def prune_file_list(self):
  276.         build = self.get_finalized_command('build')
  277.         base_dir = self.distribution.get_fullname()
  278.         self.filelist.exclude_pattern(None, prefix = build.build_base)
  279.         self.filelist.exclude_pattern(None, prefix = base_dir)
  280.         sep = re.escape(os.sep)
  281.         self.filelist.exclude_pattern(sep + '(RCS|CVS|\\.svn)' + sep, is_regex = 1)
  282.  
  283.  
  284.  
  285. def write_file(filename, contents):
  286.     f = open(filename, 'wb')
  287.     f.write('\n'.join(contents))
  288.     f.close()
  289.  
  290.  
  291. def write_pkg_info(cmd, basename, filename):
  292.     log.info('writing %s', filename)
  293.     if not cmd.dry_run:
  294.         metadata = cmd.distribution.metadata
  295.         metadata.version = cmd.egg_version
  296.         oldver = metadata.version
  297.         metadata.name = cmd.egg_name
  298.         oldname = metadata.name
  299.         
  300.         try:
  301.             metadata.write_pkg_info(cmd.egg_info)
  302.         finally:
  303.             metadata.name = oldname
  304.             metadata.version = oldver
  305.  
  306.         safe = getattr(cmd.distribution, 'zip_safe', None)
  307.         import bdist_egg
  308.         bdist_egg.write_safety_flag(cmd.egg_info, safe)
  309.     
  310.  
  311.  
  312. def warn_depends_obsolete(cmd, basename, filename):
  313.     if os.path.exists(filename):
  314.         log.warn("WARNING: 'depends.txt' is not used by setuptools 0.6!\nUse the install_requires/extras_require setup() args instead.")
  315.     
  316.  
  317.  
  318. def write_requirements(cmd, basename, filename):
  319.     dist = cmd.distribution
  320.     if not dist.install_requires:
  321.         pass
  322.     data = [
  323.         '\n'.join(yield_lines(()))]
  324.     for extra, reqs in { }.items():
  325.         data.append('\n\n[%s]\n%s' % (extra, '\n'.join(yield_lines(reqs))))
  326.     cmd.write_or_delete_file('requirements', filename, ''.join(data))
  327.  
  328.  
  329. def write_toplevel_names(cmd, basename, filename):
  330.     pkgs = []([ k.split('.', 1)[0] for k in cmd.distribution.iter_distribution_names() ])
  331.     cmd.write_file('top-level names', filename, '\n'.join(pkgs) + '\n')
  332.  
  333.  
  334. def overwrite_arg(cmd, basename, filename):
  335.     write_arg(cmd, basename, filename, True)
  336.  
  337.  
  338. def write_arg(cmd, basename, filename, force = False):
  339.     argname = os.path.splitext(basename)[0]
  340.     value = getattr(cmd.distribution, argname, None)
  341.     if value is not None:
  342.         value = '\n'.join(value) + '\n'
  343.     
  344.     cmd.write_or_delete_file(argname, filename, value, force)
  345.  
  346.  
  347. def write_entries(cmd, basename, filename):
  348.     ep = cmd.distribution.entry_points
  349.     if isinstance(ep, basestring) or ep is None:
  350.         data = ep
  351.     elif ep is not None:
  352.         data = []
  353.         for section, contents in ep.items():
  354.             if not isinstance(contents, basestring):
  355.                 contents = EntryPoint.parse_group(section, contents)
  356.                 contents = '\n'.join(map(str, contents.values()))
  357.             
  358.             data.append('[%s]\n%s\n\n' % (section, contents))
  359.         
  360.         data = ''.join(data)
  361.     
  362.     cmd.write_or_delete_file('entry points', filename, data, True)
  363.  
  364.  
  365. def get_pkg_info_revision():
  366.     if os.path.exists('PKG-INFO'):
  367.         f = open('PKG-INFO', 'rU')
  368.         for line in f:
  369.             match = re.match('Version:.*-r(\\d+)\\s*$', line)
  370.             if match:
  371.                 return int(match.group(1))
  372.         
  373.     
  374.     return 0
  375.  
  376.