4195ac320b
For the same reason we disable shebang patching in these derivations,
we want to disable the patching of libtool scripts stdenv does.
Otherwise, libtool will install scripts into other packages that are
already "fixed", but for the environment libtool was built in. These
scripts won't be fixed properly by stdenv anymore, because it will
think they were already fixed.
This fixes the build of pkgsStatic.libwebp, which was failing because
its libtool script wasn't being patched properly.
Another problem "fixing" the scripts in the libtool package would
cause is that package tarballs generated on NixOS would contain
libtool scripts that didn't make sense on other distros.
I've tested this change by building pkgsStatic.libwebp, which now
works, as well as by testing the build of the bootstrap files for
mips64el to make sure that didn't regress from 97c43828fb
("fixLibtool(): patch ./configure, add `file` to common-path.nix").
79 lines
2.5 KiB
Nix
79 lines
2.5 KiB
Nix
{ lib, stdenv, fetchurl, fetchpatch, autoconf, automake, m4, perl, help2man
|
|
, runtimeShell
|
|
, file
|
|
}:
|
|
|
|
# Note: this package is used for bootstrapping fetchurl, and thus
|
|
# cannot use fetchpatch! All mutable patches (generated by GitHub or
|
|
# cgit) that are needed here should be included directly in Nixpkgs as
|
|
# files.
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "libtool";
|
|
version = "2.4.7";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://gnu/libtool/${pname}-${version}.tar.gz";
|
|
sha256 = "sha256-BOlsJATqcMWQxUbrpCAqThJyLGQAFsErmy8c49SB6ag=";
|
|
};
|
|
|
|
outputs = [ "out" "lib" ];
|
|
|
|
# FILECMD was added in libtool 2.4.7; previous versions hardwired `/usr/bin/file`
|
|
# https://lists.gnu.org/archive/html/autotools-announce/2022-03/msg00000.html
|
|
FILECMD = "${file}/bin/file";
|
|
|
|
# Normally we'd use autoreconfHook, but that includes libtoolize.
|
|
postPatch = ''
|
|
aclocal -I m4
|
|
automake
|
|
autoconf
|
|
|
|
pushd libltdl
|
|
aclocal -I ../m4
|
|
automake
|
|
autoconf
|
|
popd
|
|
'' +
|
|
# libtool commit da2e352735722917bf0786284411262195a6a3f6 changed
|
|
# the shebang from `/bin/sh` (which is a special sandbox exception)
|
|
# to `/usr/bin/env sh`, meaning that we now need to patch shebangs
|
|
# in libtoolize and ltmain.sh since `dontPatchShebangs` is set:
|
|
''
|
|
substituteInPlace libtoolize.in --replace '#! /usr/bin/env sh' '#!${runtimeShell}'
|
|
substituteInPlace build-aux/ltmain.in --replace '#! /usr/bin/env sh' '#!${runtimeShell}'
|
|
'';
|
|
|
|
strictDeps = true;
|
|
nativeBuildInputs = [ autoconf automake help2man m4 perl ];
|
|
propagatedBuildInputs = [ m4 file ];
|
|
|
|
# Don't fixup "#! /bin/sh" in Libtool, otherwise it will use the
|
|
# "fixed" path in generated files!
|
|
dontPatchShebangs = true;
|
|
dontFixLibtool = true;
|
|
|
|
# XXX: The GNU ld wrapper does all sorts of nasty things wrt. RPATH, which
|
|
# leads to the failure of a number of tests.
|
|
doCheck = false;
|
|
doInstallCheck = false;
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = with lib; {
|
|
description = "GNU Libtool, a generic library support script";
|
|
longDescription = ''
|
|
GNU libtool is a generic library support script. Libtool hides
|
|
the complexity of using shared libraries behind a consistent,
|
|
portable interface.
|
|
|
|
To use libtool, add the new generic library building commands to
|
|
your Makefile, Makefile.in, or Makefile.am. See the
|
|
documentation for details.
|
|
'';
|
|
homepage = "https://www.gnu.org/software/libtool/";
|
|
license = licenses.gpl2Plus;
|
|
maintainers = [ ];
|
|
platforms = platforms.unix;
|
|
};
|
|
}
|