Compare commits
9 Commits
F-10-split
...
libvirt-0_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25ea2f59bd | ||
|
|
c80b7f0d5a | ||
|
|
958f1c3dff | ||
|
|
4a8ca1017f | ||
|
|
1e122ee5dc | ||
|
|
6a6307bcdc | ||
|
|
6e8332946a | ||
|
|
982683e56f | ||
|
|
7244d1a339 |
@@ -4,3 +4,6 @@ i686
|
||||
x86_64
|
||||
libvirt-*.tar.gz
|
||||
libvirt-0.4.6.tar.gz
|
||||
libvirt-0.5.0.tar.gz
|
||||
libvirt-0.5.1.tar.gz
|
||||
libvirt-0.6.0.tar.gz
|
||||
|
||||
70
libvirt-0.6.0-rpccall.patch
Normal file
70
libvirt-0.6.0-rpccall.patch
Normal file
@@ -0,0 +1,70 @@
|
||||
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
|
||||
--- libvirt-0.6.0.orig/qemud/event.c 2009-02-06 19:30:58.000000000 +0000
|
||||
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:30:00.000000000 +0000
|
||||
@@ -657,6 +657,8 @@ virPollEventToEventHandleType(int events
|
||||
ret |= VIR_EVENT_HANDLE_WRITABLE;
|
||||
if(events & POLLERR)
|
||||
ret |= VIR_EVENT_HANDLE_ERROR;
|
||||
+ if(events & POLLNVAL) /* Treat NVAL as error, since libvirt doesn't distinguish */
|
||||
+ ret |= VIR_EVENT_HANDLE_ERROR;
|
||||
if(events & POLLHUP)
|
||||
ret |= VIR_EVENT_HANDLE_HANGUP;
|
||||
return ret;
|
||||
diff -rup libvirt-0.6.0.orig/src/domain_conf.c libvirt-0.6.0.new/src/domain_conf.c
|
||||
--- libvirt-0.6.0.orig/src/domain_conf.c 2009-01-31 09:04:17.000000000 +0000
|
||||
+++ libvirt-0.6.0.new/src/domain_conf.c 2009-02-06 19:30:00.000000000 +0000
|
||||
@@ -504,6 +504,7 @@ virDomainObjPtr virDomainAssignDef(virCo
|
||||
domain->state = VIR_DOMAIN_SHUTOFF;
|
||||
domain->def = def;
|
||||
domain->monitor_watch = -1;
|
||||
+ domain->monitor = -1;
|
||||
|
||||
if (VIR_REALLOC_N(doms->objs, doms->count + 1) < 0) {
|
||||
virReportOOMError(conn);
|
||||
diff -rup libvirt-0.6.0.orig/src/remote_internal.c libvirt-0.6.0.new/src/remote_internal.c
|
||||
--- libvirt-0.6.0.orig/src/remote_internal.c 2009-01-31 09:04:18.000000000 +0000
|
||||
+++ libvirt-0.6.0.new/src/remote_internal.c 2009-02-06 19:30:00.000000000 +0000
|
||||
@@ -6198,17 +6198,17 @@ processCalls(virConnectPtr conn,
|
||||
continue;
|
||||
virReportSystemError(in_open ? NULL : conn, errno,
|
||||
"%s", _("poll on socket failed"));
|
||||
- return -1;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
if (fds[0].revents & POLLOUT) {
|
||||
if (processCallSend(conn, priv, in_open) < 0)
|
||||
- return -1;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
if (fds[0].revents & POLLIN) {
|
||||
if (processCallRecv(conn, priv, in_open) < 0)
|
||||
- return -1;
|
||||
+ goto error;
|
||||
}
|
||||
|
||||
/* Iterate through waiting threads and if
|
||||
@@ -6259,9 +6259,21 @@ processCalls(virConnectPtr conn,
|
||||
if (fds[0].revents & (POLLHUP | POLLERR)) {
|
||||
errorf(in_open ? NULL : conn, VIR_ERR_INTERNAL_ERROR,
|
||||
"%s", _("received hangup / error event on socket"));
|
||||
- return -1;
|
||||
+ goto error;
|
||||
}
|
||||
}
|
||||
+
|
||||
+
|
||||
+error:
|
||||
+ priv->waitDispatch = thiscall->next;
|
||||
+ DEBUG("Giving up the buck due to I/O error %d %p %p", thiscall->proc_nr, thiscall, priv->waitDispatch);
|
||||
+ /* See if someone else is still waiting
|
||||
+ * and if so, then pass the buck ! */
|
||||
+ if (priv->waitDispatch) {
|
||||
+ DEBUG("Passing the buck to %d %p", priv->waitDispatch->proc_nr, priv->waitDispatch);
|
||||
+ virCondSignal(&priv->waitDispatch->cond);
|
||||
+ }
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
124
libvirt-0.6.0-timeout.patch
Normal file
124
libvirt-0.6.0-timeout.patch
Normal file
@@ -0,0 +1,124 @@
|
||||
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
|
||||
--- libvirt-0.6.0.orig/qemud/event.c 2008-12-22 13:02:54.000000000 +0000
|
||||
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:29:28.000000000 +0000
|
||||
@@ -68,6 +68,7 @@ struct virEventTimeout {
|
||||
/* State for the main event loop */
|
||||
struct virEventLoop {
|
||||
pthread_mutex_t lock;
|
||||
+ int running;
|
||||
pthread_t leader;
|
||||
int wakeupfd[2];
|
||||
int handlesCount;
|
||||
@@ -521,6 +522,7 @@ int virEventRunOnce(void) {
|
||||
int ret, timeout, nfds;
|
||||
|
||||
virEventLock();
|
||||
+ eventLoop.running = 1;
|
||||
eventLoop.leader = pthread_self();
|
||||
if ((nfds = virEventMakePollFDs(&fds)) < 0) {
|
||||
virEventUnlock();
|
||||
@@ -572,7 +574,7 @@ int virEventRunOnce(void) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
- eventLoop.leader = 0;
|
||||
+ eventLoop.running = 0;
|
||||
virEventUnlock();
|
||||
return 0;
|
||||
}
|
||||
@@ -611,7 +613,9 @@ int virEventInit(void)
|
||||
static int virEventInterruptLocked(void)
|
||||
{
|
||||
char c = '\0';
|
||||
- if (pthread_self() == eventLoop.leader)
|
||||
+
|
||||
+ if (!eventLoop.running ||
|
||||
+ pthread_self() == eventLoop.leader)
|
||||
return 0;
|
||||
|
||||
if (safewrite(eventLoop.wakeupfd[1], &c, sizeof(c)) != sizeof(c))
|
||||
diff -rup libvirt-0.6.0.orig/qemud/qemud.c libvirt-0.6.0.new/qemud/qemud.c
|
||||
--- libvirt-0.6.0.orig/qemud/qemud.c 2009-01-31 09:04:17.000000000 +0000
|
||||
+++ libvirt-0.6.0.new/qemud/qemud.c 2009-02-06 19:29:28.000000000 +0000
|
||||
@@ -2013,11 +2013,15 @@ static int qemudOneLoop(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void qemudInactiveTimer(int timer ATTRIBUTE_UNUSED, void *data) {
|
||||
+static void qemudInactiveTimer(int timerid, void *data) {
|
||||
struct qemud_server *server = (struct qemud_server *)data;
|
||||
- DEBUG0("Got inactive timer expiry");
|
||||
- if (!virStateActive()) {
|
||||
- DEBUG0("No state active, shutting down");
|
||||
+
|
||||
+ if (virStateActive() ||
|
||||
+ server->clients) {
|
||||
+ DEBUG0("Timer expired but still active, not shutting down");
|
||||
+ virEventUpdateTimeoutImpl(timerid, -1);
|
||||
+ } else {
|
||||
+ DEBUG0("Timer expired and inactive, shutting down");
|
||||
server->shutdown = 1;
|
||||
}
|
||||
}
|
||||
@@ -2048,9 +2052,18 @@ static void qemudFreeClient(struct qemud
|
||||
static int qemudRunLoop(struct qemud_server *server) {
|
||||
int timerid = -1;
|
||||
int ret = -1, i;
|
||||
+ int timerActive = 0;
|
||||
|
||||
virMutexLock(&server->lock);
|
||||
|
||||
+ if (timeout > 0 &&
|
||||
+ (timerid = virEventAddTimeoutImpl(-1,
|
||||
+ qemudInactiveTimer,
|
||||
+ server, NULL)) < 0) {
|
||||
+ VIR_ERROR0(_("Failed to register shutdown timeout"));
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
if (min_workers > max_workers)
|
||||
max_workers = min_workers;
|
||||
|
||||
@@ -2071,11 +2084,21 @@ static int qemudRunLoop(struct qemud_ser
|
||||
* if any drivers have active state, if not
|
||||
* shutdown after timeout seconds
|
||||
*/
|
||||
- if (timeout > 0 && !virStateActive() && !server->clients) {
|
||||
- timerid = virEventAddTimeoutImpl(timeout*1000,
|
||||
- qemudInactiveTimer,
|
||||
- server, NULL);
|
||||
- DEBUG("Scheduling shutdown timer %d", timerid);
|
||||
+ if (timeout > 0) {
|
||||
+ if (timerActive) {
|
||||
+ if (server->clients) {
|
||||
+ DEBUG("Deactivating shutdown timer %d", timerid);
|
||||
+ virEventUpdateTimeoutImpl(timerid, -1);
|
||||
+ timerActive = 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (!virStateActive() &&
|
||||
+ !server->clients) {
|
||||
+ DEBUG("Activating shutdown timer %d", timerid);
|
||||
+ virEventUpdateTimeoutImpl(timerid, timeout * 1000);
|
||||
+ timerActive = 1;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
virMutexUnlock(&server->lock);
|
||||
@@ -2129,15 +2152,6 @@ static int qemudRunLoop(struct qemud_ser
|
||||
}
|
||||
}
|
||||
|
||||
- /* Unregister any timeout that's active, since we
|
||||
- * just had an event processed
|
||||
- */
|
||||
- if (timerid != -1) {
|
||||
- DEBUG("Removing shutdown timer %d", timerid);
|
||||
- virEventRemoveTimeoutImpl(timerid);
|
||||
- timerid = -1;
|
||||
- }
|
||||
-
|
||||
if (server->shutdown) {
|
||||
ret = 0;
|
||||
break;
|
||||
115
libvirt.spec
115
libvirt.spec
@@ -10,6 +10,8 @@
|
||||
%define with_polkit 0%{!?_without_polkit:0}
|
||||
%define with_python 0%{!?_without_python:1}
|
||||
%define with_libvirtd 0%{!?_without_libvirtd:1}
|
||||
%define with_uml 0%{!?_without_uml:1}
|
||||
%define with_network 0%{!?_without_network:1}
|
||||
|
||||
# Xen is available only on i386 x86_64 ia64
|
||||
%ifnarch i386 i686 x86_64 ia64
|
||||
@@ -20,7 +22,7 @@
|
||||
%define with_xen_proxy 0
|
||||
%endif
|
||||
|
||||
%if "%{fedora}"
|
||||
%if 0%{?fedora}
|
||||
%ifarch ppc64
|
||||
%define with_qemu 0
|
||||
%endif
|
||||
@@ -31,14 +33,26 @@
|
||||
%define with_xen_proxy 0
|
||||
%endif
|
||||
|
||||
#
|
||||
# If building on RHEL switch on the specific support
|
||||
# for the specific Xen version
|
||||
#
|
||||
%if 0%{?fedora}
|
||||
%define with_rhel5 0
|
||||
%else
|
||||
%define with_rhel5 1
|
||||
%endif
|
||||
|
||||
|
||||
Summary: Library providing a simple API virtualization
|
||||
Name: libvirt
|
||||
Version: 0.4.6
|
||||
Release: 3%{?dist}%{?extra_release}
|
||||
Version: 0.6.0
|
||||
Release: 2%{?dist}%{?extra_release}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
Source: libvirt-%{version}.tar.gz
|
||||
Patch0: python_make.patch
|
||||
Patch1: %{name}-%{version}-timeout.patch
|
||||
Patch2: %{name}-%{version}-rpccall.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
URL: http://libvirt.org/
|
||||
BuildRequires: python python-devel
|
||||
@@ -48,6 +62,8 @@ Requires: ncurses
|
||||
Requires: dnsmasq
|
||||
Requires: bridge-utils
|
||||
Requires: iptables
|
||||
# needed for device enumeration
|
||||
Requires: hal
|
||||
# So remote clients can access libvirt over SSH tunnel
|
||||
# (client invokes 'nc' against the UNIX socket on the server)
|
||||
Requires: nc
|
||||
@@ -89,6 +105,7 @@ BuildRequires: readline-devel
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: gettext
|
||||
BuildRequires: gnutls-devel
|
||||
BuildRequires: hal-devel
|
||||
%if %{with_avahi}
|
||||
BuildRequires: avahi-devel
|
||||
%endif
|
||||
@@ -121,6 +138,8 @@ BuildRequires: lvm2
|
||||
BuildRequires: iscsi-initiator-utils
|
||||
# For disk driver
|
||||
BuildRequires: parted-devel
|
||||
# For QEMU/LXC numa info
|
||||
BuildRequires: numactl-devel
|
||||
Obsoletes: libvir
|
||||
|
||||
# Fedora build root suckage
|
||||
@@ -160,7 +179,8 @@ of recent versions of Linux (and other OSes).
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p0
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
|
||||
%build
|
||||
%if ! %{with_xen}
|
||||
@@ -199,6 +219,18 @@ of recent versions of Linux (and other OSes).
|
||||
%define _without_libvirtd --without-libvirtd
|
||||
%endif
|
||||
|
||||
%if ! %{with_uml}
|
||||
%define _without_uml --without-uml
|
||||
%endif
|
||||
|
||||
%if %{with_rhel5}
|
||||
%define _with_rhel5_api --with-rhel5-api
|
||||
%endif
|
||||
|
||||
%if ! %{with_network}
|
||||
%define _without_network --without-network
|
||||
%endif
|
||||
|
||||
%configure %{?_without_xen} \
|
||||
%{?_without_qemu} \
|
||||
%{?_without_openvz} \
|
||||
@@ -208,6 +240,9 @@ of recent versions of Linux (and other OSes).
|
||||
%{?_without_polkit} \
|
||||
%{?_without_python} \
|
||||
%{?_without_libvirtd} \
|
||||
%{?_without_uml} \
|
||||
%{?_without_network} \
|
||||
%{?_with_rhel5_api} \
|
||||
--with-init-script=redhat \
|
||||
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
|
||||
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
|
||||
@@ -268,7 +303,7 @@ rm -fr %{buildroot}
|
||||
# or on the first upgrade from a non-network aware libvirt only.
|
||||
# We check this by looking to see if the daemon is already installed
|
||||
/sbin/chkconfig --list libvirtd 1>/dev/null 2>&1
|
||||
if [ $? != 0 ]
|
||||
if [ $? != 0 -a ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ]
|
||||
then
|
||||
UUID=`/usr/bin/uuidgen`
|
||||
sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
|
||||
@@ -311,6 +346,7 @@ fi
|
||||
%{_sysconfdir}/rc.d/init.d/libvirtd
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
|
||||
%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
|
||||
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd
|
||||
%endif
|
||||
|
||||
%if %{with_qemu}
|
||||
@@ -327,11 +363,42 @@ fi
|
||||
%{_datadir}/libvirt/networks/default.xml
|
||||
%endif
|
||||
|
||||
%dir %{_datadir}/libvirt/
|
||||
%dir %{_datadir}/libvirt/schemas/
|
||||
|
||||
%{_datadir}/libvirt/schemas/domain.rng
|
||||
%{_datadir}/libvirt/schemas/network.rng
|
||||
%{_datadir}/libvirt/schemas/storagepool.rng
|
||||
%{_datadir}/libvirt/schemas/storagevol.rng
|
||||
%{_datadir}/libvirt/schemas/nodedev.rng
|
||||
%{_datadir}/libvirt/schemas/capability.rng
|
||||
|
||||
%dir %{_localstatedir}/run/libvirt/
|
||||
|
||||
%dir %{_localstatedir}/lib/libvirt/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/images/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/boot/
|
||||
|
||||
%if %{with_qemu}
|
||||
%dir %{_localstatedir}/run/libvirt/qemu/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/qemu/
|
||||
%endif
|
||||
%if %{with_lxc}
|
||||
%dir %{_localstatedir}/run/libvirt/lxc/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/
|
||||
%endif
|
||||
%if %{with_uml}
|
||||
%dir %{_localstatedir}/run/libvirt/uml/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/
|
||||
%endif
|
||||
%if %{with_network}
|
||||
%dir %{_localstatedir}/run/libvirt/network/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/filter/
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/nat/
|
||||
%endif
|
||||
|
||||
%if %{with_qemu}
|
||||
%{_datadir}/augeas/lenses/libvirtd_qemu.aug
|
||||
%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
|
||||
@@ -346,6 +413,7 @@ fi
|
||||
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
|
||||
%endif
|
||||
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/
|
||||
%if %{with_qemu}
|
||||
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
|
||||
%endif
|
||||
@@ -363,7 +431,6 @@ fi
|
||||
%attr(0755, root, root) %{_sbindir}/libvirtd
|
||||
%endif
|
||||
|
||||
%doc docs/*.rng
|
||||
%doc docs/*.xml
|
||||
|
||||
%files devel
|
||||
@@ -396,6 +463,40 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Feb 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-2.fc11
|
||||
- Fix libvirtd --timeout usage
|
||||
- Fix RPC call problems and QEMU startup handling (rhbz #484414)
|
||||
- Fix unowned directories (rhbz #483442)
|
||||
|
||||
* Sat Jan 31 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-1.fc11
|
||||
- upstream release 0.6.0
|
||||
- thread safety of API
|
||||
- allow QEmu/KVM domains to survive daemon restart
|
||||
- extended logging capabilities
|
||||
- support copy on write storage volumes for QEmu/KVM
|
||||
- support of storage cache control options for QEmu/KVM
|
||||
- a lot of bug fixes
|
||||
|
||||
* Wed Dec 17 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-2.fc11
|
||||
- fix missing read-only access checks, fixes CVE-2008-5086
|
||||
|
||||
* Fri Dec 5 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-1.fc11
|
||||
- upstream release 0.5.1
|
||||
- mostly bugfixes e.g #473071
|
||||
- some driver improvments
|
||||
|
||||
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.5.0-2
|
||||
- Rebuild for Python 2.6
|
||||
|
||||
* Wed Nov 26 2008 Daniel Veillard <veillard@redhat.com> - 0.5.0-1.fc11
|
||||
- upstream release 0.5.0
|
||||
- domain lifecycle event support
|
||||
- node device enumeration
|
||||
- KVM/QEmu migration support
|
||||
- improved LXC support
|
||||
- SDL display configuration
|
||||
- User Mode Linux driver (Daniel Berrange)
|
||||
|
||||
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-3.fc10
|
||||
- apply the python makefile patch for #463733
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
Index: python/Makefile.am
|
||||
===================================================================
|
||||
RCS file: /data/cvs/libxen/python/Makefile.am,v
|
||||
retrieving revision 1.13
|
||||
diff -u -p -r1.13 Makefile.am
|
||||
--- python/Makefile.am 5 Feb 2008 19:27:37 -0000 1.13
|
||||
+++ python/Makefile.am 24 Sep 2008 13:21:06 -0000
|
||||
@@ -50,7 +50,7 @@ GENERATED= libvirt-export.c \
|
||||
$(GENERATED): $(srcdir)/$(GENERATE) $(API_DESC)
|
||||
$(PYTHON) $(srcdir)/$(GENERATE) $(srcdir)
|
||||
|
||||
-libvirt.py: $(srcdir)/libvir.py libvirtclass.py
|
||||
+libvirt.py: $(srcdir)/libvir.py $(GENERATED)
|
||||
cat $(srcdir)/libvir.py libvirtclass.py > $@-t
|
||||
mv $@-t $@
|
||||
|
||||
*** python/Makefile.in.orig 2008-09-24 15:19:20.000000000 +0200
|
||||
--- python/Makefile.in 2008-09-24 15:20:07.000000000 +0200
|
||||
*************** uninstall-am: uninstall-local uninstall-
|
||||
*** 1027,1033 ****
|
||||
@WITH_PYTHON_TRUE@$(GENERATED): $(srcdir)/$(GENERATE) $(API_DESC)
|
||||
@WITH_PYTHON_TRUE@ $(PYTHON) $(srcdir)/$(GENERATE) $(srcdir)
|
||||
|
||||
! @WITH_PYTHON_TRUE@libvirt.py: $(srcdir)/libvir.py libvirtclass.py
|
||||
@WITH_PYTHON_TRUE@ cat $(srcdir)/libvir.py libvirtclass.py > $@-t
|
||||
@WITH_PYTHON_TRUE@ mv $@-t $@
|
||||
|
||||
--- 1027,1033 ----
|
||||
@WITH_PYTHON_TRUE@$(GENERATED): $(srcdir)/$(GENERATE) $(API_DESC)
|
||||
@WITH_PYTHON_TRUE@ $(PYTHON) $(srcdir)/$(GENERATE) $(srcdir)
|
||||
|
||||
! @WITH_PYTHON_TRUE@libvirt.py: $(srcdir)/libvir.py $(GENERATED)
|
||||
@WITH_PYTHON_TRUE@ cat $(srcdir)/libvir.py libvirtclass.py > $@-t
|
||||
@WITH_PYTHON_TRUE@ mv $@-t $@
|
||||
|
||||
Reference in New Issue
Block a user