Standalone Pango

View: New views
6 Messages — Rating Filter:   Alert me  

Standalone Pango

by Torsten Schoenfeld :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Aloha,

I started working on creating a standalone version of our pango bindings.  I
think it's nearly complete by now, but there's at least one remaining issue.

I use Chia-liang Kao's suggestion for aliasing the old Gtk2::Pango::* names to
their new Pango::* counterparts:

{
  no strict 'refs';
  foreach my $key (keys %Pango::) {
    *{"Gtk2::Pango::" . $key} = *{"Pango::" . $key};
  }
}

This doesn't cover Glib::Object's package-name-to-type registry, though.  That
means that things like

  Glib::Object::new ('Gtk2::Pango::Layout')

or

  Gtk2::TreeStore->new ('Gtk2::Pango::Weight')

stop working because those names are not registered with Glib anymore.

As far as I can tell, simply continuing to call gperl_register_* for the old
names will not work: the type registry in Glib::Object is not set up to handle
anything but a one-to-one relationship between package names and types.

Does anyone have any suggestion for how to solve this?

--
Bye,
-Torsten

_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Re: Standalone Pango

by muppet :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jun 29, 2008, at 10:20 AM, Torsten Schoenfeld wrote:

> As far as I can tell, simply continuing to call gperl_register_* for  
> the old
> names will not work: the type registry in Glib::Object is not set up  
> to handle
> anything but a one-to-one relationship between package names and  
> types.

True.  But we've run into this before.  Here's the last bit of the  
BOOT section in GType.xs:

        /* i love nasty ugly hacks for backwards compat... Glib::UInt used
         * to be misspelled as Glib::Uint.  by registering both names to the
         * same gtype, we get the mappings for two packages to one gtype, but
         * only one mapping (the last and correct one) from type to package.
         */
        G_LOCK (types_by_package);
        g_hash_table_insert (types_by_package, "Glib::Uint",
                             (gpointer) G_TYPE_UINT);
        G_UNLOCK (types_by_package);

(Please note the sarcasm in the comment.)

We can't use gperl_register_fundamental() here, because that would  
create the second backwards mapping, which screws up the one-to-one  
relationship from C to perl types.  Instead, it assumes that the C  
code will always return exactly one name (the new name), and fixes up  
all references to the old name on the way from perl to C.

We can do this in GType.xs because we're inside the Glib module and  
have access to those private data structures.  To allow Pango to do  
this, we'd need to create a new set of registration APIs.  For example  
(just spewing from the top of my head):


     /**
      * Set up package_name as a perl-level alias for gtype.
      */
     void gperl_register_flags_alias (GType gtype, const char *  
package_name);

or even get paranoid:

     /**
      * Set up package_name as a perl-level alias for gtype.
      * Verifies that preferred_name is already registered as the real  
package mapping for gtype.
      */
     void gperl_register_flags_alias (GType gtype, const char *  
preferred_name, const char * package_name);



Each of the register foo alias functions would simply to an unpaired  
insertion into types_by_package for foo.


So, this means that code that does Glib::Object::new  
('Gtk2::Pango::Layout')  will create a Pango::Layout, and  
Gtk2::TreeStore->new ('Gtk2::Pango::Weight') will create a  
Pango::Weight column.  When perl code asks the bindings "what type is  
this", the bindings will respond with the non-Gtk2 names.

It should be rare, but somebody, somewhere, will be checking for exact  
package names, so we'll have to do extensive beta testing.  We could  
add some @ISAs at the perl level to try to counteract this (e.g.,  
Gtk2::Pango::Layout isa Pango::Layout), but i'm not sure how much it  
will help.


--
Sallah!  I said no camels!  That's five camels!  Can't you count?
   -- Indiana Jones
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Re: Standalone Pango

by Kevin Ryde :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Torsten Schoenfeld <kaffeetisch@...> writes:
>
> Does anyone have any suggestion for how to solve this?

The "do less" approach :-).  Make it initializable/runnable/etc
standalone, but leave the names for now.  If use standalone outside gtk
is rare, as yet, then it doesn't matter much (and can always have a
renaming later if/when outside uses become the majority).
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Re: Standalone Pango

by Sergei Steshenko-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message



Applications From Scratch: http://appsfromscratch.berlios.de/


--- On Sun, 6/29/08, muppet <scott@...> wrote:

> From: muppet <scott@...>
> Subject: Re: Standalone Pango
> To: "gtk2-perl List" <gtk-perl-list@...>
> Date: Sunday, June 29, 2008, 10:36 AM
> On Jun 29, 2008, at 10:20 AM, Torsten Schoenfeld wrote:
>

>
> /* i love nasty ugly hacks for backwards compat...
> Glib::UInt used
> * to be misspelled as Glib::Uint.  by registering both
> names to the
> * same gtype, we get the mappings for two packages to one
> gtype, but
> * only one mapping (the last and correct one) from type
> to package.
> */
> G_LOCK (types_by_package);
> g_hash_table_insert (types_by_package,
> "Glib::Uint",
>     (gpointer) G_TYPE_UINT);
> G_UNLOCK (types_by_package);
>
> (Please note the sarcasm in the comment.)

Is GNOME/gtk+/gtk-perl all like that ?

I mean, is it the accepted practice to write ugly backward compatibility
hacks instead of fixing the root cause ?

