// GNU software with trivial packaging.

package m4 {
	description = "a macro processor with GNU extensions";
	website = "https://www.gnu.org/software/m4";
	anitya = 1871;

	version# = "1.4.21";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/m4/m4-"+version+".tar.bz2";
		checksum = "pPa6YOo722Jw80l1OsH1tnUaklnPFjFT-bxGw5iAVrZTm1P8FQaWao_NXop46-pm";
		compress = bzip2;
	};

	writable = true;
	early = `
chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh
`;

	exec = make {};

	inputs = [
		diffutils,

		kernel-headers,
	];
}

package autoconf {
	description = "M4 macros to produce self-contained configure script";
	website = "https://www.gnu.org/software/autoconf";
	anitya = 141;

	version# = "2.73";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/autoconf/autoconf-"+version+".tar.gz";
		checksum = "yGabDTeOfaCUB0JX-h3REYLYzMzvpDwFmFFzHNR7QilChCUNE4hR6q7nma4viDYg";
		compress = gzip;
	};

	// test suite is very expensive
	exclusive = true;

	exec = make {
		check = [
			"TESTSUITEFLAGS=" + jobsFlagE,
			"check",
		];
	};

	inputs = [
		m4,
		perl,
		bash,
		diffutils,
	];

	runtime = [
		m4,
		perl,
	];
}

package automake {
	description = "a tool for automatically generating Makefile.in files";
	website = "https://www.gnu.org/software/automake";
	anitya = 144;

	version# = "1.18.1";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/automake/automake-"+version+".tar.gz";
		checksum = "FjvLG_GdQP7cThTZJLDMxYpRcKdpAVG-YDs1Fj1yaHlSdh_Kx6nRGN14E0r_BjcG";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' t/objcxx-minidemo.sh
test_disable '#!/bin/sh' t/objcxx-deps.sh

test_disable '#!/bin/sh' t/dist-no-built-sources.sh
test_disable '#!/bin/sh' t/distname.sh
test_disable '#!/bin/sh' t/pr9.sh
`;

	exec = make {};

	inputs = [
		grep,
		gzip,
		autoconf,
		diffutils,
	];

	runtime = [ autoconf ];
}

package libtool {
	description = "a generic library support script";
	website = "https://www.gnu.org/software/libtool";
	anitya = 1741;

	version# = "2.5.4";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/libtool/libtool-"+version+".tar.gz";
		checksum = "pa6LSrQggh8mSJHQfwGjysAApmZlGJt8wif2cCLzqAAa2jpsTY0jZ-6stS3BWZ2Q";
		compress = gzip;
	};

	exec = make {
		// _Z2a2c: symbol not found
		skipEarlyStageCheck = true;

		check = [
			"TESTSUITEFLAGS=" + jobsFlagE,
			"check",
		];
	};

	inputs = [
		m4,
		diffutils,
	];
}

package gzip {
	description = "a popular data compression program";
	website = "https://www.gnu.org/software/gzip";
	anitya = 1290;

	version# = "1.14";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/gzip/gzip-"+version+".tar.gz";
		checksum = "NWhjUavnNfTDFkZJyAUonL9aCOak8GVajWX2OMlzpFnuI0ErpBFyj88mz2xSjz0q";
		compress = gzip;
	};

	exec = make {
		// dependency loop
		skipCheck = true;
	};
}

package sed {
	description = "a non-interactive command-line text editor";
	website = "https://www.gnu.org/software/sed";
	anitya = 4789;

	version# = "4.10";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/sed/sed-"+version+".tar.gz";
		checksum = "TXTRFQJCyflb-bpBRI2S5Y1DpplwvT7-KfXtpqN4AdZgZ5OtI6yStn1-bkhDKx51";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' testsuite/read-error-stale-errno.sh
`;

	exec = make {};

	inputs = [
		diffutils,

		kernel-headers,
	];
}

