$OpenBSD: patch-pkg_c,v 1.5 2005/04/09 13:07:43 espie Exp $
--- pkg.c.orig	Thu Jan 16 22:07:09 2003
+++ pkg.c	Mon Apr  4 14:12:07 2005
@@ -202,7 +202,21 @@ package_init ()
       path_positions = g_hash_table_new (g_str_hash, g_str_equal);
       
       g_slist_foreach (search_dirs, (GFunc)scan_dir, NULL);
-      scan_dir (pkglibdir);
+      {
+      char **config_dirs;
+      char **iter;
+
+      config_dirs = g_strsplit (pkglibdir, G_SEARCHPATH_SEPARATOR_S, -1);
+      iter = config_dirs;
+      while (*iter)
+        {
+          scan_dir (*iter);
+
+          ++iter;
+        }
+
+      g_strfreev (config_dirs);
+      }
     }
 }
 
@@ -339,7 +353,55 @@ get_package (const char *name)
   return internal_get_package (name, TRUE, TRUE);
 }
 
+/*
+  If certain directories are present, move them to the end of the list
+  to avoid conflicts.
+*/
 static GSList*
+string_list_fix_local_I_dirs (GSList *list)
+{
+  GSList *iter;
+  GSList *local_I_dirs = NULL;
+  GSList *local_I_dir_iter = NULL;
+  GSList *found_dirs = NULL;
+
+  iter = list;
+
+  local_I_dirs = g_slist_append (local_I_dirs, g_strdup_printf ("-I%s/include", LOCALBASE));
+  local_I_dirs = g_slist_append (local_I_dirs, g_strdup_printf ("-I%s/include", X11BASE));
+
+  while (iter != NULL)
+    {
+      local_I_dir_iter = local_I_dirs;
+      while (local_I_dir_iter != NULL)
+        {
+          if (strcmp (local_I_dir_iter->data, iter->data) == 0)
+            {
+              debug_spew ("List contains \"%s\" - moving it to the end\n", (gchar *)iter->data);
+              found_dirs = g_slist_append (found_dirs, iter->data);
+              iter->data = NULL;
+              break;
+            }
+          local_I_dir_iter = local_I_dir_iter->next;
+        }
+      iter = iter->next;
+    }
+
+  g_slist_free (local_I_dirs);
+
+  while (found_dirs != NULL)
+    {
+      list = g_slist_remove (list, NULL);
+      list = g_slist_append (list, found_dirs->data);
+      found_dirs = found_dirs->next;
+    }
+
+  g_slist_free (found_dirs);
+
+  return list;
+}
+
+static GSList*
 string_list_strip_duplicates (GSList *list)
 {
   GHashTable *table;
@@ -929,6 +991,8 @@ get_multi_merged (GSList *pkgs, GetListF
 
   g_slist_free (dups_list);
   
+  list = string_list_fix_local_I_dirs (list);
+
   retval = string_list_to_string (list);
 
   g_slist_free (list);
