summaryrefslogtreecommitdiff
path: root/pkgs/development/libraries/readline/8.2.nix
blob: 40f0f05887e52343bcfb08899bd8a2b0261be9fc (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
{
  lib,
  stdenv,
  fetchpatch,
  fetchurl,
  updateAutotoolsGnuConfigScriptsHook,
  ncurses,
  termcap,
  curses-library ? if stdenv.hostPlatform.isWindows then termcap else ncurses,
}:

stdenv.mkDerivation (
  finalAttrs:
  let
    inherit (finalAttrs) upstreamPatches meta;
  in
  {
    pname = "readline";
    version = "8.2p${toString (builtins.length upstreamPatches)}";

    src = fetchurl {
      url = "mirror://gnu/readline/readline-${meta.branch}.tar.gz";
      sha256 = "sha256-P+txcfFqhO6CyhijbXub4QmlLAT0kqBTMx19EJUAfDU=";
    };

    outputs = [
      "out"
      "dev"
      "man"
      "doc"
      "info"
    ];

    strictDeps = true;
    propagatedBuildInputs = [ curses-library ];
    nativeBuildInputs = [ updateAutotoolsGnuConfigScriptsHook ];

    patchFlags = [ "-p0" ];

    upstreamPatches = (
      let
        patch =
          nr: sha256:
          fetchurl {
            url = "mirror://gnu/readline/readline-${meta.branch}-patches/readline82-${nr}";
            inherit sha256;
          };
      in
      import ./readline-8.2-patches.nix patch
    );

    patches =
      lib.optionals (curses-library.pname == "ncurses") [
        ./link-against-ncurses.patch
      ]
      ++ [
        ./no-arch_only-8.2.patch
      ]
      ++ upstreamPatches
      ++ lib.optionals stdenv.hostPlatform.isWindows [
        (fetchpatch {
          name = "0001-sigwinch.patch";
          url = "https://github.com/msys2/MINGW-packages/raw/90e7536e3b9c3af55c336d929cfcc32468b2f135/mingw-w64-readline/0001-sigwinch.patch";
          stripLen = 1;
          hash = "sha256-sFK6EJrSNl0KLWqFv5zBXaQRuiQoYIZVoZfa8BZqfKA=";
        })
        (fetchpatch {
          name = "0002-event-hook.patch";
          url = "https://github.com/msys2/MINGW-packages/raw/3476319d2751a676b911f3de9e1ec675081c03b8/mingw-w64-readline/0002-event-hook.patch";
          stripLen = 1;
          hash = "sha256-F8ytYuIjBtH83ZCJdf622qjwSw+wZEVyu53E/mPsoAo=";
        })
        (fetchpatch {
          name = "0003-fd_set.patch";
          url = "https://github.com/msys2/MINGW-packages/raw/35830ab27e5ed35c2a8d486961ab607109f5af50/mingw-w64-readline/0003-fd_set.patch";
          stripLen = 1;
          hash = "sha256-UiaXZRPjKecpSaflBMCphI2kqOlcz1JkymlCrtpMng4=";
        })
        (fetchpatch {
          name = "0004-locale.patch";
          url = "https://github.com/msys2/MINGW-packages/raw/f768c4b74708bb397a77e3374cc1e9e6ef647f20/mingw-w64-readline/0004-locale.patch";
          stripLen = 1;
          hash = "sha256-dk4343KP4EWXdRRCs8GRQlBgJFgu1rd79RfjwFD/nJc=";
        })
      ];

    # This install error is caused by a very old libtool. We can't autoreconfHook this package,
    # so this is the best we've got!
    postInstall = lib.optionalString stdenv.hostPlatform.isOpenBSD ''
      ln -s $out/lib/libhistory.so* $out/lib/libhistory.so
      ln -s $out/lib/libreadline.so* $out/lib/libreadline.so
    '';

    meta = with lib; {
      description = "Library for interactive line editing";

      longDescription = ''
        The GNU Readline library provides a set of functions for use by
        applications that allow users to edit command lines as they are
        typed in.  Both Emacs and vi editing modes are available.  The
        Readline library includes additional functions to maintain a
        list of previously-entered command lines, to recall and perhaps
        reedit those lines, and perform csh-like history expansion on
        previous commands.

        The history facilities are also placed into a separate library,
        the History library, as part of the build process.  The History
        library may be used without Readline in applications which
        desire its capabilities.
      '';

      homepage = "https://savannah.gnu.org/projects/readline/";

      license = licenses.gpl3Plus;

      maintainers = with maintainers; [ dtzWill ];

      platforms = platforms.unix ++ platforms.windows;
      branch = "8.2";
    };
  }
  // lib.optionalAttrs stdenv.hostPlatform.isMinGW {
    # Make mingw-w64 provide a dummy alarm() function
    #
    # Method borrowed from
    # https://github.com/msys2/MINGW-packages/commit/35830ab27e5ed35c2a8d486961ab607109f5af50
    CFLAGS = "-D__USE_MINGW_ALARM -D_POSIX";
  }
)