Thanks,
  Sergei.


     
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Re: Standalone Pango

by muppet :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jun 30, 2008, at 5:32 PM, Sergei Steshenko wrote:

>
>
> Applications From Scratch: http://appsfromscratch.berlios.de/
>
>
> --- On Sun, 6/29/08, muppet <scott@...> wrote:
>
>> From: muppet <scott@...>
>> Subject: Re: Standalone Pango
>> To: "gtk2-perl List" <gtk-perl-list@...>
>> Date: Sunday, June 29, 2008, 10:36 AM
>> On Jun 29, 2008, at 10:20 AM, Torsten Schoenfeld wrote:
>>
>
>>
>> /* i love nasty ugly hacks for backwards compat...
>> Glib::UInt used
>> * to be misspelled as Glib::Uint.  by registering both
>> names to the
>> * same gtype, we get the mappings for two packages to one
>> gtype, but
>> * only one mapping (the last and correct one) from type
>> to package.
>> */
>> G_LOCK (types_by_package);
>> g_hash_table_insert (types_by_package,
>> "Glib::Uint",
>>     (gpointer) G_TYPE_UINT);
>> G_UNLOCK (types_by_package);
>>
>> (Please note the sarcasm in the comment.)
>
> Is GNOME/gtk+/gtk-perl all like that ?

No.  There are a handful of edge cases.  BUT, one of the main reasons  
that there is noise about an API/ABI break for gtk+ 3.x is that it is  
getting harder to maintain the 2.x-series compatibility promise but  
still fix bugs and add new features.


> I mean, is it the accepted practice to write ugly backward  
> compatibility
> hacks instead of fixing the root cause ?


I think you're missing the point.  We *did* fix the root cause --- we  
changed the spelling of the type name.  The purpose of the hack was to  
maintain backwards compatibility with programs that had already been  
written against stable releases.  We don't document or advertise that  
you can misspell the name, because it's not right; but we accept that  
input because we did in early stable releases and don't want to break  
people's otherwise working code.

You'll find this sort of thing in any software that makes any  
reasonable attempt not to break users' code.

To wit, there is gtk2-perl code that i wrote and distributed in 2003  
that is still in production, unchanged, working fine as system  
upgrades come and go.  Users place high value on that sort of stability.


--
The stereo, playing the Beastie Boys' "Rhymin' and Stealin'":  "I'll  
steal your girlie like I stole your bike!"

Elysse:  "You mean, take off the chain and ride away?"


_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list

Re: Standalone Pango

by Torsten Schoenfeld :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

muppet wrote:
>     /**
>      * Set up package_name as a perl-level alias for gtype.
>      */
>     void gperl_register_flags_alias (GType gtype, const char *
> package_name);

OK, I've implemented this.  See the attached type-aliases.patch.  It doesn't
add an alias variant for param specs because Pango doesn't need it.

And standalone-pango-v2.patch are the corresponding changes to Gtk2.  The
actual standalone Pango module is mainly the relevant *.xs and *.t files from
Gtk2 plus some build infrastructure, so I don't attach it.

All this seems to work pretty well.  I see only two remaining issues:

* We lose the Gtk2::Pango::* POD pages.  Since the XS files aren't there
anymore, these don't get created.  If we keep the XS files around but don't
compile them, I think we might be able to fool the doc generation stuff into
parsing them anyway.

* Is it too late to do such a big change?  The stable releases are due on
September 22.  We could postpone this to next cycle.

What do you think?

--
Bye,
-Torsten

Index: GBoxed.xs
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/GBoxed.xs,v
retrieving revision 1.28
diff -u -d -p -r1.28 GBoxed.xs
--- GBoxed.xs 4 May 2008 12:49:53 -0000 1.28
+++ GBoxed.xs 2 Aug 2008 17:08:31 -0000
@@ -209,6 +209,44 @@ gperl_register_boxed (GType gtype,
  G_UNLOCK (info_by_package);
 }
 
+=item void gperl_register_boxed_alias (GType gtype, const char * package)
+
+Makes I<package> an alias for I<type>.  This means that the package name
+specified by I<package> will be mapped to I<type> by
+I<gperl_boxed_type_from_package>, but I<gperl_boxed_package_from_type> won't
+map I<type> to I<package>.  This is useful if you want to change the canonical
+package name of a type while preserving backwards compatibility with code which
+uses I<package> to specify I<type>.
+
+In order for this to make sense, another package name should be registered for
+I<type> with I<gperl_register_boxed>.
+
+=cut
+
+void
+gperl_register_boxed_alias (GType gtype,
+    const char * package)
+{
+ BoxedInfo * boxed_info;
+
+ G_LOCK (info_by_gtype);
+ boxed_info = (BoxedInfo *)
+ g_hash_table_lookup (info_by_gtype, (gpointer) gtype);
+ G_UNLOCK (info_by_gtype);
+
+ if (!boxed_info) {
+ croak ("cannot register alias %s for the unregistered type %s",
+       package, g_type_name (gtype));
+ }
+
+ G_LOCK (info_by_package);
+ /* associate package with the same boxed_info.  boxed_info is still
+   owned by info_by_gtype.  info_by_package doesn't have a
+   free-function installed, so that's ok. */
+ g_hash_table_insert (info_by_package, (char *) package, boxed_info);
+ G_UNLOCK (info_by_package);
+}
+
 =item GType gperl_boxed_type_from_package (const char * package)
 
 Look up the GType associated with package I<package>.  Returns 0 if I<type> is
