[gtkmm] [patch] Building under Cygwin



Attached is a patch to allow Gtkmm to built in a Cygwin environment.
The patch isn't intended to be applied "as-is", since some things are
broken.

On the whole, the source assumes that:
- A UNIX environment is using the X11 backend
- Win32 means MinGW
- but Cygwin behaves like a UNIX environment, while requiring
  -no-undefined as a linker option, and may optionally use the win32 GDK
  backend rather than X11.

gtkmm-2.2.9.old/build_shared/Makefile_build.am_fragment:
  Essential to build DLLs with Cygwin.  Will not break MinGW.

gtkmm-2.2.9.old/gtk/gtkmm/plug.cc    }  None of these should be
gtkmm-2.2.9.old/gtk/gtkmm/plug.h     }  applied.  The build is
gtkmm-2.2.9.old/gtk/gtkmm/socket.cc  }  buggy when using a
gtkmm-2.2.9.old/gtk/gtkmm/socket.h   }  win32 GDK backend, since
gtkmm-2.2.9.old/gtk/src/plug.ccg     }  Gtk::Plug and Gtk::Socket
gtkmm-2.2.9.old/gtk/src/plug.hg      }  don't exist, but they are
gtkmm-2.2.9.old/gtk/src/socket.ccg   }  built and linked anyway
gtkmm-2.2.9.old/gtk/src/socket.hg    }  (linking fails, naturally).

I don't have a fix for this, but Gtk::Plug and Gtk::Socket should only
be built if GDK_WINDOWING_X11 is defined, and not if
GDK_WINDOWING_WIN32 is defined.  The assumption that a UNIX
environment == X11 needs to be removed.  I'm not familiar enough with
the intricacies of your build system to do this, unfortunately.

gtkmm-2.2.9.old/gtk/gtkmm/wrap_init.cc                     }
gtkmm-2.2.9.old/tools/extra_defs_gen/generate_defs_gtk.cc  }
gtkmm-2.2.9.old/tools/generate_wrap_init.pl.in             }

Essential to build with a GDK win32 backend on Cygwin.  Will not break
MinGW.


After applying this patch, the build proceeds properly, and I get a
working set of Cygwin DLLS (cygatkmm, cygpangomm, cygglibmm and
cyggtkmm etc.).  The tests and demos all work just fine, with a single
exception: in gtk-demo, the "Images" demo fails with

  Failed to load image: Unrecognized image file format

and the images are replaced with the "no image" icon.  In addition,
the "Pixbufs" and "Text Widget" demo also fail:

  $ ./demo
  Aborted (core dumped)

I've tried running in a debugger

  (gdb) run
  Starting program:
  /cygdrive/c/tmp/build/gtkmm-2.2.9/demos/gtk-demo/.libs/demo.exe 
        5 [sig] demo 2424 open_stackdumpfile: Dumping stack trace to
        demo.exe.stackdump
  
  Program exited with code 0303000.

but there's no stack to examine.  I'm sure the problem is with
gdk-pixbuf, but I'm unsure where (gtk-demo works flawlessly).  I've
built against GTK+ 2.2.4.  The "demo.exe.stackdump" looks like this:

  Stack trace:
  Frame     Function  Args
  0022DF08  77E7AC21  (00000000, 00000008, 0022DF38, 610A0108)
  0022DF68  61087E49  (00000978, 00000006, 0022DF98, 610883B3)
  0022DF78  61087EFC  (00000006, 00000000, 77E75A65, 610A008D)
  0022DF98  610883B3  (0022DFB0, DF0DF047, 00000000, 6109E8BE)
  0022DFE8  61086211  (00A99930, 0022E144, 0022E018, 0076174E)
  0022DFF8  00763425  (10231C60, 0022E040, 77E75A65, 10294068)
  0022E018  0076174E  (0022E040, DF0DF047, 00000000, 6109E8BE)
  0022E078  0074CEA4  (00796030, DF0DF046, 0022E098, 6109B72B)
  0022E118  0074D2FF  (102A6338, 0022E140, 1028A3A8, 01A7CFA0)
  0022E198  01A50D64  (1025E8F0, 102943B8, 102856F8, 1028A1F0)
  0022E1C8  0131E2D3  (1028A3D8, 00000000, 00000003, 0022E3C0)
  0022E218  00DB39DD  (1028A3D8, 00000000, 00000003, 0022E3C0)
  0022E2F8  00DC7BB8  (102587A8, 00000000, 1025E8F0, 00000000)
  0022E558  00DC6E18  (1025E8F0, 00000052, 00000000, 0022E594)
  0022E578  00DC7026  (1025E8F0, 00000052, 00000000, 102946A0)
  0022E5A8  013F7446  (1025E8F0, 102946A0, 102856F8, 0022E604)
  End of stack trace (more stack frames may be present)

but this doesn't look too informative...

Any suggestions about how to debug this further would be greatly
appreciated!


Many thanks,
Roger


-- 
Roger Leigh

                Printing on GNU/Linux?  http://gimp-print.sourceforge.net/
                GPG Public Key: 0x25BFB848.  Please sign and encrypt your mail.

Attachment: rl-gtkmm-2.2.9-cygwin-patch.bz2
Description: Patch to build under cygwin



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]