mingw32-filesystem, mingw32-w32api, mingw32-runtime

Richard W.M. Jones rjones at redhat.com
Thu Dec 18 10:08:49 UTC 2008


(CC-ing to the mailing list with the original patches)

On Thu, Dec 18, 2008 at 12:52:19AM +0100, Fridrich Strba wrote:
> I was doing some cloning of your Rawhide packages for my personal use
> and I discovered a bug in the _mingw32_make macro and also maybe some
> reasons why.
> 
> Setting the prefix to %{buildroot}%{prefix} is not seen as flawed now,
> but with more and more cross-built packages it will show that the
> libtool archive (*.la) files will give wrong prefix and result somehow
> also in linking errors.

I'm a bit confused by what the mistake is ..  The *.la files we are
generating now seem to have correct paths inside them.  Can you point
to an example where there is a problem?

> I think that the reason is basically the w32api and mingwrt package
> where make install does not honour DESTDIR setting. Find attached two
> patches that will make that DESTDIR to be respected.
> 
> Also, I sent a proposed (IMHO better) mingw32 macros files. Note that
> the CLASSPATH variable is not useful for you people if you don't
> distribute the mingw32-gcc-java cross-compiler that I personally use for
> building of some java bindings of my private libraries. But the
> _mingw32_make and _mingw32_makeinstall macros could be considered I
> guess. I even make the mingw32-make symlink because several non-libtool
> applications cross-compile much better using mingw32-make which sets all
> the needed env variables.

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/
-------------- next part --------------
--- mingwrt-3.15.1-mingw32/Makefile.in	2008-09-24 02:56:05.000000000 +0200
+++ mingwrt-3.15.1-mingw32/Makefile.in	2008-12-17 23:39:10.000000000 +0100
@@ -233,7 +233,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:
@@ -433,37 +433,37 @@
 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 ; \
