nixpkgs-suyu/pkgs/development/tools/misc/libtool/libtool2.nix
Alyssa Ross 4195ac320b libtool,libtool_1_5: don't fix libtool
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").
2022-07-06 07:11:26 +00:00

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;
};
}