--- pkg-config-0.21/main.c.biarch 2006-08-16 19:54:56.000000000 +0200 +++ pkg-config-0.21/main.c 2006-10-18 13:13:22.000000000 +0200 @@ -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 @@ -169,6 +174,17 @@ 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) { @@ -201,6 +217,9 @@ char **search_dirs; char **iter; gboolean need_newline; +#if defined(__linux__) + long personality; +#endif const char *pkgname; Package *pkg; @@ -292,6 +311,12 @@ } 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); } --- pkg-config-0.21/configure.in.biarch 2006-08-16 21:09:30.000000000 +0200 +++ pkg-config-0.21/configure.in 2006-10-18 13:08:41.000000000 +0200 @@ -18,6 +18,10 @@ 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]) dnl AC_DEFINE_UNQUOTED(PKG_CONFIG_PC_PATH,["$pc_path"],[Default search path for .pc files]) ])