Subject: Re: installing Gtk-Perl on cygwin (very long, but it actually works now;)
From: "Gerrit P. Haase" <[email-masked]>
To: "dominix" <[email-masked]>
Cc: "'Cygwin List'" <[email-masked]>, [email-masked]
Date: Mon, 12 Jan 2004 01:07:08 +0100

Hallo dominix,

Am Sonntag, 11. Januar 2004 um 20:28 schriebst du:

> hi everybody.
> when trying to install Gtk-perl on cygwin [1.5.5] WinNT5 (XP) with
> perl-5.8.2
> I got errors regarding specific symbols not found, and I'm not able
> to build ImlibImage and the build process stop.
> I'm stuck there. Any advice, recomendation, tip, fix, (blame ?) welcome

> thanks for your time and attention.

> #######################################################3
> cpan Gtk
> ...

> rm -f blib/arch/auto/Gtk/Gdk/ImlibImage/ImlibImage.dll
> LD_RUN_PATH="" ld2  -s -L/usr/local/lib xs/GdkImlib.o  -o
> blib/arch/auto/Gtk/Gdk/ImlibImage/ImlibImage.dll
> /usr/lib/perl5/5.8.2/cygwin-thread-multi-64int/CORE/libperl.dll.a -L/usr/X11
> R6/lib -L/opt/gnome/lib -lgthread -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -
> lintl -lXext -lX11
> gcc -shared -o
> ImlibImage.dll -Wl,--out-implib=libImlibImage.dll.a -Wl,--export-all-symbols
>  -Wl,--enable-auto-import -Wl,--stack,8388608 \
> -s -L/usr/local/lib xs/GdkImlib.o
> /usr/lib/perl5/5.8.2/cygwin-thread-multi-64int/CORE/libperl.dll.a -L/usr/X11
> R6/lib -L/opt/gnome/lib -lgthread -lgdk_imlib -lgtk -lgdk -lgmodule -lglib -
> lintl -lXext -lX11
> Creating library file: libImlibImage.dll.a
> xs/GdkImlib.o(.text+0x38):GdkImlib.c: undefined reference to `_newSVMiscRef'
> xs/GdkImlib.o(.text+0x59):GdkImlib.c: undefined reference to `_SvMiscRef'
> xs/GdkImlib.o(.text+0x301):GdkImlib.c: undefined reference to
> `_pgtk_alloc_temp'
> xs/GdkImlib.o(.text+0x974):GdkImlib.c: undefined reference to
> `_pgtk_alloc_temp'
> xs/GdkImlib.o(.text+0xfcb):GdkImlib.c: undefined reference to `_SvGdkPixmap'
> xs/GdkImlib.o(.text+0x122b):GdkImlib.c: undefined reference to
> `_SvGdkBitmap'
> xs/GdkImlib.o(.text+0x13a3):GdkImlib.c: undefined reference to
> `_pgtk_did_we_init_gtk'
> xs/GdkImlib.o(.text+0x327e):GdkImlib.c: undefined reference to
> `_newSVGdkPixmap'
> xs/GdkImlib.o(.text+0x355d):GdkImlib.c: undefined reference to
> `_newSVGdkBitmap'
> xs/GdkImlib.o(.text+0x383e):GdkImlib.c: undefined reference to
> `_newSVGdkPixmap'
> xs/GdkImlib.o(.text+0x3b02):GdkImlib.c: undefined reference to
> `_newSVGdkBitmap'
> xs/GdkImlib.o(.text+0x3e06):GdkImlib.c: undefined reference to
> `_UnregisterMisc'
> xs/GdkImlib.o(.text+0x4063):GdkImlib.c: undefined reference to
> `_UnregisterMisc'
> xs/GdkImlib.o(.text+0x42b5):GdkImlib.c: undefined reference to
> `_UnregisterMisc'
> xs/GdkImlib.o(.text+0x6419):GdkImlib.c: undefined reference to
> `_newSVGdkPixmap'
> xs/GdkImlib.o(.text+0x64bc):GdkImlib.c: undefined reference to
> `_newSVGdkBitmap'
> xs/GdkImlib.o(.text+0x9518):GdkImlib.c: undefined reference to
> `_SvGdkWindow'
> xs/GdkImlib.o(.text+0x9b3d):GdkImlib.c: undefined reference to
> `_SvGdkWindow'
> xs/GdkImlib.o(.text+0xa184):GdkImlib.c: undefined reference to
> `_SvGdkWindow'
> xs/GdkImlib.o(.text+0xb1a9):GdkImlib.c: undefined reference to
> `_SvGdkBitmap'
> xs/GdkImlib.o(.text+0xb58d):GdkImlib.c: undefined reference to
> `_SvGdkWindow'
> xs/GdkImlib.o(.text+0xd417):GdkImlib.c: undefined reference to
> `_newSVGdkVisual'
> xs/GdkImlib.o(.text+0xd679):GdkImlib.c: undefined reference to
> `_newSVGdkColormap'
> xs/GdkImlib.o(.text+0xe217):GdkImlib.c: undefined reference to
> `_newSVGdkPixmap'
> xs/GdkImlib.o(.text+0xe2ba):GdkImlib.c: undefined reference to
> `_newSVGdkBitmap'
> collect2: ld returned 1 exit status
> perlld: *** system() failed to execute

Ok, what I found:
http://www.occamstoothbrush.com/perl/gtk-perl-cygwin-howto.txt
from a thread on the gtk-perl list and here the story continues:
http://mail.gnome.org/archives/gtk-perl-list/2001-November/msg00061.html

I guess you have all the prerequisites installed (that is about all of
the gnome desktop (http://cygnome.sf.net/ , Berkeley DB 3.1.17,
Libexpat, and the XML::Parser & XML::Writer perl modules)?

The interesting part at the website from the first link is part 4 (I
did the same without specifying `--without-gnomeprint' because I have
it here and it works too), everytime I got an error with these
undefined refs I opened the current Makefile, appended
`-L../blib/arch/auto/Gtk -lGtk' to the OTHERLDFLAGS library list
(as suggested in the thread from the second link) run make again and
voila, it works for GdkImlib.

The same for the second module, but now I have some more undefined
references, e.g. `_gtk_type_check_object_cast'.  This is defined in
libgtk: 
$ nm libgtk.dll.a | grep _gtk_type_check_object_cast
00000000 I __imp__gtk_type_check_object_cast
00000000 T _gtk_type_check_object_cast

