From: Alexander Shukaev <haroogan@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: [Emacs-diffs] ImageMagick Support on Windows
Date: Tue, 14 Oct 2014 18:17:21 +0200 [thread overview]
Message-ID: <CAKu-7WxitM6nAHrpmDopM6QOwVmSBjjU=B1dCTaw0Kjv=gGpWQ@mail.gmail.com> (raw)
In-Reply-To: <83r3ya65t0.fsf@gnu.org>
[-- Attachment #1.1: Type: text/plain, Size: 27 bytes --]
Please, review. Thank you.
[-- Attachment #1.2: Type: text/html, Size: 48 bytes --]
[-- Attachment #2: configure.ac.patch --]
[-- Type: application/octet-stream, Size: 488 bytes --]
--- configure.ac.orig 2014-10-14 12:14:49.116021200 +0200
+++ configure.ac 2014-10-14 16:27:06.702869900 +0200
@@ -2291,6 +2291,11 @@
OLD_CFLAGS=$CFLAGS
OLD_LIBS=$LIBS
CFLAGS="$CFLAGS $IMAGEMAGICK_CFLAGS"
+ # Windows loads libMagick dynamically
+ if test "${opsys}" = "mingw32"; then
+ IMAGEMAGICK_LIBS=
+ fi
+
LIBS="$IMAGEMAGICK_LIBS $LIBS"
AC_CHECK_FUNCS(MagickExportImagePixels MagickMergeImageLayers)
CFLAGS=$OLD_CFLAGS
[-- Attachment #3: image.c.patch --]
[-- Type: application/octet-stream, Size: 7906 bytes --]
--- src/image.c.orig 2014-10-12 11:38:49.910758000 +0200
+++ src/image.c 2014-10-12 11:37:22.011826300 +0200
@@ -7919,6 +7919,144 @@
MagickPixelPacket *);
#endif
+#ifdef WINDOWSNT
+
+/* ImageMagick library details. */
+DEF_IMGLIB_FN (MagickWand *, CloneMagickWand, (const MagickWand *));
+DEF_IMGLIB_FN (MagickWand *, DestroyMagickWand, (MagickWand *));
+DEF_IMGLIB_FN (PixelIterator *, DestroyPixelIterator, (PixelIterator *));
+DEF_IMGLIB_FN (char **, GetMagickList, (const char *, size_t *, ExceptionInfo *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickCropImage, (MagickWand *, const size_t, const size_t, const ssize_t, const ssize_t));
+DEF_IMGLIB_FN (MagickBooleanType, MagickExportImagePixels, (MagickWand *, const ssize_t, const ssize_t, const size_t, const size_t, const char *, const StorageType, void *));
+DEF_IMGLIB_FN (MagickWand *, MagickFlattenImages, (MagickWand *));
+DEF_IMGLIB_FN (char *, MagickGetException, (const MagickWand *, ExceptionType *));
+DEF_IMGLIB_FN (MagickWand *, MagickGetImage, (MagickWand *));
+DEF_IMGLIB_FN (size_t, MagickGetImageDelay, (MagickWand *));
+DEF_IMGLIB_FN (DisposeType, MagickGetImageDispose, (MagickWand *));
+DEF_IMGLIB_FN (size_t, MagickGetImageHeight, (MagickWand *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickGetImagePage, (MagickWand *, size_t *, size_t *, ssize_t *, ssize_t *));
+DEF_IMGLIB_FN (char *, MagickGetImageSignature, (MagickWand *));
+DEF_IMGLIB_FN (size_t, MagickGetImageWidth, (MagickWand *));
+DEF_IMGLIB_FN (size_t, MagickGetNumberImages, (MagickWand *));
+DEF_IMGLIB_FN (MagickWand *, MagickMergeImageLayers, (MagickWand *, const ImageLayerMethod));
+DEF_IMGLIB_FN (MagickBooleanType, MagickReadImage, (MagickWand *, const char *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickReadImageBlob, (MagickWand *, const void *, const size_t));
+DEF_IMGLIB_FN (void *, MagickRelinquishMemory, (void *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickRotateImage, (MagickWand *, const PixelWand *, const double));
+DEF_IMGLIB_FN (MagickBooleanType, MagickScaleImage, (MagickWand *, const size_t, const size_t));
+DEF_IMGLIB_FN (MagickBooleanType, MagickSetFilename, (MagickWand *, const char *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickSetImageBackgroundColor, (MagickWand *, const PixelWand *));
+DEF_IMGLIB_FN (MagickBooleanType, MagickSetIteratorIndex, (MagickWand *, const ssize_t));
+DEF_IMGLIB_FN (void, MagickWandGenesis, (void));
+DEF_IMGLIB_FN (void, MagickWandTerminus, (void));
+DEF_IMGLIB_FN (MagickWand *, NewMagickWand, (void));
+DEF_IMGLIB_FN (PixelIterator *, NewPixelIterator, (MagickWand *));
+DEF_IMGLIB_FN (PixelWand *, NewPixelWand, (void));
+DEF_IMGLIB_FN (double, PixelGetAlpha, (const PixelWand *));
+DEF_IMGLIB_FN (void, PixelGetMagickColor, (PixelWand *, MagickPixelPacket *));
+DEF_IMGLIB_FN (PixelWand **, PixelGetNextIteratorRow, (PixelIterator *, size_t *));
+DEF_IMGLIB_FN (void, PixelSetBlue, (PixelWand *, const double));
+DEF_IMGLIB_FN (void, PixelSetGreen, (PixelWand *, const double));
+DEF_IMGLIB_FN (MagickBooleanType, PixelSetIteratorRow, (PixelIterator *, const ssize_t));
+DEF_IMGLIB_FN (void, PixelSetMagickColor, (PixelWand *, const MagickPixelPacket *));
+DEF_IMGLIB_FN (void, PixelSetRed, (PixelWand *, const double));
+DEF_IMGLIB_FN (MagickBooleanType, PixelSyncIterator, (PixelIterator *));
+
+static bool
+init_imagemagick_functions (void)
+{
+ HMODULE library;
+
+ if (!(library = w32_delayed_load (Qimagemagick)))
+ return 0;
+
+ LOAD_IMGLIB_FN (library, CloneMagickWand);
+ LOAD_IMGLIB_FN (library, DestroyMagickWand);
+ LOAD_IMGLIB_FN (library, DestroyPixelIterator);
+ LOAD_IMGLIB_FN (library, GetMagickList);
+ LOAD_IMGLIB_FN (library, MagickCropImage);
+ LOAD_IMGLIB_FN (library, MagickExportImagePixels);
+ LOAD_IMGLIB_FN (library, MagickFlattenImages);
+ LOAD_IMGLIB_FN (library, MagickGetException);
+ LOAD_IMGLIB_FN (library, MagickGetImage);
+ LOAD_IMGLIB_FN (library, MagickGetImageDelay);
+ LOAD_IMGLIB_FN (library, MagickGetImageDispose);
+ LOAD_IMGLIB_FN (library, MagickGetImageHeight);
+ LOAD_IMGLIB_FN (library, MagickGetImagePage);
+ LOAD_IMGLIB_FN (library, MagickGetImageSignature);
+ LOAD_IMGLIB_FN (library, MagickGetImageWidth);
+ LOAD_IMGLIB_FN (library, MagickGetNumberImages);
+ LOAD_IMGLIB_FN (library, MagickMergeImageLayers);
+ LOAD_IMGLIB_FN (library, MagickReadImage);
+ LOAD_IMGLIB_FN (library, MagickReadImageBlob);
+ LOAD_IMGLIB_FN (library, MagickRelinquishMemory);
+ LOAD_IMGLIB_FN (library, MagickRotateImage);
+ LOAD_IMGLIB_FN (library, MagickScaleImage);
+ LOAD_IMGLIB_FN (library, MagickSetFilename);
+ LOAD_IMGLIB_FN (library, MagickSetImageBackgroundColor);
+ LOAD_IMGLIB_FN (library, MagickSetIteratorIndex);
+ LOAD_IMGLIB_FN (library, MagickWandGenesis);
+ LOAD_IMGLIB_FN (library, MagickWandTerminus);
+ LOAD_IMGLIB_FN (library, NewMagickWand);
+ LOAD_IMGLIB_FN (library, NewPixelIterator);
+ LOAD_IMGLIB_FN (library, NewPixelWand);
+ LOAD_IMGLIB_FN (library, PixelGetAlpha);
+ LOAD_IMGLIB_FN (library, PixelGetMagickColor);
+ LOAD_IMGLIB_FN (library, PixelGetNextIteratorRow);
+ LOAD_IMGLIB_FN (library, PixelSetBlue);
+ LOAD_IMGLIB_FN (library, PixelSetGreen);
+ LOAD_IMGLIB_FN (library, PixelSetIteratorRow);
+ LOAD_IMGLIB_FN (library, PixelSetMagickColor);
+ LOAD_IMGLIB_FN (library, PixelSetRed);
+ LOAD_IMGLIB_FN (library, PixelSyncIterator);
+
+ return 1;
+}
+
+#else
+
+#define fn_CloneMagickWand CloneMagickWand
+#define fn_DestroyMagickWand DestroyMagickWand
+#define fn_DestroyPixelIterator DestroyPixelIterator
+#define fn_GetMagickList GetMagickList
+#define fn_MagickCropImage MagickCropImage
+#define fn_MagickExportImagePixels MagickExportImagePixels
+#define fn_MagickFlattenImages MagickFlattenImages
+#define fn_MagickGetException MagickGetException
+#define fn_MagickGetImage MagickGetImage
+#define fn_MagickGetImageDelay MagickGetImageDelay
+#define fn_MagickGetImageDispose MagickGetImageDispose
+#define fn_MagickGetImageHeight MagickGetImageHeight
+#define fn_MagickGetImagePage MagickGetImagePage
+#define fn_MagickGetImageSignature MagickGetImageSignature
+#define fn_MagickGetImageWidth MagickGetImageWidth
+#define fn_MagickGetNumberImages MagickGetNumberImages
+#define fn_MagickMergeImageLayers MagickMergeImageLayers
+#define fn_MagickReadImage MagickReadImage
+#define fn_MagickReadImageBlob MagickReadImageBlob
+#define fn_MagickRelinquishMemory MagickRelinquishMemory
+#define fn_MagickRotateImage MagickRotateImage
+#define fn_MagickScaleImage MagickScaleImage
+#define fn_MagickSetFilename MagickSetFilename
+#define fn_MagickSetImageBackgroundColor MagickSetImageBackgroundColor
+#define fn_MagickSetIteratorIndex MagickSetIteratorIndex
+#define fn_MagickWandGenesis MagickWandGenesis
+#define fn_MagickWandTerminus MagickWandTerminus
+#define fn_NewMagickWand NewMagickWand
+#define fn_NewPixelIterator NewPixelIterator
+#define fn_NewPixelWand NewPixelWand
+#define fn_PixelGetAlpha PixelGetAlpha
+#define fn_PixelGetMagickColor PixelGetMagickColor
+#define fn_PixelGetNextIteratorRow PixelGetNextIteratorRow
+#define fn_PixelSetBlue PixelSetBlue
+#define fn_PixelSetGreen PixelSetGreen
+#define fn_PixelSetIteratorRow PixelSetIteratorRow
+#define fn_PixelSetMagickColor PixelSetMagickColor
+#define fn_PixelSetRed PixelSetRed
+#define fn_PixelSyncIterator PixelSyncIterator
+
+#endif /* WINDOWSNT */
+
/* Log ImageMagick error message.
Useful when a ImageMagick function returns the status `MagickFalse'. */
[-- Attachment #4: w32-win.el.patch --]
[-- Type: application/octet-stream, Size: 475 bytes --]
--- lisp/term/w32-win.el.orig 2014-10-14 12:15:29.630533700 +0200
+++ lisp/term/w32-win.el 2014-10-14 16:33:53.311610000 +0200
@@ -260,6 +260,7 @@
(if (>= libgif-version 50000)
'(gif "libgif-6.dll" "giflib5.dll" "gif.dll")
'(gif "libgif-5.dll" "giflib4.dll" "libungif4.dll" "libungif.dll")))
+ '(imagemagick "libMagick++-6.Q16HDRI-5.dll")
'(svg "librsvg-2-2.dll")
'(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
'(glib "libglib-2.0-0.dll")
next prev parent reply other threads:[~2014-10-14 16:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <mailman.170157.1413191181.1146.emacs-diffs@gnu.org>
2014-10-13 9:29 ` [Emacs-diffs] ImageMagick Support on Windows Eli Zaretskii
2014-10-14 10:17 ` Alexander Shukaev
2014-10-14 12:16 ` Eli Zaretskii
2014-10-14 14:00 ` Alexander Shukaev
2014-10-14 15:15 ` Eli Zaretskii
2014-10-14 16:17 ` Alexander Shukaev [this message]
2014-10-14 18:32 ` Alexander Shukaev
2014-10-14 21:33 ` Alexander Shukaev
2014-10-15 5:49 ` Eli Zaretskii
2014-10-15 9:27 ` Alexander Shukaev
2014-10-15 9:38 ` rzl24ozi
2014-10-15 10:35 ` Eli Zaretskii
2014-10-15 12:02 ` Alexander Shukaev
2014-10-15 12:36 ` Eli Zaretskii
2014-10-15 10:30 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAKu-7WxitM6nAHrpmDopM6QOwVmSBjjU=B1dCTaw0Kjv=gGpWQ@mail.gmail.com' \
--to=haroogan@gmail.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.