Skip to content

Commit

Permalink
Merge pull request #168413 from a-m-joseph/libtool-purity-fix-put-fil…
Browse files Browse the repository at this point in the history
…e-in-bootstrap

fixLibtool(): replace /usr/bin/file in ./configure, add file to common-path.nix
  • Loading branch information
Mindavi authored May 28, 2022
2 parents daf4bee + 97c4382 commit f174277
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 1 deletion.
8 changes: 8 additions & 0 deletions pkgs/stdenv/common-path.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,12 @@
pkgs.bash
pkgs.patch
pkgs.xz.bin

# The `file` command is added here because an enormous number of
# packages have a vendored dependency upon `file` in their
# `./configure` script, due to libtool<=2.4.6, or due to
# libtool>=2.4.7 in which the package author decided to set FILECMD
# when running libtoolize. In fact, file-5.4.6 *depends on itself*
# and tries to invoke `file` from its own ./configure script.
pkgs.file
]
3 changes: 3 additions & 0 deletions pkgs/stdenv/darwin/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ rec {
gmp
libiconv
brotli.lib
file
] ++ lib.optional haveKRB5 libkrb5) ++
(with pkgs."${finalLlvmPackages}"; [
libcxx
Expand Down Expand Up @@ -561,6 +562,7 @@ rec {
gmp
libiconv
brotli.lib
file
] ++ lib.optional haveKRB5 libkrb5) ++
(with pkgs."${finalLlvmPackages}"; [
libcxx
Expand Down Expand Up @@ -737,6 +739,7 @@ rec {
brotli.lib
cc.expand-response-params
libxml2.out
file
] ++ lib.optional haveKRB5 libkrb5
++ lib.optionals localSystem.isAarch64 [
pkgs.updateAutotoolsGnuConfigScriptsHook
Expand Down
15 changes: 15 additions & 0 deletions pkgs/stdenv/generic/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1021,6 +1021,21 @@ configurePhase() {
echo "fixing libtool script $i"
fixLibtool "$i"
done

# replace `/usr/bin/file` with `file` in any `configure`
# scripts with vendored libtool code. Preserve mtimes to
# prevent some packages (e.g. libidn2) from spontaneously
# autoreconf'ing themselves
CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXX)
find . \
-executable \
-type f \
-name configure \
-execdir grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; \
-execdir touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; \
-execdir sed -i s_/usr/bin/file_file_g {} \; \
-execdir touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;
rm -f "$CONFIGURE_MTIME_REFERENCE"
fi

if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then
Expand Down
2 changes: 1 addition & 1 deletion pkgs/stdenv/linux/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ in
# Simple executable tools
concatMap (p: [ (getBin p) (getLib p) ]) [
gzip bzip2 xz bash binutils.bintools coreutils diffutils findutils
gawk gnumake gnused gnutar gnugrep gnupatch patchelf ed
gawk gnumake gnused gnutar gnugrep gnupatch patchelf ed file
]
# Library dependencies
++ map getLib (
Expand Down

0 comments on commit f174277

Please sign in to comment.