]> err.no Git - pkg-config/commitdiff
2009-06-12 Tor Lillqvist <tml@iki.fi>
authorTollef Fog Heen <tfheen@qurzaw>
Tue, 30 Jun 2009 01:47:01 +0000 (03:47 +0200)
committerTollef Fog Heen <tfheen@qurzaw>
Tue, 30 Jun 2009 01:47:01 +0000 (03:47 +0200)
* 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.

ChangeLog
main.c
parse.c
pkg-config.1
pkg.h

index be748a9e310942ab1d786632ad03478f7b130526..1cba2963523003f3f22c8dbb6a5924c4fdab4538 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+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.
diff --git a/main.c b/main.c
index 640aad1726c1ccf15607a91ee0dfda1f3cd550c1..5c099ec9bb4f8479125efad922568d0dceaeb704 100644 (file)
--- a/main.c
+++ b/main.c
 #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;
diff --git a/parse.c b/parse.c
index 4c6275f00705d7d5b6e6ba1409d2a130d68cf39b..5292c9632508468757ba6a554b47dd6d8037e065 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -901,6 +901,8 @@ parse_url (Package *pkg, const char *str, const char *path)
 }
 
 #ifdef G_OS_WIN32
+static char *orig_prefix = NULL;
+
 static int
 pathnamecmp (const char *a,
             const char *b)
@@ -1031,8 +1033,10 @@ parse_line (Package *pkg, const char *untrimmed, const char *path,
            {
              /* 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)
@@ -1044,12 +1048,12 @@ parse_line (Package *pkg, const char *untrimmed, const char *path,
               * 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",
@@ -1058,6 +1062,16 @@ parse_line (Package *pkg, const char *untrimmed, const char *path,
              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))
index 375db76e01b8a6dc75b6bd55a385fbe0aa72b5d1..83041db5e543fdc1353ca196f780c2c7b1157c1b 100644 (file)
@@ -261,6 +261,10 @@ conventions (i.e., ends with \\lib\\pkgconfig or \\share\\pkgconfig),
 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
diff --git a/pkg.h b/pkg.h
index e7d920f77c4ba58170b8efb4b672f684fed7c723..984a4619123ca63ba5b4349f97e0cc2ca451a5f9 100644 (file)
--- a/pkg.h
+++ b/pkg.h
 #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,