python: Add a Python setup.py script.

This is not used by libguestfs right now, but it does allow you to
build a python "distribution" of libguestfs, like this:

  make -C python sdist

The distribution tarball will be in python/dist/

You can copy the distribution tarball somewhere, unpack it, and use
regular 'python setup.py' commands such as:

  python setup.py build
  python setup.py install [--prefix=...]
  python setup.py --name

In future we hope to be able to upload the distribution tarball to
PyPi, but licensing issues prevent this at present.
This commit is contained in:
Richard W.M. Jones
2014-03-29 16:07:21 +00:00
parent 768ab2e01d
commit fcbfc4775f
7 changed files with 158 additions and 0 deletions

22
python/MANIFEST.in Normal file
View File

@@ -0,0 +1,22 @@
# libguestfs Python bindings
# Copyright (C) 2009-2014 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
include guestfs-py.h
include config.h
include guestfs-internal-all.h
include guestfs-internal-frontend-cleanups.h
include guestfs-internal-frontend.h

View File

@@ -24,12 +24,16 @@ generator_built = \
EXTRA_DIST = \
$(generator_built) \
MANIFEST.in \
setup.py.in \
run-bindtests \
run-python-tests \
t/*.py
if HAVE_PYTHON
# Build the library.
pythondir = $(PYTHON_INSTALLDIR)
python_DATA = guestfs.py
@@ -55,6 +59,47 @@ libguestfsmod_la_LIBADD = \
libguestfsmod_la_LDFLAGS = -avoid-version -shared -module -shrext $(PYTHON_EXT_SUFFIX)
# Currently we don't use setup.py to build the Python library for
# distribution with libguestfs (although maybe we should in future).
# For now, these are some rules which use setup.py to make a source
# distribution for pip, and a few other bits.
sdist: setup.py stamp-extra-files
$(PYTHON) setup.py $@
setup-build: setup.py stamp-extra-files
$(PYTHON) setup.py build
setup-install: setup.py stamp-extra-files
$(PYTHON) setup.py install $(SETUP_INSTALL_ARGS)
# Python's crappy MANIFEST file cannot graft single files, so we have
# to hard-link any extra files we need into the local directory.
stamp-extra-files: \
config.h \
guestfs-internal-all.h \
guestfs-internal-frontend-cleanups.h \
guestfs-internal-frontend.h \
utils.c
touch $@
config.h:
ln ../config.h $@
guestfs-internal-all.h:
ln $(top_srcdir)/src/guestfs-internal-all.h $@
guestfs-internal-frontend-cleanups.h:
ln $(top_srcdir)/src/guestfs-internal-frontend-cleanups.h $@
guestfs-internal-frontend.h:
ln $(top_srcdir)/src/guestfs-internal-frontend.h $@
utils.c:
ln $(top_srcdir)/src/utils.c $@
# Tests.
TESTS_ENVIRONMENT = $(top_builddir)/run --test
TESTS = run-bindtests
@@ -64,3 +109,16 @@ TESTS += run-python-tests
endif ENABLE_APPLIANCE
endif HAVE_PYTHON
# Extra clean.
CLEANFILES = \
*~ examples/*~ t/*~ \
config.h \
guestfs-internal-all.h \
guestfs-internal-frontend-cleanups.h \
guestfs-internal-frontend.h \
stamp-extra-files \
utils.c
clean-local:
rm -rf build dist

4
python/README.txt Normal file
View File

@@ -0,0 +1,4 @@
libguestfs is a library and set of tools for accessing and modifying
virtual machine (VM) disk images.
This package contains the Python bindings for libguestfs.

62
python/setup.py.in Normal file
View File

@@ -0,0 +1,62 @@
# libguestfs Python bindings -*- python -*-
# @configure_input@
# Copyright (C) 2009-2014 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from distutils.core import setup, Extension
setup (name='guestfs',
version='@PACKAGE_VERSION@',
description='access and modify virtual machine disk images',
long_description="""
libguestfs is a library and set of tools for accessing and modifying
virtual machine (VM) disk images.
This package contains the Python bindings for libguestfs.
""",
author='The @PACKAGE_NAME@ team',
author_email='libguestfs@redhat.com',
url='http://libguestfs.org',
license='LGPLv2+',
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Console',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)',
'Operating System :: POSIX :: Linux',
'Programming Language :: C',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: Implementation :: CPython',
'Topic :: Utilities',
],
py_modules=['guestfs'],
ext_modules=[
Extension (
'libguestfsmod',
['guestfs-py-byhand.c', 'guestfs-py.c', 'utils.c'],
include_dirs=['.', '../src'],
libraries=['guestfs'],
define_macros=[('GUESTFS_PRIVATE', '1')],
)
]
)