Hello,
I noticed winsup does not respect $(DESTDIR) in its installation
process. The applied patch modifies the Makefile.in files, to have them
use $(DESTDIR) in all install lines. This includes:
* install(1) (also MKDIRP)
* the mkinstalldirs / $(mkinstalldirs) commands
* a ln -sf line
I may have forgotten some, however the following commands show the patch
works:
build$ ../src/configure --prefix=/tmp/wrongplace
build$ make
build$ make install DESTDIR=/tmp/rightplace
This correctly installs all files to /tmp/rightplace/tmp/wrongplace,
/tmp/wrongplace is never created. newlib already respects DESTDIR in its
makefiles (it does use automake). This patch applies cleanly to the
current CVS revision.
After applying this patch, the commands in FAQ section 6.18 "How do I
build Cygwin on my own" can be changed to:
mkdir build install;
cd build;
(../src/configure --prefix= -v; make) >& make.out
make install DESTDIR=../install > install.log 2>&1
After these commands, all files are in ../install and configured to be
installed in / (prefix is empty, i.e. / without the last slash). In my
opinion, this is a cleaner way to compile Cygwin than giving
--prefix=../install to configure.
Sjors
Index: winsup/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/Makefile.in,v
retrieving revision 1.32
diff -u -r1.32 Makefile.in
--- winsup/Makefile.in 26 Nov 2008 16:42:00 -0000 1.32
+++ winsup/Makefile.in 23 Feb 2009 17:10:28 -0000
@@ -65,9 +65,9 @@
all: Makefile $(SUBDIRS)
install-license: CYGWIN_LICENSE COPYING
- ${INSTALL} -d $(prefix)/share/doc/Cygwin
+ ${INSTALL} -d $(DESTDIR)$(prefix)/share/doc/Cygwin
for i in $^; do \
- ${INSTALL} $$i $(prefix)/share/doc/Cygwin ; \
+ ${INSTALL} $$i $(DESTDIR)$(prefix)/share/doc/Cygwin ; \
done
install: Makefile $(INSTALL_LICENSE) $(INSTALL_SUBDIRS)
Index: winsup/cygserver/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygserver/Makefile.in,v
retrieving revision 1.21
diff -u -r1.21 Makefile.in
--- winsup/cygserver/Makefile.in 3 Jan 2009 05:37:34 -0000 1.21
+++ winsup/cygserver/Makefile.in 23 Feb 2009 17:10:28 -0000
@@ -51,14 +51,14 @@
all: cygserver.exe
install: all $(updir1)/mkinstalldirs cygserver.conf cygserver-config README
- $(updir1)/mkinstalldirs $(sbindir)
- $(updir1)/mkinstalldirs $(bindir)
- $(updir1)/mkinstalldirs $(sysconfdir)/defaults/etc
- $(updir1)/mkinstalldirs $(prefix)/share/doc/Cygwin
- $(INSTALL_PROGRAM) cygserver.exe $(sbindir)/cygserver.exe
- $(INSTALL_PROGRAM) $(srcdir)/cygserver-config $(bindir)/cygserver-config
- $(INSTALL_DATA) $(srcdir)/cygserver.conf $(sysconfdir)/defaults/etc/cygserver.conf
- $(INSTALL_DATA) $(srcdir)/README $(prefix)/share/doc/Cygwin/cygserver.README
+ $(updir1)/mkinstalldirs $(DESTDIR)$(sbindir)
+ $(updir1)/mkinstalldirs $(DESTDIR)$(bindir)
+ $(updir1)/mkinstalldirs $(DESTDIR)$(sysconfdir)/defaults/etc
+ $(updir1)/mkinstalldirs $(DESTDIR)$(prefix)/share/doc/Cygwin
+ $(INSTALL_PROGRAM) cygserver.exe $(DESTDIR)$(sbindir)/cygserver.exe
+ $(INSTALL_PROGRAM) $(srcdir)/cygserver-config $(DESTDIR)$(bindir)/cygserver-config
+ $(INSTALL_DATA) $(srcdir)/cygserver.conf $(DESTDIR)$(sysconfdir)/defaults/etc/cygserver.conf
+ $(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(prefix)/share/doc/Cygwin/cygserver.README
clean:
rm -f $(OBJS) ${patsubst %.o,%.d,$(OBJS)} cygserver.exe
Index: winsup/cygwin/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v
retrieving revision 1.219
diff -u -r1.219 Makefile.in
--- winsup/cygwin/Makefile.in 3 Jan 2009 05:12:20 -0000 1.219
+++ winsup/cygwin/Makefile.in 23 Feb 2009 17:10:28 -0000
@@ -308,37 +308,37 @@
uninstall: uninstall-libs uninstall-headers uninstall-man
install-libs: $(TARGET_LIBS)
- @$(MKDIRP) $(bindir)
- $(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(bindir)/$(DLL_NAME); \
+ @$(MKDIRP) $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) $(TEST_DLL_NAME) $(DESTDIR)$(bindir)/$(DLL_NAME); \
for i in $^; do \
- $(INSTALL_DATA) $$i $(tooldir)/lib/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/lib/`basename $$i` ; \
done
- cd $(tooldir)/lib && ln -sf libcygwin.a libg.a
+ cd $(DESTDIR)$(tooldir)/lib && ln -sf libcygwin.a libg.a
install-headers:
cd $(srcdir); \
for sub in `find include -name '[a-z]*' -type d -print | sort`; do \
- $(MKDIRP) $(tooldir)/$$sub; \
+ $(MKDIRP) $(DESTDIR)$(tooldir)/$$sub; \
for i in $$sub/*.h ; do \
- $(INSTALL_DATA) $$i $(tooldir)/$$sub/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/$$sub/`basename $$i` ; \
done ; \
done ; \
- $(INSTALL_DATA) regex/regex.h $(tooldir)/include/regex.h
+ $(INSTALL_DATA) regex/regex.h $(DESTDIR)$(tooldir)/include/regex.h
install-man:
- @$(MKDIRP) $(mandir)/man2 $(mandir)/man3 $(mandir)/man5 $(mandir)/man7
+ @$(MKDIRP) $(DESTDIR)$(mandir)/man2 $(DESTDIR)$(mandir)/man3 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man7
cd $(srcdir); \
for i in `find . -type f -name '*.2'`; do \
- $(INSTALL_DATA) $$i $(mandir)/man2/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man2/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.3'`; do \
- $(INSTALL_DATA) $$i $(mandir)/man3/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man3/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.5'`; do \
- $(INSTALL_DATA) $$i $(mandir)/man5/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man5/`basename $$i` ; \
done; \
for i in `find . -type f -name '*.7'`; do \
- $(INSTALL_DATA) $$i $(mandir)/man7/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(mandir)/man7/`basename $$i` ; \
done
install_target:
Index: winsup/lsaauth/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/lsaauth/Makefile.in,v
retrieving revision 1.2
diff -u -r1.2 Makefile.in
--- winsup/lsaauth/Makefile.in 12 Oct 2008 23:53:26 -0000 1.2
+++ winsup/lsaauth/Makefile.in 23 Feb 2009 17:10:28 -0000
@@ -70,10 +70,10 @@
rm -f *.o *.dll
install: all
- $(SHELL) $(updir1)/mkinstalldirs $(bindir)
- $(INSTALL_PROGRAM) $(DLL) $(bindir)/$(DLL)
- $(INSTALL_PROGRAM) $(srcdir)/cyglsa64.dll $(bindir)/cyglsa64.dll
- $(INSTALL_PROGRAM) $(srcdir)/cyglsa-config $(bindir)/cyglsa-config
+ $(SHELL) $(updir1)/mkinstalldirs $(DESTDIR)$(bindir)
+ $(INSTALL_PROGRAM) $(DLL) $(DESTDIR)$(bindir)/$(DLL)
+ $(INSTALL_PROGRAM) $(srcdir)/cyglsa64.dll $(DESTDIR)$(bindir)/cyglsa64.dll
+ $(INSTALL_PROGRAM) $(srcdir)/cyglsa-config $(DESTDIR)$(bindir)/cyglsa-config
%.o: %.c
$(CC) $(WIN32_CFLAGS) -c -o $@ $<
Index: winsup/mingw/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/mingw/Makefile.in,v
retrieving revision 1.88
diff -u -r1.88 Makefile.in
--- winsup/mingw/Makefile.in 28 Oct 2008 23:55:39 -0000 1.88
+++ winsup/mingw/Makefile.in 23 Feb 2009 17:10:29 -0000
@@ -231,7 +231,7 @@
install_dlls_host:
for i in $(DLLS); do \
- $(INSTALL_PROGRAM) $$i $(inst_bindir)/$$i ; \
+ $(INSTALL_PROGRAM) $$i $(DESTDIR)$(inst_bindir)/$$i ; \
done
_libm_dummy.o:
@@ -445,24 +445,24 @@
install-info: info
install-dirs:
- $(mkinstalldirs) $(inst_bindir)
- $(mkinstalldirs) $(inst_includedir)
- $(mkinstalldirs) $(inst_libdir)
- $(mkinstalldirs) $(inst_docdir)
- $(mkinstalldirs) $(mandir)/man$(mansection)
+ $(mkinstalldirs) $(DESTDIR)$(inst_bindir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_docdir)
+ $(mkinstalldirs) $(DESTDIR)$(mandir)/man$(mansection)
install: all install-dirs $(install_dlls_host)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
for i in $(CRT0S); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
for i in $(INSTDOCS); do \
- $(INSTALL_DATA) $(srcdir)/$$i $(inst_docdir)/$$i ; \
+ $(INSTALL_DATA) $(srcdir)/$$i $(DESTDIR)$(inst_docdir)/$$i ; \
done
for sub in . sys ; do \
- dstdir=$(inst_includedir)/$$sub ; \
+ dstdir=$(DESTDIR)$(inst_includedir)/$$sub ; \
$(mkinstalldirs) $$dstdir ; \
for i in $(srcdir)/include/$$sub/*.h ; do \
$(INSTALL_DATA) $$i $$dstdir/`basename $$i` ; \
@@ -472,10 +472,10 @@
# This provisional hack installs the only manpage we have at present...
# It simply CANNOT suffice, when we have more manpages to ship.
#
- $(mkinstalldirs) $(mandir)/man$(mansection)
- $(INSTALL_DATA) $(srcdir)/man/dirname.man $(mandir)/man$(mansection)/`\
+ $(mkinstalldirs) $(DESTDIR)$(mandir)/man$(mansection)
+ $(INSTALL_DATA) $(srcdir)/man/dirname.man $(DESTDIR)$(mandir)/man$(mansection)/`\
echo dirname.man|sed '$(manpage_transform);s,man$$,$(mansection),'`
- $(INSTALL_DATA) $(srcdir)/man/dirname.man $(mandir)/man$(mansection)/`\
+ $(INSTALL_DATA) $(srcdir)/man/dirname.man $(DESTDIR)$(mandir)/man$(mansection)/`\
echo basename.man|sed '$(manpage_transform);s,man$$,$(mansection),'`
#
# End provisional hack.
Index: winsup/mingw/mingwex/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/mingw/mingwex/Makefile.in,v
retrieving revision 1.46
diff -u -r1.46 Makefile.in
--- winsup/mingw/mingwex/Makefile.in 12 Oct 2008 23:58:17 -0000 1.46
+++ winsup/mingw/mingwex/Makefile.in 23 Feb 2009 17:10:29 -0000
@@ -239,9 +239,9 @@
install-info: info
install: all
- $(mkinstalldirs) $(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
clean:
Index: winsup/mingw/profile/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/mingw/profile/Makefile.in,v
retrieving revision 1.16
diff -u -r1.16 Makefile.in
--- winsup/mingw/profile/Makefile.in 12 Oct 2008 23:58:17 -0000 1.16
+++ winsup/mingw/profile/Makefile.in 23 Feb 2009 17:10:29 -0000
@@ -112,17 +112,17 @@
install-info: info
install: all
- $(mkinstalldirs) $(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
for i in $(CRT0S); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
for sub in . ; do \
- $(mkinstalldirs) $(inst_includedir)/$$sub ; \
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)/$$sub ; \
for i in $(srcdir)/$$sub/*.h ; do \
- $(INSTALL_DATA) $$i $(inst_includedir)/$$sub/`basename $$i` ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_includedir)/$$sub/`basename $$i` ; \
done ; \
done
Index: winsup/utils/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/utils/Makefile.in,v
retrieving revision 1.80
diff -u -r1.80 Makefile.in
--- winsup/utils/Makefile.in 17 Jan 2009 11:59:16 -0000 1.80
+++ winsup/utils/Makefile.in 23 Feb 2009 17:10:29 -0000
@@ -158,10 +158,10 @@
rm -f Makefile config.cache
install: all
- $(SHELL) $(updir1)/mkinstalldirs $(bindir)
+ $(SHELL) $(updir1)/mkinstalldirs $(DESTDIR)$(bindir)
for i in $(CYGWIN_BINS) ${filter-out testsuite.exe,$(MINGW_BINS)} ; do \
n=`echo $$i | sed '$(program_transform_name)'`; \
- $(INSTALL_PROGRAM) $$i $(bindir)/$$n; \
+ $(INSTALL_PROGRAM) $$i $(DESTDIR)$(bindir)/$$n; \
done
$(cygwin_build)/libcygwin.a: $(cygwin_build)/Makefile
Index: winsup/w32api/lib/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/w32api/lib/Makefile.in,v
retrieving revision 1.46
diff -u -r1.46 Makefile.in
--- winsup/w32api/lib/Makefile.in 29 Jan 2008 21:18:49 -0000 1.46
+++ winsup/w32api/lib/Makefile.in 23 Feb 2009 17:10:30 -0000
@@ -213,19 +213,19 @@
install: install-libraries install-headers install-ddk install-directx
install-libraries: all
- $(mkinstalldirs) $(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
install-headers:
- $(mkinstalldirs) $(inst_includedir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)
for i in $(HEADERS); do \
- $(INSTALL_DATA) $(srcdir)/../include/$$i $(inst_includedir)/$$i ; \
+ $(INSTALL_DATA) $(srcdir)/../include/$$i $(DESTDIR)$(inst_includedir)/$$i ; \
done
- $(mkinstalldirs) $(inst_includedir)/GL
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)/GL
for i in $(GL_HEADERS); do \
- $(INSTALL_DATA) $(srcdir)/../include/GL/$$i $(inst_includedir)/GL/$$i ; \
+ $(INSTALL_DATA) $(srcdir)/../include/GL/$$i $(DESTDIR)$(inst_includedir)/GL/$$i ; \
done
install-ddk: install-libraries install-headers
Index: winsup/w32api/lib/ddk/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/w32api/lib/ddk/Makefile.in,v
retrieving revision 1.5
diff -u -r1.5 Makefile.in
--- winsup/w32api/lib/ddk/Makefile.in 12 Sep 2006 00:29:04 -0000 1.5
+++ winsup/w32api/lib/ddk/Makefile.in 23 Feb 2009 17:10:30 -0000
@@ -145,15 +145,15 @@
install: install-libraries install-headers
install-libraries: all
- $(mkinstalldirs) $(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
install-headers:
- $(mkinstalldirs) $(inst_includedir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)
for i in $(HEADERS); do \
- $(INSTALL_DATA) $(srcdir)/../../include/ddk/$$i $(inst_includedir)/$$i ; \
+ $(INSTALL_DATA) $(srcdir)/../../include/ddk/$$i $(DESTDIR)$(inst_includedir)/$$i ; \
done
# uninstall headers and libraries from a target specified directory
Index: winsup/w32api/lib/directx/Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/w32api/lib/directx/Makefile.in,v
retrieving revision 1.4
diff -u -r1.4 Makefile.in
--- winsup/w32api/lib/directx/Makefile.in 12 Sep 2006 00:29:04 -0000 1.4
+++ winsup/w32api/lib/directx/Makefile.in 23 Feb 2009 17:10:30 -0000
@@ -170,15 +170,15 @@
install: install-libraries install-headers
install-libraries: all
- $(mkinstalldirs) $(inst_libdir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_libdir)
for i in $(LIBS); do \
- $(INSTALL_DATA) $$i $(inst_libdir)/$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(inst_libdir)/$$i ; \
done
install-headers:
- $(mkinstalldirs) $(inst_includedir)
+ $(mkinstalldirs) $(DESTDIR)$(inst_includedir)
for i in $(HEADERS); do \
- $(INSTALL_DATA) $(srcdir)/../../include/directx/$$i $(inst_includedir)/$$i ; \
+ $(INSTALL_DATA) $(srcdir)/../../include/directx/$$i $(DESTDIR)$(inst_includedir)/$$i ; \
done
# uninstall headers and libraries from a target specified directory
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/