2006-04-26 10:48:09 +00:00
|
|
|
#!/usr/bin/env python
|
2010-04-19 09:18:08 +00:00
|
|
|
# pylint: disable=W0404,W0622,W0704,W0613
|
2009-01-21 09:03:41 +00:00
|
|
|
"""Generic Setup script, takes package info from __pkginfo__.py file.
|
2006-04-26 10:48:09 +00:00
|
|
|
|
2010-03-23 10:39:48 +00:00
|
|
|
:copyright: 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
2009-01-21 09:03:41 +00:00
|
|
|
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
|
|
|
:license: General Public License version 2 - http://www.gnu.org/licenses
|
|
|
|
"""
|
|
|
|
__docformat__ = "restructuredtext en"
|
2006-04-26 10:48:09 +00:00
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import shutil
|
|
|
|
from os.path import isdir, exists, join, walk
|
|
|
|
|
2009-03-19 16:14:52 +00:00
|
|
|
# FIXME : setup.py doesn't work with setuptools so we use distutils
|
|
|
|
|
2009-03-24 14:15:18 +00:00
|
|
|
try:
|
|
|
|
if os.environ.get('NO_SETUPTOOLS'):
|
|
|
|
raise ImportError()
|
|
|
|
from setuptools import setup
|
|
|
|
USE_SETUPTOOLS = 1
|
2009-06-11 13:29:43 +00:00
|
|
|
except ImportError:
|
2009-03-24 14:15:18 +00:00
|
|
|
from distutils.core import setup
|
|
|
|
USE_SETUPTOOLS = 0
|
2009-03-19 16:14:52 +00:00
|
|
|
#assert USE_SETUPTOOLS
|
2009-01-21 09:03:41 +00:00
|
|
|
|
2009-03-24 14:15:18 +00:00
|
|
|
sys.modules.pop('__pkginfo__', None)
|
2006-04-26 10:48:09 +00:00
|
|
|
# import required features
|
2010-05-25 10:17:41 +00:00
|
|
|
from __pkginfo__ import modname, version, license, description, long_desc, \
|
2006-04-26 10:48:09 +00:00
|
|
|
web, author, author_email, classifiers
|
|
|
|
# import optional features
|
|
|
|
try:
|
|
|
|
from __pkginfo__ import distname
|
|
|
|
except ImportError:
|
|
|
|
distname = modname
|
|
|
|
try:
|
|
|
|
from __pkginfo__ import scripts
|
|
|
|
except ImportError:
|
|
|
|
scripts = []
|
2009-01-21 09:03:41 +00:00
|
|
|
try:
|
|
|
|
from __pkginfo__ import install_requires
|
|
|
|
except ImportError:
|
|
|
|
install_requires = None
|
|
|
|
|
|
|
|
STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
|
|
|
|
|
|
|
|
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
|
2006-04-26 10:48:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
def ensure_scripts(linux_scripts):
|
|
|
|
"""
|
|
|
|
Creates the proper script names required for each platform
|
|
|
|
(taken from 4Suite)
|
|
|
|
"""
|
|
|
|
from distutils import util
|
|
|
|
if util.get_platform()[:3] == 'win':
|
2010-03-23 11:33:59 +00:00
|
|
|
scripts_ = linux_scripts + [script + '.bat'
|
|
|
|
for script in linux_scripts]
|
2006-04-26 10:48:09 +00:00
|
|
|
else:
|
|
|
|
scripts_ = linux_scripts
|
|
|
|
return scripts_
|
|
|
|
|
|
|
|
|
|
|
|
def get_packages(directory, prefix):
|
|
|
|
"""return a list of subpackages for the given directory
|
|
|
|
"""
|
|
|
|
result = []
|
|
|
|
for package in os.listdir(directory):
|
|
|
|
absfile = join(directory, package)
|
|
|
|
if isdir(absfile):
|
2009-03-09 09:55:20 +00:00
|
|
|
if exists(join(absfile, '__init__.py')):
|
2006-04-26 10:48:09 +00:00
|
|
|
if prefix:
|
|
|
|
result.append('%s.%s' % (prefix, package))
|
|
|
|
else:
|
|
|
|
result.append(package)
|
|
|
|
result += get_packages(absfile, result[-1])
|
|
|
|
return result
|
|
|
|
|
|
|
|
def export(from_dir, to_dir,
|
2009-01-21 09:03:41 +00:00
|
|
|
blacklist=STD_BLACKLIST,
|
2006-04-26 10:48:09 +00:00
|
|
|
ignore_ext=IGNORED_EXTENSIONS):
|
|
|
|
"""make a mirror of from_dir in to_dir, omitting directories and files
|
|
|
|
listed in the black list
|
|
|
|
"""
|
|
|
|
def make_mirror(arg, directory, fnames):
|
|
|
|
"""walk handler"""
|
|
|
|
for norecurs in blacklist:
|
|
|
|
try:
|
|
|
|
fnames.remove(norecurs)
|
|
|
|
except ValueError:
|
|
|
|
pass
|
|
|
|
for filename in fnames:
|
|
|
|
# don't include binary files
|
|
|
|
if filename[-4:] in ignore_ext:
|
|
|
|
continue
|
|
|
|
if filename[-1] == '~':
|
|
|
|
continue
|
2009-01-28 07:56:38 +00:00
|
|
|
src = join(directory, filename)
|
2006-04-26 10:48:09 +00:00
|
|
|
dest = to_dir + src[len(from_dir):]
|
|
|
|
print >> sys.stderr, src, '->', dest
|
|
|
|
if os.path.isdir(src):
|
|
|
|
if not exists(dest):
|
|
|
|
os.mkdir(dest)
|
|
|
|
else:
|
|
|
|
if exists(dest):
|
|
|
|
os.remove(dest)
|
|
|
|
shutil.copy2(src, dest)
|
|
|
|
try:
|
|
|
|
os.mkdir(to_dir)
|
|
|
|
except OSError, ex:
|
|
|
|
# file exists ?
|
|
|
|
import errno
|
|
|
|
if ex.errno != errno.EEXIST:
|
|
|
|
raise
|
|
|
|
walk(from_dir, make_mirror, None)
|
|
|
|
|
2010-04-19 09:22:40 +00:00
|
|
|
|
2006-04-26 10:48:09 +00:00
|
|
|
def install(**kwargs):
|
|
|
|
"""setup entry point"""
|
2009-03-09 09:55:20 +00:00
|
|
|
kwargs['package_dir'] = {modname : '.'}
|
|
|
|
packages = [modname] + get_packages(os.getcwd(), modname)
|
|
|
|
if USE_SETUPTOOLS:
|
|
|
|
if install_requires:
|
|
|
|
kwargs['install_requires'] = install_requires
|
|
|
|
if '--force-manifest' in sys.argv:
|
|
|
|
sys.argv.remove('--force-manifest')
|
2006-04-26 10:48:09 +00:00
|
|
|
kwargs['packages'] = packages
|
|
|
|
return setup(name = distname,
|
|
|
|
version = version,
|
2009-01-21 09:03:41 +00:00
|
|
|
license = license,
|
2010-05-25 10:17:41 +00:00
|
|
|
description = description,
|
2006-04-26 10:48:09 +00:00
|
|
|
long_description = long_desc,
|
|
|
|
author = author,
|
|
|
|
author_email = author_email,
|
|
|
|
url = web,
|
|
|
|
classifiers = classifiers,
|
|
|
|
scripts = ensure_scripts(scripts),
|
|
|
|
**kwargs
|
|
|
|
)
|
2010-04-19 09:22:40 +00:00
|
|
|
|
2006-04-26 10:48:09 +00:00
|
|
|
if __name__ == '__main__' :
|
|
|
|
install()
|