But the linkline is including libgtk and libGtk, hmmm I guess it is a
problem with the case insensitivity on Windows, I tried to use
check_case:strict env setting, fired up a new terminal with the new
env setting in use and hey, what do you guess, it doesn't work.  Seems
the linker doesn't care about the case:strict setting:-(

Ok, next try, make a copy from libGtk.dll.a to libGtkGtk.dll.a and
changed the Makefile to use this libGtkGtk instead of libGtk:

1. cp blib/arch/auto/Gtk/libGtk.dll.a blib/arch/auto/Gtk/libGtkGtk.dll.a
2. add to all created Makefile's `-L../blib/arch/auto/Gtk -lGtkGtk' in
   `OTHERLDFLAGS'.
3. compile all in a shell with the env setting
   CYGWIN="check_case:strict" (well add check_case:strict to your
   usual CYGWIN settings, I use now:
   CYGWIN="ntsec binmode tty nowinsymlinks check_case:strict"

And all this actually works, hurray!

Gnome:

Hmmpf, not in the Gnome directory, this module also needs
`-L../GdkImlib/blib/arch/auto/Gtk/Gdk/ImlibImage -lImlibImage' in
addition to `-L../blib/arch/auto/Gtk -lGtkGtk' in `OTHERLDFLAGS'.

Others:

The following modules are compiled the same way, by adding
`-L../blib/arch/auto/Gtk -lGtkGtk' to `OTHERLDFLAGS'.

Applet:

In the Applet directory there are include paths missing:
 `-I/opt/gnome/include/orbit-1.0 -I/opt/gnome/include/libcapplet1'
I added it at the end of the `INC = ...' line in the Makefile and it
compiles ok, well there is also missing:
`-lcapplet -lpanel_applet -lpanel_status' from the library list, add
them to EXTRALIBS & LDLOADLIBS variable defintion somewhere at the
end. Cause:
See the top source Makefile.PL: # --modversion capplet is broken

The same problem with libGnome vs. libgmnome as before with libGtk vs.
libgtk, also make a copy of the perl libGnome.dll.a to
libGnomeGnome.dll.a and add this to OTHERLDLIBS:
`-L../Gnome/blib/arch/auto/Gnome -lGnomeGnome'

GnomePrint:

Also a library missing at the linkline -lgnomeprint?  Huh, this perl
package is really strange... And this modules also needs another
module,  `-L../GdkPixbuf/blib/arch/auto/Gtk/Gdk/Pixbuf -lPixbuf'

At least there are no circular dependencies yet...

After compilation finished:

 * launch X

 * test Gtk-Perl with `make test' doesn't work for me.

I could run the samples in the samples directories though.

Applet and Gnomeprint are probably not working as expected, Gnome
works partially.

HTH,
Gerrit
-- 
=^..^=

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/