$OpenBSD: patch-pkg_c,v 1.10 2012/09/11 09:37:42 jasper Exp $ --- pkg.c.orig Wed May 30 14:49:24 2012 +++ pkg.c Tue Sep 11 11:33:01 2012 @@ -371,7 +371,55 @@ get_package_quiet (const char *name) return internal_get_package (name, FALSE); } +/* + 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; @@ -944,6 +992,8 @@ get_merged (Package *pkg, GetListFunc func, gboolean i g_slist_free (dups_list); + list = string_list_fix_local_I_dirs (list); + retval = string_list_to_string (list); g_slist_free (list);