pylibfdt: Move setup.py to the top level

Using 'pip' and several setup.py sub-commands currently don't work with
pylibfdt. The primary reason is Python packaging has opinions on the
directory structure of repositories and one of those appears to be the
inability to reference source files outside of setup.py's subtree. This
means a sdist cannot be created with all necessary source components
(i.e. libfdt headers). Moving setup.py to the top-level solves these
problems.

With this change. the following commands now work:

Creating packages for pypi.org:
./setup.py sdist bdist_wheel

Using pip for installs:
pip install .
pip install git+http://github.com/robherring/dtc.git@pypi-v2

Signed-off-by: Rob Herring <robh@kernel.org>
Message-Id: <20211111011135.2386773-5-robh@kernel.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Rob Herring 2021-11-10 19:11:35 -06:00 committed by David Gibson
parent 69a760747d
commit 23b56cb7e1
5 changed files with 24 additions and 11 deletions

4
.gitignore vendored
View file

@ -22,3 +22,7 @@ lex.yy.c
# cscope files
cscope.*
ncscope.*
.eggs/
build/
dist/

9
MANIFEST.in Normal file
View file

@ -0,0 +1,9 @@
# SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
global-exclude *
include setup.py
include pylibfdt/libfdt.i
include pylibfdt/*.py
include libfdt/libfdt.h
include libfdt/fdt.h
include libfdt/libfdt_env.h

View file

@ -9,8 +9,7 @@ PYLIBFDT_CLEANFILES = $(PYLIBFDT_CLEANFILES_L:%=$(PYLIBFDT_dir)/%)
PYLIBFDT_CLEANDIRS_L = build __pycache__
PYLIBFDT_CLEANDIRS = $(PYLIBFDT_CLEANDIRS_L:%=$(PYLIBFDT_dir)/%)
SETUP = $(PYLIBFDT_dir)/setup.py
SETUPFLAGS = --top-builddir .
SETUP = ./setup.py
ifndef V
SETUPFLAGS += --quiet

View file

@ -1,5 +1,5 @@
setup_py = find_program('setup.py')
setup_py = [setup_py.path(), '--quiet', '--top-builddir', meson.current_build_dir() / '..']
setup_py = find_program('../setup.py')
setup_py = [setup_py.path(), '--quiet', '--top-builddir', meson.project_build_root()]
custom_target(
'pylibfdt',

View file

@ -15,36 +15,37 @@ import os
import re
import sys
srcdir = os.path.dirname(__file__)
def get_top_builddir():
if '--top-builddir' in sys.argv:
index = sys.argv.index('--top-builddir')
sys.argv.pop(index)
return sys.argv.pop(index)
else:
return os.getcwd()
return srcdir
srcdir = os.path.dirname(os.path.abspath(sys.argv[0]))
top_builddir = get_top_builddir()
libfdt_module = Extension(
'_libfdt',
sources=[os.path.join(srcdir, 'libfdt.i')],
include_dirs=[os.path.join(srcdir, '../libfdt')],
sources=[os.path.join(srcdir, 'pylibfdt/libfdt.i')],
include_dirs=[os.path.join(srcdir, 'libfdt')],
libraries=['fdt'],
library_dirs=[os.path.join(top_builddir, 'libfdt')],
swig_opts=['-I' + os.path.join(srcdir, '../libfdt')],
swig_opts=['-I' + os.path.join(srcdir, 'libfdt')],
)
setup(
name='libfdt',
use_scm_version={
"root": os.path.join(srcdir, '..'),
"root": srcdir,
},
setup_requires = ['setuptools_scm'],
author='Simon Glass',
author_email='sjg@chromium.org',
description='Python binding for libfdt',
ext_modules=[libfdt_module],
package_dir={'': srcdir},
package_dir={'': os.path.join(srcdir, 'pylibfdt')},
py_modules=['libfdt'],
)