From c8b1d2fafff16c57ec50d413c999796ec2085413 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
Date: Thu, 26 Jun 2014 10:30:42 +0300
Subject: [PATCH] Include private dependencies automatically in pkg-config for
 non-shared builds

When a user invokes pkg-config to get the necessary linker flags
for linking to libhogweed, the user can add --static to get the
private dependencies included, which are necessary for static
linking. If the hogweed build contains both static and shared
libraries, this works as intended - if the user explicitly passes
-static to the linker to have it favor static libs over shared
ones, the same user also needs to tell pkg-config about this intention.

If the hogweed build happens to be static-only, the user of the
library might not be aware of this, and might not realize needing
to pass --static to pkg-config. (This is even more an issue in
setups with a large number of libraries, where only a few of them
are built static-only.)

For these cases, where a library is built as only a static library,
one fairly common convention (not used everywhere, but at least in
some libraries I regularly use) is to include the private dependencies
in the non-private section. This makes sure a user of the library
doesn't need to be concerned about which way this library was built
(unless the user intentionally overrides defaults by passing
flags such as -static to the linker).
---
 configure.ac  | 3 +++
 hogweed.pc.in | 7 ++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/configure.ac b/configure.ac
index 2ea58662..6923d3a3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -757,8 +757,10 @@ fi
 
 if test "x$enable_shared" = xyes ; then
   IF_SHARED=''
+  IF_NOT_SHARED='#'
 else
   IF_SHARED='#'
+  IF_NOT_SHARED=''
 fi
 
 # Documentation tools
@@ -792,6 +794,7 @@ fi
 AC_SUBST(IF_HOGWEED)
 AC_SUBST(IF_STATIC)
 AC_SUBST(IF_SHARED)
+AC_SUBST(IF_NOT_SHARED)
 AC_SUBST(IF_DOCUMENTATION)
 AC_SUBST(IF_DLL)
 AC_SUBST(IF_MINI_GMP)
diff --git a/hogweed.pc.in b/hogweed.pc.in
index 839f7d0d..97fb9d46 100644
--- a/hogweed.pc.in
+++ b/hogweed.pc.in
@@ -11,8 +11,9 @@ Name: Hogweed
 Description: Nettle low-level cryptographic library (public-key algorithms)
 URL: http://www.lysator.liu.se/~nisse/nettle
 Version: @PACKAGE_VERSION@
-Requires.private: nettle
-Libs: -L${libdir} -lhogweed
-Libs.private: @LIBS@
+Requires: @IF_NOT_SHARED@ nettle
+Requires.private: @IF_SHARED@ nettle
+Libs: -L${libdir} -lhogweed @IF_NOT_SHARED@ @LIBS@
+Libs.private: @IF_SHARED@ @LIBS@
 Cflags: -I${includedir}
 
-- 
GitLab