From 26f635d39aa69b740c938349f8034b281a6663ca Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 08:49:21 -0400
Subject: [PATCH 1/7] pkg-config: Document new location of bug

---
 pkgs/development/tools/misc/pkg-config/default.nix | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/pkgs/development/tools/misc/pkg-config/default.nix b/pkgs/development/tools/misc/pkg-config/default.nix
index d5e766283ce6..ceca1cf590c0 100644
--- a/pkgs/development/tools/misc/pkg-config/default.nix
+++ b/pkgs/development/tools/misc/pkg-config/default.nix
@@ -12,7 +12,8 @@ stdenv.mkDerivation rec {
   };
 
   # Process Requires.private properly, see
-  # http://bugs.freedesktop.org/show_bug.cgi?id=4738.
+  # http://bugs.freedesktop.org/show_bug.cgi?id=4738, migrated to
+  # https://gitlab.freedesktop.org/pkg-config/pkg-config/issues/28
   patches = optional (!vanilla) ./requires-private.patch
     ++ optional stdenv.isCygwin ./2.36.3-not-win32.patch;
 

From 42b203573072bc0df6285c1a3dd458eaaffd84dd Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 08:52:20 -0400
Subject: [PATCH 2/7] pkg-config: If building vanilla version, can run original
 tests

---
 pkgs/development/tools/misc/pkg-config/default.nix | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkgs/development/tools/misc/pkg-config/default.nix b/pkgs/development/tools/misc/pkg-config/default.nix
index ceca1cf590c0..2cecb25eeeec 100644
--- a/pkgs/development/tools/misc/pkg-config/default.nix
+++ b/pkgs/development/tools/misc/pkg-config/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     ++ optional stdenv.isCygwin ./2.36.3-not-win32.patch;
 
   # These three tests fail due to a (desired) behavior change from our ./requires-private.patch
-  postPatch = ''
+  postPatch = if vanilla then null else ''
     rm -f check/check-requires-private check/check-gtk check/missing
   '';
 

From f29919da616a51d805ef1cf3800d023d9d00e2dc Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 08:52:41 -0400
Subject: [PATCH 3/7] pkg-config: Multiple outputs

