]> err.no Git - pkg-config/commitdiff
2008-01-16 Tollef Fog Heen <tfheen@err.no>
authorTollef Fog Heen <tfheen@err.no>
Wed, 16 Jan 2008 22:10:25 +0000 (23:10 +0100)
committerTollef Fog Heen <tfheen@err.no>
Wed, 16 Jan 2008 22:10:25 +0000 (23:10 +0100)
             * pkg.h, pkg.c (string_list_to_string), pkg-config.1, main.c
             (main): Add sysroot support and document same.  Triggered by
             setting PKG_CONFIG_SYSROOT_DIR in the environment.

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

index 187ca61629fde14e99c0bb095b58bb263d46ec27..5b1136bc4395ebf6488056ae23382f24ca3b8f3d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-16  Tollef Fog Heen  <tfheen@err.no>
+
+       * pkg.h, pkg.c (string_list_to_string), pkg-config.1, main.c
+       (main): Add sysroot support and document same.  Triggered by
+       setting PKG_CONFIG_SYSROOT_DIR in the environment.
+
 2007-12-29  Tollef Fog Heen  <tfheen@err.no>
 
        * pkg.c (internal_get_package): Don't add the internal-only
diff --git a/main.c b/main.c
index 68c3d422a13438d96b9cb068d5d6f758d38d459b..13cdd2e475dc0828f02a774474e8555af2a9449a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -46,6 +46,7 @@
 static int want_debug_spew = 0;
 static int want_verbose_errors = 0;
 static int want_stdout_errors = 0;
+char *pcsysrootdir = NULL;
 
 void
 debug_spew (const char *format, ...)
@@ -346,6 +347,16 @@ main (int argc, char **argv)
   }
 #endif
 
+  pcsysrootdir = getenv ("PKG_CONFIG_SYSROOT_DIR");
+  if (pcsysrootdir)
+    {
+      define_global_variable ("pc_sysrootdir", pcsysrootdir);
+    }
+  else
+    {
+      define_global_variable ("pc_sysrootdir", "/");
+    }
+
   pcbuilddir = getenv ("PKG_CONFIG_TOP_BUILD_DIR");
   if (pcbuilddir)
     {
index 80775efbb9f036b552fe3c569e81231060244316..10fe55b14a2d745d59f8795b55ab1761e1c2d252 100644 (file)
@@ -259,6 +259,15 @@ Don't strip -I/usr/include out of cflags.
 .I "PKG_CONFIG_ALLOW_SYSTEM_LIBS"
 Don't strip -L/usr/lib out of libs
 
+.TP
+.I "PKG_CONFIG_SYSROOT_DIR"
+Modify -I and -L to use the directories located in target sysroot.
+this option is usefull when crosscompiling package that use pkg-config
+to determine CFLAGS anf LDFLAGS. -I and -L are modified to point to 
+the new system root. this means that a -I/usr/include/libfoo will
+become -I/var/target/usr/include/libfoo with a PKG_CONFIG_SYSROOT_DIR
+equal to /var/target (same rule apply to -L)
+
 .TP
 .I "PKG_CONFIG_LIBDIR"
 Replaces the default \fIpkg-config\fP search directory.
diff --git a/pkg.c b/pkg.c
index 2c67af502c568f16ea4e7b1ae34870facfd6b5fe..7f252bde2bda911e4c08f3437b0f99601f5ec9fa 100644 (file)
--- a/pkg.c
+++ b/pkg.c
@@ -471,7 +471,23 @@ string_list_to_string (GSList *list)
   tmp = list;
   while (tmp != NULL)
     {
-      g_string_append (str, tmp->data);
+      char *tmpstr = (char*) tmp->data;
+      if (pcsysrootdir != NULL)
+       {
+         if (tmpstr[0] == '-' &&
+             (tmpstr[1] == 'I' ||
+              tmpstr[1] == 'L'))
+           {
+             g_string_append_c (str, '-');
+             g_string_append_c (str, tmpstr[1]);
+             g_string_append (str, pcsysrootdir);
+             g_string_append (str, tmpstr+2);
+           }
+       }
+      else 
+       {
+         g_string_append (str, tmpstr);
+       }
       g_string_append_c (str, ' ');
       
       tmp = g_slist_next (tmp);
diff --git a/pkg.h b/pkg.h
index 80432058ad6cb29fb3ad0e17d40b95676940bf4c..d749de40deccd81098f9141b0b5cc940a74d5532 100644 (file)
--- a/pkg.h
+++ b/pkg.h
@@ -123,6 +123,8 @@ void disable_private_libs(void);
 /* If TRUE, do not automatically prefer uninstalled versions */
 extern gboolean disable_uninstalled;
 
+extern char *pcsysrootdir;
+
 #ifdef G_OS_WIN32
 /* If TRUE, do not automatically define "prefix"  while
  * parsing each .pc file */