[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