Browse Source

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>
main
Rob Herring 3 years ago committed by David Gibson
parent
commit
23b56cb7e1
  1. 4
      .gitignore
  2. 9
      MANIFEST.in
  3. 3
      pylibfdt/Makefile.pylibfdt
  4. 4
      pylibfdt/meson.build
  5. 15
      setup.py

4
.gitignore vendored

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

.eggs/
build/
dist/

9
MANIFEST.in

@ -0,0 +1,9 @@ @@ -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

3
pylibfdt/Makefile.pylibfdt

@ -9,8 +9,7 @@ PYLIBFDT_CLEANFILES = $(PYLIBFDT_CLEANFILES_L:%=$(PYLIBFDT_dir)/%) @@ -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

4
pylibfdt/meson.build

@ -1,5 +1,5 @@ @@ -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',

15
pylibfdt/setup.py → setup.py

@ -15,36 +15,37 @@ import os @@ -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'],
)
Loading…
Cancel
Save