+2009-06-12 Tor Lillqvist <tml@iki.fi>
+
+ * parse.c: On Win32, if the value of a a variable other than the
+ "prefix" one starts with the non-overridden value of "prefix",
+ then replace that prefix, too, with the run-time one.
+
+ To avoid shadowing warnings, rename a 'p' variable to 'q'.
+
+ * pkg-config.1: Corresponding update.
+
+ * main.c
+ * pkg.h: Move the Win32 redefinition of PKG_CONFIG_PC_PATH from
+ main.c to pkg.h as it now is needed in pkg.c, too.
+
2009-03-30 Tollef Fog Heen <tfheen@err.no>
* autogen.sh: Allow not running configure, wanted by cygwin.
#undef STRICT
#endif
-#ifdef G_OS_WIN32
-/* No hardcoded paths in the binary, thanks */
-/* It's OK to leak this */
-#undef PKG_CONFIG_PC_PATH
-#define PKG_CONFIG_PC_PATH \
- g_strconcat (g_win32_get_package_installation_subdirectory (NULL, NULL, "lib/pkgconfig"), \
- ";", \
- g_win32_get_package_installation_subdirectory (NULL, NULL, "share/pkgconfig"), \
- NULL)
-#endif
-
static int want_debug_spew = 0;
static int want_verbose_errors = 0;
static int want_stdout_errors = 0;
}
#ifdef G_OS_WIN32
+static char *orig_prefix = NULL;
+
static int
pathnamecmp (const char *a,
const char *b)
{
/* It ends in lib\pkgconfig or share\pkgconfig. Good. */
- gchar *p;
+ gchar *q;
+ orig_prefix = g_strdup (p);
+
prefix = g_strdup (prefix);
if (strlen (prefix) > lib_pkgconfig_len &&
pathnamecmp (prefix + prefix_len - lib_pkgconfig_len, lib_pkgconfig) == 0)
* poptParseArgvString() will eat them when ${prefix}
* has been expanded in parse_libs().
*/
- p = prefix;
- while (*p)
+ q = prefix;
+ while (*q)
{
- if (*p == '\\')
- *p = '/';
- p++;
+ if (*q == '\\')
+ *q = '/';
+ q++;
}
varname = g_strdup (tag);
debug_spew (" Variable declaration, '%s' overridden with '%s'\n",
goto cleanup;
}
}
+ else if (!dont_define_prefix &&
+ orig_prefix != NULL &&
+ strncmp (p, orig_prefix, strlen (orig_prefix)) == 0 &&
+ G_IS_DIR_SEPARATOR (p[strlen (orig_prefix)]))
+ {
+ char *oldstr = str;
+
+ p = str = g_strconcat (g_hash_table_lookup (pkg->vars, prefix_variable), p + strlen (orig_prefix), NULL);
+ g_free (oldstr);
+ }
#endif
if (g_hash_table_lookup (pkg->vars, tag))
the prefix for that package is assumed to be the grandparent of the
directory where the file was found, and the \fIprefix\fP variable is
overridden for that file accordingly.
+
+If the value of a variable in a .pc file begins with the original,
+non-overridden, value of the \fIprefix\fP variable, then the overridden
+value of \fIprefix\fP is used instead.
.\"
.SH AUTOCONF MACROS
.TP
#include "glib-1.2.10/glib.h"
#endif
+#ifdef G_OS_WIN32
+/* No hardcoded paths in the binary, thanks */
+/* It's OK to leak this */
+#undef PKG_CONFIG_PC_PATH
+#define PKG_CONFIG_PC_PATH \
+ g_strconcat (g_win32_get_package_installation_subdirectory (NULL, NULL, "lib/pkgconfig"), \
+ ";", \
+ g_win32_get_package_installation_subdirectory (NULL, NULL, "share/pkgconfig"), \
+ NULL)
+#endif
+
typedef enum
{
LESS_THAN,