[RFC][PATCH] proper DESTDIR handling for device-mapper and LVM2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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_@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_@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_@interface@ install_static install_@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; \
)


_______________________________________________
linux-lvm mailing list
linux-lvm@redhat.com
https://www.redhat.com/mailman/listinfo/linux-lvm
read the LVM HOW-TO at http://tldp.org/HOWTO/LVM-HOWTO/

[Index of Archives]     [Gluster Users]     [Kernel Development]     [Linux Clusters]     [Device Mapper]     [Security]     [Bugtraq]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]

  Powered by Linux