diff --git a/.gitignore b/.gitignore index 0231a0468..4351e0902 100644 --- a/.gitignore +++ b/.gitignore @@ -377,13 +377,23 @@ Makefile.in /podwrapper.pl /po/*.gmo /python/bindtests.py +/python/build +/python/config.h +/python/dist /python/examples/guestfs-python.3 /python/examples/stamp-guestfs-python.pod /python/guestfs.py /python/guestfs-py.c /python/guestfs.pyc /python/guestfs.pyo +/python/guestfs-internal-all.h +/python/guestfs-internal-frontend-cleanups.h +/python/guestfs-internal-frontend.h +/python/MANIFEST /python/__pycache__ +/python/setup.py +/python/stamp-extra-files +/python/utils.c /qemu-wrapper.sh /rescue/stamp-virt-rescue.pod /rescue/virt-rescue diff --git a/Makefile.am b/Makefile.am index e9b3b430a..479aef010 100644 --- a/Makefile.am +++ b/Makefile.am @@ -316,6 +316,7 @@ all-local: find $(DIST_SUBDIRS) -name '*.c' -o -name '*.pl' -o -name '*.pm' | \ grep -v -E '^(examples|gnulib|perl/(blib|examples)|po-docs|tests)/' | \ grep -v -E '/((guestfs|rc)_protocol\.c)$$' | \ + grep -v -E '^python/utils.c$$' | \ LC_ALL=C sort > po/POTFILES cd $(srcdir); \ find builder mllib resize sparsify sysprep -name '*.ml' | \ diff --git a/configure.ac b/configure.ac index 7e1c06812..da661c380 100644 --- a/configure.ac +++ b/configure.ac @@ -1661,6 +1661,7 @@ AC_CONFIG_FILES([Makefile po/Makefile python/Makefile python/examples/Makefile + python/setup.py rescue/Makefile resize/Makefile ruby/Makefile diff --git a/python/MANIFEST.in b/python/MANIFEST.in new file mode 100644 index 000000000..afbc5b294 --- /dev/null +++ b/python/MANIFEST.in @@ -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 diff --git a/python/Makefile.am b/python/Makefile.am index 64907bf5a..025007bfb 100644 --- a/python/Makefile.am +++ b/python/Makefile.am @@ -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 diff --git a/python/README.txt b/python/README.txt new file mode 100644 index 000000000..e99087574 --- /dev/null +++ b/python/README.txt @@ -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. diff --git a/python/setup.py.in b/python/setup.py.in new file mode 100644 index 000000000..65cd1abf3 --- /dev/null +++ b/python/setup.py.in @@ -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')], + ) + ] + )