Skip to content
Snippets Groups Projects
Commit 2d0870c9ceea authored by Sylvain Thénault's avatar Sylvain Thénault
Browse files

pkginfo cleanup, enable setuptools, bump cw dependency

parent 016c22579175
No related branches found
No related tags found
No related merge requests found
......@@ -8,9 +8,6 @@
version = '.'.join(str(num) for num in numversion)
license = 'LGPL'
copyright = '''Copyright (c) 2008-2010 LOGILAB S.A. (Paris, FRANCE).
http://www.logilab.fr/ -- mailto:contact@logilab.fr'''
author = 'Logilab'
author_email = 'contact@logilab.fr'
......@@ -14,12 +11,7 @@
author = 'Logilab'
author_email = 'contact@logilab.fr'
short_desc = 'expense tracking application built on the CubicWeb framework'
long_desc = '''\
This cube provides a full-featured expense tracking application.
'''
ftp = ''
description = 'expense tracking application built on the CubicWeb framework'
web = 'http://www.cubicweb.org/project/%s' % distname
classifiers = [
......@@ -29,16 +21,10 @@
'Programming Language :: JavaScript',
]
pyversions = ['2.4']
__depends_cubes__ = {'expense': '>= 0.4.4',
'workcase': None,
}
__depends__ = {'cubicweb': '>= 3.6.0'}
for key, value in __depends_cubes__.items():
__depends__['cubicweb-'+key] = value
__use__ = tuple(__depends_cubes__)
__recommend__ = ()
__depends__ = {'cubicweb': '>= 3.10.0',
'cubicweb-expense': '>= 0.4.4',
'cubicweb-workcase': None,
}
# packaging ###
......@@ -42,6 +28,5 @@
# packaging ###
from glob import glob
from os import listdir as _listdir
from os.path import join, isdir
......@@ -46,3 +31,4 @@
from os import listdir as _listdir
from os.path import join, isdir
from glob import glob
......@@ -48,7 +34,5 @@
#from cubicweb.devtools.pkginfo import get_distutils_datafiles
CUBES_DIR = join('share', 'cubicweb', 'cubes')
THIS_CUBE_DIR = join(CUBES_DIR, modname)
THIS_CUBE_DIR = join('share', 'cubicweb', 'cubes', modname)
def listdir(dirpath):
return [join(dirpath, fname) for fname in _listdir(dirpath)
......@@ -56,18 +40,13 @@
and not fname.endswith('~')
and not isdir(join(dirpath, fname))]
from glob import glob
try:
data_files = [
# common files
[THIS_CUBE_DIR, [fname for fname in glob('*.py') if fname != 'setup.py']],
]
# check for possible extended cube layout
for dirname in ('entities', 'views', 'sobjects', 'hooks', 'schema', 'data', 'i18n', 'migration', 'wdoc'):
if isdir(dirname):
data_files.append([join(THIS_CUBE_DIR, dirname), listdir(dirname)])
# Note: here, you'll need to add subdirectories if you want
# them to be included in the debian package
except OSError:
# we are in an installed directory
pass
data_files = [
# common files
[THIS_CUBE_DIR, [fname for fname in glob('*.py') if fname != 'setup.py']],
]
# check for possible extended cube layout
for dirname in ('entities', 'views', 'sobjects', 'hooks', 'schema', 'data', 'i18n', 'migration', 'wdoc'):
if isdir(dirname):
data_files.append([join(THIS_CUBE_DIR, dirname), listdir(dirname)])
# Note: here, you'll need to add subdirectories if you want
# them to be included in the debian package
......@@ -9,9 +9,7 @@
Package: cubicweb-fresh
Architecture: all
Conflicts: cubicweb-fresh, erudi-fresh-client, erudi-fresh-server, erudi-fresh-comp
Replaces: cubicweb-fresh, erudi-fresh-client, erudi-fresh-server, erudi-fresh-comp
Depends: cubicweb-common (>= 3.6.0), cubicweb-expense (>= 0.4.4), cubicweb-workcase
Depends: cubicweb-common (>= 3.10.0), cubicweb-expense (>= 0.4.4), cubicweb-workcase
Description: expense tracking application built on the CubicWeb framework
This CubicWeb component provides an expense tracking application.
.
......
......@@ -7,7 +7,7 @@
build: build-stamp
build-stamp:
dh_testdir
python setup.py -q build
NO_SETUPTOOLS=1 python setup.py -q build
touch build-stamp
clean:
......@@ -23,7 +23,7 @@
dh_testroot
dh_clean -k
dh_installdirs -i
python setup.py -q install --no-compile --prefix=debian/cubicweb-fresh/usr/
NO_SETUPTOOLS=1 python setup.py -q install --no-compile --prefix=debian/cubicweb-fresh/usr/
# remove generated .egg-info file
rm -rf debian/cubicweb-comment/usr/lib/python*
......
#!/usr/bin/env python
# pylint: disable-msg=W0404,W0622,W0704,W0613,W0152
# Copyright (c) 2003-2004 LOGILAB S.A. (Paris, FRANCE).
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
# pylint: disable=W0142,W0403,W0404,W0613,W0622,W0622,W0704,R0904,C0103,E0611
#
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb tag cube.
#
......@@ -5,6 +8,6 @@
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# CubicWeb is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option)
# any later version.
#
......@@ -10,3 +13,3 @@
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
......@@ -12,3 +15,4 @@
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
......@@ -14,9 +18,10 @@
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
""" Generic Setup script, takes package info from __pkginfo__.py file """
# You should have received a copy of the GNU Lesser General Public License along
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>.
"""Generic Setup script, takes package info from __pkginfo__.py file
"""
__docformat__ = "restructuredtext en"
import os
import sys
import shutil
......@@ -19,9 +24,6 @@
import os
import sys
import shutil
from distutils.core import setup
from distutils import command
from distutils.command import install_lib
from os.path import isdir, exists, join, walk
......@@ -26,3 +28,15 @@
from os.path import isdir, exists, join, walk
try:
if os.environ.get('NO_SETUPTOOLS'):
raise ImportError() # do as there is no setuptools
from setuptools import setup
from setuptools.command import install_lib
USE_SETUPTOOLS = True
except ImportError:
from distutils.core import setup
from distutils.command import install_lib
USE_SETUPTOOLS = False
from distutils.command import install_data
# import required features
......@@ -28,13 +42,32 @@
# import required features
from __pkginfo__ import distname, version, license, short_desc, long_desc, \
web, author, author_email
try:
from __pkginfo__ import scripts
except ImportError:
scripts = []
try:
from __pkginfo__ import data_files
except ImportError:
data_files = None
from __pkginfo__ import modname, version, license, description, web, \
author, author_email
if exists('README'):
long_description = file('README').read()
else:
long_description = ''
# import optional features
import __pkginfo__
if USE_SETUPTOOLS:
requires = {}
for entry in ("__depends__",): # "__recommends__"):
requires.update(getattr(__pkginfo__, entry, {}))
install_requires = [("%s %s" % (d, v and v or "")).strip()
for d, v in requires.iteritems()]
else:
install_requires = []
distname = getattr(__pkginfo__, 'distname', modname)
scripts = getattr(__pkginfo__, 'scripts', ())
include_dirs = getattr(__pkginfo__, 'include_dirs', ())
data_files = getattr(__pkginfo__, 'data_files', None)
ext_modules = getattr(__pkginfo__, 'ext_modules', None)
dependency_links = getattr(__pkginfo__, 'dependency_links', ())
BASE_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
def ensure_scripts(linux_scripts):
......@@ -40,5 +73,6 @@
def ensure_scripts(linux_scripts):
"""creates the proper script names required for each platform
"""
Creates the proper script names required for each platform
(taken from 4Suite)
"""
from distutils import util
......@@ -48,5 +82,89 @@
scripts_ = linux_scripts
return scripts_
def export(from_dir, to_dir,
blacklist=BASE_BLACKLIST,
ignore_ext=IGNORED_EXTENSIONS,
verbose=True):
"""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
src = join(directory, filename)
dest = to_dir + src[len(from_dir):]
if verbose:
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)
class MyInstallLib(install_lib.install_lib):
"""extend install_lib command to handle package __init__.py and
include_dirs variable if necessary
"""
def run(self):
"""overridden from install_lib class"""
install_lib.install_lib.run(self)
# manually install included directories if any
if include_dirs:
base = modname
for directory in include_dirs:
dest = join(self.install_dir, base, directory)
export(directory, dest, verbose=False)
# re-enable copying data files in sys.prefix
old_install_data = install_data.install_data
if USE_SETUPTOOLS:
# overwrite InstallData to use sys.prefix instead of the egg directory
class MyInstallData(old_install_data):
"""A class that manages data files installation"""
def run(self):
_old_install_dir = self.install_dir
if self.install_dir.endswith('egg'):
self.install_dir = sys.prefix
old_install_data.run(self)
self.install_dir = _old_install_dir
try:
import setuptools.command.easy_install # only if easy_install avaible
# monkey patch: Crack SandboxViolation verification
from setuptools.sandbox import DirectorySandbox as DS
old_ok = DS._ok
def _ok(self, path):
"""Return True if ``path`` can be written during installation."""
out = old_ok(self, path) # here for side effect from setuptools
realpath = os.path.normcase(os.path.realpath(path))
allowed_path = os.path.normcase(sys.prefix)
if realpath.startswith(allowed_path):
out = True
return out
DS._ok = _ok
except ImportError:
pass
def install(**kwargs):
"""setup entry point"""
......@@ -51,16 +169,32 @@
def install(**kwargs):
"""setup entry point"""
return setup(name=distname,
version=version,
license =license,
description=short_desc,
long_description=long_desc,
author=author,
author_email=author_email,
url=web,
scripts=ensure_scripts(scripts),
data_files=data_files,
**kwargs)
if USE_SETUPTOOLS:
if '--force-manifest' in sys.argv:
sys.argv.remove('--force-manifest')
# install-layout option was introduced in 2.5.3-1~exp1
elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
sys.argv.remove('--install-layout=deb')
cmdclass = {'install_lib': MyInstallLib}
if USE_SETUPTOOLS:
kwargs['install_requires'] = install_requires
kwargs['dependency_links'] = dependency_links
kwargs['zip_safe'] = False
cmdclass['install_data'] = MyInstallData
return setup(name = distname,
version = version,
license = license,
description = description,
long_description = long_description,
author = author,
author_email = author_email,
url = web,
scripts = ensure_scripts(scripts),
data_files = data_files,
ext_modules = ext_modules,
cmdclass = cmdclass,
**kwargs
)
if __name__ == '__main__' :
install()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment