From 9dded0124b07f6dd3f22ca8f90f60dcbf9dc9396 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Fri, 16 Sep 2011 18:16:58 +0000 Subject: [PATCH] Implement --cflags-only-I and --cflags--only-other same as for --libs-* make them exclusive and use the same priority as for the freedesktop implementation --- tools/pkg-config.c | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/tools/pkg-config.c b/tools/pkg-config.c index da994a8..391846d 100644 --- a/tools/pkg-config.c +++ b/tools/pkg-config.c @@ -45,6 +45,8 @@ typedef struct _PkgConfigPrefs { int cflags; + int cflags_only_I; + int cflags_only_other; int exists; int libs; int libs_only_L; @@ -266,9 +268,22 @@ static int _pkgconfig_parse_directive(PkgConfig * pc, char const * directive, /* FIXME parse and store arguments for later instead */ else if(strcmp(directive, "Version") == 0 && pc->prefs.modversion) printf("%s\n", p); - else if(strcmp(directive, "Cflags") == 0 && pc->prefs.cflags) - printf(" %s", p); - else if(strcmp(directive, "Libs") == 0 && pc->prefs.libs) { + else if(strcmp(directive, "Cflags") == 0 && pc->prefs.cflags) { + if(pc->prefs.cflags_only_I) { + while((walk = strrchr(p, ' ')) != NULL) { + if (walk[1] == '-' && walk[2] == 'I') + printf(" %s", walk); + walk[0] = '\0'; + } + } else if(pc->prefs.cflags_only_other) { + while((walk = strrchr(p, ' ')) != NULL) { + if (walk[1] == '-' && walk[2] != 'I') + printf(" %s", walk); + walk[0] = '\0'; + } + } else + printf(" %s", p); + } else if(strcmp(directive, "Libs") == 0 && pc->prefs.libs) { if(pc->prefs.libs_only_l) { while((walk = strrchr(p, ' ')) != NULL) { if (walk[1] == '-' && walk[2] == 'l') @@ -534,6 +549,9 @@ static int _usage(int brief) stderr); else fputs("Usage: pkg-config [OPTIONS...] [PACKAGES...]\n" +" --cflags Output all pre-processor and compiler flags\n" +" --cflags-only-I Output -I flags\n" +" --cflags-only-other Output non -I flags\n" " --libs Output all linker flags\n" " --libs_only_L Ouput -L flags\n" " --libs_only_l Ouput -l flags\n" @@ -552,6 +570,8 @@ static int _usage(int brief) /* main */ static int _main_option(PkgConfigPrefs * prefs, char const * option); static int _main_option_cflags(PkgConfigPrefs * prefs); +static int _main_option_cflags_only_I(PkgConfigPrefs * prefs); +static int _main_option_cflags_only_other(PkgConfigPrefs * prefs); static int _main_option_exists(PkgConfigPrefs * prefs); static int _main_option_libs(PkgConfigPrefs * prefs); static int _main_option_libs_only_l(PkgConfigPrefs * prefs); @@ -567,6 +587,8 @@ static struct int (*callback)(PkgConfigPrefs * prefs); } _main_options[] = { { "cflags", _main_option_cflags }, + { "cflags-only-I", _main_option_cflags_only_I }, + { "cflags-only-other", _main_option_cflags_only_other }, { "exists", _main_option_exists }, { "libs", _main_option_libs }, { "libs-only-l", _main_option_libs_only_l }, @@ -628,6 +650,18 @@ static int _main_option_cflags(PkgConfigPrefs * prefs) return 0; } +static int _main_option_cflags_only_I(PkgConfigPrefs * prefs) +{ + prefs->cflags_only_other = 1; + return 0; +} + +static int _main_option_cflags_only_other(PkgConfigPrefs * prefs) +{ + prefs->cflags_only_other = 1; + return 0; +} + static int _main_option_exists(PkgConfigPrefs * prefs) { prefs->exists = 1;