Subject: Fail compile emacs with jpeg library on MinGW32
From: Lin Sun (孙林) <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Fri, 14 Nov 2014 00:58:49 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Pals:
Fail when compile emacs with jpeg library on MinGW32, then change the
code to follow clip will compile successful,
@@ -6189,7 +6189,7 @@ jpeg_image_p (Lisp_Object object)
    different name.  This name, jpeg_boolean, remains in effect through
    the rest of image.c.
 */
-#if defined CYGWIN && defined HAVE_NTGUI
+#if defined HAVE_NTGUI
 #define boolean jpeg_boolean
 #endif
 #include <jpeglib.h>

and the configure command is:
../emacs-24.4.src/configure --with-w32
PKG_CONFIG_LIBDIR=/usr/lib/pkgconfig:/d/MinGW/lib/pkgconfig:/d/MinGW/mingw32/lib/pkgconfig:/d/MinGW/sys-root/lib/pkgconfig
CFLAGS="-I/d/MinGW/sys-root/include -I/mingw/include
-I/mingw/mingw32/include" LDFLAGS="-L/d/MinGW/sys-root/lib -L/mingw/lib
-L/mingw/mingw32/lib"

The error message without modification as follow:
gcc  -std=gnu99 -c -mtune=pentium4   -DUSE_CRT_DLL=1 -I /d/mydata/home/user123/work-dev/emacs-24.4.mingw/../emacs-24.4.src/nt/inc -Demacs  -I. -I../../emacs-24.4.src/src -I../lib -I../../emacs-24.4.src/src/../lib  -mtune=pentium4      -Id:/MinGW/sys-root/include/libxml2          -MMD -MF deps/image.d -MP     -I/d/MinGW/sys-root/include -I/mingw/include -I/mingw/mingw32/include  ../../emacs-24.4.src/src/image.c
../../emacs-24.4.src/src/image.c:1843:68: error: expected declaration specifiers or '...' before '*' token
 #define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args
                                                                    ^
../../emacs-24.4.src/src/image.c:6203:1: note: in expansion of macro 'DEF_IMGLIB_FN'
 DEF_IMGLIB_FN (boolean, jpeg_start_decompress, (j_decompress_ptr));
 ^
../../emacs-24.4.src/src/image.c:1843:68: error: expected declaration specifiers or '...' before '*' token
 #define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args
                                                                    ^
../../emacs-24.4.src/src/image.c:6204:1: note: in expansion of macro 'DEF_IMGLIB_FN'
 DEF_IMGLIB_FN (boolean, jpeg_finish_decompress, (j_decompress_ptr));
 ^
../../emacs-24.4.src/src/image.c:6206:58: error: unknown type name 'boolean'
 DEF_IMGLIB_FN (int, jpeg_read_header, (j_decompress_ptr, boolean));
                                                          ^
../../emacs-24.4.src/src/image.c:1843:79: note: in definition of macro 'DEF_IMGLIB_FN'
 #define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args
                                                                               ^
../../emacs-24.4.src/src/image.c:1843:68: error: expected declaration specifiers or '...' before '*' token
 #define DEF_IMGLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args
                                                                    ^
../../emacs-24.4.src/src/image.c:6209:1: note: in expansion of macro 'DEF_IMGLIB_FN'
 DEF_IMGLIB_FN (boolean, jpeg_resync_to_restart, (j_decompress_ptr, int));
 ^
../../emacs-24.4.src/src/image.c: In function 'init_jpeg_functions':
../../emacs-24.4.src/src/image.c:1847:5: error: 'fn_jpeg_finish_decompress' undeclared (first use in this function)
     fn_##func = (void *) GetProcAddress (lib, #func);   \
     ^
../../emacs-24.4.src/src/image.c:6219:3: note: in expansion of macro 'LOAD_IMGLIB_FN'
   LOAD_IMGLIB_FN (library, jpeg_finish_decompress);
   ^
