[libvirt] [PATCH] build: add $(prefix) to SYSTEMD_UNIT_DIR

I noticed this problem when adding systemd support to netcf, because I setup the configure.ac to automatically prefer using systemd over initscripts when possible - although I had copied the install-data-local target from the example of libvirt's "libvirt-guests" service more or less verbatim, "make distcheck" would fail because it was trying to install the service file directly into /lib/systemd/system rather than into /home/user/some/unimportant/name/lib/systemd/system. This is caused by the install/uninstall rules for the systemd unit files relying on $(DESTDIR) pointing the installed files to the right place, but in reality $(DESTDIR) is empty during this part of make distcheck - it instead sets $(prefix) with the toplevel directory used for its test build/install/uninstall cycle. (This problem hasn't been seen when running "make distcheck" in libvirt because libvirt will never build/install systemd support unless explicitly told to do so on the configure commandline, and "make distcheck" doesn't put the "--with-initscript=..." option on the configure commandline.) I verified that the same problem does exist in libvirt by modifying libvirt's configure.ac to set: init_systemd=yes with_init_script=systemd+redhat This forces a build/install of the systemd unit files during distcheck, which yields an error like this: /usr/bin/install -c -m 644 virtlockd.service \ /lib/systemd/system/ libtool: install: warning: relinking `libvirt-qemu.la' /usr/bin/install: cannot remove '/lib/systemd/system/virtlockd.service': Permission denied make[4]: *** [install-systemd] Error 1 After adding $(prefix) to all the definitions of SYSTEMD_UNIT_DIR, make distcheck now completes successfully with the modified configure.ac, and the above lines change to something like this: /usr/bin/install -c -m 644 virtlockd.service \ /home/laine/devel/libvirt/libvirt-1.2.1/_inst/lib/systemd/system/ --- daemon/Makefile.am | 4 ++-- src/Makefile.am | 4 ++-- tools/Makefile.am | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/daemon/Makefile.am b/daemon/Makefile.am index e5c5db8..00221ab 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -## Copyright (C) 2005-2013 Red Hat, Inc. +## Copyright (C) 2005-2014 Red Hat, Inc. ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public @@ -387,7 +387,7 @@ endif ! LIBVIRT_INIT_SCRIPT_UPSTART if LIBVIRT_INIT_SCRIPT_SYSTEMD -SYSTEMD_UNIT_DIR = /lib/systemd/system +SYSTEMD_UNIT_DIR = $(prefix)/lib/systemd/system BUILT_SOURCES += libvirtd.service install-init-systemd: install-sysconfig libvirtd.service diff --git a/src/Makefile.am b/src/Makefile.am index 57e163f..8f77658 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -## Copyright (C) 2005-2013 Red Hat, Inc. +## Copyright (C) 2005-2014 Red Hat, Inc. ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public @@ -2220,7 +2220,7 @@ EXTRA_DIST += \ if WITH_LIBVIRTD if LIBVIRT_INIT_SCRIPT_SYSTEMD -SYSTEMD_UNIT_DIR = /lib/systemd/system +SYSTEMD_UNIT_DIR = $(prefix)/lib/systemd/system BUILT_SOURCES += virtlockd.service virtlockd.socket DISTCLEANFILES += virtlockd.service virtlockd.socket diff --git a/tools/Makefile.am b/tools/Makefile.am index 256a8f3..6847f13 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,4 +1,4 @@ -## Copyright (C) 2005-2013 Red Hat, Inc. +## Copyright (C) 2005-2014 Red Hat, Inc. ## ## This library is free software; you can redistribute it and/or ## modify it under the terms of the GNU Lesser General Public @@ -306,7 +306,7 @@ libvirt-guests.init: libvirt-guests.init.in libvirt-guests.sh EXTRA_DIST += libvirt-guests.service.in -SYSTEMD_UNIT_DIR = /lib/systemd/system +SYSTEMD_UNIT_DIR = $(prefix)/lib/systemd/system if LIBVIRT_INIT_SCRIPT_SYSTEMD install-systemd: libvirt-guests.service install-sysconfig libvirt-guests.sh -- 1.8.4.2

On 01/17/2014 05:34 AM, Laine Stump wrote:
I noticed this problem when adding systemd support to netcf, because I setup the configure.ac to automatically prefer using systemd over initscripts when possible - although I had copied the install-data-local target from the example of libvirt's "libvirt-guests" service more or less verbatim, "make distcheck" would fail because it was trying to install the service file directly into /lib/systemd/system rather than into /home/user/some/unimportant/name/lib/systemd/system.
This is caused by the install/uninstall rules for the systemd unit files relying on $(DESTDIR) pointing the installed files to the right place, but in reality $(DESTDIR) is empty during this part of make distcheck - it instead sets $(prefix) with the toplevel directory used for its test build/install/uninstall cycle.
(This problem hasn't been seen when running "make distcheck" in libvirt because libvirt will never build/install systemd support unless explicitly told to do so on the configure commandline, and "make distcheck" doesn't put the "--with-initscript=..." option on the configure commandline.)
There are ways with autotools to cause 'make distcheck' to enable particular configure options for the child process, but I'm not sure if it's worth playing with them. Maybe it's even worth having ./autobuild.sh try to tickle the situation. But that's something for a followup patch, and doesn't affect this patch.
I verified that the same problem does exist in libvirt by modifying libvirt's configure.ac to set:
init_systemd=yes with_init_script=systemd+redhat
This forces a build/install of the systemd unit files during distcheck, which yields an error like this:
/usr/bin/install -c -m 644 virtlockd.service \ /lib/systemd/system/ libtool: install: warning: relinking `libvirt-qemu.la' /usr/bin/install: cannot remove '/lib/systemd/system/virtlockd.service': Permission denied make[4]: *** [install-systemd] Error 1
After adding $(prefix) to all the definitions of SYSTEMD_UNIT_DIR, make distcheck now completes successfully with the modified configure.ac, and the above lines change to something like this:
/usr/bin/install -c -m 644 virtlockd.service \ /home/laine/devel/libvirt/libvirt-1.2.1/_inst/lib/systemd/system/
ACK. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Laine Stump