at master 110 lines 2.5 kB view raw
1{ 2 lib, 3 fetchurl, 4 kaem, 5 tinycc, 6}: 7let 8 pname = "gnupatch"; 9 # 2.6.x and later use features not implemented in mes-libc (eg. quotearg.h) 10 version = "2.5.9"; 11 12 src = fetchurl { 13 url = "mirror://gnu/patch/patch-${version}.tar.gz"; 14 sha256 = "12nv7jx3gxfp50y11nxzlnmqqrpicjggw6pcsq0wyavkkm3cddgc"; 15 }; 16 17 # Thanks to the live-bootstrap project! 18 # https://github.com/fosslinux/live-bootstrap/blob/1bc4296091c51f53a5598050c8956d16e945b0f5/sysa/patch-2.5.9/mk/main.mk 19 CFLAGS = [ 20 "-I." 21 "-DHAVE_DECL_GETENV" 22 "-DHAVE_DECL_MALLOC" 23 "-DHAVE_DIRENT_H" 24 "-DHAVE_LIMITS_H" 25 "-DHAVE_GETEUID" 26 "-DHAVE_MKTEMP" 27 "-DPACKAGE_BUGREPORT=" 28 "-Ded_PROGRAM=\\\"/nullop\\\"" 29 "-Dmbstate_t=int" # When HAVE_MBRTOWC is not enabled uses of mbstate_t are always a no-op 30 "-DRETSIGTYPE=int" 31 "-DHAVE_MKDIR" 32 "-DHAVE_RMDIR" 33 "-DHAVE_FCNTL_H" 34 "-DPACKAGE_NAME=\\\"patch\\\"" 35 "-DPACKAGE_VERSION=\\\"${version}\\\"" 36 "-DHAVE_MALLOC" 37 "-DHAVE_REALLOC" 38 "-DSTDC_HEADERS" 39 "-DHAVE_STRING_H" 40 "-DHAVE_STDLIB_H" 41 ]; 42 43 # Maintenance note: List of sources from Makefile.in 44 SRCS = [ 45 "addext.c" 46 "argmatch.c" 47 "backupfile.c" 48 "basename.c" 49 "dirname.c" 50 "getopt.c" 51 "getopt1.c" 52 "inp.c" 53 "maketime.c" 54 "partime.c" 55 "patch.c" 56 "pch.c" 57 "quote.c" 58 "quotearg.c" 59 "quotesys.c" 60 "util.c" 61 "version.c" 62 "xmalloc.c" 63 ]; 64 sources = SRCS ++ [ 65 # mes-libc doesn't implement `error()` 66 "error.c" 67 ]; 68 69 objects = map (x: lib.replaceStrings [ ".c" ] [ ".o" ] (builtins.baseNameOf x)) sources; 70in 71kaem.runCommand "${pname}-${version}" 72 { 73 inherit pname version; 74 75 nativeBuildInputs = [ tinycc.compiler ]; 76 77 meta = with lib; { 78 description = "GNU Patch, a program to apply differences to files"; 79 homepage = "https://www.gnu.org/software/patch"; 80 license = licenses.gpl3Plus; 81 teams = [ teams.minimal-bootstrap ]; 82 mainProgram = "patch"; 83 platforms = platforms.unix; 84 }; 85 } 86 '' 87 # Unpack 88 ungz --file ${src} --output patch.tar 89 untar --file patch.tar 90 rm patch.tar 91 cd patch-${version} 92 93 # Configure 94 catm config.h 95 96 # Build 97 alias CC="tcc -B ${tinycc.libs}/lib ${lib.concatStringsSep " " CFLAGS}" 98 ${lib.concatMapStringsSep "\n" (f: "CC -c ${f}") sources} 99 100 # Link 101 CC -o patch ${lib.concatStringsSep " " objects} 102 103 # Check 104 ./patch --version 105 106 # Install 107 mkdir -p ''${out}/bin 108 cp ./patch ''${out}/bin 109 chmod 555 ''${out}/bin/patch 110 ''