package diffutils {
	description = "several programs related to finding differences between files";
	website = "https://www.gnu.org/software/diffutils";
	anitya = 436;

	version# = "3.12";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/diffutils/diffutils-"+version+".tar.gz";
		checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' gnulib-tests/test-c32ispunct.sh
test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c
test_disable '#!/bin/sh' tests/cmp
`;

	toyboxEarly = true;
	exec = make {};
}

package patch {
	description = "a program to apply diff output to files";
	website = "https://savannah.gnu.org/projects/patch";
	anitya = 2597;

	version# = "2.8";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/patch/patch-"+version+".tar.gz";
		checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' tests/ed-style
test_disable '#!/bin/sh' tests/need-filename
`;

	toyboxEarly = true;
	exec = make {};
}

package gawk {
	description = "an implementation of awk with GNU extensions";
	website = "https://www.gnu.org/software/gawk";
	anitya = 868;

	version# = "5.4.0";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/gawk/gawk-"+version+".tar.gz";
		checksum = "m0RkIolC-PI7EY5q8pcx5Y-0twlIW0Yp3wXXmV-QaHorSdf8BhZ7kW9F8iWomz0C";
		compress = gzip;
	};

	toyboxEarly = true;
	exec = make {
		// dependency loop
		skipCheck = true;
	};
}

package grep {
	description = "searches input for lines containing a match to a pattern";
	website = "https://www.gnu.org/software/grep";
	anitya = 1251;

	version# = "3.12";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/grep/grep-"+version+".tar.gz";
		checksum = "qMB4RjaPNRRYsxix6YOrjE8gyAT1zVSTy4nW4wKW9fqa0CHYAuWgPwDTirENzm_1";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' gnulib-tests/test-c32ispunct.sh
test_disable 'int main(){return 0;}' gnulib-tests/test-c32ispunct.c
`;

	exec = make {};

	inputs = [ diffutils ];
}

package gettext {
	description = "tools for producing multi-lingual messages";
	website = "https://www.gnu.org/software/gettext";
	anitya = 898;

	version# = "1.0";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/gettext/gettext-"+version+".tar.gz";
		checksum = "3MasKeEdPeFEgWgzsBKk7JqWqql1wEMbgPmzAfs-mluyokoW0N8oQVxPQoOnSdgC";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' gettext-tools/tests/msgcat-22
test_disable '#!/bin/sh' gettext-tools/tests/msgconv-2
test_disable '#!/bin/sh' gettext-tools/tests/msgconv-8
test_disable '#!/bin/sh' gettext-tools/tests/xgettext-python-3
test_disable '#!/bin/sh' gettext-tools/tests/msgmerge-compendium-6
test_disable '#!/bin/sh' gettext-tools/tests/gettextpo-1
test_disable '#!/bin/sh' gettext-tools/tests/format-c-5
test_disable '#!/bin/sh' gettext-tools/gnulib-tests/test-c32ispunct.sh
test_disable 'int main(){return 0;}' gettext-tools/gnulib-tests/test-stdcountof-h.c

touch gettext-tools/autotools/archive.dir.tar
`;

	exec = make {};

	inputs = [
		diffutils,
		gzip,
		sed,

		kernel-headers,
	];
}

package findutils {
	description = "the basic directory searching utilities";
	website = "https://www.gnu.org/software/findutils";
	anitya = 812;

	version# = "4.10.0";
	source = remoteFile {
		url = "https://ftpmirror.gnu.org/gnu/findutils/findutils-"+version+".tar.xz";
		checksum = "ZXABdNBQXL7QjTygynRRTdXYWxQKZ0Wn5eMd3NUnxR0xaS0u0VfcKoTlbo50zxv6";
	};

	early = `
echo '#!/bin/sh' > gnulib-tests/test-c32ispunct.sh
echo 'int main(){return 0;}' > tests/xargs/test-sigusr.c
`;

	exec = make {};

	inputs = [
		diffutils,
		xz,
		sed,
	];
}

package bash {
	description = "the Bourne Again SHell";
	website = "https://www.gnu.org/software/bash";
	anitya = 166;

	version# = "5.3";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/bash/bash-"+version+".tar.gz";
		checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq";
		compress = gzip;
	};

	toyboxEarly = true;
	exec = make {
		configure = {
			"without-bash-malloc";
		};
		postInstall = "ln -s bash /work/system/bin/sh\n";
	};
}

