The idea that Wine and cross-compilation are either isolated or
"cooperate" is a false dichotomy. The only reason this problem occurs
for you is that you're using some other glib which isn't mingw32-glib.
Use mingw32-glib and our cross-compilation environment, or explain why
we should support some other binary glib that we have no control over.
But I'm not! I'm just using *your* glib and I happen to have the
Linux one installed! When I said "non-mingw glib" I was referring to
the normal Linux glib.
> 513824: definitely a hack, but one that we cannot skip if we want
the
> cross-compilation environment to cooperate Wine. It is extremely stupid
> to use touch instead of open, but glib does it; bummer. Fixing it
> upstream will require years to propagate to packages.
Why can't this "other" glib (whatever it is) use /usr/bin/touch?
It is not "another" glib, it is glib-2.0.m4 that is the same for every
package and every architecture. It runs touch from within a runtime
test, so it tries to use a non-existing Windows touch.
> 2) Problems in the default RPM macros. This can be skipped,
> except maybe for making -mms-bitfields the default in the
> compiler. I can bring this upstream.
We used to require -mms-bitfields to make interoperable C structures.
_If_ that's now the default, we can drop it.
It's not the default, we have to bring the case upstream then.
> 513825, reprise. There is another aspect of this bug. When Wine
is
> installed, Autoconf executes run-time testcases. This can be seen as a
> bug, but it is also a feature---and for three reasons.
>
> First, in most cases run-time testcases choose a conservative answer
> when cross-compiling, so that allowing them would make for slimmer or
> more efficient binaries.
Nevertheless, we can't use wine at compile time, no matter how much
better it might theoretically make things. We can't use it because
(a) it doesn't work in Koji, and (b) cross-compilation should not need
to run generated binaries at build time [autoconf section 6.6 Checking
Runtime Behavior].
First of all, let's put aside Make-time generated binaries. They are
just complicating the discussion, the problem occurs with any program
that uses glib (*).
I understand perfectly why you do not want to use Wine at compile
time. Someone in the bugzilla audit trails said it does not require X
. And
that's not the reason indeed, just like the reason is not that it
requires a $HOME (it does not---just use WINEPREFIX). The reason is
that you want the packages to build on any architecture where the
cross-compiler builds, which makes lots of sense.
And I agree that run-time tests should not be needed.
My question is this one: where does the scope of Fedora MinGW end? Do
you want to discourage/allow/encourage *users* from coupling it with
Wine so that it is an *emulation* environment and the cross-compiler
becomes sort-of native? As I said, it wouldn't be unheard of; I know
of companies that do the same using Qemu's user-space Linux emulation.
And if so, do you agree that allowing run-time configure tests can be
advantageous because of possibly increased precision and easier setup?
Paolo
(*) Try it yourself. Install wine, glib2-devel, mingw-glib2, and run
this script:
cat > configure.ac << \EOF
AC_INIT
AM_PATH_GLIB_2_0(2.0.0)
AC_OUTPUT(Makefile)
EOF
cat > Makefile.in << \EOF
CC = @CC@
CFLAGS = -O2 -g
EXEEXT = @EXEEXT@
override CFLAGS += @GLIB_CFLAGS@
override LIBS += @GLIB_LIBS@
hello$(EXEEXT): hello.o ; $(CC) -o $@ $^ $(LIBS)
hello.o: hello.c
Makefile: Makefile.in config.status; ./config.status
config.status: configure; ./config.status --recheck
configure: configure.ac; autoconf
clean: ; rm config.status Makefile hello.o hello$(EXEEXT)
EOF
cat > hello.c << \EOF
#include <glib.h>
#include <stdio.h>
int main()
{
printf ("%s\n", g_strdup ("Hello, world!"));
}
EOF
aclocal && autoconf
./configure --host=i686-pc-mingw32 && make
./hello.exe