summary refs log tree commit diff
path: root/pkgs/shells/bash
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2019-01-07 23:54:31 -0600
committerWill Dietz <w@wdtz.org>2019-01-07 23:57:59 -0600
commit86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4 (patch)
treeddb5d14e67079e8a69b51b885dc21a3e04f66bf3 /pkgs/shells/bash
parentd18abcb3f61eb6e95558f9fc73b1d06ef52e2029 (diff)
downloadnixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar.gz
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar.bz2
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar.lz
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar.xz
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.tar.zst
nixpkgs-86a1a3950b7cf714357d6a9c99566a2ca1b5b6b4.zip
bash5: init bash 5.0
https://lists.gnu.org/archive/html/info-gnu/2019-01/msg00010.html
Diffstat (limited to 'pkgs/shells/bash')
-rw-r--r--pkgs/shells/bash/5.0.nix135
-rw-r--r--pkgs/shells/bash/bash-5.0-patches.nix4
2 files changed, 139 insertions, 0 deletions
diff --git a/pkgs/shells/bash/5.0.nix b/pkgs/shells/bash/5.0.nix
new file mode 100644
index 00000000000..e747511be59
--- /dev/null
+++ b/pkgs/shells/bash/5.0.nix
@@ -0,0 +1,135 @@
+{ stdenv, buildPackages
+, fetchurl, binutils ? null, bison, autoconf, utillinux
+
+# patch for cygwin requires readline support
+, interactive ? stdenv.isCygwin, readline80 ? null
+, withDocs ? false, texinfo ? null
+}:
+
+with stdenv.lib;
+
+assert interactive -> readline80 != null;
+assert withDocs -> texinfo != null;
+assert stdenv.hostPlatform.isDarwin -> binutils != null;
+
+let
+  upstreamPatches = import ./bash-5.0-patches.nix (nr: sha256: fetchurl {
+    url = "mirror://gnu/bash/bash-5.0-patches/bash50-${nr}";
+    inherit sha256;
+  });
+in
+
+stdenv.mkDerivation rec {
+  name = "bash-${optionalString interactive "interactive-"}${version}-p${toString (builtins.length upstreamPatches)}";
+  version = "5.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/bash/bash-${version}.tar.gz";
+    sha256 = "0kgvfwqdcd90waczf4gx39xnrxzijhjrzyzv7s8v4w31qqm0za5l";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  outputs = [ "out" "dev" "man" "doc" "info" ];
+
+  NIX_CFLAGS_COMPILE = ''
+    -DSYS_BASHRC="/etc/bashrc"
+    -DSYS_BASH_LOGOUT="/etc/bash_logout"
+    -DDEFAULT_PATH_VALUE="/no-such-path"
+    -DSTANDARD_UTILS_PATH="/no-such-path"
+    -DNON_INTERACTIVE_LOGIN_SHELLS
+    -DSSH_SOURCE_BASHRC
+  '';
+
+  patchFlags = "-p0";
+
+  patches = upstreamPatches
+    ++ optional stdenv.hostPlatform.isCygwin ./cygwin-bash-4.4.11-2.src.patch
+    # https://lists.gnu.org/archive/html/bug-bash/2016-10/msg00006.html
+    ++ optional stdenv.hostPlatform.isMusl (fetchurl {
+      url = "https://lists.gnu.org/archive/html/bug-bash/2016-10/patchJxugOXrY2y.patch";
+      sha256 = "1m4v9imidb1cc1h91f2na0b8y9kc5c5fgmpvy9apcyv2kbdcghg1";
+    });
+
+  configureFlags = [
+    (if interactive then "--with-installed-readline" else "--disable-readline")
+  ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    "bash_cv_job_control_missing=nomissing"
+    "bash_cv_sys_named_pipes=nomissing"
+    "bash_cv_getcwd_malloc=yes"
+  ] ++ optionals stdenv.hostPlatform.isCygwin [
+    "--without-libintl-prefix"
+    "--without-libiconv-prefix"
+    "--with-installed-readline"
+    "bash_cv_dev_stdin=present"
+    "bash_cv_dev_fd=standard"
+    "bash_cv_termcap_lib=libncurses"
+  ] ++ optionals (stdenv.hostPlatform.libc == "musl") [
+    "--without-bash-malloc"
+    "--disable-nls"
+  ];
+
+  # Note: Bison is needed because the patches above modify parse.y.
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ bison ]
+    ++ optional withDocs texinfo
+    ++ optional stdenv.hostPlatform.isDarwin binutils
+    ++ optional (stdenv.hostPlatform.libc == "musl") autoconf;
+
+  buildInputs = optional interactive readline80;
+
+  # Bash randomly fails to build because of a recursive invocation to
+  # build `version.h'.
+  enableParallelBuilding = false;
+
+  makeFlags = optional stdenv.hostPlatform.isCygwin [
+    "LOCAL_LDFLAGS=-Wl,--export-all,--out-implib,libbash.dll.a"
+    "SHOBJ_LIBS=-lbash"
+  ];
+
+  checkInputs = [ utillinux ];
+  doCheck = false; # dependency cycle, needs to be interactive
+
+  postInstall = ''
+    ln -s bash "$out/bin/sh"
+    rm -f $out/lib/bash/Makefile.inc
+  '';
+
+  postFixup = if interactive
+    then ''
+      substituteInPlace "$out/bin/bashbug" \
+        --replace '${stdenv.shell}' "$out/bin/bash"
+    ''
+    # most space is taken by locale data
+    else ''
+      rm -rf "$out/share" "$out/bin/bashbug"
+    '';
+
+  meta = with stdenv.lib; {
+    homepage = https://www.gnu.org/software/bash/;
+    description =
+      "GNU Bourne-Again Shell, the de facto standard shell on Linux" +
+        (if interactive then " (for interactive use)" else "");
+
+    longDescription = ''
+      Bash is the shell, or command language interpreter, that will
+      appear in the GNU operating system.  Bash is an sh-compatible
+      shell that incorporates useful features from the Korn shell
+      (ksh) and C shell (csh).  It is intended to conform to the IEEE
+      POSIX P1003.2/ISO 9945.2 Shell and Tools standard.  It offers
+      functional improvements over sh for both programming and
+      interactive use.  In addition, most sh scripts can be run by
+      Bash without modification.
+    '';
+
+    license = licenses.gpl3Plus;
+
+    platforms = platforms.all;
+
+    maintainers = [ maintainers.peti ];
+  };
+
+  passthru = {
+    shellPath = "/bin/bash";
+  };
+}
diff --git a/pkgs/shells/bash/bash-5.0-patches.nix b/pkgs/shells/bash/bash-5.0-patches.nix
new file mode 100644
index 00000000000..b8019fb3350
--- /dev/null
+++ b/pkgs/shells/bash/bash-5.0-patches.nix
@@ -0,0 +1,4 @@
+# Automatically generated by `update-patch-set.sh'; do not edit.
+
+patch: [
+]