base16-schemes: unstable-2024-06-21 -> unstable-2024-11-12 (#356361)
[NixPkgs.git] / pkgs / tools / text / gawk / default.nix
blob977a44fae2b896f8a4b11ae043701fcabf11638e
1 { lib, stdenv, fetchurl
2 , removeReferencesTo
3 , runtimeShellPackage
4 , texinfo
5 , interactive ? false, readline
6 , autoreconfHook # no-pma fix
8 /* Test suite broke on:
9        stdenv.hostPlatform.isCygwin # XXX: `test-dup2' segfaults on Cygwin 6.1
10     || stdenv.hostPlatform.isDarwin # XXX: `locale' segfaults
11     || stdenv.hostPlatform.isSunOS  # XXX: `_backsmalls1' fails, locale stuff?
12     || stdenv.hostPlatform.isFreeBSD
14 , doCheck ? (interactive && stdenv.hostPlatform.isLinux), glibcLocales ? null
15 , locale ? null
18 assert (doCheck && stdenv.hostPlatform.isLinux) -> glibcLocales != null;
20 stdenv.mkDerivation rec {
21   pname = "gawk" + lib.optionalString interactive "-interactive";
22   version = "5.3.1";
24   src = fetchurl {
25     url = "mirror://gnu/gawk/gawk-${version}.tar.xz";
26     hash = "sha256-aU23ZIEqYjZCPU/0DOt7bExEEwG3KtUCu1wn4AzVb3g=";
27   };
29   # PIE is incompatible with the "persistent malloc" ("pma") feature.
30   # While build system attempts to pass -no-pie to gcc. nixpkgs' `ld`
31   # wrapped still passes `-pie` flag to linker and breaks linkage.
32   # Let's disable "pie" until `ld` is fixed to do the right thing.
33   hardeningDisable = [ "pie" ];
35   # When we do build separate interactive version, it makes sense to always include man.
36   outputs = [ "out" "info" ]
37     ++ lib.optional (!interactive) "man";
39   strictDeps = true;
41   # no-pma fix
42   nativeBuildInputs = [
43     autoreconfHook
44     texinfo
45   ] ++ lib.optionals interactive [
46     removeReferencesTo
47   ] ++ lib.optionals (doCheck && stdenv.hostPlatform.isLinux) [
48     glibcLocales
49   ];
51   buildInputs = lib.optionals interactive [
52     runtimeShellPackage
53     readline
54   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
55     locale
56   ];
58   configureFlags = [
59     (if interactive then "--with-readline=${readline.dev}" else "--without-readline")
60   ];
62   makeFlags = [
63     "AR=${stdenv.cc.targetPrefix}ar"
64   ];
66   inherit doCheck;
68   postInstall = (if interactive then ''
69     remove-references-to -t "$NIX_CC" "$out"/bin/gawkbug
70     patchShebangs --host "$out"/bin/gawkbug
71   '' else ''
72     rm "$out"/bin/gawkbug
73   '') + ''
74     rm "$out"/bin/gawk-*
75     ln -s gawk.1 "''${!outputMan}"/share/man/man1/awk.1
76   '';
78   meta = {
79     homepage = "https://www.gnu.org/software/gawk/";
80     description = "GNU implementation of the Awk programming language";
81     longDescription = ''
82       Many computer users need to manipulate text files: extract and then
83       operate on data from parts of certain lines while discarding the rest,
84       make changes in various text files wherever certain patterns appear,
85       and so on.  To write a program to do these things in a language such as
86       C or Pascal is a time-consuming inconvenience that may take many lines
87       of code.  The job is easy with awk, especially the GNU implementation:
88       Gawk.
90       The awk utility interprets a special-purpose programming language that
91       makes it possible to handle many data-reformatting jobs with just a few
92       lines of code.
93     '';
94     license = lib.licenses.gpl3Plus;
95     platforms = lib.platforms.unix ++ lib.platforms.windows;
96     maintainers = lib.teams.helsinki-systems.members;
97     mainProgram = "gawk";
98   };