Subject: Re: bug#8640: 24.0.50; no pbm support on cygwin

From: Juanma Barranquero <[email-masked]>
Date: Mon, 9 May 2011 12:54:49 +0200

> pbm image is not available in Emacs trunk built on cygwin at least
> after May 6: (image-type-available-p 'pbm) => nil
> Whereas png, jpeg, gif, xpm, etc. are all ok.

xbm is not available either. And of course is not cygwin-specific.

> I guess this is due
> to the recent changes in image.c.

Yes.

> Any hint?

More than a hint. I moved the library cache variable to w32 code,
turned CACHE_IMAGE_TYPE into a noop on non-Windows, and removed the
check on init-image-library. But I overlook the fact that the
predefined image types rely on being marked in the library cache as
available. That's because `image-type-available-p' always goes through
`init-image-library'.

Now, the fix is simple (the patch below fixes the problem), but we
should think whether it is cleaner to restore the library-cache to a
non-Windows specific code, or mark the only two predefined image types
in any other way, as the code below does. It's a bit ad-hoc, but
having the image types in the library cache, when they are not, in
fact, loaded from a library, is also a bit ugly.

Opinions and comments anyone?

    Juanma

=== modified file 'src/image.c'
--- src/image.c	2011-05-06 06:30:56 +0000
+++ src/image.c	2011-05-09 10:53:21 +0000
@@ -8602,6 +8602,11 @@
 of `dynamic-library-alist', which see).  */)
   (Lisp_Object type, Lisp_Object libraries)
 {
+
+  /* Types pbm and xbm are predefined and always available.  */
+  if (EQ (type, Qpbm) || EQ (type, Qxbm))
+    return Qt;
+
 #ifdef HAVE_NTGUI
   /* Don't try to reload the library.  */
   Lisp_Object tested = Fassq (type, Vlibrary_cache);