From 669bfe2e0d5d761071a41bbbd771228b2b649187 Mon Sep 17 00:00:00 2001 From: Tollef Fog Heen Date: Mon, 30 Mar 2009 20:49:17 +0200 Subject: 2009-03-30 Tollef Fog Heen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pkg.[ch], main.c, check/check-missing: Don't recurse Requires at all unless we need to. Add check. Again, thanks to Loïc Minier for most of the idea and the implementation. --- ChangeLog | 4 ++++ check/Makefile.am | 3 ++- check/check-missing | 26 ++++++++++++++++++++++++++ check/missing-requires.pc | 12 ++++++++++++ main.c | 6 ++++++ pkg.c | 11 +++++++++++ pkg.h | 2 ++ 7 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 check/missing-requires.pc diff --git a/ChangeLog b/ChangeLog index 46a6603..cc54d4c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-03-30 Tollef Fog Heen + * pkg.[ch], main.c, check/check-missing: Don't recurse Requires at + all unless we need to. Add check. Again, thanks to Loïc Minier + for most of the idea and the implementation. + * pkg.[ch], parse.[ch], main.c, check/Makefile.am, check/check-missing, check/missing-requires-private.pc: Skip Requires.private unless we need to look at them for cflags. diff --git a/check/Makefile.am b/check/Makefile.am index 355f192..0728514 100644 --- a/check/Makefile.am +++ b/check/Makefile.am @@ -4,5 +4,6 @@ TESTS = check-cflags check-libs check-define-variable \ check-conflicts check-missing EXTRA_DIST = $(TESTS) common simple.pc requires-test.pc public-dep.pc \ - private-dep.pc includedir.pc missing-requires-private.pc + private-dep.pc includedir.pc missing-requires-private.pc \ + missing-requires.pc diff --git a/check/check-missing b/check/check-missing index bd2650c..667de6c 100755 --- a/check/check-missing +++ b/check/check-missing @@ -50,3 +50,29 @@ ARGS="--variable includedir missing-requires-private" EXPECT_RETURN=0 RESULT="/usr/include/somedir" run_test + +# tests below are on an existing package, but with missing Requires; when +# pkg-config outputs error, the actual error text isn't checked +# package exists +ARGS="missing-requires" +EXPECT_RETURN=0 +RESULT="" +run_test + +# Libs should fail +ARGS="--silence-errors --libs missing-requires" +EXPECT_RETURN=1 +RESULT="" +run_test + +# Cflags should fail +ARGS="--silence-errors --cflags missing-requires" +EXPECT_RETURN=1 +RESULT="" +run_test + +# get includedir var +ARGS="--variable includedir missing-requires" +EXPECT_RETURN=0 +RESULT="/usr/include/somedir" +run_test diff --git a/check/missing-requires.pc b/check/missing-requires.pc new file mode 100644 index 0000000..755feb7 --- /dev/null +++ b/check/missing-requires.pc @@ -0,0 +1,12 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include/somedir + +Name: Missing Requires test package +Description: Dummy pkgconfig test package for testing with a missing Requires +Version: 1.0.0 +Requires: pkg-non-existent-dep +Libs: -L/missing-requires/lib -lmissing-requires +Cflags: -I/missing-requires/include +foodir: bar diff --git a/main.c b/main.c index 568c171..640aad1 100644 --- a/main.c +++ b/main.c @@ -391,6 +391,12 @@ main (int argc, char **argv) (want_static_lib_list && (want_libs || want_l_libs || want_L_libs))) enable_requires_private(); + /* ignore Requires if no Cflags or Libs are requested */ + + if (!want_I_cflags && !want_other_cflags && !want_cflags && + !want_libs && !want_l_libs && !want_L_libs) + disable_requires(); + if (want_my_version) { printf ("%s\n", VERSION); diff --git a/pkg.c b/pkg.c index 236462f..1ee179e 100644 --- a/pkg.c +++ b/pkg.c @@ -1531,6 +1531,17 @@ disable_private_libs(void) ignore_private_libs = TRUE; } +void +enable_requires(void) +{ + ignore_requires = FALSE; +} + +void +disable_requires(void) +{ + ignore_requires = TRUE; +} void enable_requires_private(void) diff --git a/pkg.h b/pkg.h index 97ea176..2c552d3 100644 --- a/pkg.h +++ b/pkg.h @@ -119,6 +119,8 @@ gboolean name_ends_in_uninstalled (const char *str); void enable_private_libs(void); void disable_private_libs(void); +void enable_requires(void); +void disable_requires(void); void enable_requires_private(void); void disable_requires_private(void); -- cgit v1.2.1