From 025fc092226bfeb428d851818042b4b39962f58c Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 13 Sep 2014 22:37:00 -0500 Subject: [PATCH] main: --libs-only-foo and --cflags-only-foo behaviour should be inclusive, not exclusive. Pointed out and initial patch by: Dan Kegel --- main.c | 50 ++++++++++++++++++++++++------------------------- tests/run.sh.in | 4 +++- 2 files changed, 28 insertions(+), 26 deletions(-) diff --git a/main.c b/main.c index 7c87920..1a0e6b4 100644 --- a/main.c +++ b/main.c @@ -17,13 +17,13 @@ #include "pkg.h" #include "bsdstubs.h" -#define PKG_CFLAGS (1<<1) #define PKG_CFLAGS_ONLY_I (1<<2) #define PKG_CFLAGS_ONLY_OTHER (1<<3) -#define PKG_LIBS (1<<4) +#define PKG_CFLAGS (PKG_CFLAGS_ONLY_I|PKG_CFLAGS_ONLY_OTHER) #define PKG_LIBS_ONLY_LDPATH (1<<5) #define PKG_LIBS_ONLY_LIBNAME (1<<6) #define PKG_LIBS_ONLY_OTHER (1<<7) +#define PKG_LIBS (PKG_LIBS_ONLY_LDPATH|PKG_LIBS_ONLY_LIBNAME|PKG_LIBS_ONLY_OTHER) #define PKG_MODVERSION (1<<8) #define PKG_REQUIRES (1<<9) #define PKG_REQUIRES_PRIVATE (1<<10) @@ -121,10 +121,14 @@ print_cflags(pkg_list_t *list) PKG_FOREACH_LIST_ENTRY(list->head, node) { pkg_fragment_t *frag = node->data; + int got_flags = 0; - if ((want_flags & PKG_CFLAGS_ONLY_I) == PKG_CFLAGS_ONLY_I && frag->type != 'I') - continue; - else if ((want_flags & PKG_CFLAGS_ONLY_OTHER) == PKG_CFLAGS_ONLY_OTHER && frag->type == 'I') + if (frag->type == 'I') + got_flags = PKG_CFLAGS_ONLY_I; + else + got_flags = PKG_CFLAGS_ONLY_OTHER; + + if ((want_flags & got_flags) == 0) continue; print_fragment(frag); @@ -139,12 +143,16 @@ print_libs(pkg_list_t *list) PKG_FOREACH_LIST_ENTRY(list->head, node) { pkg_fragment_t *frag = node->data; + int got_flags = 0; - if ((want_flags & PKG_LIBS_ONLY_LDPATH) == PKG_LIBS_ONLY_LDPATH && frag->type != 'L') - continue; - else if ((want_flags & PKG_LIBS_ONLY_LIBNAME) == PKG_LIBS_ONLY_LIBNAME && frag->type != 'l') - continue; - else if ((want_flags & PKG_LIBS_ONLY_OTHER) == PKG_LIBS_ONLY_OTHER && (frag->type == 'l' || frag->type == 'L')) + switch (frag->type) + { + case 'L': got_flags = PKG_LIBS_ONLY_LDPATH; break; + case 'l': got_flags = PKG_LIBS_ONLY_LIBNAME; break; + default: got_flags = PKG_LIBS_ONLY_OTHER; break; + } + + if ((want_flags & got_flags) == 0) continue; print_fragment(frag); @@ -585,11 +593,11 @@ main(int argc, char *argv[]) { "help", no_argument, &want_flags, PKG_HELP, }, { "env-only", no_argument, &want_flags, PKG_ENV_ONLY, }, { "print-requires-private", no_argument, &want_flags, PKG_REQUIRES_PRIVATE, }, - { "cflags-only-I", no_argument, &want_flags, PKG_CFLAGS|PKG_CFLAGS_ONLY_I|PKG_PRINT_ERRORS, }, - { "cflags-only-other", no_argument, &want_flags, PKG_CFLAGS|PKG_CFLAGS_ONLY_OTHER|PKG_PRINT_ERRORS, }, - { "libs-only-L", no_argument, &want_flags, PKG_LIBS|PKG_LIBS_ONLY_LDPATH|PKG_PRINT_ERRORS, }, - { "libs-only-l", no_argument, &want_flags, PKG_LIBS|PKG_LIBS_ONLY_LIBNAME|PKG_PRINT_ERRORS, }, - { "libs-only-other", no_argument, &want_flags, PKG_LIBS|PKG_LIBS_ONLY_OTHER|PKG_PRINT_ERRORS, }, + { "cflags-only-I", no_argument, &want_flags, PKG_CFLAGS_ONLY_I|PKG_PRINT_ERRORS, }, + { "cflags-only-other", no_argument, &want_flags, PKG_CFLAGS_ONLY_OTHER|PKG_PRINT_ERRORS, }, + { "libs-only-L", no_argument, &want_flags, PKG_LIBS_ONLY_LDPATH|PKG_PRINT_ERRORS, }, + { "libs-only-l", no_argument, &want_flags, PKG_LIBS_ONLY_LIBNAME|PKG_PRINT_ERRORS, }, + { "libs-only-other", no_argument, &want_flags, PKG_LIBS_ONLY_OTHER|PKG_PRINT_ERRORS, }, { "uninstalled", no_argument, &want_flags, PKG_UNINSTALLED, }, { "no-uninstalled", no_argument, &want_flags, PKG_NO_UNINSTALLED, }, { "keep-system-cflags", no_argument, &want_flags, PKG_KEEP_SYSTEM_CFLAGS, }, @@ -649,14 +657,6 @@ main(int argc, char *argv[]) else want_flags &= ~(PKG_SILENCE_ERRORS); - if ((want_flags & PKG_LIBS_ONLY_LIBNAME) == PKG_LIBS_ONLY_LIBNAME) - want_flags &= ~(PKG_LIBS_ONLY_OTHER|PKG_LIBS_ONLY_LDPATH); - else if ((want_flags & PKG_LIBS_ONLY_LDPATH) == PKG_LIBS_ONLY_LDPATH) - want_flags &= ~(PKG_LIBS_ONLY_OTHER); - - if ((want_flags & PKG_CFLAGS_ONLY_I) == PKG_CFLAGS_ONLY_I) - want_flags &= ~(PKG_CFLAGS_ONLY_OTHER); - if ((want_flags & PKG_ABOUT) == PKG_ABOUT) { about(); @@ -940,7 +940,7 @@ main(int argc, char *argv[]) } } - if ((want_flags & PKG_CFLAGS) == PKG_CFLAGS) + if ((want_flags & PKG_CFLAGS)) { pkg_list_t frag_list = PKG_LIST_INITIALIZER; @@ -951,7 +951,7 @@ main(int argc, char *argv[]) } } - if ((want_flags & PKG_LIBS) == PKG_LIBS) + if ((want_flags & PKG_LIBS)) { pkg_list_t frag_list = PKG_LIST_INITIALIZER; diff --git a/tests/run.sh.in b/tests/run.sh.in index ba6b34e..68b1217 100644 --- a/tests/run.sh.in +++ b/tests/run.sh.in @@ -142,8 +142,10 @@ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --variable=includedir foo" \ '/usr/include' run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs-only-L --keep-system-libs cflags-libs-only" \ '-L/usr/local/lib' +run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs cflags-libs-only" \ + '-L/usr/local/lib -lfoo' run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs-only-L --libs-only-l cflags-libs-only" \ - '-lfoo' + '-L/usr/local/lib -lfoo' run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --cflags-only-I --cflags-only-other cflags-libs-only" \ '-I/usr/local/include' run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs incomplete; echo $?" \