-		$(mkinstalldirs) $$dstdir ; \
+		$(mkinstalldirs) $(DESTDIR)$$dstdir ; \
 		for i in $(srcdir)/include/$$sub/*.h ; do \
-		  $(INSTALL_DATA) $$i $$dstdir/`basename $$i` ; \
+		  $(INSTALL_DATA) $$i $(DESTDIR)$$dstdir/`basename $$i` ; \
 		done ; \
 	done
 #
 # 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.
--- mingwrt-3.15.1-mingw32/profile/Makefile.in	2008-12-17 23:40:47.000000000 +0100
+++ mingwrt-3.15.1-mingw32/profile/Makefile.in	2008-12-17 23:41:46.000000000 +0100
@@ -109,17 +109,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
 
--- mingwrt-3.15.1-mingw32/mingwex/Makefile.in	2008-12-17 23:43:53.000000000 +0100
+++ mingwrt-3.15.1-mingw32/mingwex/Makefile.in	2008-12-17 23:44:03.000000000 +0100
@@ -236,9 +236,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:
-------------- next part --------------
--- w32api-3.13-mingw32/lib/Makefile.in	2008-12-17 23:56:40.000000000 +0100
+++ w32api-3.13-mingw32/lib/Makefile.in	2008-12-17 23:58:24.000000000 +0100
@@ -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
@@ -239,15 +239,15 @@
 
 uninstall-libraries:
 	@for i in $(LIBS); do \
-		rm -f $(inst_libdir)/$$i ; \
+		rm -f $(DESTDIR)$(inst_libdir)/$$i ; \
 	done
-	rmdir $(inst_libdir)
+	rmdir $(DESTDIR)$(inst_libdir)
 
 uninstall-headers:
 	@for i in $(HEADERS); do \
-		rm -r $(inst_includedir)/$$i ; \
+		rm -r $(DESTDIR)$(inst_includedir)/$$i ; \
 	done
-	rmdir $(inst_includedir)
+	rmdir $(DESTDIR)$(inst_includedir)
 
 uninstall-ddk:
 	cd ddk && $(MAKE) -C uninstall $(FLAGS_TO_PASS)
--- w32api-3.13-mingw32/lib/ddk/Makefile.in	2008-12-17 23:59:36.000000000 +0100
+++ w32api-3.13-mingw32/lib/ddk/Makefile.in	2008-12-18 00:00:30.000000000 +0100
@@ -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
@@ -161,15 +161,15 @@
 
 uninstall-libraries:
 	@for i in $(LIBS); do \
-		rm -f $(inst_libdir)/$$i ; \
+		rm -f $(DESTDIR)$(inst_libdir)/$$i ; \
 	done
-	rmdir $(inst_libdir)
+	rmdir $(DESTDIR)$(inst_libdir)
 
 uninstall-headers:
 	@for i in $(HEADERS); do \
-		rm -r $(inst_includedir)/$$i ; \
+		rm -r $(DESTDIR)$(inst_includedir)/$$i ; \
 	done
-	rmdir $(inst_includedir)
+	rmdir $(DESTDIR)$(inst_includedir)
 
 
 dist:
--- w32api-3.13-mingw32/lib/directx/Makefile.in	2008-12-18 00:01:10.000000000 +0100
+++ w32api-3.13-mingw32/lib/directx/Makefile.in	2008-12-18 00:02:08.000000000 +0100
@@ -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
@@ -186,15 +186,15 @@
 
 uninstall-libraries:
 	@for i in $(LIBS); do \
-		rm -f $(inst_libdir)/$$i ; \
+		rm -f $(DESTDIR)$(inst_libdir)/$$i ; \
 	done
-	rmdir $(inst_libdir)
+	rmdir $(DESTDIR)$(inst_libdir)
 
 uninstall-headers:
 	@for i in $(HEADERS); do \
-		rm -r $(inst_includedir)/$$i ; \
+		rm -r $(DESTDIR)$(inst_includedir)/$$i ; \
 	done
-	rmdir $(inst_includedir)
+	rmdir $(DESTDIR)$(inst_includedir)
 
 
 dist:
-------------- next part --------------
# RPM macros for Fedora MinGW.

%_mingw32_target          i686-pc-mingw32

# Paths.
%_mingw32_sysroot         %{_prefix}/%{_mingw32_target}/sys-root
%_mingw32_prefix          %{_mingw32_sysroot}/mingw
%_mingw32_exec_prefix     %{_mingw32_prefix}
%_mingw32_bindir          %{_mingw32_exec_prefix}/bin
%_mingw32_sbindir         %{_mingw32_exec_prefix}/sbin
%_mingw32_libexecdir      %{_mingw32_exec_prefix}/libexec
%_mingw32_libdir          %{_mingw32_exec_prefix}/lib
%_mingw32_datadir         %{_mingw32_prefix}/share
%_mingw32_docdir          %{_mingw32_prefix}/share/doc
%_mingw32_infodir         %{_mingw32_prefix}/share/info
%_mingw32_mandir          %{_mingw32_prefix}/share/man
%_mingw32_sysconfdir      %{_mingw32_prefix}/etc
%_mingw32_sharedstatedir  %{_mingw32_prefix}/com
%_mingw32_localstatedir   %{_mingw32_prefix}/var
%_mingw32_includedir      %{_mingw32_prefix}/include

# Build macros.
%_mingw32_host            %{_mingw32_target}

%_mingw32_cflags          -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -mms-bitfields

%_mingw32_classpath       %_mingw32_datadir/java/libgcj.jar:%_mingw32_datadir/java/libgcj-tools.jar

%_mingw32_cc              %{_mingw32_target}-gcc
%_mingw32_cxx             %{_mingw32_target}-g++
%_mingw32_cpp             %{_mingw32_target}-gcc -E
%_mingw32_addr2line       %{_mingw32_target}-addr2line
%_mingw32_ar              %{_mingw32_target}-ar
%_mingw32_as              %{_mingw32_target}-as
%_mingw32_c++             %{_mingw32_target}-c++
%_mingw32_c++filt         %{_mingw32_target}-c++filt
%_mingw32_dlltool         %{_mingw32_target}-dlltool
%_mingw32_dllwrap         %{_mingw32_target}-dllwrap
%_mingw32_gcov            %{_mingw32_target}-gcov
%_mingw32_gprof           %{_mingw32_target}-gprof
%_mingw32_ld              %{_mingw32_target}-ld
%_mingw32_nm              %{_mingw32_target}-nm
%_mingw32_objcopy         %{_mingw32_target}-objcopy
%_mingw32_objdump         %{_mingw32_target}-objdump
%_mingw32_ranlib          %{_mingw32_target}-ranlib
%_mingw32_readelf         %{_mingw32_target}-readelf
%_mingw32_size            %{_mingw32_target}-size
%_mingw32_strings         %{_mingw32_target}-strings
%_mingw32_strip           %{_mingw32_target}-strip
%_mingw32_windmc          %{_mingw32_target}-windmc
%_mingw32_windres         %{_mingw32_target}-windres
%_mingw32_gcj             %{_mingw32_target}-gcj

%_mingw32_cache           mingw32-config.cache

%_mingw32_findprovides    /usr/lib/rpm/mingw32-find-provides.sh
%_mingw32_findrequires    /usr/lib/rpm/mingw32-find-requires.sh

%_mingw32_env HOST_CC=gcc; export HOST_CC; \
  PKG_CONFIG_PATH="%{_mingw32_libdir}/pkgconfig"; export PKG_CONFIG_PATH; \
  CC="${MINGW32_CC:-%_mingw32_cc}"; export CC; \
  CXX="${MINGW32_CXX:-%_mingw32_cxx}"; export CXX; \
  CFLAGS="${MINGW32_CFLAGS:-%_mingw32_cflags}"; export CFLAGS; \
  CXXFLAGS="${MINGW32_CXXFLAGS:-%_mingw32_cflags}"; export CXXFLAGS; \
  CLASSPATH="$CLASSPATH:${MINGW32_CLASSPATH:-%_mingw32_classpath}"; export CLASSPATH; \
  _PREFIX="%{_bindir}/%{_mingw32_target}-"; \
  for i in `ls ${_PREFIX}*|egrep -v "gcc-"`; do \
    x=`echo $i|sed "s,${_PREFIX},,"|sed "s,.awk*,,"|tr "a-z+-" "A-ZX_"`; \
    declare -x $x="$i" ; export $x; \
  done; \
  unset _PREFIX; \
  for i in `ls %{_mingw32_bindir}/*|grep -- "-config\$"` ; do \
    x=`basename $i|tr "a-z+-" "A-ZX_"`; \
    declare -x $x="$i" ; export $x; \
  done; \
  unset x i


%_mingw32_configure %{_mingw32_env} ; \
  ./configure --cache-file=%{_mingw32_cache} \\\
	--host=%{_mingw32_host} \\\
	--build=%_build \\\
	--target=%{_mingw32_target} \\\
	--prefix=%{_mingw32_prefix} \\\
	--exec-prefix=%{_mingw32_exec_prefix} \\\
	--bindir=%{_mingw32_bindir} \\\
	--sbindir=%{_mingw32_sbindir} \\\
	--sysconfdir=%{_mingw32_sysconfdir} \\\
	--datadir=%{_mingw32_datadir} \\\
	--includedir=%{_mingw32_includedir} \\\
	--libdir=%{_mingw32_libdir} \\\
	--libexecdir=%{_mingw32_libexecdir} \\\
	--localstatedir=%{_mingw32_localstatedir} \\\
	--sharedstatedir=%{_mingw32_sharedstatedir} \\\
	--mandir=%{_mingw32_mandir} \\\
	--infodir=%{_mingw32_infodir}

%_mingw32_make %{_mingw32_env} ; \
  make \\\
	prefix=%{_mingw32_prefix} \\\
	exec_prefix=%{_mingw32_exec_prefix} \\\
	bindir=%{_mingw32_bindir} \\\
	sbindir=%{_mingw32_sbindir} \\\
	sysconfdir=%{_mingw32_sysconfdir} \\\
	datadir=%{_mingw32_datadir} \\\
	includedir=%{_mingw32_includedir} \\\
	libdir=%{_mingw32_libdir} \\\
	libexecdir=%{_mingw32_libexecdir} \\\
	localstatedir=%{_mingw32_localstatedir} \\\
	sharedstatedir=%{_mingw32_sharedstatedir} \\\
	mandir=%{_mingw32_mandir} \\\
	infodir=%{_mingw32_infodir}

%_mingw32_makeinstall %{_mingw32_make} %{?buildroot:DESTDIR=%{buildroot}} install


More information about the mingw mailing list