From abdbaba3e0e02288270304bf026ed35ad6d28be1 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Sat, 14 Dec 2013 09:24:51 -0800 Subject: [PATCH] Ensure -isystem Cflags not compressed like -I Treat -isystem specially like -idirafter so that multiple arguments retain the preceding -isystem. Freedesktop #72584 (https://bugs.freedesktop.org/show_bug.cgi?id=72584) --- check/check-special-flags | 2 +- check/special-flags.pc | 2 +- parse.c | 12 +++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/check/check-special-flags b/check/check-special-flags index 136160a..c0a9ebb 100755 --- a/check/check-special-flags +++ b/check/check-special-flags @@ -4,7 +4,7 @@ set -e . ${srcdir}/common -RESULT="-idirafter /after1 -idirafter /after2 -I/foo -I/bar" +RESULT="-isystem /system1 -idirafter /after1 -idirafter /after2 -isystem /system2 -I/foo -I/bar" run_test --cflags special-flags RESULT="-framework Foo -lsimple -framework Bar" diff --git a/check/special-flags.pc b/check/special-flags.pc index 269fd36..318eab0 100644 --- a/check/special-flags.pc +++ b/check/special-flags.pc @@ -8,4 +8,4 @@ Description: Dummy pkgconfig test package for testing pkgconfig Version: 1.0.0 Requires: Libs: -framework Foo -lsimple -framework Bar -Cflags: -I/foo -idirafter /after1 -I/bar -idirafter /after2 +Cflags: -I/foo -isystem /system1 -idirafter /after1 -I/bar -idirafter /after2 -isystem /system2 diff --git a/parse.c b/parse.c index 87e5191..60785ea 100644 --- a/parse.c +++ b/parse.c @@ -851,17 +851,19 @@ parse_cflags (Package *pkg, const char *str, const char *path) flag->arg = g_strconcat ("-I", p, NULL); pkg->cflags = g_list_prepend (pkg->cflags, flag); } - else if (strcmp("-idirafter", arg) == 0 && i+1 < argc) + else if ((strcmp ("-idirafter", arg) == 0 || + strcmp ("-isystem", arg) == 0) && + i+1 < argc) { - char *dirafter, *tmp; + char *option, *tmp; tmp = trim_string (argv[i+1]); - dirafter = strdup_escape_shell (tmp); + option = strdup_escape_shell (tmp); flag->type = CFLAGS_OTHER; - flag->arg = g_strconcat (arg, " ", dirafter, NULL); + flag->arg = g_strconcat (arg, " ", option, NULL); pkg->cflags = g_list_prepend (pkg->cflags, flag); i++; - g_free (dirafter); + g_free (option); g_free (tmp); } else if (*arg != '\0')