Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
489cb4f0
Commit
489cb4f0
authored
Jul 11, 2009
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert r73807, which removed code to be able to build _dbm with bsddb.
parent
97e5f281
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
186 additions
and
2 deletions
+186
-2
setup.py
setup.py
+186
-2
No files found.
setup.py
View file @
489cb4f0
...
@@ -363,7 +363,6 @@ class PyBuildExt(build_ext):
...
@@ -363,7 +363,6 @@ class PyBuildExt(build_ext):
inc_dirs += os.getenv('
C_INCLUDE_PATH
', '').split(os.pathsep)
inc_dirs += os.getenv('
C_INCLUDE_PATH
', '').split(os.pathsep)
# OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
# OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb)
# XXX db is not needed anymore, should this be removed?
if platform in ['
osf1
', '
unixware7
', '
openunix8
']:
if platform in ['
osf1
', '
unixware7
', '
openunix8
']:
lib_dirs += ['
/
usr
/
ccs
/
lib
']
lib_dirs += ['
/
usr
/
ccs
/
lib
']
...
@@ -626,6 +625,179 @@ class PyBuildExt(build_ext):
...
@@ -626,6 +625,179 @@ class PyBuildExt(build_ext):
exts
.
append
(
Extension
(
'_md5'
,
[
'md5module.c'
])
)
exts
.
append
(
Extension
(
'_md5'
,
[
'md5module.c'
])
)
exts
.
append
(
Extension
(
'_sha1'
,
[
'sha1module.c'
])
)
exts
.
append
(
Extension
(
'_sha1'
,
[
'sha1module.c'
])
)
# Modules that provide persistent dictionary-like semantics. You will
# probably want to arrange for at least one of them to be available on
# your machine, though none are defined by default because of library
# dependencies. The Python module dbm/__init__.py provides an
# implementation independent wrapper for these; dbm/dumb.py provides
# similar functionality (but slower of course) implemented in Python.
# Sleepycat^WOracle Berkeley DB interface.
# http://www.oracle.com/database/berkeley-db/db/index.html
#
# This requires the Sleepycat^WOracle DB code. The supported versions
# are set below. Visit the URL above to download
# a release. Most open source OSes come with one or more
# versions of BerkeleyDB already installed.
max_db_ver
=
(
4
,
7
)
min_db_ver
=
(
3
,
3
)
db_setup_debug
=
False
# verbose debug prints from this script?
def
allow_db_ver
(
db_ver
):
"""Returns a boolean if the given BerkeleyDB version is acceptable.
Args:
db_ver: A tuple of the version to verify.
"""
if
not
(
min_db_ver
<=
db_ver
<=
max_db_ver
):
return
False
return
True
def
gen_db_minor_ver_nums
(
major
):
if
major
==
4
:
for
x
in
range
(
max_db_ver
[
1
]
+
1
):
if
allow_db_ver
((
4
,
x
)):
yield
x
elif
major
==
3
:
for
x
in
(
3
,):
if
allow_db_ver
((
3
,
x
)):
yield
x
else
:
raise
ValueError
(
"unknown major BerkeleyDB version"
,
major
)
# construct a list of paths to look for the header file in on
# top of the normal inc_dirs.
db_inc_paths
=
[
'/usr/include/db4'
,
'/usr/local/include/db4'
,
'/opt/sfw/include/db4'
,
'/usr/include/db3'
,
'/usr/local/include/db3'
,
'/opt/sfw/include/db3'
,
# Fink defaults (http://fink.sourceforge.net/)
'/sw/include/db4'
,
'/sw/include/db3'
,
]
# 4.x minor number specific paths
for
x
in
gen_db_minor_ver_nums
(
4
):
db_inc_paths
.
append
(
'/usr/include/db4%d'
%
x
)
db_inc_paths
.
append
(
'/usr/include/db4.%d'
%
x
)
db_inc_paths
.
append
(
'/usr/local/BerkeleyDB.4.%d/include'
%
x
)
db_inc_paths
.
append
(
'/usr/local/include/db4%d'
%
x
)
db_inc_paths
.
append
(
'/pkg/db-4.%d/include'
%
x
)
db_inc_paths
.
append
(
'/opt/db-4.%d/include'
%
x
)
# MacPorts default (http://www.macports.org/)
db_inc_paths
.
append
(
'/opt/local/include/db4%d'
%
x
)
# 3.x minor number specific paths
for
x
in
gen_db_minor_ver_nums
(
3
):
db_inc_paths
.
append
(
'/usr/include/db3%d'
%
x
)
db_inc_paths
.
append
(
'/usr/local/BerkeleyDB.3.%d/include'
%
x
)
db_inc_paths
.
append
(
'/usr/local/include/db3%d'
%
x
)
db_inc_paths
.
append
(
'/pkg/db-3.%d/include'
%
x
)
db_inc_paths
.
append
(
'/opt/db-3.%d/include'
%
x
)
# Add some common subdirectories for Sleepycat DB to the list,
# based on the standard include directories. This way DB3/4 gets
# picked up when it is installed in a non-standard prefix and
# the user has added that prefix into inc_dirs.
std_variants
=
[]
for
dn
in
inc_dirs
:
std_variants
.
append
(
os
.
path
.
join
(
dn
,
'db3'
))
std_variants
.
append
(
os
.
path
.
join
(
dn
,
'db4'
))
for
x
in
gen_db_minor_ver_nums
(
4
):
std_variants
.
append
(
os
.
path
.
join
(
dn
,
"db4%d"
%
x
))
std_variants
.
append
(
os
.
path
.
join
(
dn
,
"db4.%d"
%
x
))
for
x
in
gen_db_minor_ver_nums
(
3
):
std_variants
.
append
(
os
.
path
.
join
(
dn
,
"db3%d"
%
x
))
std_variants
.
append
(
os
.
path
.
join
(
dn
,
"db3.%d"
%
x
))
db_inc_paths
=
std_variants
+
db_inc_paths
db_inc_paths
=
[
p
for
p
in
db_inc_paths
if
os
.
path
.
exists
(
p
)]
db_ver_inc_map
=
{}
class
db_found
(
Exception
):
pass
try
:
# See whether there is a Sleepycat header in the standard
# search path.
for
d
in
inc_dirs
+
db_inc_paths
:
f
=
os
.
path
.
join
(
d
,
"db.h"
)
if
db_setup_debug
:
print
(
"db: looking for db.h in"
,
f
)
if
os
.
path
.
exists
(
f
):
f
=
open
(
f
).
read
()
m
=
re
.
search
(
r"#define\
WDB_VERSION_MAJOR
\W(\
d+)
", f)
if m:
db_major = int(m.group(1))
m = re.search(r"
#define\WDB_VERSION_MINOR\W(\d+)", f)
db_minor
=
int
(
m
.
group
(
1
))
db_ver
=
(
db_major
,
db_minor
)
# Avoid 4.6 prior to 4.6.21 due to a BerkeleyDB bug
if
db_ver
==
(
4
,
6
):
m
=
re
.
search
(
r"#define\
WDB_VERSION_PATCH
\W(\
d+)
", f)
db_patch = int(m.group(1))
if db_patch < 21:
print("
db
.
h
:
", db_ver, "
patch
", db_patch,
"
being
ignored
(
4.6
.
x
must
be
>=
4.6
.
21
)
")
continue
if ( (db_ver not in db_ver_inc_map) and
allow_db_ver(db_ver) ):
# save the include directory with the db.h version
# (first occurrence only)
db_ver_inc_map[db_ver] = d
if db_setup_debug:
print("
db
.
h
:
found
", db_ver, "
in
", d)
else:
# we already found a header for this library version
if db_setup_debug: print("
db
.
h
:
ignoring
", d)
else:
# ignore this header, it didn't contain a version number
if db_setup_debug:
print("
db
.
h
:
no
version
number
version
in
", d)
db_found_vers = list(db_ver_inc_map.keys())
db_found_vers.sort()
while db_found_vers:
db_ver = db_found_vers.pop()
db_incdir = db_ver_inc_map[db_ver]
# check lib directories parallel to the location of the header
db_dirs_to_check = [
db_incdir.replace("
include
", 'lib64'),
db_incdir.replace("
include
", 'lib'),
]
db_dirs_to_check = list(filter(os.path.isdir, db_dirs_to_check))
# Look for a version specific db-X.Y before an ambiguoius dbX
# XXX should we -ever- look for a dbX name? Do any
# systems really not name their library by version and
# symlink to more general names?
for dblib in (('db-%d.%d' % db_ver),
('db%d%d' % db_ver),
('db%d' % db_ver[0])):
dblib_file = self.compiler.find_library_file(
db_dirs_to_check + lib_dirs, dblib )
if dblib_file:
dblib_dir = [ os.path.abspath(os.path.dirname(dblib_file)) ]
raise db_found
else:
if db_setup_debug: print("
db
lib
:
", dblib, "
not
found
")
except db_found:
if db_setup_debug:
print("
bsddb
using
BerkeleyDB
lib
:
", db_ver, dblib)
print("
bsddb
lib
dir
:
", dblib_dir, "
inc
dir
:
", db_incdir)
db_incs = [db_incdir]
dblibs = [dblib]
else:
if db_setup_debug: print("
db
:
no
appropriate
library
found
")
db_incs = None
dblibs = []
dblib_dir = None
# The sqlite interface
# The sqlite interface
sqlite_setup_debug = False # verbose debug prints from this script?
sqlite_setup_debug = False # verbose debug prints from this script?
...
@@ -730,7 +902,7 @@ class PyBuildExt(build_ext):
...
@@ -730,7 +902,7 @@ class PyBuildExt(build_ext):
if dbm_args:
if dbm_args:
dbm_order = dbm_args[-1].split(":")
dbm_order = dbm_args[-1].split(":")
else:
else:
dbm_order
=
"ndbm:gdbm"
.
split
(
":"
)
dbm_order = "ndbm:gdbm
:bdb
".split(":")
dbmext = None
dbmext = None
for cand in dbm_order:
for cand in dbm_order:
if cand == "ndbm":
if cand == "ndbm":
...
@@ -773,6 +945,18 @@ class PyBuildExt(build_ext):
...
@@ -773,6 +945,18 @@ class PyBuildExt(build_ext):
],
],
libraries
=
gdbm_libs
)
libraries
=
gdbm_libs
)
break
break
elif
cand
==
"bdb"
:
if
db_incs
is
not
None
:
print
(
"building dbm using bdb"
)
dbmext
=
Extension
(
'_dbm'
,
[
'_dbmmodule.c'
],
library_dirs
=
dblib_dir
,
runtime_library_dirs
=
dblib_dir
,
include_dirs
=
db_incs
,
define_macros
=
[
(
'HAVE_BERKDB_H'
,
None
),
(
'DB_DBM_HSEARCH'
,
None
),
],
libraries
=
dblibs
)
break
break
if
dbmext
is
not
None
:
if
dbmext
is
not
None
:
exts
.
append
(
dbmext
)
exts
.
append
(
dbmext
)
...
...
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