(i'm not an expert on the matter, but I think, that:)
Gauche-gtk-0.4.1 contains gtkgl and glgd subdirs. I think they both are written to use pango built upon Free-Type,
but in recent versions, pango uses Cairo instead?
I have this poor workaround (to disable the 2 parts):
Makefile.in - HAVE_GTKGL=@GTKGL_SO@ - HAVE_GLGD=@GLGD_SO@ + HAVE_GTKGL= + HAVE_GLGD=
Here I try to list & document my many changes to gauche-gtk, not related to the change of the stub building process; that one is documented in gauche-gtk-building.
I have some patches for GTK itself, and build it with this (gentoo) ebuild.
/p/gauche-gtk-0.4.1/work/Gauche-gtk-0.4.1/src/Makefile
uses $(GOSH) /x/activity/gauche/stubs/h2stub.scm
/p/gauche-gtk-0.4.1/work/Gauche-gtk-0.4.1/src/gtk-lib.hints
;(define-cclass
gauche-gtk.h has gobject_compare!
/p/gauche-gtk-0.4.1-experimental/work/Gauche-gtk-0.4.1/src/gauche-gtk.c
g_signal_connect_after(GTK_OBJECT(gobj), "destroy", /* _after */
ScmObj Scm_GObjectGetData(ScmGObject gobj, ScmObj key, ScmObj fallback) { ScmObj p = Scm_Assq(key, gobj->data);
versus: ScmObj p = Scm_Assoc(key, gobj->data, SCM_CMP_EQUAL);
in gdkevents.c
static void Scm_GdkEventKeyClass_string_SET(ScmObj OBJARG, ScmObj value) < { < GdkEventKey* obj = SCM_GDK_EVENT_KEY(OBJARG); < if (! SCM_STRINGP(value)) Scm_Error("bad argument: string needed\n"); < obj->string = Scm_GetStringConst(SCM_STRING(value)); < } < 1157c1158 < SCM_CLASS_SLOT_SPEC("string", Scm_GdkEventKeyClass_string_GET, Scm_GdkEventKeyClass_string_SET),
--- > SCM_CLASS_SLOT_SPEC("string", Scm_GdkEventKeyClass_string_GET, NULL),
-> aclocal && autoconf && configure!
for f (./lib/gtk.scm ./src/gauche-glib.stub ./src/gauche-gtk.c ./src/gauche-gtk.h ./src/gtk-lib.hints ./src/Makefile.in ./src/GTKFILES ./src/gdk-lib.hints ) {make_patch $f /p/gauche-gtk-0.4.1-r1.patched/work/Gauche-gtk-0.4.1/$f }
;;/usr/include/gtk-2.0/gdk/gdktypes.h typedef struct _GdkDrawable GdkWindow;
I removed need for these fixups.
;;================================================================== ;; gtkdnd.h [mmc!] ;;
(input-file "gtkdnd.h")
(define-cproc-fix gtk-drag-dest-set
(fix-arguments! '(widget::
flags:: targets actions:: )) (fix-body! " if (! SCM_LISTP(targets)) Scm_Error(\"LIST of gtk-target-entry/s required, but got %S\", targets); int n_targets = 0; /* Scm_Length(targets); /
ScmObj p; / First*/
SCM_FOR_EACH(p, targets) { if (!SCM_GTK_TARGET_ENTRY_P(SCM_CAR(p))) Scm_Error(\"gtk-target-entry required, but got %S\", SCM_CAR(p)); n_targets++; }
GtkTargetEntry* c_targets = malloc((n_targets) * sizeof (GtkTargetEntry)); /* + 1*/ int i = 0; SCM_FOR_EACH(p, targets) { memcpy (c_targets + i++, SCM_GTK_TARGET_ENTRY(SCM_CAR(p)), sizeof (GtkTargetEntry)); }; /* Get the `n_targets' /
gtk_drag_dest_set(widget, flags, c_targets, n_targets, actions); free(c_targets); return SCM_UNDEFINED;"))
;; Same! (define-cproc-fix gtk-drag-source-set
(fix-arguments! '(widget::
flags:: targets actions:: )) (fix-body! " if (! SCM_LISTP(targets)) Scm_Error(\"LIST of gtk-target-entry/s required, but got %S\", targets); int n_targets = 0; / Scm_Length(targets); /
ScmObj p; / First*/
SCM_FOR_EACH(p, targets) { if (!SCM_GTK_TARGET_ENTRY_P(SCM_CAR(p))) Scm_Error(\"gtk-target-entry required, but got %S\", SCM_CAR(p)); n_targets++; }
GtkTargetEntry* c_targets = malloc((n_targets) * sizeof (GtkTargetEntry)); /* + 1*/ int i = 0; SCM_FOR_EACH(p, targets) { memcpy (c_targets + i++, SCM_GTK_TARGET_ENTRY(SCM_CAR(p)), sizeof (GtkTargetEntry)); Scm_Warn(\"%d -> %s\", i, SCM_GTK_TARGET_ENTRY(SCM_CAR(p))->target); }; /* Get the `n_targets' /
Scm_Warn(\"gtk-drag-source-set: %d\", n_targets); gtk_drag_source_set(widget, flags, c_targets, n_targets, actions); free(c_targets); return SCM_UNDEFINED;"))
* gtk-lib.h did i patch it?
(define-cproc-fix gtk-ui-manager-add-ui-from-file
(fix-arguments! '(self::
filename:: )) (fix-body! "GError* err = NULL; uint r; r = gtk_ui_manager_add_ui_from_file(self, filename, &err); if (!r) { Scm_Error(\"gtk-ui-manager-add-ui-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))
(fix-arguments! '(window::
filename:: )) (fix-body! "GError err = NULL; gboolean r; r = gtk_window_set_icon_from_file(window, filename, &err); if (!r) { Scm_Error(\"gtk-window-set-icon-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))
(define-cproc-fix gtk-window-set-default-icon-from-file
(fix-arguments! '(filename::
>)) (fix-body! "GError *err = NULL; gboolean r; r = gtk_window_set_default_icon_from_file(filename, &err); if (!r) { Scm_Error(\"gtk-window-set-default-icon-from-file: %s\", err->message); } SCM_RETURN(SCM_TRUE);"))
;;; [10 gen 05]
;(define-cclass