../../emacs-24.4.src/src/image.c:1847:5: note: each undeclared identifier is reported only once for each function it appears in
     fn_##func = (void *) GetProcAddress (lib, #func);   \
     ^
../../emacs-24.4.src/src/image.c:6219:3: note: in expansion of macro 'LOAD_IMGLIB_FN'
   LOAD_IMGLIB_FN (library, jpeg_finish_decompress);
   ^
../../emacs-24.4.src/src/image.c:1847:5: error: 'fn_jpeg_start_decompress' undeclared (first use in this function)
     fn_##func = (void *) GetProcAddress (lib, #func);   \
     ^
../../emacs-24.4.src/src/image.c:6221:3: note: in expansion of macro 'LOAD_IMGLIB_FN'
   LOAD_IMGLIB_FN (library, jpeg_start_decompress);
   ^
../../emacs-24.4.src/src/image.c:1847:5: error: 'fn_jpeg_read_header' undeclared (first use in this function)
     fn_##func = (void *) GetProcAddress (lib, #func);   \
     ^
../../emacs-24.4.src/src/image.c:6222:3: note: in expansion of macro 'LOAD_IMGLIB_FN'
   LOAD_IMGLIB_FN (library, jpeg_read_header);
   ^
../../emacs-24.4.src/src/image.c:1847:5: error: 'fn_jpeg_resync_to_restart' undeclared (first use in this function)
     fn_##func = (void *) GetProcAddress (lib, #func);   \
     ^
../../emacs-24.4.src/src/image.c:6226:3: note: in expansion of macro 'LOAD_IMGLIB_FN'
   LOAD_IMGLIB_FN (library, jpeg_resync_to_restart);
   ^
../../emacs-24.4.src/src/image.c: At top level:
../../emacs-24.4.src/src/image.c:6233:1: error: unknown type name 'boolean'
 jpeg_resync_to_restart_wrapper (j_decompress_ptr cinfo, int desired)
 ^
../../emacs-24.4.src/src/image.c: In function 'jpeg_resync_to_restart_wrapper':
../../emacs-24.4.src/src/image.c:6235:3: warning: implicit declaration of function 'fn_jpeg_resync_to_restart' [-Wimplicit-function-declaration]
   return fn_jpeg_resync_to_restart (cinfo, desired);
   ^
../../emacs-24.4.src/src/image.c: At top level:
../../emacs-24.4.src/src/image.c:6303:1: error: unknown type name 'boolean'
 our_memory_fill_input_buffer (j_decompress_ptr cinfo)
 ^
../../emacs-24.4.src/src/image.c:6367:3: error: unknown type name 'boolean'
   boolean finished;
   ^
../../emacs-24.4.src/src/image.c:6382:1: error: unknown type name 'boolean'
 our_stdio_fill_input_buffer (j_decompress_ptr cinfo)
 ^
../../emacs-24.4.src/src/image.c: In function 'jpeg_load_body':
../../emacs-24.4.src/src/image.c:6561:3: warning: implicit declaration of function 'fn_jpeg_read_header' [-Wimplicit-function-declaration]
   fn_jpeg_read_header (&mgr->cinfo, 1);
   ^
../../emacs-24.4.src/src/image.c:6566:3: warning: implicit declaration of function 'fn_jpeg_start_decompress' [-Wimplicit-function-declaration]
   fn_jpeg_start_decompress (&mgr->cinfo);
   ^
../../emacs-24.4.src/src/image.c:6634:3: warning: implicit declaration of function 'fn_jpeg_finish_decompress' [-Wimplicit-function-declaration]
   fn_jpeg_finish_decompress (&mgr->cinfo);
   ^
make[1]: *** [image.o] Error 1
make[1]: Leaving directory `/d/mydata/home/user123/work-dev/emacs-24.4.mingw/src'
make: *** [src] Error 2

Best Regards
Sunline