Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{
2 lib,
3 stdenv,
4 fetchsvn,
5 pkg-config,
6 libjpeg,
7 libpng,
8 jbigkit,
9 flex,
10 zlib,
11 perl,
12 libxml2,
13 makeWrapper,
14 libtiff,
15 enableX11 ? false,
16 libX11,
17 buildPackages,
18}:
19
20stdenv.mkDerivation rec {
21 # Determine version and revision from:
22 # https://sourceforge.net/p/netpbm/code/HEAD/log/?path=/advanced
23 pname = "netpbm";
24 version = "11.10.5";
25
26 outputs = [
27 "bin"
28 "out"
29 "dev"
30 ];
31
32 src = fetchsvn {
33 url = "https://svn.code.sf.net/p/netpbm/code/advanced";
34 rev = "5085";
35 sha256 = "sha256-04ObCW+xMvGOkhTwYAhVoBG1QIe0/DKfEYbSpDkEGCU=";
36 };
37
38 nativeBuildInputs = [
39 pkg-config
40 flex
41 makeWrapper
42 ];
43
44 buildInputs = [
45 zlib
46 perl
47 libpng
48 libjpeg
49 libxml2
50 libtiff
51 jbigkit
52 ]
53 ++ lib.optional enableX11 libX11;
54
55 strictDeps = true;
56
57 enableParallelBuilding = true;
58
59 # Environment variables
60 STRIPPROG = "${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}strip";
61
62 postPatch = ''
63 # Install libnetpbm.so symlink to correct destination
64 substituteInPlace lib/Makefile \
65 --replace '/sharedlink' '/lib'
66 '';
67
68 configurePhase = ''
69 runHook preConfigure
70
71 cp config.mk.in config.mk
72
73 # Disable building static library
74 echo "STATICLIB_TOO = N" >> config.mk
75
76 # Enable cross-compilation
77 echo 'AR = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ar' >> config.mk
78 echo 'CC = ${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc' >> config.mk
79 echo 'CC_FOR_BUILD = ${buildPackages.stdenv.cc}/bin/${buildPackages.stdenv.cc.targetPrefix}cc' >> config.mk
80 echo 'LD_FOR_BUILD = $(CC_FOR_BUILD)' >> config.mk
81 echo 'PKG_CONFIG = ${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config' >> config.mk
82 echo 'RANLIB = ${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}ranlib' >> config.mk
83
84 # Use libraries from Nixpkgs
85 echo "TIFFLIB = libtiff.so" >> config.mk
86 echo "TIFFLIB_NEEDS_JPEG = N" >> config.mk
87 echo "TIFFLIB_NEEDS_Z = N" >> config.mk
88 echo "JPEGLIB = libjpeg.so" >> config.mk
89 echo "JBIGLIB = libjbig.a" >> config.mk
90 # Insecure
91 echo "JASPERLIB = NONE" >> config.mk
92
93 # Fix path to rgb.txt
94 echo "RGB_DB_PATH = $out/share/netpbm/misc/rgb.txt" >> config.mk
95 ''
96 + lib.optionalString stdenv.hostPlatform.isDarwin ''
97 echo "LDSHLIB=-dynamiclib -install_name $out/lib/libnetpbm.\$(MAJ).dylib" >> config.mk
98 echo "NETPBMLIBTYPE = dylib" >> config.mk
99 echo "NETPBMLIBSUFFIX = dylib" >> config.mk
100 ''
101 + ''
102 runHook postConfigure
103 '';
104
105 env = lib.optionalAttrs stdenv.cc.isClang {
106 NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
107 };
108
109 installPhase = ''
110 runHook preInstall
111
112 make package pkgdir=$out
113
114 rm -rf $out/*_template $out/{pkginfo,README,VERSION} $out/man/web
115
116 mkdir -p $out/share/netpbm
117 mv $out/misc $out/share/netpbm/
118
119 moveToOutput bin "''${!outputBin}"
120
121 # wrap any scripts that expect other programs in the package to be in their PATH
122 for prog in ppmquant; do
123 wrapProgram "''${!outputBin}/bin/$prog" --prefix PATH : "''${!outputBin}/bin"
124 done
125
126 runHook postInstall
127 '';
128
129 passthru.updateScript = ./update.sh;
130
131 meta = {
132 changelog = "https://sourceforge.net/p/netpbm/code/${src.rev}/tree/advanced/doc/HISTORY";
133 homepage = "https://netpbm.sourceforge.net/";
134 description = "Toolkit for manipulation of graphic images";
135 license = lib.licenses.free; # http://netpbm.svn.code.sourceforge.net/p/netpbm/code/trunk/doc/copyright_summary
136 platforms = with lib.platforms; linux ++ darwin;
137 };
138}