Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
cubicweb
cubes
registration
Commits
227f1309813b
Commit
bbd18d19
authored
Jan 13, 2017
by
Sylvain Thénault
Browse files
[pkg] Use recent, py3k-able setup.py
parent
a6bdf93c1558
Changes
1
Hide whitespace changes
Inline
Side-by-side
setup.py
View file @
227f1309
#!/usr/bin/env python
# pylint: disable=W0404,W0622,W0704,W0613
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# 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
#
# 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"
import
os
import
sys
import
shutil
from
os.path
import
isdir
,
exists
,
join
,
walk
from
os.path
import
isdir
,
exists
,
join
try
:
if
os
.
environ
.
get
(
'NO_SETUPTOOLS'
):
raise
ImportError
()
raise
ImportError
()
# do as there is no setuptools
from
setuptools
import
setup
from
setuptools.command
import
install_lib
USE_SETUPTOOLS
=
1
USE_SETUPTOOLS
=
True
except
ImportError
:
from
distutils.core
import
setup
from
distutils.command
import
install_lib
USE_SETUPTOOLS
=
0
USE_SETUPTOOLS
=
False
from
distutils.command
import
install_data
sys
.
modules
.
pop
(
'__pkginfo__'
,
None
)
# import required features
from
__pkginfo__
import
modname
,
version
,
license
,
description
,
\
web
,
author
,
author_email
from
__pkginfo__
import
modname
,
version
,
license
,
description
,
web
,
\
author
,
author_email
,
classifiers
if
exists
(
'README'
):
long_description
=
open
(
'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'
,
[])
scripts
=
getattr
(
__pkginfo__
,
'scripts'
,
())
include_dirs
=
getattr
(
__pkginfo__
,
'include_dirs'
,
())
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'
)
dependency_links
=
getattr
(
__pkginfo__
,
'dependency_links'
,
())
BASE_BLACKLIST
=
(
'CVS'
,
'.svn'
,
'.hg'
,
'debian'
,
'dist'
,
'build'
)
IGNORED_EXTENSIONS
=
(
'.pyc'
,
'.pyo'
,
'.elc'
,
'~'
)
if
exists
(
'README'
):
long_description
=
file
(
'README'
).
read
()
else
:
long_description
=
''
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
=
[]
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
...
...
@@ -64,60 +80,49 @@ def ensure_scripts(linux_scripts):
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
):
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
,
blacklist
=
STD
_BLACKLIST
,
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"""
try
:
os
.
mkdir
(
to_dir
)
except
OSError
as
ex
:
# file exists ?
import
errno
if
ex
.
errno
!=
errno
.
EEXIST
:
raise
else
:
if
verbose
:
print
(
'created %s directory'
%
to_dir
)
for
dirpath
,
dirnames
,
filenames
in
os
.
walk
(
from_dir
):
for
norecurs
in
blacklist
:
try
:
f
names
.
remove
(
norecurs
)
dir
names
.
remove
(
norecurs
)
except
ValueError
:
pass
for
filename
in
fnames
:
else
:
if
verbose
:
print
(
'not recursing in %s'
%
join
(
dirpath
,
norecurs
))
for
dirname
in
dirnames
:
src
=
join
(
dirpath
,
dirname
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
if
not
exists
(
dest
):
if
verbose
:
print
(
'creating %s directory'
%
dest
)
os
.
mkdir
(
dest
)
for
filename
in
filenames
:
# don't include binary files
src
=
join
(
dirpath
,
filename
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
if
filename
[
-
4
:]
in
ignore_ext
:
continue
if
filename
[
-
1
]
==
'~'
:
continue
src
=
join
(
directory
,
filename
)
dest
=
to_dir
+
src
[
len
(
from_dir
):]
if
exists
(
dest
):
os
.
remove
(
dest
)
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
)
print
(
'copying %s to %s'
%
(
src
,
dest
))
shutil
.
copy2
(
src
,
dest
)
class
MyInstallLib
(
install_lib
.
install_lib
):
...
...
@@ -134,6 +139,35 @@ class MyInstallLib(install_lib.install_lib):
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 available
# 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"""
if
USE_SETUPTOOLS
:
...
...
@@ -142,23 +176,28 @@ def install(**kwargs):
# 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'
)
if
USE_SETUPTOOLS
and
install_requires
:
cmdclass
=
{
'install_lib'
:
MyInstallLib
}
if
USE_SETUPTOOLS
:
kwargs
[
'install_requires'
]
=
install_requires
kwargs
[
'dependency_links'
]
=
dependency_links
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
=
{
'install_lib'
:
MyInstallLib
},
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
,
classifiers
=
classifiers
,
**
kwargs
)
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
install
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment