Skip to content
Snippets Groups Projects
Commit a78e7ba718a2 authored by Alain Leufroy's avatar Alain Leufroy
Browse files

[pkg] update package info/setup

parent 0c26618f06f8
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,33 @@ ...@@ -3,6 +3,33 @@
The `comment` cube provides threadable comments feature. The `comment` cube provides threadable comments feature.
It is a CubicWeb component. CubicWeb is a semantic web application
framework, see http://www.cubicweb.org
Install
-------
Auto-install from sources prefered with *pip/Distribute*::
pip install cubicweb-comment
If you have troubles, use *easy_install/setuptools* and eggs::
easy_install cubicweb-comment
You can install the package manually from the uncompressed
`tarball <http://www.cubicweb.org/project/cubicweb-comment>`_::
python setup.py install # auto-install dependencies
If you don't want the dependancies to be installed automaticly, you
can force the setup to use the standard library *distutils*::
NO_SETUPTOOLS=1 python setup.py install
More details at http://www.cubicweb.org/doc/en/admin/setup
Usage Usage
----- -----
...@@ -26,3 +53,9 @@ ...@@ -26,3 +53,9 @@
Once this relation is defined, you can post comments and view threadable Once this relation is defined, you can post comments and view threadable
comments automatically on blog entry's primary view. comments automatically on blog entry's primary view.
Documentation
-------------
Look in the ``doc/`` subdirectory or read
http://www.cubicweb.org/doc/en/
#!/usr/bin/env python #!/usr/bin/env python
# pylint: disable-msg=W0404,W0622,W0704,W0613,W0152 # pylint: disable=W0142,W0403,W0404,W0613,W0622,W0622,W0704,R0904,C0103,E0611
#
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
...@@ -3,6 +4,22 @@ ...@@ -3,6 +4,22 @@
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb tag cube.
#
# 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.
#
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# 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" __docformat__ = "restructuredtext en"
import os import os
...@@ -12,6 +29,6 @@ ...@@ -12,6 +29,6 @@
try: try:
if os.environ.get('NO_SETUPTOOLS'): if os.environ.get('NO_SETUPTOOLS'):
raise ImportError() raise ImportError() # do as there is no setuptools
from setuptools import setup from setuptools import setup
from setuptools.command import install_lib from setuptools.command import install_lib
...@@ -16,6 +33,6 @@ ...@@ -16,6 +33,6 @@
from setuptools import setup from setuptools import setup
from setuptools.command import install_lib from setuptools.command import install_lib
USE_SETUPTOOLS = 1 USE_SETUPTOOLS = True
except ImportError: except ImportError:
from distutils.core import setup from distutils.core import setup
from distutils.command import install_lib from distutils.command import install_lib
...@@ -19,5 +36,6 @@ ...@@ -19,5 +36,6 @@
except ImportError: except ImportError:
from distutils.core import setup from distutils.core import setup
from distutils.command import install_lib from distutils.command import install_lib
USE_SETUPTOOLS = 0 USE_SETUPTOOLS = False
from distutils.command import install_data
...@@ -23,4 +41,2 @@ ...@@ -23,4 +41,2 @@
sys.modules.pop('__pkginfo__', None)
# import required features # import required features
...@@ -26,20 +42,8 @@ ...@@ -26,20 +42,8 @@
# import required features # import required features
from __pkginfo__ import modname, version, license, description, \ from __pkginfo__ import modname, version, license, description, web, \
web, author, author_email author, author_email
# import optional features
import __pkginfo__
distname = getattr(__pkginfo__, 'distname', modname)
scripts = getattr(__pkginfo__, 'scripts', [])
data_files = getattr(__pkginfo__, 'data_files', None)
include_dirs = getattr(__pkginfo__, 'include_dirs', [])
ext_modules = getattr(__pkginfo__, 'ext_modules', None)
dependency_links = getattr(__pkginfo__, 'dependency_links', [])
STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
if exists('README'): if exists('README'):
long_description = file('README').read() long_description = file('README').read()
else: else:
long_description = '' long_description = ''
...@@ -41,6 +45,9 @@ ...@@ -41,6 +45,9 @@
if exists('README'): if exists('README'):
long_description = file('README').read() long_description = file('README').read()
else: else:
long_description = '' long_description = ''
# import optional features
import __pkginfo__
if USE_SETUPTOOLS: if USE_SETUPTOOLS:
...@@ -46,7 +53,7 @@ ...@@ -46,7 +53,7 @@
if USE_SETUPTOOLS: if USE_SETUPTOOLS:
requires = {} requires = {}
for entry in ("__depends__", "__recommends__"): for entry in ("__depends__",): # "__recommends__"):
requires.update(getattr(__pkginfo__, entry, {})) requires.update(getattr(__pkginfo__, entry, {}))
install_requires = [("%s %s" % (d, v and v or "")).strip() install_requires = [("%s %s" % (d, v and v or "")).strip()
for d, v in requires.iteritems()] for d, v in requires.iteritems()]
else: else:
...@@ -51,6 +58,16 @@ ...@@ -51,6 +58,16 @@
for d, v in requires.iteritems()] for d, v in requires.iteritems()]
else: else:
install_requires = [] 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): def ensure_scripts(linux_scripts):
...@@ -54,7 +71,8 @@ ...@@ -54,7 +71,8 @@
def ensure_scripts(linux_scripts): 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) (taken from 4Suite)
""" """
from distutils import util from distutils import util
...@@ -64,19 +82,4 @@ ...@@ -64,19 +82,4 @@
scripts_ = linux_scripts scripts_ = linux_scripts
return 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):
if exists(join(absfile, '__init__.py')) or \
package in ('test', 'tests'):
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, def export(from_dir, to_dir,
...@@ -82,5 +85,5 @@ ...@@ -82,5 +85,5 @@
def export(from_dir, to_dir, def export(from_dir, to_dir,
blacklist=STD_BLACKLIST, blacklist=BASE_BLACKLIST,
ignore_ext=IGNORED_EXTENSIONS, ignore_ext=IGNORED_EXTENSIONS,
verbose=True): verbose=True):
"""make a mirror of from_dir in to_dir, omitting directories and files """make a mirror of from_dir in to_dir, omitting directories and files
...@@ -134,6 +137,35 @@ ...@@ -134,6 +137,35 @@
dest = join(self.install_dir, base, directory) dest = join(self.install_dir, base, directory)
export(directory, dest, verbose=False) 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): def install(**kwargs):
"""setup entry point""" """setup entry point"""
if USE_SETUPTOOLS: if USE_SETUPTOOLS:
...@@ -142,6 +174,6 @@ ...@@ -142,6 +174,6 @@
# install-layout option was introduced in 2.5.3-1~exp1 # 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: elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
sys.argv.remove('--install-layout=deb') sys.argv.remove('--install-layout=deb')
if USE_SETUPTOOLS and install_requires: if USE_SETUPTOOLS:
kwargs['install_requires'] = install_requires kwargs['install_requires'] = install_requires
kwargs['dependency_links'] = dependency_links kwargs['dependency_links'] = dependency_links
...@@ -146,5 +178,6 @@ ...@@ -146,5 +178,6 @@
kwargs['install_requires'] = install_requires kwargs['install_requires'] = install_requires
kwargs['dependency_links'] = dependency_links kwargs['dependency_links'] = dependency_links
kwargs['zip_safe'] = False
return setup(name = distname, return setup(name = distname,
version = version, version = version,
license = license, license = license,
...@@ -156,7 +189,8 @@ ...@@ -156,7 +189,8 @@
scripts = ensure_scripts(scripts), scripts = ensure_scripts(scripts),
data_files = data_files, data_files = data_files,
ext_modules = ext_modules, ext_modules = ext_modules,
cmdclass = {'install_lib': MyInstallLib}, cmdclass = {'install_lib': MyInstallLib,
'install_data':MyInstallData},
**kwargs **kwargs
) )
......
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