[PATCH] sysroot support

Enrico Weigelt weigelt at metux.de
Sun Aug 28 07:18:51 PDT 2005


Hi folks,


here's a little patch which adds an sysroot prefix to all absolute 
pathes in cflags and ldflags output when $SYSROOT is set.

This is required for sysroot'ed crosscompiling.


cu
-- 
---------------------------------------------------------------------
 Enrico Weigelt    ==   metux IT service

  phone:     +49 36207 519931         www:       http://www.metux.de/
  fax:       +49 36207 519932         email:     contact at metux.de
  cellphone: +49 174 7066481
---------------------------------------------------------------------
 -- DSL ab 0 Euro. -- statische IP -- UUCP -- Hosting -- Webshops --
---------------------------------------------------------------------
-------------- next part --------------
diff -ruN pkg-config-0.18.1.orig/pkg.c pkg-config-0.18.1/pkg.c
--- pkg-config-0.18.1.orig/pkg.c	Sat Aug 27 22:18:14 2005
+++ pkg-config-0.18.1/pkg.c	Sat Aug 27 22:38:30 2005
@@ -886,6 +886,31 @@
       iter = iter->next;
     }
 
+  /* special handling for SYSROOT */
+  const char* sysroot = getenv("SYSROOT");
+
+  if (sysroot)
+  {
+    iter = pkg->I_cflags;
+    while (iter != NULL)
+    {
+      gint offset = 0;
+      /* we put things in canonical -I/usr/include (vs. -I /usr/include) format,
+       * but if someone changes it later we may as well be robust
+       */
+      if (strncmp(iter->data,"-I/", 3)==0)
+      {
+	char buffer[4096];
+        strcpy(buffer,"-I");
+	strcat(buffer,sysroot);
+	strcat(buffer,(iter->data)+2);
+        free(iter->data);
+	iter->data = strdup(buffer);
+      }
+      iter = iter->next;
+    }
+  }
+
   while (count)
     {
       pkg->I_cflags = g_slist_remove (pkg->I_cflags, NULL);
@@ -920,6 +945,26 @@
       iter = iter->next;
     }
 #undef SYSTEM_LIBDIR
+    
+  /* --- special handling for sysroot --- */
+  if (sysroot)
+  {
+     debug_spew("Special handling for SYSROOT ...\n");
+     iter = pkg->L_libs;
+     while (iter != NULL)
+     {
+      char buffer[4096] = "\0";
+      if (strncmp(iter->data, "-L/", 3)==0)
+      {
+        strcpy(buffer,"-L");
+	strcat(buffer,sysroot);
+	strcat(buffer,(iter->data)+2);
+        free(iter->data);
+	iter->data = strdup(buffer);
+      }
+      iter = iter->next;
+    }
+  }
 
   while (count)
     {


More information about the pkg-config mailing list