[linux-lvm] [RFC][PATCH] proper DESTDIR handling for device-mapper and LVM2
Kevin P. Fleming
kpfleming at backtobasicsmgmt.com
Thu Mar 11 23:10:01 UTC 2004
The patches below are intended to make the DESTDIR handling in the
device-mapper and LVM2 Makefiles a little more useful, and to fix a
number of problems with the current DESTDIR handling. The patches are
against the latest tarballs (device-mapper.1.00.08 and LVM2.2.00.08).
Links to the patches are:
http://www.backtobasicsmgmt.com/uClibc/device-mapper-DESTDIR.patch
http://www.backtobasicsmgmt.com/uClibc/LVM2-DESTDIR.patch
Commented versions are inline below. The patches assume that DESTDIR is
used only for "make install"-type targets, not during compile and/or
link phases. This is the most common usage of DESTDIR, unless I'm very
much mistaken :-) If so, please correct my misunderstanding...
--- snip patch for device-mapper ---
diff -ur device-mapper.1.00.08/dmsetup/Makefile.in
device-mapper.new/dmsetup/Makefile.in
--- device-mapper.1.00.08/dmsetup/Makefile.in Tue Feb 24 12:05:44 2004
+++ device-mapper.new/dmsetup/Makefile.in Thu Mar 11 20:37:53 2004
@@ -16,11 +16,10 @@
dmsetup: $(OBJECTS) $(interfacedir)/libdevmapper.so \
$(interfacedir)/libdevmapper.a
$(CC) -o dmsetup $(OBJECTS) $(LD_FLAGS) \
- -L$(interfacedir) -L$(DESTDIR)/lib $(LIBS) \
- -ldevmapper
+ $(LIBS) -ldevmapper
*** $(interfacedir) is in $(LD_FLAGS) courtesy of make_tmpl
*** -L$(DESTDIR)/lib is just wrong; DESTDIR should not be provided at
link time, only install time, but if it is provided at link time dmsetup
could be linked against the wrong system libraries
install: dmsetup
- $(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< $(sbindir)/$<
+ $(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $<
$(DESTDIR)$(sbindir)/$<
*** see comments for make_tmpl below
.PHONY: install
Only in device-mapper.new/dmsetup: Makefile.in~
Only in device-mapper.new/lib: .export.sym
diff -ur device-mapper.1.00.08/lib/Makefile.in
device-mapper.new/lib/Makefile.in
--- device-mapper.1.00.08/lib/Makefile.in Tue Feb 24 11:46:20 2004
+++ device-mapper.new/lib/Makefile.in Thu Mar 11 20:33:43 2004
@@ -22,29 +22,29 @@
install: install_ at interface@
- $(LN_S) -f libdevmapper.so.$(LIB_VERSION) $(libdir)/libdevmapper.so
+ $(LN_S) -f libdevmapper.so.$(LIB_VERSION)
$(DESTDIR)$(libdir)/libdevmapper.so
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 444 libdevmapper.h \
- $(includedir)/libdevmapper.h
+ $(DESTDIR)$(includedir)/libdevmapper.h
install_static: install_ at interface@_static
- $(LN_S) -f libdevmapper.a.$(LIB_VERSION) $(libdir)/libdevmapper.a
+ $(LN_S) -f libdevmapper.a.$(LIB_VERSION)
$(DESTDIR)$(libdir)/libdevmapper.a
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 444 libdevmapper.h \
- $(includedir)/libdevmapper.h
+ $(DESTDIR)$(includedir)/libdevmapper.h
.PHONY: install install_ at interface@ install_static
install_ at interface@_static
install_fs: fs/libdevmapper.so
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
- $(libdir)/libdevmapper.so.$(LIB_VERSION)
+ $(DESTDIR)$(libdir)/libdevmapper.so.$(LIB_VERSION)
install_ioctl: ioctl/libdevmapper.so
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
- $(libdir)/libdevmapper.so.$(LIB_VERSION)
+ $(DESTDIR)$(libdir)/libdevmapper.so.$(LIB_VERSION)
install_ioctl_static: ioctl/libdevmapper.a
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
- $(libdir)/libdevmapper.a.$(LIB_VERSION)
+ $(DESTDIR)$(libdir)/libdevmapper.a.$(LIB_VERSION)
distclean_lib:
$(RM) libdm-common.h
Only in device-mapper.new/lib: Makefile.in~
diff -ur device-mapper.1.00.08/make.tmpl.in device-mapper.new/make.tmpl.in
--- device-mapper.1.00.08/make.tmpl.in Tue Feb 24 12:23:27 2004
+++ device-mapper.new/make.tmpl.in Thu Mar 11 20:31:08 2004
@@ -31,8 +31,8 @@
LD_DEPS += @LD_DEPS@
# Setup directory variables
-prefix = $(DESTDIR)@prefix@
-exec_prefix = $(DESTDIR)@exec_prefix@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
*** this works very poorly; first, autoconf substitutes ${prefix} for
@exec_prefix@ if the user does not provide --exec-prefix on the
configure command line, so exec_prefix ends up being
"$(DESTDIR)$(DESTDIR)${prefix}", and installation fails
*** second, if the user specifies any of --bindir/--sbindir/etc. on the
configure command line, those exact values are substituted into this
file, and ${prefix}/${exec_prefix} are not part of the substituted
values. this means that DESTDIR=/temp_install will have no effect if,
for example, --bindir=/bin was specified on the command line, but the
installation should be done to /temp_install/bin
*** changing all the Makefiles to used $(DESTDIR) as a prefix to these
autoconf-generated variables solves this problem
bindir = @bindir@
includedir = @includedir@
libdir = @libdir@
@@ -80,10 +80,6 @@
INCLUDES+=-I. -I$(top_srcdir)/include
-ifdef DESTDIR
- INCLUDES+=-I$(DESTDIR)/usr/include
-endif
-
** again, this is bad; DESTDIR should not even be supplied at compile
time, so I can't see how this is useful
ifneq ("@missingkernel@", "yes")
INCLUDES+=-I$(kerneldir)/include
endif
Only in device-mapper.new: make.tmpl.in~
diff -ur device-mapper.1.00.08/man/Makefile.in
device-mapper.new/man/Makefile.in
--- device-mapper.1.00.08/man/Makefile.in Wed Jan 2 06:40:49 2002
+++ device-mapper.new/man/Makefile.in Thu Mar 11 20:32:42 2004
@@ -21,7 +21,7 @@
VPATH = @srcdir@
MANUALS=$(wildcard *.8)
-MAN8DIR=${mandir}/man8
+MAN8DIR=$(DESTDIR)${mandir}/man8
include ../make.tmpl
Only in device-mapper.new/man: Makefile.in~
--- snip patch for LVM2 ---
*** same general comments regarding make_tmpl and use of $(DESTDIR) in
install targets apply here as well
diff -ur LVM2.2.00.08/lib/format1/Makefile.in
LVM2.new/lib/format1/Makefile.in
--- LVM2.2.00.08/lib/format1/Makefile.in Wed Aug 20 08:48:25 2003
+++ LVM2.new/lib/format1/Makefile.in Thu Mar 11 20:42:18 2004
@@ -24,8 +24,8 @@
install: liblvm2format1.so
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) $< \
- $(libdir)/liblvm2format1.so.$(LIB_VERSION)
- $(LN_S) -f liblvm2format1.so.$(LIB_VERSION) $(libdir)/liblvm2format1.so
+ $(DESTDIR)$(libdir)/liblvm2format1.so.$(LIB_VERSION)
+ $(LN_S) -f liblvm2format1.so.$(LIB_VERSION)
$(DESTDIR)$(libdir)/liblvm2format1.so
.PHONY: install
diff -ur LVM2.2.00.08/make.tmpl.in LVM2.new/make.tmpl.in
--- LVM2.2.00.08/make.tmpl.in Tue Oct 21 14:59:42 2003
+++ LVM2.new/make.tmpl.in Thu Mar 11 20:40:50 2004
@@ -30,8 +30,8 @@
CFLAGS += @CFLAGS@
# Setup directory variables
-prefix = $(DESTDIR)@prefix@
-exec_prefix = $(DESTDIR)@exec_prefix@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
sbindir = @sbindir@
@@ -73,10 +73,6 @@
INCLUDES+=-I. -I$(top_srcdir)/include
INC_LNS=$(top_srcdir)/include/.symlinks_created
-ifdef DESTDIR
- INCLUDES+=-I$(DESTDIR)/usr/include
-endif
-
STRIP=
#STRIP=-s
diff -ur LVM2.2.00.08/man/Makefile.in LVM2.new/man/Makefile.in
--- LVM2.2.00.08/man/Makefile.in Fri Nov 14 09:17:55 2003
+++ LVM2.new/man/Makefile.in Thu Mar 11 20:44:30 2004
@@ -28,8 +28,8 @@
vgconvert.8 vgdisplay.8 vgexport.8 vgextend.8 vgimport.8 \
vgmerge.8 vgmknodes.8 vgreduce.8 vgremove.8 vgrename.8 \
vgs.8 vgscan.8 vgsplit.8
-MAN5DIR=${mandir}/man5
-MAN8DIR=${mandir}/man8
+MAN5DIR=$(DESTDIR)${mandir}/man5
+MAN8DIR=$(DESTDIR)${mandir}/man8
include ../make.tmpl
diff -ur LVM2.2.00.08/tools/Makefile.in LVM2.new/tools/Makefile.in
--- LVM2.2.00.08/tools/Makefile.in Wed Nov 12 12:16:48 2003
+++ LVM2.new/tools/Makefile.in Thu Mar 11 20:43:47 2004
@@ -79,7 +79,7 @@
lvm: $(OBJECTS) $(top_srcdir)/lib/liblvm.a
$(CC) -o lvm $(OBJECTS) $(LD_FLAGS) -L$(top_srcdir)/lib \
- -L$(DESTDIR)/lib $(LVMLIBS) $(LIBS)
+ $(LVMLIBS) $(LIBS)
.commands: commands.h cmdnames.h Makefile
$(CC) -E -P cmdnames.h 2> /dev/null | \
@@ -87,11 +87,11 @@
install: $(TARGETS)
$(INSTALL) -D -o $(OWNER) -g $(GROUP) -m 555 $(STRIP) lvm \
- $(sbindir)/lvm
- @echo Creating symbolic links for individual commands in $(sbindir)
+ $(DESTDIR)$(sbindir)/lvm
+ @echo Creating symbolic links for individual commands in
$(DESTDIR)$(sbindir)
@( \
for v in `cat .commands`; do \
- cd $(sbindir); \
+ cd $(DESTDIR)$(sbindir); \
$(LN_S) -f lvm $$v; \
done; \
)
More information about the linux-lvm
mailing list