package coreutils {
	description = "the basic file, shell and text manipulation utilities";
	website = "https://www.gnu.org/software/coreutils";
	anitya = 343;

	version# = "9.11";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/coreutils/coreutils-"+version+".tar.gz";
		checksum = "t8UMed5wpFEoC56aa42_yidfOAaRGzOfj7MRtQkkqgGbpXiskNA8bd-EmVSQkZie";
		compress = gzip;
	};

	toyboxEarly = true;
	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' gnulib-tests/test-c32ispunct.sh
test_disable '#!/bin/sh' tests/ls/hyperlink.sh
test_disable '#!/bin/sh' tests/misc/user.sh
test_disable 'int main(){return 0;}' gnulib-tests/test-chown.c
test_disable 'int main(){return 0;}' gnulib-tests/test-fchownat.c
test_disable 'int main(){return 0;}' gnulib-tests/test-lchown.c
`;

	exec = make {
		configure = {
			"enable-single-binary": "symlinks";
		};
	};

	inputs = [
		perl,
		bash,

		kernel-headers,
	];
}

package tar {
	description = "provides the ability to create tar archives";
	website = "https://www.gnu.org/software/tar";
	anitya = 4939;

	version# = "1.35";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/tar/tar-"+version+".tar.gz";
		checksum = "zSaoSlVUDW0dSfm4sbL4FrXLFR8U40Fh3zY5DWhR5NCIJ6GjU6Kc4VZo2-ZqpBRA";
		compress = gzip;
	};

	exec = make {
		configure = {
			"disable-acl";
			"without-posix-acls";
			"without-xattrs";
		};

		check = [
			// very expensive
			"TARTEST_SKIP_LARGE_FILES=1",

			"TESTSUITEFLAGS=" + jobsFlagE,
			"check",
		];
	};

	inputs = [
		diffutils,

		gzip,
		bzip2,
		zstd,
	];
}

package texinfo {
	description = "the GNU square-wheel-reinvension of man pages";
	website = "https://www.gnu.org/software/texinfo";
	anitya = 4958;

	version# = "7.3";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/texinfo/texinfo-"+version+".tar.gz";
		checksum = "RRmC8Xwdof7JuZJeWGAQ_GeASIHAuJFQMbNONXBz5InooKIQGmqmWRjGNGEr5n4-";
		compress = gzip;
	};

	exec = make {
		// nonstandard glibc extension
		skipCheck = true;
	};

	inputs = [ perl ];

	runtime = [
		perl,
		gawk,
	];
}

package gperf {
	description = "a perfect hash function generator";
	website = "https://www.gnu.org/software/gperf";
	anitya = 1237;

	version# = "3.3";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gperf/gperf-"+version+".tar.gz";
		checksum = "RtIy9pPb_Bb8-31J2Nw-rRGso2JlS-lDlVhuNYhqR7Nt4xM_nObznxAlBMnarJv7";
		compress = gzip;
	};

	exec = make {};

	inputs = [ diffutils ];
}

package bc {
	description = "an arbitrary precision numeric processing language";
	website = "https://www.gnu.org/software/bc";
	anitya = 170;

	version# = "1.08.2";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/bc/bc-"+version+".tar.gz";
		checksum = "8h6f3hjV80XiFs6v9HOPF2KEyg1kuOgn5eeFdVspV05ODBVQss-ey5glc8AmneLy";
		compress = gzip;
	};

	// source expected to be writable
	writable = true;
	chmod = true;

	exec = make {};

	inputs = [
		texinfo,
	];
}

package libiconv {
	description = "iconv implementation independent of glibc";
	website = "https://www.gnu.org/software/libiconv";
	anitya = 10656;

	version# = "1.19";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/libiconv/libiconv-"+version+".tar.gz";
		checksum = "UibB6E23y4MksNqYmCCrA3zTFO6vJugD1DEDqqWYFZNuBsUWMVMcncb_5pPAr88x";
		compress = gzip;
	};

	exec = make {};
}

package parallel {
	description = "a shell tool for executing jobs in parallel using one or more computers";
	website = "https://www.gnu.org/software/parallel";
	anitya = 5448;

	version# = "20260622";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/parallel/parallel-"+version+".tar.bz2";
		checksum = "pEkZ_J18AvKCMoPfxEprC0Smw7zP6qXASmC1uFf_HVD_jc95H06LvzGi40-mtCUo";
		compress = bzip2;
	};

	bin = [ "bash" ];
	exec = make {};

	inputs = [
		perl,
		bash,
	];

	runtime = [ perl ];
}

package libunistring {
	description = "provides functions for manipulating Unicode strings";
	website = "https://www.gnu.org/software/libunistring";
	anitya = 1747;

	version# = "1.4.2";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/libunistring/libunistring-"+version+".tar.gz";
		checksum = "iW9BbfLoVlXjWoLTZ4AekQSu4cFBnLcZ4W8OHWbv0AhJNgD3j65_zqaLMzFKylg2";
		compress = gzip;
	};

	writable = true;
	early = `
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }

