# ------------------------------------------------------------------
|
# Copyright (c) 2021 PyInstaller Development Team.
|
#
|
# This file is distributed under the terms of the GNU General Public
|
# License (version 2.0 or later).
|
#
|
# The full license is available in LICENSE, distributed with
|
# this software.
|
#
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
# ------------------------------------------------------------------
|
|
import pathlib
|
|
from PyInstaller import compat
|
from PyInstaller.utils.hooks import collect_dynamic_libs, get_installer, get_package_paths
|
|
|
# Query the installer of the `rtree` package; in PyInstaller prior to 6.0, this might raise an exception, whereas in
|
# later versions, None is returned.
|
try:
|
package_installer = get_installer('rtree')
|
except Exception:
|
package_installer = None
|
|
if package_installer == 'conda':
|
from PyInstaller.utils.hooks import conda
|
|
# In Anaconda-packaged `rtree`, `libspatialindex` and `libspatialindex_c` shared libs are packaged in a separate
|
# `libspatialindex` package. Collect the libraries into `rtree/lib` sub-directory to simulate PyPI wheel layout.
|
binaries = conda.collect_dynamic_libs('libspatialindex', dest='rtree/lib', dependencies=False)
|
else:
|
# pip-installed package. The shared libs are usually placed in `rtree/lib` directory.
|
binaries = collect_dynamic_libs('rtree')
|
|
# With rtree >= 1.1.0, Linux PyPI wheels place the shared library in a `Rtree.libs` top-level directory.
|
# In rtree 1.4.0, the directory was renamed to `rtree.libs`
|
if compat.is_linux:
|
_, rtree_dir = get_package_paths('rtree')
|
for candidate_dir_name in ('rtree.libs', 'Rtree.libs'):
|
rtree_libs_dir = pathlib.Path(rtree_dir).parent / candidate_dir_name
|
if not rtree_libs_dir.is_dir():
|
continue
|
binaries += [
|
(str(lib_file), candidate_dir_name) for lib_file in rtree_libs_dir.glob("libspatialindex*.so*")
|
]
|