libgdiplus: 2.10.9 -> 5.6
A lot of updates from mono-project' folks. Patches dropped, because both
merged upstream.
Cherry-picked by @obadz from
e022209def
This commit is contained in:
parent
26e8258c41
commit
f382eb7d61
@ -1,31 +1,29 @@
|
|||||||
{ stdenv, fetchurl, pkgconfig, glib, cairo, Carbon, fontconfig
|
{ stdenv, fetchFromGitHub, pkgconfig, glib, cairo, Carbon, fontconfig
|
||||||
, libtiff, giflib, libjpeg, libpng
|
, libtiff, giflib, libjpeg, libpng
|
||||||
, libXrender, libexif }:
|
, libXrender, libexif, autoreconfHook }:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
name = "libgdiplus-2.10.9";
|
name = "libgdiplus-5.6";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchFromGitHub {
|
||||||
url = "https://download.mono-project.com/sources/libgdiplus/${name}.tar.bz2";
|
owner = "mono";
|
||||||
sha256 = "0klnbly2q0yx5p0l5z8da9lhqsjj9xqj06kdw2v7rnms4z1vdpkd";
|
repo = "libgdiplus";
|
||||||
|
rev = "5.6";
|
||||||
|
sha256 = "11xr84kng74j3pd8sx74q80a71k6dw0a502qgibcxlyqh666lfb7";
|
||||||
};
|
};
|
||||||
|
|
||||||
NIX_LDFLAGS = "-lgif";
|
NIX_LDFLAGS = "-lgif";
|
||||||
|
|
||||||
patches =
|
patches = [ ];
|
||||||
[ (fetchurl {
|
|
||||||
url = "https://raw.github.com/MagicGroup/MagicSpecLib/master/libgdiplus/libgdiplus-2.10.1-libpng15.patch";
|
|
||||||
sha256 = "130r0jm065pjvbz5dkx96w37vj1wqc8fakmi2znribs14g0bl65f";
|
|
||||||
})
|
|
||||||
./giflib.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
patchFlags = "-p0";
|
patchFlags = "-p0";
|
||||||
|
|
||||||
hardeningDisable = [ "format" ];
|
hardeningDisable = [ "format" ];
|
||||||
|
|
||||||
|
nativeBuildInputs = [ autoreconfHook pkgconfig ];
|
||||||
|
|
||||||
buildInputs =
|
buildInputs =
|
||||||
[ pkgconfig glib cairo fontconfig libtiff giflib
|
[ glib cairo fontconfig libtiff giflib
|
||||||
libjpeg libpng libXrender libexif
|
libjpeg libpng libXrender libexif
|
||||||
]
|
]
|
||||||
++ stdenv.lib.optional stdenv.isDarwin Carbon;
|
++ stdenv.lib.optional stdenv.isDarwin Carbon;
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
diff -Naur libgdiplus-2.10.9-orig/src/gifcodec.c libgdiplus-2.10.9/src/gifcodec.c
|
|
||||||
--- src/gifcodec.c
|
|
||||||
+++ src/gifcodec.c
|
|
||||||
@@ -39,8 +39,10 @@
|
|
||||||
|
|
||||||
#include "gifcodec.h"
|
|
||||||
|
|
||||||
+#if GIFLIB_MAJOR < 5
|
|
||||||
/* giflib declares this incorrectly as EgifOpen */
|
|
||||||
extern GifFileType *EGifOpen(void *userData, OutputFunc writeFunc);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* Data structure used for callback */
|
|
||||||
typedef struct
|
|
||||||
@@ -105,7 +107,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int
|
|
||||||
-AddExtensionBlockMono(SavedImage *New, int Len, BYTE ExtData[])
|
|
||||||
+AddExtensionBlockMono(SavedImage *New, int Len, int func, BYTE ExtData[])
|
|
||||||
{
|
|
||||||
ExtensionBlock *ep;
|
|
||||||
|
|
||||||
@@ -129,7 +131,7 @@
|
|
||||||
|
|
||||||
if (ExtData) {
|
|
||||||
memcpy(ep->Bytes, ExtData, Len);
|
|
||||||
- ep->Function = New->Function;
|
|
||||||
+ ep->Function = func;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (GIF_OK);
|
|
||||||
@@ -232,20 +234,20 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
case EXTENSION_RECORD_TYPE: {
|
|
||||||
- if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) == GIF_ERROR) {
|
|
||||||
+ int func;
|
|
||||||
+ if (DGifGetExtension(GifFile, &func, &ExtData) == GIF_ERROR) {
|
|
||||||
return (GIF_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (ExtData != NULL) {
|
|
||||||
/* Create an extension block with our data */
|
|
||||||
- if (AddExtensionBlockMono(&temp_save, ExtData[0], &ExtData[1]) == GIF_ERROR) {
|
|
||||||
+ if (AddExtensionBlockMono(&temp_save, func, ExtData[0], &ExtData[1]) == GIF_ERROR) {
|
|
||||||
return (GIF_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR) {
|
|
||||||
return (GIF_ERROR);
|
|
||||||
}
|
|
||||||
- temp_save.Function = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -303,12 +305,19 @@
|
|
||||||
result = NULL;
|
|
||||||
loop_counter = FALSE;
|
|
||||||
|
|
||||||
+#if GIFLIB_MAJOR < 5
|
|
||||||
if (from_file) {
|
|
||||||
gif = DGifOpen(stream, &gdip_gif_fileinputfunc);
|
|
||||||
} else {
|
|
||||||
gif = DGifOpen (stream, &gdip_gif_inputfunc);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+#else
|
|
||||||
+ if (from_file)
|
|
||||||
+ gif = DGifOpen(stream, &gdip_gif_fileinputfunc, NULL);
|
|
||||||
+ else
|
|
||||||
+ gif = DGifOpen(stream, &gdip_gif_inputfunc, NULL);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
if (gif == NULL) {
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
@@ -581,7 +590,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
FreeExtensionMono(&global_extensions);
|
|
||||||
- DGifCloseFile (gif);
|
|
||||||
+ DGifCloseFile (gif, NULL);
|
|
||||||
|
|
||||||
*image = result;
|
|
||||||
return Ok;
|
|
||||||
@@ -597,7 +606,7 @@
|
|
||||||
|
|
||||||
if (gif != NULL) {
|
|
||||||
FreeExtensionMono (&global_extensions);
|
|
||||||
- DGifCloseFile (gif);
|
|
||||||
+ DGifCloseFile (gif, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
*image = NULL;
|
|
||||||
@@ -660,11 +669,22 @@
|
|
||||||
return InvalidParameter;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if GIFLIB_MAJOR < 5
|
|
||||||
if (from_file) {
|
|
||||||
fp = EGifOpenFileName (stream, 0);
|
|
||||||
} else {
|
|
||||||
fp = EGifOpen (stream, gdip_gif_outputfunc);
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ if (from_file)
|
|
||||||
+ fp = EGifOpenFileName (stream, 0, NULL);
|
|
||||||
+ else
|
|
||||||
+ fp = EGifOpen (stream, gdip_gif_outputfunc, NULL);
|
|
||||||
+#define MakeMapObject GifMakeMapObject
|
|
||||||
+#define FreeMapObject GifFreeMapObject
|
|
||||||
+#define QuantizeBuffer GifQuantizeBuffer
|
|
||||||
+#define BitSize GifBitSize
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
if (!fp) {
|
|
||||||
return FileNotFound;
|
|
||||||
@@ -848,8 +868,15 @@
|
|
||||||
Buffer[0] = 1;
|
|
||||||
Buffer[1] = ptr[0];
|
|
||||||
Buffer[2] = ptr[1];
|
|
||||||
+#if GIFLIB_MAJOR < 5
|
|
||||||
EGifPutExtensionFirst(fp, APPLICATION_EXT_FUNC_CODE, 11, "NETSCAPE2.0");
|
|
||||||
EGifPutExtensionLast(fp, APPLICATION_EXT_FUNC_CODE, 3, Buffer);
|
|
||||||
+#else
|
|
||||||
+ EGifPutExtensionLeader(fp, APPLICATION_EXT_FUNC_CODE);
|
|
||||||
+ EGifPutExtensionBlock(fp, 11, "NETSCAPE2.0");
|
|
||||||
+ EGifPutExtensionBlock(fp, 3, Buffer);
|
|
||||||
+ EGifPutExtensionTrailer(fp);
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -923,7 +950,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- EGifCloseFile (fp);
|
|
||||||
+ EGifCloseFile (fp, NULL);
|
|
||||||
|
|
||||||
return Ok;
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user