Wine uses the wrong pkg-config for 32 bit builds
Francois Gouget
fgouget at codeweavers.com
Mon Jun 5 10:46:00 CDT 2017
The problem with pkg-config is that it has no idea what the build target
is so it always returns the include and library paths appropriate for
the build host.
For instance when Wine tries to figure out how to use GStreamer 1.0 it
calls:
$ pkg-config --cflags gstreamer-1.0
-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include
It's pretty obvious that the 'x86_64-linux-gnu' is wrong for a 32 bit
build. But then we never told pkg-config that we wanted to do a 32 bit
build!
There are two ways to tell pkg-config we want to do a 32 bit build.
* The first way is to set PKG_CONFIG_LIBDIR to force pkg-config to
only use the .pc files we want. However this requires knowing where
the .pc files are stored and you'd want to make sure to include
/usr/lib/<triplet>/pkgconfig, /usr/local/lib/<triplet>/pkgconfig. And
then should you also include /usr/lib/pkgconfig?
* Another way is to use a <triplet>-pkg-config tool, which will give us
the right information for the specified <triplet>. Red Hat, Debian and
its derivatives (Ubuntu, etc) all provide them. This gives:
$ i686-linux-gnu-pkg-config --cflags gstreamer-1.0
-pthread -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0
-I/usr/lib/i386-linux-gnu/glib-2.0/include
We already have a WINE_CHECK_HOST_TOOL() macro that looks like it should
do the trick. But it only takes ac_tool_prefix into account. So I
modified it to take the host target into account if ac_tool_prefix is
not set. This is modeled after the WINE_CHECK_MINGW_PROG macro and you
can see the result in the patch below.
On Red Hat the it's a quadruplet: it has an extra 'redhat-' in the name
(it's i686-redhat-linux-gnu-pkg-config for instance). The patch below
does not account for it. I'm hoping Red Hat developers can suggest how
to best take this into account.
Is this approach ok?
-----
configure: Take the target host into account in WINE_CHECK_HOST_TOOL().
In particular this gets us the right pkg-config tool when building the
32 bit Wine.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
aclocal.m4 | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/aclocal.m4 b/aclocal.m4
index 9364188e334..4ac467a71e5 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -27,13 +27,17 @@ dnl
dnl Like AC_CHECK_TOOL but without the broken fallback to non-prefixed name
dnl
AC_DEFUN([WINE_CHECK_HOST_TOOL],
-[AS_VAR_SET_IF([ac_tool_prefix],
- AC_CHECK_PROG([$1],[${ac_tool_prefix}$2],[${ac_tool_prefix}$2],,[$4]))
-AS_VAR_IF([ac_cv_prog_$1],[],
- [AS_VAR_IF([cross_compiling],[yes],[],
- [AS_UNSET([ac_cv_prog_$1])
- AC_CHECK_PROG([$1],[$2],[$2],[$3],[$4])])],
-[AS_VAR_COPY([$1],[ac_cv_prog_$1])])])
+[AS_VAR_IF([ac_tool_prefix],[],
+ [case "$host_cpu" in
+ i[[3456789]]86*)
+ ac_host_tool_list="m4_foreach([ac_wine_cpu],[i686,i586,i486,i386],[ac_wine_cpu-${host_os}-$2 ]) $2" ;;
+ x86_64)
+ ac_host_tool_list="x86_64-${host_os}-$2 $2" ;;
+ *)
+ ac_host_tool_list="" ;;
+ esac],
+ [ac_host_tool_tool_list="${ac_tool_prefix}-$2"])
+ AC_CHECK_PROGS($1,$ac_host_tool_list,[$3],[$4])])
dnl **** Initialize the programs used by other checks ****
dnl
--
2.11.0
More information about the wine-devel
mailing list