Index: GObject.xs
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/GObject.xs,v
retrieving revision 1.75
diff -u -d -p -r1.75 GObject.xs
--- GObject.xs 13 Jun 2008 10:38:59 -0000 1.75
+++ GObject.xs 2 Aug 2008 17:08:32 -0000
@@ -315,6 +315,44 @@ gperl_register_object (GType gtype,
  class_info_finish_loading (class_info);
 }
 
+=item void gperl_register_object_alias (GType gtype, const char * package)
+
+Makes I<package> an alias for I<type>.  This means that the package name
+specified by I<package> will be mapped to I<type> by
+I<gperl_object_type_from_package>, but I<gperl_object_package_from_type> won't
+map I<type> to I<package>.  This is useful if you want to change the canonical
+package name of a type while preserving backwards compatibility with code which
+uses I<package> to specify I<type>.
+
+In order for this to make sense, another package name should be registered for
+I<type> with I<gperl_register_object>.
+
+=cut
+
+void
+gperl_register_object_alias (GType gtype,
+     const char * package)
+{
+ ClassInfo *class_info;
+
+ G_LOCK (types_by_type);
+ class_info = (ClassInfo *)
+ g_hash_table_lookup (types_by_type, (gpointer) gtype);
+ G_UNLOCK (types_by_type);
+
+ if (!class_info) {
+ croak ("cannot register alias %s for the unregistered type %s",
+       package, g_type_name (gtype));
+ }
+
+ G_LOCK (types_by_package);
+ /* associate package with the same class_info.  class_info is still
+   owned by types_by_type.  types_by_package doesn't have a
+   free-function installed, so that's ok. */
+ g_hash_table_insert (types_by_package, (char *) package, class_info);
+ G_UNLOCK (types_by_package);
+}
+
 
 =item void gperl_register_sink_func (GType gtype, GPerlObjectSinkFunc func)
 
Index: GType.xs
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/GType.xs,v
retrieving revision 1.93
diff -u -d -p -r1.93 GType.xs
--- GType.xs 13 Jul 2008 15:10:15 -0000 1.93
+++ GType.xs 2 Aug 2008 17:08:32 -0000
@@ -104,6 +104,45 @@ gperl_register_fundamental (GType gtype,
  gperl_set_isa (package, "Glib::Flags");
 }
 
+=item void gperl_register_fundamental_alias (GType gtype, const char * package)
+
+Makes I<package> an alias for I<type>.  This means that the package name
+specified by I<package> will be mapped to I<type> by
+I<gperl_fundamental_type_from_package>, but
+I<gperl_fundamental_package_from_type> won't map I<type> to I<package>.  This
+is useful if you want to change the canonical package name of a type while
+preserving backwards compatibility with code which uses I<package> to specify
+I<type>.
+
+In order for this to make sense, another package name should be registered for
+I<type> with I<gperl_register_fundamental> or
+I<gperl_register_fundamental_full>.
+
+=cut
+
+void
+gperl_register_fundamental_alias (GType gtype,
+  const char * package)
+{
+ const char * res;
+
+ G_LOCK (packages_by_type);
+ res = (const char *)
+ g_hash_table_lookup (packages_by_type, (gpointer) gtype);
+ G_UNLOCK (packages_by_type);
+
+ if (!res) {
+ croak ("cannot register alias %s for the unregistered type %s",
+       package, g_type_name (gtype));
+ }
+
+ G_LOCK (types_by_package);
+ g_hash_table_insert (types_by_package,
+     (char *) package,
+     (gpointer) gtype);
+ G_UNLOCK (types_by_package);
+}
+
 =item GPerlValueWrapperClass
 
 Specifies the vtable that is to be used to convert fundamental types to and
Index: gperl.h
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Glib/gperl.h,v
retrieving revision 1.54
diff -u -d -p -r1.54 gperl.h
--- gperl.h 7 Jan 2008 19:17:08 -0000 1.54
+++ gperl.h 2 Aug 2008 17:08:32 -0000
@@ -114,6 +114,7 @@ struct _GPerlValueWrapperClass {
 };
 
 void gperl_register_fundamental (GType gtype, const char * package);
+void gperl_register_fundamental_alias (GType gtype, const char * package);
 void gperl_register_fundamental_full (GType gtype, const char * package, GPerlValueWrapperClass * wrapper_class);
 
 GType gperl_fundamental_type_from_package (const char * package);
@@ -208,6 +209,7 @@ GPerlBoxedWrapperClass * gperl_default_b
 void gperl_register_boxed (GType gtype,
    const char * package,
    GPerlBoxedWrapperClass * wrapper_class);
+void gperl_register_boxed_alias (GType gtype, const char * package);
 
 SV * gperl_new_boxed (gpointer boxed, GType gtype, gboolean own);
 SV * gperl_new_boxed_copy (gpointer boxed, GType gtype);
@@ -222,6 +224,7 @@ const char * gperl_boxed_package_from_ty
  * GObject
  */
 void gperl_register_object (GType gtype, const char * package);
