From 5aff70029abb6bd804c156b412f1a2ab70ebfa23 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 26 Nov 2010 11:20:15 -0700 Subject: [PATCH] centralize glib loading as used by racket/draw and Gtk racket/gui --- collects/mred/private/wx/gtk/utils.rkt | 29 +++---------------------- collects/racket/draw/unsafe/glib.rkt | 30 ++++++++++++++++++++++++++ collects/racket/draw/unsafe/pango.rkt | 25 +++------------------ src/racket/include/mzwin.def | 1 + src/racket/include/mzwin3m.def | 1 + src/racket/include/racket.exp | 1 + src/racket/include/racket3m.exp | 1 + src/racket/src/error.c | 5 +++++ src/racket/src/schemef.h | 1 + src/racket/src/schemex.h | 1 + src/racket/src/schemex.inc | 1 + src/racket/src/schemexm.h | 1 + 12 files changed, 49 insertions(+), 48 deletions(-) create mode 100644 collects/racket/draw/unsafe/glib.rkt diff --git a/collects/mred/private/wx/gtk/utils.rkt b/collects/mred/private/wx/gtk/utils.rkt index 16d569ef4f..069e4d42ed 100644 --- a/collects/mred/private/wx/gtk/utils.rkt +++ b/collects/mred/private/wx/gtk/utils.rkt @@ -2,16 +2,17 @@ (require ffi/unsafe ffi/unsafe/define ffi/unsafe/alloc + racket/draw/unsafe/glib (only-in '#%foreign ctype-c->scheme) "../common/utils.rkt" "types.rkt") (provide define-mz + define-gobj + define-glib (protect-out define-gtk define-gdk - define-gobj - define-glib define-gdk_pixbuf g_object_ref @@ -56,27 +57,6 @@ (ffi-lib "libgdk_pixbuf-2.0-0") (ffi-lib "libgdk-win32-2.0-0")] [else (ffi-lib "libgdk-x11-2.0" '("0"))])) -(define gobj-lib - (case (system-type) - [(windows) - (ffi-lib "libgobject-2.0-0")] - [(unix) - (ffi-lib "libgobject-2.0" '("0"))] - [else gdk-lib])) -(define glib-lib - (case (system-type) - [(windows) - (ffi-lib "libglib-2.0-0")] - [(unix) - (ffi-lib "libglib-2.0" '("0"))] - [else gdk-lib])) -(define gmodule-lib - (case (system-type) - [(windows) - (ffi-lib "libgmodule-2.0-0")] - [(unix) - (ffi-lib "libgmodule-2.0" '("0"))] - [else gdk-lib])) (define gdk_pixbuf-lib (case (system-type) [(windows) @@ -91,9 +71,6 @@ [else (ffi-lib "libgtk-x11-2.0" '("0"))])) (define-ffi-definer define-gtk gtk-lib) -(define-ffi-definer define-gobj gobj-lib) -(define-ffi-definer define-glib glib-lib) -(define-ffi-definer define-gmodule gmodule-lib) (define-ffi-definer define-gdk gdk-lib) (define-ffi-definer define-gdk_pixbuf gdk_pixbuf-lib) diff --git a/collects/racket/draw/unsafe/glib.rkt b/collects/racket/draw/unsafe/glib.rkt new file mode 100644 index 0000000000..2b3ae40af4 --- /dev/null +++ b/collects/racket/draw/unsafe/glib.rkt @@ -0,0 +1,30 @@ +#lang scheme/base +(require ffi/unsafe + ffi/unsafe/define + "../private/libs.rkt") + +(provide (protect-out + define-glib + define-gmodule + define-gobj)) + +(define-runtime-lib glib-lib + [(unix) (ffi-lib "libglib-2.0" '("0"))] + [(macosx) (ffi-lib "libglib-2.0.0")] + [(windows) (ffi-lib "libglib-2.0-0.dll")]) + +(define-runtime-lib gmodule-lib + [(unix) (ffi-lib "libgmodule-2.0" '("0"))] + [(macosx) + (ffi-lib "libgmodule-2.0.0.dylib")] + [(windows) + (ffi-lib "libgmodule-2.0-0.dll")]) + +(define-runtime-lib gobj-lib + [(unix) (ffi-lib "libgobject-2.0" '("0"))] + [(macosx) (ffi-lib "libgobject-2.0.0")] + [(windows) (ffi-lib "libgobject-2.0-0.dll")]) + +(define-ffi-definer define-glib glib-lib) +(define-ffi-definer define-gmodule gmodule-lib) +(define-ffi-definer define-gobj gobj-lib) diff --git a/collects/racket/draw/unsafe/pango.rkt b/collects/racket/draw/unsafe/pango.rkt index f5e282ca6d..7779deadb9 100644 --- a/collects/racket/draw/unsafe/pango.rkt +++ b/collects/racket/draw/unsafe/pango.rkt @@ -4,6 +4,7 @@ ffi/unsafe/alloc ffi/unsafe/atomic setup/dirs + "glib.rkt" "cairo.rkt" "../private/utils.rkt" "../private/libs.rkt") @@ -11,15 +12,9 @@ (define-runtime-lib pango-lib [(unix) (ffi-lib "libpango-1.0" '("0"))] [(macosx) - (ffi-lib "libglib-2.0.0.dylib") - (ffi-lib "libgmodule-2.0.0.dylib") - (ffi-lib "libgobject-2.0.0.dylib") (ffi-lib "libintl.8.dylib") (ffi-lib "libpango-1.0.0.dylib")] [(windows) - (ffi-lib "libglib-2.0-0.dll") - (ffi-lib "libgmodule-2.0-0.dll") - (ffi-lib "libgobject-2.0-0.dll") (ffi-lib "libpango-1.0-0.dll")]) (define-runtime-lib pangowin32-lib @@ -40,26 +35,12 @@ (ffi-lib "libpangoft2-1.0-0.dll") (ffi-lib "libpangocairo-1.0-0.dll")]) -(define-runtime-lib glib-lib - [(unix) (ffi-lib "libglib-2.0" '("0"))] - [(macosx) (ffi-lib "libglib-2.0.0")] - [(windows) (ffi-lib "libglib-2.0-0.dll")]) - -(define-runtime-lib gobj-lib - [(unix) (ffi-lib "libgobject-2.0" '("0"))] - [(macosx) (ffi-lib "libgobject-2.0.0")] - [(windows) (ffi-lib "libgobject-2.0-0.dll")]) - (define-ffi-definer define-pango pango-lib #:provide provide) (define-ffi-definer define-pangocairo pangocairo-lib #:provide provide) (define-ffi-definer define-pangowin32 pangowin32-lib #:provide provide) -(define-ffi-definer define-glib glib-lib - #:provide provide) -(define-ffi-definer define-gobj gobj-lib - #:provide provide) (define PangoContext (_cpointer 'PangoContext)) (define PangoLayout (_cpointer 'PangoLayout)) @@ -124,7 +105,7 @@ [glyphs _PangoGlyphString-pointer])) (provide (struct-out PangoGlyphItem)) - +(provide g_object_unref g_free) (define-gobj g_object_unref (_fun _pointer -> _void) #:wrap (deallocator)) (define-glib g_free (_fun _pointer -> _void) @@ -230,7 +211,7 @@ -> (begin0 (for/list ([i (in-range len)]) (ptr-ref fams PangoFontFamily i)) - (g_free fams)))) + (free fams)))) (define-pango pango_font_description_free (_fun PangoFontDescription -> _void) #:wrap (deallocator)) diff --git a/src/racket/include/mzwin.def b/src/racket/include/mzwin.def index 52d64b2895..5f2ef7a294 100644 --- a/src/racket/include/mzwin.def +++ b/src/racket/include/mzwin.def @@ -99,6 +99,7 @@ EXPORTS scheme_log scheme_log_message scheme_log_abort + scheme_log_warning scheme_out_of_memory_abort scheme_wrong_count scheme_wrong_count_m diff --git a/src/racket/include/mzwin3m.def b/src/racket/include/mzwin3m.def index 3b31068276..8dffd3241a 100644 --- a/src/racket/include/mzwin3m.def +++ b/src/racket/include/mzwin3m.def @@ -99,6 +99,7 @@ EXPORTS scheme_log scheme_log_message scheme_log_abort + scheme_log_warning scheme_out_of_memory_abort scheme_wrong_count scheme_wrong_count_m diff --git a/src/racket/include/racket.exp b/src/racket/include/racket.exp index 241132e9de..015e172cad 100644 --- a/src/racket/include/racket.exp +++ b/src/racket/include/racket.exp @@ -97,6 +97,7 @@ scheme_log_level_p scheme_log scheme_log_message scheme_log_abort +scheme_log_warning scheme_out_of_memory_abort scheme_wrong_count scheme_wrong_count_m diff --git a/src/racket/include/racket3m.exp b/src/racket/include/racket3m.exp index a5393f4eff..adf0535742 100644 --- a/src/racket/include/racket3m.exp +++ b/src/racket/include/racket3m.exp @@ -97,6 +97,7 @@ scheme_log_level_p scheme_log scheme_log_message scheme_log_abort +scheme_log_warning scheme_out_of_memory_abort scheme_wrong_count scheme_wrong_count_m diff --git a/src/racket/src/error.c b/src/racket/src/error.c index 91a19005de..bd4550b191 100644 --- a/src/racket/src/error.c +++ b/src/racket/src/error.c @@ -2872,6 +2872,11 @@ void scheme_log_abort(char *buffer) scheme_log_message(&logger, SCHEME_LOG_FATAL, buffer, strlen(buffer), scheme_false); } +void scheme_log_warning(char *buffer) +{ + scheme_log_message(scheme_main_logger, SCHEME_LOG_WARNING, buffer, strlen(buffer), scheme_false); +} + static int extract_level(const char *who, int which, int argc, Scheme_Object **argv) { Scheme_Object *v; diff --git a/src/racket/src/schemef.h b/src/racket/src/schemef.h index 4b231f9a15..6d862c26c0 100644 --- a/src/racket/src/schemef.h +++ b/src/racket/src/schemef.h @@ -204,6 +204,7 @@ MZ_EXTERN void scheme_log(Scheme_Logger *logger, int level, int flags, char *msg, ...); MZ_EXTERN void scheme_log_message(Scheme_Logger *logger, int level, char *buffer, long len, Scheme_Object *data); MZ_EXTERN void scheme_log_abort(char *buffer); +MZ_EXTERN void scheme_log_warning(char *buffer); MZ_EXTERN void scheme_out_of_memory_abort(); MZ_EXTERN void scheme_wrong_count(const char *name, int minc, int maxc, diff --git a/src/racket/src/schemex.h b/src/racket/src/schemex.h index 5e2f87caf1..01e41905d4 100644 --- a/src/racket/src/schemex.h +++ b/src/racket/src/schemex.h @@ -161,6 +161,7 @@ void (*scheme_log)(Scheme_Logger *logger, int level, int flags, char *msg, ...); void (*scheme_log_message)(Scheme_Logger *logger, int level, char *buffer, long len, Scheme_Object *data); void (*scheme_log_abort)(char *buffer); +void (*scheme_log_warning)(char *buffer); void (*scheme_out_of_memory_abort)(); void (*scheme_wrong_count)(const char *name, int minc, int maxc, int argc, Scheme_Object **argv); diff --git a/src/racket/src/schemex.inc b/src/racket/src/schemex.inc index e27756dde3..caac19eeaf 100644 --- a/src/racket/src/schemex.inc +++ b/src/racket/src/schemex.inc @@ -105,6 +105,7 @@ scheme_extension_table->scheme_log = scheme_log; scheme_extension_table->scheme_log_message = scheme_log_message; scheme_extension_table->scheme_log_abort = scheme_log_abort; + scheme_extension_table->scheme_log_warning = scheme_log_warning; scheme_extension_table->scheme_out_of_memory_abort = scheme_out_of_memory_abort; scheme_extension_table->scheme_wrong_count = scheme_wrong_count; scheme_extension_table->scheme_wrong_count_m = scheme_wrong_count_m; diff --git a/src/racket/src/schemexm.h b/src/racket/src/schemexm.h index 2db158e7fd..fa082c493f 100644 --- a/src/racket/src/schemexm.h +++ b/src/racket/src/schemexm.h @@ -105,6 +105,7 @@ #define scheme_log (scheme_extension_table->scheme_log) #define scheme_log_message (scheme_extension_table->scheme_log_message) #define scheme_log_abort (scheme_extension_table->scheme_log_abort) +#define scheme_log_warning (scheme_extension_table->scheme_log_warning) #define scheme_out_of_memory_abort (scheme_extension_table->scheme_out_of_memory_abort) #define scheme_wrong_count (scheme_extension_table->scheme_wrong_count) #define scheme_wrong_count_m (scheme_extension_table->scheme_wrong_count_m)