This is good practice, and will help with tests. Wrapper adjust to match
bintools-wrapper re these new outputs.
---
 pkgs/build-support/pkg-config-wrapper/default.nix  | 10 ++++++----
 pkgs/development/tools/misc/pkg-config/default.nix |  2 ++
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/pkgs/build-support/pkg-config-wrapper/default.nix b/pkgs/build-support/pkg-config-wrapper/default.nix
index 87efc3b18aa8..75390ab4b6ff 100644
--- a/pkgs/build-support/pkg-config-wrapper/default.nix
+++ b/pkgs/build-support/pkg-config-wrapper/default.nix
@@ -36,7 +36,7 @@ stdenv.mkDerivation {
 
   inherit targetPrefix suffixSalt;
 
-  outputs = [ "out" ] ++ optionals propagateDoc [ "man" ];
+  outputs = [ "out" ] ++ optionals propagateDoc ([ "man" ] ++ optional (pkg-config ? doc) "doc");
 
   passthru = {
     inherit pkg-config;
@@ -87,13 +87,15 @@ stdenv.mkDerivation {
       printWords ${pkg-config} > $out/nix-support/propagated-user-env-packages
     ''
 
-    + optionalString propagateDoc ''
+    + optionalString propagateDoc (''
       ##
-      ## Man page and info support
+      ## Man page and doc support
       ##
 
       ln -s ${pkg-config.man} $man
-    ''
+    '' + optionalString (pkg-config ? doc) ''
+      ln -s ${pkg-config.doc} $doc
+    '')
 
     + ''
       substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
diff --git a/pkgs/development/tools/misc/pkg-config/default.nix b/pkgs/development/tools/misc/pkg-config/default.nix
index 2cecb25eeeec..84f6c330f8c5 100644
--- a/pkgs/development/tools/misc/pkg-config/default.nix
+++ b/pkgs/development/tools/misc/pkg-config/default.nix
@@ -11,6 +11,8 @@ stdenv.mkDerivation rec {
     sha256 = "14fmwzki1rlz8bs2p810lk6jqdxsk966d8drgsjmi54cd00rrikg";
   };
 
+  outputs = [ "out" "man" "doc" ];
+
   # Process Requires.private properly, see
   # http://bugs.freedesktop.org/show_bug.cgi?id=4738, migrated to
   # https://gitlab.freedesktop.org/pkg-config/pkg-config/issues/28

From 4b2ab665fbeb28b9837e920841ca81c570dfbdd4 Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 09:16:34 -0400
Subject: [PATCH 4/7] pkg-config-wrapper: Provide autoconf macros

This fixes libarchive, and probably numerous other builds.
---
 pkgs/build-support/pkg-config-wrapper/default.nix | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/pkgs/build-support/pkg-config-wrapper/default.nix b/pkgs/build-support/pkg-config-wrapper/default.nix
index 75390ab4b6ff..3e5785d23988 100644
--- a/pkgs/build-support/pkg-config-wrapper/default.nix
+++ b/pkgs/build-support/pkg-config-wrapper/default.nix
@@ -64,6 +64,15 @@ stdenv.mkDerivation {
       echo $pkg-config > $out/nix-support/orig-pkg-config
 
       wrap ${targetPrefix}pkg-config ${./pkg-config-wrapper.sh} "${getBin pkg-config}/bin/pkg-config"
+    ''
+    # symlink in share for autoconf to find macros
+
+    # TODO(@Ericson2314): in the future just make the unwrapped pkg-config a
+    # propagated dep once we can rely on downstream deps comming first in
+    # search paths. (https://github.com/NixOS/nixpkgs/pull/31414 took a crack
+    # at this.)
+    + ''
+      ln -s ${pkg-config}/share $out/share
     '';
 
   strictDeps = true;

From 23490e3f50bf663971528c2aa2a8b1f496d3d128 Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 11:03:57 -0400
Subject: [PATCH 5/7] pkgconf: Multiple outputs

---
 .../tools/misc/pkgconf/default.nix            | 29 ++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/pkgs/development/tools/misc/pkgconf/default.nix b/pkgs/development/tools/misc/pkgconf/default.nix
index 02b7ff5fcd3d..fb8281ff98c4 100644
--- a/pkgs/development/tools/misc/pkgconf/default.nix
+++ b/pkgs/development/tools/misc/pkgconf/default.nix
@@ -1,14 +1,41 @@
-{ stdenv, fetchurl }:
+{ stdenv, fetchurl, removeReferencesTo }:
 
 stdenv.mkDerivation rec {
   pname = "pkgconf";
   version = "1.6.3";
 
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  outputs = [ "out" "lib" "dev" "man" "doc" ];
+
+  enableParallelBuilding = true;
+
   src = fetchurl {
     url = "https://distfiles.dereferenced.org/${pname}/${pname}-${version}.tar.xz";
     sha256 = "04525vv0y849vvc2pi60g5wd9fjp1wbhra2lniifi82y1ldv7w31";
   };
 
+  # Debian has outputs like these too:
+  # https://packages.debian.org/source/buster/pkgconf, so take it this
+  # reference removing is safe.
+  postFixup = ''
+    remove-references-to \
+      -t "${placeholder "dev"}" \
+      "${placeholder "lib"}"/lib/* \
+      "${placeholder "out"}"/bin/*
+    remove-references-to \
+      -t "${placeholder "out"}" \
+      "${placeholder "lib"}"/lib/*
+  ''
+  # Move back share/aclocal. Yes, this normally goes in the dev output for good
+  # reason, but in this case the dev output is for the `libpkgconf` library,
+  # while the aclocal stuff is for the tool. The tool is already for use during
+  # development, so there is no reason to have separate "dev-bin" and "dev-lib"
+  # outputs or someting.
+  + ''
+    mv ${placeholder "dev"}/share ${placeholder "out"}
+  '';
+
   meta = with stdenv.lib; {
     description = "Package compiler and linker metadata toolkit";
     homepage = "https://git.dereferenced.org/pkgconf/pkgconf";

From 95080ea90ba705f2a17e48b7cd824f2d0d2c44a3 Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 11:13:27 -0400
Subject: [PATCH 6/7] pkgconf: Wrap with pkg-config-wrapper

---
 pkgs/build-support/pkg-config-wrapper/default.nix   | 5 +++--
 pkgs/build-support/pkg-config-wrapper/setup-hook.sh | 2 +-
 pkgs/top-level/all-packages.nix                     | 6 +++++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/pkgs/build-support/pkg-config-wrapper/default.nix b/pkgs/build-support/pkg-config-wrapper/default.nix
index 3e5785d23988..f1bc5da5481d 100644
--- a/pkgs/build-support/pkg-config-wrapper/default.nix
+++ b/pkgs/build-support/pkg-config-wrapper/default.nix
@@ -4,6 +4,7 @@
 { stdenvNoCC
 , buildPackages
 , pkg-config
+, baseBinName ? "pkg-config"
 , propagateDoc ? pkg-config != null && pkg-config ? man
 , extraPackages ? [], extraBuildCommands ? ""
 }:
@@ -34,7 +35,7 @@ stdenv.mkDerivation {
 
   shell = getBin stdenvNoCC.shell + stdenvNoCC.shell.shellPath or "";
 
-  inherit targetPrefix suffixSalt;
+  inherit targetPrefix suffixSalt baseBinName;
 
   outputs = [ "out" ] ++ optionals propagateDoc ([ "man" ] ++ optional (pkg-config ? doc) "doc");
 
@@ -63,7 +64,7 @@ stdenv.mkDerivation {
 
       echo $pkg-config > $out/nix-support/orig-pkg-config
 
-      wrap ${targetPrefix}pkg-config ${./pkg-config-wrapper.sh} "${getBin pkg-config}/bin/pkg-config"
+      wrap ${targetPrefix}${baseBinName} ${./pkg-config-wrapper.sh} "${getBin pkg-config}/bin/${baseBinName}"
     ''
     # symlink in share for autoconf to find macros
 
diff --git a/pkgs/build-support/pkg-config-wrapper/setup-hook.sh b/pkgs/build-support/pkg-config-wrapper/setup-hook.sh
index 12b9af5e5837..34f1a999a82e 100644
--- a/pkgs/build-support/pkg-config-wrapper/setup-hook.sh
+++ b/pkgs/build-support/pkg-config-wrapper/setup-hook.sh
@@ -23,7 +23,7 @@ getTargetRoleWrapper
 
 addEnvHooks "$targetOffset" pkgConfigWrapper_addPkgConfigPath
 
-export PKG_CONFIG${role_post}=@targetPrefix@pkg-config
+export PKG_CONFIG${role_post}=@targetPrefix@@baseBinName@
 
 # No local scope in sourced file
 unset -v role_post
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 680177a2610a..228af7e55a53 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -10739,7 +10739,11 @@ in
 
   pmccabe = callPackage ../development/tools/misc/pmccabe { };
 
-  pkgconf = callPackage ../development/tools/misc/pkgconf {};
+  pkgconf-unwrapped = callPackage ../development/tools/misc/pkgconf {};
+  pkgconf = callPackage ../build-support/pkg-config-wrapper {
+    pkg-config = pkgconf-unwrapped;
+    baseBinName = "pkgconf";
+  };
 
   pkg-config-unwrapped = callPackage ../development/tools/misc/pkg-config { };
   pkg-config = callPackage ../build-support/pkg-config-wrapper {

From 7e9d807f2cfbf4645ac9dab97e895435c3f6fe7b Mon Sep 17 00:00:00 2001
From: John Ericson <John.Ericson@Obsidian.Systems>
Date: Thu, 21 May 2020 11:15:15 -0400
Subject: [PATCH 7/7] pkg-config-wrapper: Move comments outside of strings

This is much better because then we can freely keep the comments up to
date without causing mass rebuilds.

Someday, somebody should make the same change with `cc-wrapper` and
`bintools-wrapper`.
---
 .../pkg-config-wrapper/default.nix            | 27 +++++++++----------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/pkgs/build-support/pkg-config-wrapper/default.nix b/pkgs/build-support/pkg-config-wrapper/default.nix
index f1bc5da5481d..e01df107dd17 100644
--- a/pkgs/build-support/pkg-config-wrapper/default.nix
+++ b/pkgs/build-support/pkg-config-wrapper/default.nix
@@ -86,22 +86,20 @@ stdenv.mkDerivation {
   ];
 
   postFixup =
+    ##
+    ## User env support
+    ##
+
+    # Propagate the underling unwrapped pkg-config so that if you
+    # install the wrapper, you get anything else it might provide.
     ''
-
-      ##
-      ## User env support
-      ##
-
-      # Propagate the underling unwrapped pkg-config so that if you
-      # install the wrapper, you get anything else it might provide.
       printWords ${pkg-config} > $out/nix-support/propagated-user-env-packages
     ''
 
+    ##
+    ## Man page and doc support
+    ##
     + optionalString propagateDoc (''
-      ##
-      ## Man page and doc support
-      ##
-
       ln -s ${pkg-config.man} $man
     '' + optionalString (pkg-config ? doc) ''
       ln -s ${pkg-config.doc} $doc
@@ -110,12 +108,11 @@ stdenv.mkDerivation {
     + ''
       substituteAll ${./add-flags.sh} $out/nix-support/add-flags.sh
       substituteAll ${../wrapper-common/utils.bash} $out/nix-support/utils.bash
-
-      ##
-      ## Extra custom steps
-      ##
     ''
 
+    ##
+    ## Extra custom steps
+    ##
     + extraBuildCommands;
 
   meta =