+void gperl_register_object_alias (GType gtype, const char * package);
 
 typedef void (*GPerlObjectSinkFunc) (GObject *);
 void gperl_register_sink_func (GType               gtype,

? t/pango-compat.t
Index: CodeGen.pm
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/CodeGen.pm,v
retrieving revision 1.26
diff -u -d -p -r1.26 CodeGen.pm
--- CodeGen.pm 22 Jun 2008 12:35:13 -0000 1.26
+++ CodeGen.pm 2 Aug 2008 17:08:47 -0000
@@ -11,6 +11,12 @@ our $VERSION = '0.03';
 
 Glib::CodeGen->add_type_handler (GtkObject => \&gen_gtkobject_stuff);
 
+Glib::CodeGen->add_type_handler (GEnumAlias => \&gen_fundamental_alias_stuff);
+Glib::CodeGen->add_type_handler (GFlagsAlias => \&gen_fundamental_alias_stuff);
+Glib::CodeGen->add_type_handler (GBoxedAlias => \&gen_boxed_alias_stuff);
+Glib::CodeGen->add_type_handler (GObjectAlias => \&gen_object_alias_stuff);
+Glib::CodeGen->add_type_handler (GInterfaceAlias => \&gen_object_alias_stuff);
+
 
 =head1 NAME
 
@@ -227,6 +233,28 @@ gperl_register_object ($typemacro, \"$pa
 ";
 }
 
+sub gen_alias_stuff {
+ my ($typemacro, $func, $package) = @_;
+ Glib::CodeGen::add_register "#ifdef $typemacro
+$func ($typemacro, \"$package\");
+#endif /* $typemacro */";
+}
+
+sub gen_fundamental_alias_stuff {
+ my ($typemacro, $classname, $root, $package) = @_;
+ gen_alias_stuff ($typemacro, 'gperl_register_fundamental_alias', $package);
+}
+
+sub gen_boxed_alias_stuff {
+ my ($typemacro, $classname, $root, $package) = @_;
+ gen_alias_stuff ($typemacro, 'gperl_register_boxed_alias', $package);
+}
+
+sub gen_object_alias_stuff {
+ my ($typemacro, $classname, $root, $package) = @_;
+ gen_alias_stuff ($typemacro, 'gperl_register_object_alias', $package);
+}
+
 
 =item Gtk2::CodeGen->generate_constants_wrappers (KEY => VAL, ...)
 
Index: Gtk2.pm
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/Gtk2.pm,v
retrieving revision 1.125
diff -u -d -p -r1.125 Gtk2.pm
--- Gtk2.pm 22 Jun 2008 17:26:54 -0000 1.125
+++ Gtk2.pm 2 Aug 2008 17:08:47 -0000
@@ -28,6 +28,15 @@ use strict;
 use warnings;
 
 use Glib;
+use Pango;
+
+# Backwards compatibility: create Gtk2::Pango aliases for everything in Pango
+{
+  no strict 'refs';
+  foreach my $key (keys %Pango::) {
+    *{"Gtk2::Pango::" . $key} = *{"Pango::" . $key};
+  }
+}
 
 # if the gtk+ we've been compiled against is at 2.8.0 or newer or if pango is
 # at 1.10.0 or newer, we need to import the Cairo module for the cairo glue in
Index: Makefile.PL
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/Makefile.PL,v
retrieving revision 1.148
diff -u -d -p -r1.148 Makefile.PL
--- Makefile.PL 22 Jun 2008 17:26:55 -0000 1.148
+++ Makefile.PL 2 Aug 2008 17:08:47 -0000
@@ -35,6 +35,7 @@ our %build_reqs = (
  'perl-ExtUtils-PkgConfig' => '1.030',
  'perl-Glib'               => '1.190',
  'perl-Cairo'              => '1.000',
+ 'perl-Pango'              => '1.190',
  'Gtk+'                    => '2.0.0',
 );
 
@@ -42,6 +43,7 @@ our %PREREQ_PM = (
  'ExtUtils::Depends'   => $build_reqs{'perl-ExtUtils-Depends'},
  'ExtUtils::PkgConfig' => $build_reqs{'perl-ExtUtils-PkgConfig'},
  'Glib'                => $build_reqs{'perl-Glib'},
+ 'Pango'               => $build_reqs{'perl-Pango'},
 );
 
 # Writing a fake Makefile ensures that CPAN will pick up the correct
@@ -50,6 +52,7 @@ unless (eval "use ExtUtils::Depends '$bu
            . "use ExtUtils::PkgConfig '$build_reqs{'perl-ExtUtils-PkgConfig'}';"
            . "use Glib '$build_reqs{'perl-Glib'}';"
            . "use Glib::MakeHelper;" # for do_pod_files()
+           . "use Pango '$build_reqs{'perl-Pango'}';"
            . "1") {
  warn "$@\n";
  WriteMakefile(
@@ -69,20 +72,18 @@ mkdir 'build', 0777;
 # look for our packages.  if they can't be found, warn and exit with status 0
 # to indicate to CPAN testers that their system isn't supported.
 #
-my (%pkgcfg_gtk, %pkgcfg_pango);
+my %pkgcfg_gtk;
 unless (eval { %pkgcfg_gtk = ExtUtils::PkgConfig->find ("gtk+-2.0 >= $build_reqs{'Gtk+'}");
-               %pkgcfg_pango = ExtUtils::PkgConfig->find ('pango');
-               1; })
+                1; })
 {
  warn $@;
  exit 0;
 }
 
 #
-# retrieve gtk's and pango's version
+# retrieve gtk's version
 #
 my @gtk_version = split /\./, $pkgcfg_gtk{modversion};
-my @pango_version = split /\./, $pkgcfg_pango{modversion};
 
 #
 # decide what files to use in the build based on the version we found.
@@ -90,7 +91,6 @@ my @pango_version = split /\./, $pkgcfg_
 our @xs_files = ();
 our @xs_lists = (
  Glib::MakeHelper->select_files_by_version ("xs_files", @gtk_version),
- Glib::MakeHelper->select_files_by_version ("xs_files_pango", @pango_version),
 );
 foreach my $filename (@xs_lists) {
  my @names = Glib::MakeHelper->read_source_list_file ($filename);
@@ -102,10 +102,9 @@ if ($target =~ /x11/) {
  push @xs_files, 'xs/GdkX11.xs';
 }
 
-# if gtk+ >= 2.8 or pango >= 1.10, we depend on Cairo
+# if gtk+ >= 2.8, we depend on Cairo
 my $have_cairo = 0;
-if (($gtk_version[0] > 2 || ($gtk_version[0] == 2 && $gtk_version[1] >= 8)) ||
-    ($pango_version[0] > 1 || ($pango_version[0] == 1 && $pango_version[1] >= 10))) {
+if ($gtk_version[0] > 2 || ($gtk_version[0] == 2 && $gtk_version[1] >= 8)) {
  $PREREQ_PM{Cairo} = $build_reqs{'perl-Cairo'};
  unless (eval "use Cairo '$build_reqs{'perl-Cairo'}'; 1;") {
  warn "$@\n";
@@ -133,11 +132,10 @@ Gtk2::CodeGen->generate_constants_wrappe
 push @xs_files, $gtk_constants_file;
 
 #
-# create version macros for pango and atk
+# create version macros for atk
 #
 ExtUtils::PkgConfig->write_version_macros(
  "build/gtk2perl-versions.h",
- pango => "PANGO",
  atk => "ATK",
 );
 
@@ -215,12 +213,16 @@ if (grep /enable[-_]faq/i, @ARGV)
 #
 # all possible maps must be available at xsubpp time, as xsubpp processes
 # all code, even inside #ifdefs.
+#
+# For backwards compatibility, the pango maps must be included so that the
+# Gtk2::Pango::* names are registered with Glib.  These maps have special types
+# (GObjectAlias, for example) that are handled by our own Gtk2::CodeGen.
+#
 Gtk2::CodeGen->parse_maps ('gtk2perl', input => [<maps-[0-9]\.[0-9]*>,
                                                  <maps_pango-[0-9]\.[0-9]*>]);
 # but for enums.pod, we only want to document the stuff we can actually
 # query from this target library.
 our @used_maps = Glib::MakeHelper->select_files_by_version ("maps", @gtk_version);
-our @used_maps_pango = Glib::MakeHelper->select_files_by_version ("maps_pango", @pango_version);
 
 # one more command generates code to boot all the various extra XS modules.
 # we need this because we have lots of XS files without corresponding PMs to
@@ -238,7 +240,10 @@ system "$^X tools/genkeysyms.pl >\"build
 # will chain from this one.
 #
 
-my @deps = $have_cairo ? qw/Glib Cairo/ : qw/Glib/;
+my @deps = qw/Glib Pango/;
+if ($have_cairo) {
+  push @deps, qw/Cairo/;
+}
 our $gtk2 = ExtUtils::Depends->new ('Gtk2', @deps);
 
 # Glib added -I. for us, but we'll need to add -I./build so we can get to
@@ -251,8 +256,7 @@ $gtk2->add_xs (@xs_files);
 my $cwd = cwd();
 $gtk2->add_typemaps (map {File::Spec->catfile($cwd,$_)}
      'build/gtk2perl.typemap',
-                     'gdk.typemap', 'gtk.typemap', 'pango.typemap'
-     );
+                     'gdk.typemap', 'gtk.typemap');
 
 $gtk2->install (qw(gtk2perl.h
                    build/gtk2perl-autogen.h
@@ -334,14 +338,15 @@ sub MY::postamble
  'PERL_EXTUTILS_PKGCONFIG' =>
  $build_reqs{'perl-ExtUtils-PkgConfig'},
  'PERL_GLIB' => $build_reqs{'perl-Glib'},
+ 'PERL_PANGO' => $build_reqs{'perl-Pango'},
            )
          . "
 # rebuild the makefile if the file lists change
 Makefile : ".join(" ", @xs_lists)."
 
-\$(INST_LIB)/\$(FULLEXT)/enums.pod : \$(BLIB_DONE) @used_maps @used_maps_pango tools/podifyenums.pl
+\$(INST_LIB)/\$(FULLEXT)/enums.pod : \$(BLIB_DONE) @used_maps tools/podifyenums.pl
  \$(NOECHO) \$(ECHO) Creating enum POD...
- \$(NOECHO) \$(PERLRUNINST) -M\$(NAME) tools/podifyenums.pl \$(NAME) @used_maps @used_maps_pango > \$@
+ \$(NOECHO) \$(PERLRUNINST) -M\$(NAME) tools/podifyenums.pl \$(NAME) @used_maps > \$@
 
 build/stock_items.podi: \$(BLIB_DONE) tools/podifystockitems.pl
  \$(NOECHO) \$(ECHO) Creating stock items POD...
Index: doctypes
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/doctypes,v
retrieving revision 1.4
diff -u -d -p -r1.4 doctypes
--- doctypes 19 Nov 2006 19:47:52 -0000 1.4
+++ doctypes 2 Aug 2008 17:08:47 -0000
@@ -16,5 +16,3 @@ GdkGeometry     Gtk2::Gdk::Geometry
 GdkKeymap_orclass Gtk2::Gdk::Keymap
 GdkPixbuf_noinc Gtk2::Gdk::Pixbuf
 GdkPixbufFormat hash reference
-PangoRectangle array reference
-PangoGlyph integer
Index: gtk2perl.h
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/gtk2perl.h,v
retrieving revision 1.46
diff -u -d -p -r1.46 gtk2perl.h
--- gtk2perl.h 7 Jan 2008 19:54:48 -0000 1.46
+++ gtk2perl.h 2 Aug 2008 17:08:47 -0000
@@ -25,6 +25,7 @@
 #define _GTK2PERL_H_
 
 #include <gperl.h>
+#include <pango-perl.h>
 #include <gtk/gtk.h>
 
 #include "gtk2perl-versions.h"
Index: maps_pango-1.0
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.0,v
retrieving revision 1.5
diff -u -d -p -r1.5 maps_pango-1.0
--- maps_pango-1.0 19 Nov 2006 19:47:52 -0000 1.5
+++ maps_pango-1.0 2 Aug 2008 17:08:47 -0000
@@ -22,36 +22,36 @@
 # this file defines mappings only for types that existed in pango 1.0.x
 #
 
-PANGO_TYPE_ALIGNMENT PangoAlignment GEnum Gtk2::Pango::Alignment
-PANGO_TYPE_ATTR_LIST PangoAttrList GBoxed Gtk2::Pango::AttrList
-PANGO_TYPE_ATTR_TYPE PangoAttrType GEnum Gtk2::Pango::AttrType
-PANGO_TYPE_COLOR PangoColor GBoxed Gtk2::Pango::Color
-PANGO_TYPE_CONTEXT PangoContext GObject Gtk2::Pango::Context
-PANGO_TYPE_COVERAGE_LEVEL PangoCoverageLevel GEnum Gtk2::Pango::CoverageLevel
-PANGO_TYPE_DIRECTION PangoDirection GEnum Gtk2::Pango::Direction
-PANGO_TYPE_FONT_DESCRIPTION PangoFontDescription GBoxed Gtk2::Pango::FontDescription
-PANGO_TYPE_FONT_FACE PangoFontFace GObject Gtk2::Pango::FontFace
-PANGO_TYPE_FONT_FAMILY PangoFontFamily GObject Gtk2::Pango::FontFamily
-PANGO_TYPE_FONT_MAP PangoFontMap GObject Gtk2::Pango::FontMap
-PANGO_TYPE_FONT_MASK PangoFontMask GFlags Gtk2::Pango::FontMask
-PANGO_TYPE_FONT_METRICS PangoFontMetrics GBoxed Gtk2::Pango::FontMetrics
-PANGO_TYPE_FONT PangoFont GObject Gtk2::Pango::Font
-PANGO_TYPE_FONTSET PangoFontset GObject Gtk2::Pango::Fontset
-PANGO_TYPE_GLYPH_STRING PangoGlyphString GBoxed Gtk2::Pango::GlyphString
-PANGO_TYPE_LANGUAGE PangoLanguage GBoxed Gtk2::Pango::Language
-PANGO_TYPE_LAYOUT PangoLayout GObject Gtk2::Pango::Layout
-PANGO_TYPE_SCRIPT PangoScript GEnum Gtk2::Pango::Script
-PANGO_TYPE_STRETCH PangoStretch GEnum Gtk2::Pango::Stretch
-PANGO_TYPE_STYLE PangoStyle GEnum Gtk2::Pango::Style
-PANGO_TYPE_TAB_ALIGN PangoTabAlign GEnum Gtk2::Pango::TabAlign
-PANGO_TYPE_TAB_ARRAY PangoTabArray GBoxed Gtk2::Pango::TabArray
-PANGO_TYPE_UNDERLINE PangoUnderline GEnum Gtk2::Pango::Underline
-PANGO_TYPE_VARIANT PangoVariant GEnum Gtk2::Pango::Variant
-PANGO_TYPE_WEIGHT PangoWeight GEnum Gtk2::Pango::Weight
-PANGO_TYPE_WRAP_MODE PangoWrapMode GEnum Gtk2::Pango::WrapMode
+PANGO_TYPE_ALIGNMENT PangoAlignment GEnumAlias Gtk2::Pango::Alignment
+PANGO_TYPE_ATTR_LIST PangoAttrList GBoxedAlias Gtk2::Pango::AttrList
+PANGO_TYPE_ATTR_TYPE PangoAttrType GEnumAlias Gtk2::Pango::AttrType
+PANGO_TYPE_COLOR PangoColor GBoxedAlias Gtk2::Pango::Color
+PANGO_TYPE_CONTEXT PangoContext GObjectAlias Gtk2::Pango::Context
+PANGO_TYPE_COVERAGE_LEVEL PangoCoverageLevel GEnumAlias Gtk2::Pango::CoverageLevel
+PANGO_TYPE_DIRECTION PangoDirection GEnumAlias Gtk2::Pango::Direction
+PANGO_TYPE_FONT_DESCRIPTION PangoFontDescription GBoxedAlias Gtk2::Pango::FontDescription
+PANGO_TYPE_FONT_FACE PangoFontFace GObjectAlias Gtk2::Pango::FontFace
+PANGO_TYPE_FONT_FAMILY PangoFontFamily GObjectAlias Gtk2::Pango::FontFamily
+PANGO_TYPE_FONT_MAP PangoFontMap GObjectAlias Gtk2::Pango::FontMap
+PANGO_TYPE_FONT_MASK PangoFontMask GFlagsAlias Gtk2::Pango::FontMask
+PANGO_TYPE_FONT_METRICS PangoFontMetrics GBoxedAlias Gtk2::Pango::FontMetrics
+PANGO_TYPE_FONT PangoFont GObjectAlias Gtk2::Pango::Font
+PANGO_TYPE_FONTSET PangoFontset GObjectAlias Gtk2::Pango::Fontset
+PANGO_TYPE_GLYPH_STRING PangoGlyphString GBoxedAlias Gtk2::Pango::GlyphString
+PANGO_TYPE_LANGUAGE PangoLanguage GBoxedAlias Gtk2::Pango::Language
+PANGO_TYPE_LAYOUT PangoLayout GObjectAlias Gtk2::Pango::Layout
+PANGO_TYPE_SCRIPT PangoScript GEnumAlias Gtk2::Pango::Script
+PANGO_TYPE_STRETCH PangoStretch GEnumAlias Gtk2::Pango::Stretch
+PANGO_TYPE_STYLE PangoStyle GEnumAlias Gtk2::Pango::Style
+PANGO_TYPE_TAB_ALIGN PangoTabAlign GEnumAlias Gtk2::Pango::TabAlign
+PANGO_TYPE_TAB_ARRAY PangoTabArray GBoxedAlias Gtk2::Pango::TabArray
+PANGO_TYPE_UNDERLINE PangoUnderline GEnumAlias Gtk2::Pango::Underline
+PANGO_TYPE_VARIANT PangoVariant GEnumAlias Gtk2::Pango::Variant
+PANGO_TYPE_WEIGHT PangoWeight GEnumAlias Gtk2::Pango::Weight
+PANGO_TYPE_WRAP_MODE PangoWrapMode GEnumAlias Gtk2::Pango::WrapMode
 
 # custom types
-PANGO_TYPE_ATTRIBUTE PangoAttribute GBoxed Gtk2::Pango::Attribute
-PANGO_TYPE_ATTR_ITERATOR PangoAttrIterator GBoxed Gtk2::Pango::AttrIterator
-PANGO_TYPE_LAYOUT_ITER PangoLayoutIter GBoxed Gtk2::Pango::LayoutIter
-PANGO_TYPE_LAYOUT_LINE PangoLayoutLine GBoxed Gtk2::Pango::LayoutLine
+PANGO_TYPE_ATTRIBUTE PangoAttribute GBoxedAlias Gtk2::Pango::Attribute
+PANGO_TYPE_ATTR_ITERATOR PangoAttrIterator GBoxedAlias Gtk2::Pango::AttrIterator
+PANGO_TYPE_LAYOUT_ITER PangoLayoutIter GBoxedAlias Gtk2::Pango::LayoutIter
+PANGO_TYPE_LAYOUT_LINE PangoLayoutLine GBoxedAlias Gtk2::Pango::LayoutLine
Index: maps_pango-1.10
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.10,v
retrieving revision 1.1
diff -u -d -p -r1.1 maps_pango-1.10
--- maps_pango-1.10 29 Sep 2005 22:43:30 -0000 1.1
+++ maps_pango-1.10 2 Aug 2008 17:08:47 -0000
@@ -2,4 +2,4 @@
 # this file defines mappings only for types that existed in pango 1.10.x
 #
 
-PANGO_TYPE_CAIRO_FONT_MAP PangoCairoFontMap GInterface Gtk2::Pango::Cairo::FontMap
+PANGO_TYPE_CAIRO_FONT_MAP PangoCairoFontMap GInterfaceAlias Gtk2::Pango::Cairo::FontMap
Index: maps_pango-1.16
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.16,v
retrieving revision 1.2
diff -u -d -p -r1.2 maps_pango-1.16
--- maps_pango-1.16 25 Feb 2007 14:47:56 -0000 1.2
+++ maps_pango-1.16 2 Aug 2008 17:08:47 -0000
@@ -2,5 +2,5 @@
 # this file defines mappings only for types that existed in pango 1.16.x
 #
 
-PANGO_TYPE_GRAVITY PangoGravity GEnum Gtk2::Pango::Gravity
-PANGO_TYPE_GRAVITY_HINT PangoGravityHint GEnum Gtk2::Pango::GravityHint
+PANGO_TYPE_GRAVITY PangoGravity GEnumAlias Gtk2::Pango::Gravity
+PANGO_TYPE_GRAVITY_HINT PangoGravityHint GEnumAlias Gtk2::Pango::GravityHint
Index: maps_pango-1.18
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.18,v
retrieving revision 1.1
diff -u -d -p -r1.1 maps_pango-1.18
--- maps_pango-1.18 22 Jul 2007 10:59:09 -0000 1.1
+++ maps_pango-1.18 2 Aug 2008 17:08:47 -0000
@@ -2,4 +2,4 @@
 # this file defines mappings only for types that existed in pango 1.18.x
 #
 
-PANGO_TYPE_CAIRO_FONT PangoCairoFont GInterface Gtk2::Pango::Cairo::Font
+PANGO_TYPE_CAIRO_FONT PangoCairoFont GInterfaceAlias Gtk2::Pango::Cairo::Font
Index: maps_pango-1.4
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.4,v
retrieving revision 1.1
diff -u -d -p -r1.1 maps_pango-1.4
--- maps_pango-1.4 30 Oct 2004 17:13:17 -0000 1.1
+++ maps_pango-1.4 2 Aug 2008 17:08:47 -0000
@@ -22,4 +22,4 @@
 # this file defines mappings only for types that existed in pango 1.4.x
 #
 
-PANGO_TYPE_SCRIPT_ITER PangoScriptIter GBoxed Gtk2::Pango::ScriptIter
+PANGO_TYPE_SCRIPT_ITER PangoScriptIter GBoxedAlias Gtk2::Pango::ScriptIter
Index: maps_pango-1.6
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.6,v
retrieving revision 1.1
diff -u -d -p -r1.1 maps_pango-1.6
--- maps_pango-1.6 30 Oct 2004 17:13:17 -0000 1.1
+++ maps_pango-1.6 2 Aug 2008 17:08:47 -0000
@@ -22,5 +22,5 @@
 # this file defines mappings only for types that existed in pango 1.6.x
 #
 
-PANGO_TYPE_MATRIX PangoMatrix GBoxed Gtk2::Pango::Matrix
-PANGO_TYPE_ELLIPSIZE_MODE PangoEllipsizeMode GEnum Gtk2::Pango::EllipsizeMode
+PANGO_TYPE_MATRIX PangoMatrix GBoxedAlias Gtk2::Pango::Matrix
+PANGO_TYPE_ELLIPSIZE_MODE PangoEllipsizeMode GEnumAlias Gtk2::Pango::EllipsizeMode
Index: maps_pango-1.8
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/maps_pango-1.8,v
retrieving revision 1.1
diff -u -d -p -r1.1 maps_pango-1.8
--- maps_pango-1.8 2 Apr 2005 17:03:33 -0000 1.1
+++ maps_pango-1.8 2 Aug 2008 17:08:47 -0000
@@ -2,6 +2,6 @@
 # this file defines mappings only for types that existed in pango 1.8.x
 #
 
-PANGO_TYPE_RENDERER PangoRenderer GObject Gtk2::Pango::Renderer
+PANGO_TYPE_RENDERER PangoRenderer GObjectAlias Gtk2::Pango::Renderer
 
-PANGO_TYPE_RENDER_PART PangoRenderPart GEnum Gtk2::Pango::RenderPart
+PANGO_TYPE_RENDER_PART PangoRenderPart GEnumAlias Gtk2::Pango::RenderPart
Index: xs/Gtk2.xs
===================================================================
RCS file: /cvsroot/gtk2-perl/gtk2-perl-xs/Gtk2/xs/Gtk2.xs,v
retrieving revision 1.45
diff -u -d -p -r1.45 Gtk2.xs
--- xs/Gtk2.xs 9 Dec 2007 15:06:54 -0000 1.45
+++ xs/Gtk2.xs 2 Aug 2008 17:08:47 -0000
@@ -122,7 +122,6 @@ BOOT:
  gperl_handle_logs_for ("Gtk");
  gperl_handle_logs_for ("Gdk");
  gperl_handle_logs_for ("GdkPixbuf");
- gperl_handle_logs_for ("Pango");
 
  /* make sure that we're running/linked against a version at least as
  * new as we built against, otherwise bad things can happen. */
@@ -594,35 +593,3 @@ void
 gtk_propagate_event (widget, event)
  GtkWidget * widget
  GdkEvent * event
-
-MODULE = Gtk2 PACKAGE = Gtk2::Pango PREFIX = PANGO_
-
-# Don't doc these in Gtk2::Pango, or we'll clobber the docs for the
-# pango constants module!
-
-=for object Gtk2::Pango::version
-=cut
-
-=for see_also Gtk2::version
-=cut
-
-=for see_also Glib::version
-=cut
-
-=for apidoc
-=for signature (MAJOR, MINOR, MICRO) = Gtk2::Pango->GET_VERSION_INFO
-Fetch as a list the version of pango with which Gtk2 was built.
-=cut
-void
-GET_VERSION_INFO (class)
-    PPCODE:
- EXTEND (SP, 3);
- PUSHs (sv_2mortal (newSViv (PANGO_MAJOR_VERSION)));
- PUSHs (sv_2mortal (newSViv (PANGO_MINOR_VERSION)));
- PUSHs (sv_2mortal (newSViv (PANGO_MICRO_VERSION)));
- PERL_UNUSED_VAR (ax);
-
-bool
-PANGO_CHECK_VERSION (class, int major, int minor, int micro)
-    C_ARGS:
- major, minor, micro

_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@...
http://mail.gnome.org/mailman/listinfo/gtk-perl-list