diff -p -up pkg-config-0.23/main.c.biarch pkg-config-0.23/main.c --- pkg-config-0.23/main.c.biarch 2008-01-16 23:06:48.000000000 +0100 +++ pkg-config-0.23/main.c 2008-02-07 10:47:06.000000000 +0100 @@ -29,6 +29,11 @@ #include <string.h> #include <ctype.h> #include <stdio.h> +#if defined(__linux__) +#include <sys/stat.h> +#include <sys/syscall.h> +#include <sys/personality.h> +#endif #ifdef G_OS_WIN32 #define STRICT @@ -170,6 +175,17 @@ pkg_uninstalled (Package *pkg) return FALSE; } +#if defined(__linux__) +static int +is_dir(const char *path) +{ + struct stat st; + if (stat(path, &st) < 0) + return 0; + return S_ISDIR(st.st_mode); +} +#endif + int main (int argc, char **argv) { @@ -202,6 +218,9 @@ main (int argc, char **argv) char **search_dirs; char **iter; gboolean need_newline; +#if defined(__linux__) + long personality; +#endif const char *pkgname; Package *pkg; @@ -293,6 +312,12 @@ main (int argc, char **argv) } else { +#if defined(__linux__) + personality = syscall(SYS_personality, 0xffffffff); + if ((personality & PER_MASK) == PER_LINUX32 && is_dir(LIBDIR_PATH32)) + add_search_dirs(PKG_CONFIG_PC_PATH32, G_SEARCHPATH_SEPARATOR_S); + else +#endif add_search_dirs(PKG_CONFIG_PC_PATH, G_SEARCHPATH_SEPARATOR_S); } diff -p -up pkg-config-0.23/configure.in.biarch pkg-config-0.23/configure.in --- pkg-config-0.23/configure.in.biarch 2008-01-16 23:48:07.000000000 +0100 +++ pkg-config-0.23/configure.in 2008-02-07 10:49:11.000000000 +0100 @@ -18,8 +18,11 @@ AC_DEFUN([PKG_CONFIG_FIND_PC_PATH], AC_MSG_RESULT([$pc_path])], [pc_path='${libdir}/pkgconfig:${datadir}/pkgconfig']) AC_SUBST([pc_path]) - ]) +libdir_path32="$libdir/pkgconfig/32" +AC_DEFINE_UNQUOTED(LIBDIR_PATH32, ["$libdir_path32"], [libdir pkgconfig path for 32 personality]) +pc_path32="$libdir/pkgconfig/32:$datadir/pkgconfig" +AC_DEFINE_UNQUOTED(PKG_CONFIG_PC_PATH32, ["$pc_path32"], [path for 32 personality]) PKG_CONFIG_FIND_PC_PATH