#!/usr/bin/env python import os import sys from distutils.core import setup from distutils.util import convert_path from fnmatch import fnmatchcase import versioneer PROJECT = 'panfry' versioneer.versionfile_source = '%s/_version.py' % PROJECT versioneer.versionfile_build = '%s/_version.py' % PROJECT versioneer.tag_prefix = '%s-' % PROJECT # tags are like 1.2.0 versioneer.parentdir_prefix = '%s-' % PROJECT # dirname like 'myproject-1.2.0' ################################################################################ # find_package_data is an Ian Bicking creation. # Provided as an attribute, so you can append to these instead # of replicating them: standard_exclude = ('*.py', '*.pyc', '*~', '.*', '*.bak', '*.swp*') standard_exclude_directories = ('.*', 'CVS', '_darcs', './build', './dist', 'EGG-INFO', '*.egg-info', './test') def find_package_data( where='.', package='', exclude=standard_exclude, exclude_directories=standard_exclude_directories, only_in_packages=True, show_ignored=False): """ Return a dictionary suitable for use in ``package_data`` in a distutils ``setup.py`` file. The dictionary looks like:: {'package': [files]} Where ``files`` is a list of all the files in that package that don't match anything in ``exclude``. If ``only_in_packages`` is true, then top-level directories that are not packages won't be included (but directories under packages will). Directories matching any pattern in ``exclude_directories`` will be ignored; by default directories with leading ``.``, ``CVS``, and ``_darcs`` will be ignored. If ``show_ignored`` is true, then all the files that aren't included in package data are shown on stderr (for debugging purposes). Note patterns use wildcards, or can be exact paths (including leading ``./``), and all searching is case-insensitive. This function is by Ian Bicking. """ out = {} stack = [(convert_path(where), '', package, only_in_packages)] while stack: where, prefix, package, only_in_packages = stack.pop(0) for name in os.listdir(where): fn = os.path.join(where, name) if os.path.isdir(fn): print >> sys.stderr, ("Scanning: %s" % fn) bad_name = False for pattern in exclude_directories: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print >> sys.stderr, ( "Directory %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue if os.path.isfile(os.path.join(fn, '__init__.py')): if not package: new_package = name else: new_package = package + '.' + name stack.append((fn, '', new_package, False)) else: stack.append((fn, prefix + name + '/', package, only_in_packages)) elif package or not only_in_packages: # is a file bad_name = False for pattern in exclude: if (fnmatchcase(name, pattern) or fn.lower() == pattern.lower()): bad_name = True if show_ignored: print >> sys.stderr, ( "File %s ignored by pattern %s" % (fn, pattern)) break if bad_name: continue print >> sys.stderr, ("Adding: %s" % prefix+name) out.setdefault(package, []).append(prefix+name) print >> sys.stderr, (out) return out ############################################################################ setup(name=PROJECT, version=versioneer.get_version(), cmdclass=versioneer.get_cmdclass(), description='Panfry', author='Scott Bahling', author_email='sbahling@mudgum.net', packages=[PROJECT], entry_points={ 'console_scripts': ['panfry = panfry.main:main']} )