test_disable '#!/bin/sh' tests/test-c32ispunct.sh
test_disable 'int main(){return 0;}' tests/test-c32ispunct.c
`;

	exec = make {};

	inputs = [
		diffutils,
	];
}

package libtasn1 {
	description = "the ASN.1 library used by GnuTLS, p11-kit and some other packages";
	website = "https://www.gnu.org/software/libtasn1";
	anitya = 1734;

	version# = "4.21.0";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/libtasn1/libtasn1-"+version+".tar.gz";
		checksum = "9DYI3UYbfYLy8JsKUcY6f0irskbfL0fHZA91Q-JEOA3kiUwpodyjemRsYRjUpjuq";
		compress = gzip;
	};

	exec = make {};
}

package readline {
	description = "provides a set of functions for use by applications that allow users to edit command lines as they are typed in";
	website = "https://tiswww.cwru.edu/php/chet/readline/rltop.html";
	anitya = 4173;

	version# = "8.3";
	source = remoteTar {
		url = "https://ftpmirror.gnu.org/gnu/readline/readline-"+version+".tar.gz";
		checksum = "r-lcGRJq_MvvBpOq47Z2Y1OI2iqrmtcqhTLVXR0xWo37ZpC2uT_md7gKq5o_qTMV";
		compress = gzip;
	};

	exec = make {
		configure = {
			"with-curses";
			"with-shared-termcap-library";
		};
	};

	inputs = [ ncurses ];
	runtime = [ ncurses ];
}

package gmp {
	description = "a free library for arbitrary precision arithmetic";
	website = "https://gmplib.org";
	anitya = 1186;

	version# = "6.3.0";
	source = remoteTar {
		url = "https://gcc.gnu.org/pub/gcc/infrastructure/"+
			"gmp-"+version+".tar.bz2";
		checksum = "yrgbgEDWKDdMWVHh7gPbVl56-sRtVVhfvv0M_LX7xMUUk_mvZ1QOJEAnt7g4i3k5";
		compress = bzip2;
	};

	env = [
		"CC=cc",
	];

	exec = make {};

	inputs = [ m4 ];
}

package mpfr {
	description = "a C library for multiple-precision floating-point computations";
	website = "https://www.mpfr.org";
	anitya = 2019;

	version# = "4.2.2";
	source = remoteTar {
		url = "https://gcc.gnu.org/pub/gcc/infrastructure/"+
			"mpfr-"+version+".tar.bz2";
		checksum = "wN3gx0zfIuCn9r3VAn_9bmfvAYILwrRfgBjYSD1IjLqyLrLojNN5vKyQuTE9kA-B";
		compress = bzip2;
	};

	exec = make {};

	inputs = [ gmp ];
	runtime = [ gmp ];
}

package mpc {
	description = "a C library for the arithmetic of complex numbers";
	website = "https://www.multiprecision.org";
	anitya = 1667;

	version# = "1.4.1";
	source = remoteGitLab {
		domain = "gitlab.inria.fr";
		suffix = "mpc/mpc";
		ref = version;
		checksum = "ZffaZyWkvIw0iPvRe5EJ7O-VvHtSkbbb3K_7SgPtK810NvGan7nbF0T5-6tozjQN";
	};

	// does not find mpc-impl.h otherwise
	enterSource = true;

	exec = make {
		inPlace = true;
		generate = "autoreconf -vfi";
	};

	inputs = [
		automake,
		libtool,
		texinfo,

		mpfr,
	];

	runtime = [ mpfr ];
}
