From 1d5a8a5e43e56a7ca55e6d8515be2d85eb4dd95c Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Tue, 10 Jan 2023 22:59:45 +0000 Subject: [PATCH] binutils: avoid texinfo dependency during bootstrap Normally binutils provides pregenerated manuals along with release tarball. Manuals regeneration is needed every time we change `configure.ac`. But usually there are no material changes in it. This change instead inhibits manuals regeenration by keeping man and info files up to date. The diff of bootstrap tree before and after the change: $ nix-store --query --graph $(nix-instantiate -A stdenv) | fgrep ' -> ' | awk '{print $3}' | sort -u | sed 's/"[0-9a-z]\{32\}-/"/g' | sort > before $ nix-store --query --graph $(nix-instantiate -A stdenv) | fgrep ' -> ' | awk '{print $3}' | sort -u | sed 's/"[0-9a-z]\{32\}-/"/g' | sort > after $ diff -U0 before after --- before +++ after @@ -100 +99,0 @@ -"texinfo-6.8.drv" Co-authored-by: Adam Joseph <54836058+amjoseph-nixpkgs@users.noreply.github.com> --- .../tools/misc/binutils/default.nix | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 3d53c5122f00d..39e852a60bbba 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -15,7 +15,6 @@ in , noSysDirs , perl , substitute -, texinfo , zlib , enableGold ? withGold stdenv.targetPlatform @@ -52,7 +51,7 @@ let targetPrefix = lib.optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-"; in -stdenv.mkDerivation { +stdenv.mkDerivation (finalAttrs: { pname = targetPrefix + "binutils"; inherit version; @@ -110,10 +109,12 @@ stdenv.mkDerivation { strictDeps = true; depsBuildBuild = [ buildPackages.stdenv.cc ]; + # texinfo was removed here in https://github.com/NixOS/nixpkgs/pull/210132 + # to reduce rebuilds during stdenv bootstrap. Please don't add it back without + # checking the impact there first. nativeBuildInputs = [ bison perl - texinfo ] ++ lib.optionals targetPlatform.isiOS [ autoreconfHook ] ++ lib.optionals buildPlatform.isDarwin [ autoconf269 automake gettext libtool ] @@ -144,6 +145,20 @@ stdenv.mkDerivation { for i in binutils/Makefile.in gas/Makefile.in ld/Makefile.in gold/Makefile.in; do sed -i "$i" -e 's|ln |ln -s |' done + + # autoreconfHook is not included for all targets. + # Call it here explicitly as well. + ${finalAttrs.postAutoreconf} + ''; + + postAutoreconf = '' + # As we regenerated configure build system tries hard to use + # texinfo to regenerate manuals. Let's avoid the dependency + # on texinfo in bootstrap path and keep manuals unmodified. + touch gas/doc/.dirstamp + touch gas/doc/asconfig.texi + touch gas/doc/as.1 + touch gas/doc/as.info ''; # As binutils takes part in the stdenv building, we don't want references @@ -226,4 +241,4 @@ stdenv.mkDerivation { # collision due to the ld/as wrappers/symlinks in the latter. priority = 10; }; -} +})