[gimp-perl] Load enums from GIMP, not hardcoding. Bug 502556



commit 8a661d4b7a0d0d816e75cdbf5cd7aa968513c67b
Author: Ed J <m8r-35s8eo mailinator com>
Date:   Wed Mar 26 04:41:11 2014 +0000

    Load enums from GIMP, not hardcoding. Bug 502556

 Gimp.pm          |  235 ++++++++++--------------------------------------------
 Gimp.xs          |   99 ++++++++++++++---------
 Gimp/Constant.pm |   40 +++++++++
 Gimp/Lib.pm      |    7 +-
 Gimp/Lib.xs      |   65 +++++++++++----
 Net/Net.pm       |   19 +++--
 Perl-Server      |    1 +
 t/import.t       |   15 ++--
 t/load.t         |   81 ++++++++++++++-----
 t/perlplugin.t   |   27 +++----
 t/run.t          |   18 ++--
 11 files changed, 296 insertions(+), 311 deletions(-)
---
diff --git a/Gimp.pm b/Gimp.pm
index 0adaa56..86bb056 100644
--- a/Gimp.pm
+++ b/Gimp.pm
@@ -18,166 +18,9 @@ BEGIN {
       require DynaLoader;
       @ISA = qw(DynaLoader);
       bootstrap Gimp $VERSION;
-   }
+   };
 }
 
-my @_param = qw(
-       PDB_BOUNDARY    PDB_CHANNEL     PDB_COLOR       PDB_DISPLAY     PDB_DRAWABLE
-       PDB_END         PDB_FLOAT       PDB_IMAGE       PDB_INT32       PDB_FLOATARRAY
-       PDB_INT16       PDB_PARASITE    PDB_STRING      PDB_PATH        PDB_INT16ARRAY
-       PDB_INT8        PDB_INT8ARRAY   PDB_LAYER       PDB_REGION      PDB_STRINGARRAY
-       PDB_SELECTION   PDB_STATUS      PDB_INT32ARRAY
-);
-
-# constants that, in some earlier version, were autoloaded
-my @_consts = (@_param,
-#ENUM_NAME#
-'NEGATIVE_CONVOL',       'ABSOLUTE_CONVOL',       'NORMAL_CONVOL',         'DODGE',                 
-'BURN',                  'PDB_SUCCESS',           'PDB_CANCEL',            'PDB_CALLING_ERROR',     
-'PDB_PASS_THROUGH',      'PDB_EXECUTION_ERROR',   'SHARPEN_CONVOLVE',      'BLUR_CONVOLVE',         
-'PAINT_INCREMENTAL',     'PAINT_CONSTANT',        'ORIENTATION_HORIZONTAL','ORIENTATION_UNKNOWN',   
-'ORIENTATION_VERTICAL',  'OFFSET_TRANSPARENT',    'OFFSET_BACKGROUND',     'GRADIENT_SPIRAL_CLOCKWISE',      
-'GRADIENT_CONICAL_ASYMMETRIC',    'GRADIENT_SPIRAL_ANTICLOCKWISE',  'GRADIENT_SHAPEBURST_DIMPLED',    
'GRADIENT_CONICAL_SYMMETRIC',     
-'GRADIENT_BILINEAR',              'GRADIENT_LINEAR',                'GRADIENT_RADIAL',                
'GRADIENT_SHAPEBURST_ANGULAR',    
-'GRADIENT_SHAPEBURST_SPHERICAL',  'GRADIENT_SQUARE',                'PDB_COLOR',             'PDB_END',      
         
-'PDB_LAYER',             'PDB_INT8ARRAY',         'PDB_PATH',              'PDB_INT16',             
-'PDB_FLOAT',             'PDB_DISPLAY',           'PDB_STRING',            'PDB_INT16ARRAY',        
-'PDB_IMAGE',             'PDB_INT32',             'PDB_SELECTION',         'PDB_STATUS',            
-'PDB_STRINGARRAY',       'PDB_CHANNEL',           'PDB_FLOATARRAY',        'PDB_INT32ARRAY',        
-'PDB_DRAWABLE',          'PDB_BOUNDARY',          'PDB_REGION',            'PDB_PARASITE',          
-'PDB_INT8',              'HISTOGRAM_BLUE',        'HISTOGRAM_VALUE',       'HISTOGRAM_GREEN',             
-'HISTOGRAM_ALPHA',       'HISTOGRAM_RED',         'SHADOWS',               'HIGHLIGHTS',            
-'MIDTONES',              'POINTS',                'PIXELS',                'STACK_TRACE_ALWAYS',    
-'STACK_TRACE_NEVER',     'STACK_TRACE_QUERY',     'GRAIN_EXTRACT_MODE',    'COLOR_ERASE_MODE',      
-'COLOR_MODE',            'LIGHTEN_ONLY_MODE',     'DIFFERENCE_MODE',       'DODGE_MODE',            
-'BEHIND_MODE',           'ADDITION_MODE',         'MULTIPLY_MODE',         'GRAIN_MERGE_MODE',      
-'SOFTLIGHT_MODE',        'HUE_MODE',              'SCREEN_MODE',           'BURN_MODE',             
-'NORMAL_MODE',           'OVERLAY_MODE',          'HARDLIGHT_MODE',        'DARKEN_ONLY_MODE',      
-'SUBTRACT_MODE',         'SATURATION_MODE',       'DISSOLVE_MODE',         'VALUE_MODE',            
-'DIVIDE_MODE',           'IMAGE_CLONE',           'PATTERN_CLONE',         'UNIT_PIXEL',            
-'UNIT_PICA',             'UNIT_END',              'UNIT_POINT',            'UNIT_MM',               
-'UNIT_INCH',             'RGB_IMAGE',             'INDEXEDA_IMAGE',        'INDEXED_IMAGE',         
-'GRAYA_IMAGE',           'RGBA_IMAGE',            'GRAY_IMAGE',            'MESSAGE_BOX',           
-'ERROR_CONSOLE',         'CONSOLE',               'BRUSH_SOFT',            'BRUSH_HARD',            
-'PLUGIN',                'TEMPORARY',             'EXTENSION',             'INTERNAL',              
-'INDEXED',               'GRAY',                  'RGB',                   'CYAN_HUES',             
-'ALL_HUES',              'BLUE_HUES',             'MAGENTA_HUES',          'GREEN_HUES',            
-'YELLOW_HUES',           'RED_HUES',              'WEB_PALETTE',           'REUSE_PALETTE',         
-'MONO_PALETTE',          'CUSTOM_PALETTE',        'MAKE_PALETTE',          'FSLOWBLEED_DITHER',     
-'NO_DITHER',             'FIXED_DITHER',          'FS_DITHER',             'PATTERN_BUCKET_FILL',   
-'FG_BUCKET_FILL',        'BG_BUCKET_FILL',        'INDEXED_CHANNEL',       'BLUE_CHANNEL',          
-'ALPHA_CHANNEL',         'GRAY_CHANNEL',          'RED_CHANNEL',           'GREEN_CHANNEL',         
-'RUN_NONINTERACTIVE',    'RUN_WITH_LAST_VALS',    'RUN_INTERACTIVE',       'REPEAT_NONE',           
-'REPEAT_TRIANGULAR',     'REPEAT_SAWTOOTH',       'MASK_DISCARD',          'MASK_APPLY',            
-'ADD_WHITE_MASK',        'ADD_SELECTION_MASK',    'ADD_ALPHA_TRANSFER_MASK', 'ADD_BLACK_MASK',        
'ADD_ALPHA_MASK',        
-'ADD_COPY_MASK',         'TRANSPARENT_FILL',      'BACKGROUND_FILL',       'FOREGROUND_FILL',       
-'WHITE_FILL',            'PATTERN_FILL',          'CHANNEL_OP_SUBTRACT',   'CHANNEL_OP_REPLACE',    
-'CHANNEL_OP_INTERSECT',  'CHANNEL_OP_ADD',        'FLATTEN_IMAGE',         'EXPAND_AS_NECESSARY',   
-'CLIP_TO_BOTTOM_LAYER',  'CLIP_TO_IMAGE',         'CUSTOM_MODE',           'FG_TRANSPARENT_MODE',   
-'FG_BG_HSV_MODE',        'FG_BG_RGB_MODE',        
-#ENUM_NAME#
-       'PDB_CALLING_ERROR',            'PDB_EXECUTION_ERROR',          'PDB_PASS_THROUGH',
-        'PDB_SUCCESS',                 'PARASITE_PERSISTENT',          'PARASITE_ATTACH_PARENT',
-        'PARASITE_PARENT_PERSISTENT',  'PARASITE_ATTACH_GRANDPARENT',  'PARASITE_GRANDPARENT_PERSISTENT',
-        'PARASITE_UNDOABLE',           'PARASITE_PARENT_UNDOABLE',     'PARASITE_GRANDPARENT_UNDOABLE',
-       'TRACE_NONE',   'TRACE_CALL',   'TRACE_TYPE',   'TRACE_NAME',   'TRACE_DESC',   'TRACE_ALL',
-       'COMPRESSION_NONE',             'COMPRESSION_LZW',              'COMPRESSION_PACKBITS',
-        'WRAP',                                'SMEAR',                        'BLACK',
-
-       'EXPORT_CAN_HANDLE_RGB',        'EXPORT_CAN_HANDLE_GRAY',       'EXPORT_CAN_HANDLE_INDEXED',
-        'EXPORT_CAN_HANDLE_BITMAP',     'EXPORT_CAN_HANDLE_ALPHA',     'EXPORT_CAN_HANDLE_LAYERS',     
-       'EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION', 'EXPORT_CAN_HANDLE_LAYER_MASKS', 'EXPORT_NEEDS_ALPHA',
-       'EXPORT_CANCEL',                'EXPORT_IGNORE',                'EXPORT_EXPORT', 
-       'ROTATE_90',                    'ROTATE_270',                   'ROTATE_180',
-       'TRUE',                         'FALSE'
-);
-
-#ENUM_DEFS#
-sub NEGATIVE_CONVOL       (){ 2} sub ABSOLUTE_CONVOL       (){ 1} sub NORMAL_CONVOL         (){ 0}
-sub DODGE                 (){ 0} sub BURN                  (){ 1} sub PDB_SUCCESS           (){ 3}
-sub PDB_CANCEL            (){ 4} sub PDB_CALLING_ERROR     (){ 1} sub PDB_PASS_THROUGH      (){ 2}
-sub PDB_EXECUTION_ERROR   (){ 0} sub SHARPEN_CONVOLVE      (){ 1} sub BLUR_CONVOLVE         (){ 0}
-sub PAINT_INCREMENTAL     (){ 1} sub PAINT_CONSTANT        (){ 0}
-sub ORIENTATION_HORIZONTAL(){ 0} sub ORIENTATION_UNKNOWN   (){ 2} sub ORIENTATION_VERTICAL  (){ 1}
-sub OFFSET_TRANSPARENT    (){ 1} sub OFFSET_BACKGROUND     (){ 0} sub GRADIENT_SPIRAL_CLOCKWISE      (){ 9}
-sub GRADIENT_CONICAL_ASYMMETRIC    (){ 5} sub GRADIENT_SPIRAL_ANTICLOCKWISE  (){10} sub 
GRADIENT_SHAPEBURST_DIMPLED    (){ 8}
-sub GRADIENT_CONICAL_SYMMETRIC     (){ 4} sub GRADIENT_BILINEAR              (){ 1} sub GRADIENT_LINEAR      
          (){ 0}
-sub GRADIENT_RADIAL                (){ 2} sub GRADIENT_SHAPEBURST_ANGULAR    (){ 6} sub 
GRADIENT_SHAPEBURST_SPHERICAL  (){ 7}
-sub SQUARE                (){ 3} sub PDB_COLOR             (){10} sub PDB_END               (){22}
-sub PDB_LAYER             (){14} sub PDB_INT8ARRAY         (){ 7} sub PDB_PATH              (){19}
-sub PDB_INT16             (){ 1} sub PDB_FLOAT             (){ 3} sub PDB_DISPLAY           (){12}
-sub PDB_STRING            (){ 4} sub PDB_INT16ARRAY        (){ 6} sub PDB_IMAGE             (){13}
-sub PDB_INT32             (){ 0} sub PDB_SELECTION         (){17} sub PDB_STATUS            (){21}
-sub PDB_STRINGARRAY       (){ 9} sub PDB_CHANNEL           (){15} sub PDB_FLOATARRAY        (){ 8}
-sub PDB_INT32ARRAY        (){ 5} sub PDB_DRAWABLE          (){16} sub PDB_BOUNDARY          (){18}
-sub PDB_REGION            (){11} sub PDB_PARASITE          (){20} sub PDB_INT8              (){ 2}
-sub HISTOGRAM_BLUE        (){ 3} sub HISTOGRAM_VALUE       (){ 0} sub HISTOGRAM_GREEN       (){ 2}
-sub HISTOGRAM_ALPHA       (){ 4} sub HISTOGRAM_RED         (){ 1} sub SHADOWS               (){ 0}
-sub HIGHLIGHTS            (){ 2} sub MIDTONES              (){ 1} sub POINTS                (){ 1}
-sub PIXELS                (){ 0} sub STACK_TRACE_ALWAYS    (){ 2} sub STACK_TRACE_NEVER     (){ 0}
-sub STACK_TRACE_QUERY     (){ 1} sub GRAIN_EXTRACT_MODE    (){20} sub COLOR_ERASE_MODE      (){22}
-sub COLOR_MODE            (){13} sub LIGHTEN_ONLY_MODE     (){10} sub DIFFERENCE_MODE       (){ 6}
-sub DODGE_MODE            (){16} sub BEHIND_MODE           (){ 2} sub ADDITION_MODE         (){ 7}
-sub MULTIPLY_MODE         (){ 3} sub GRAIN_MERGE_MODE      (){21} sub SOFTLIGHT_MODE        (){19}
-sub HUE_MODE              (){11} sub SCREEN_MODE           (){ 4} sub BURN_MODE             (){17}
-sub NORMAL_MODE           (){ 0} sub OVERLAY_MODE          (){ 5} sub HARDLIGHT_MODE        (){18}
-sub DARKEN_ONLY_MODE      (){ 9} sub SUBTRACT_MODE         (){ 8} sub SATURATION_MODE       (){12}
-sub DISSOLVE_MODE         (){ 1} sub VALUE_MODE            (){14} sub DIVIDE_MODE           (){15}
-sub IMAGE_CLONE           (){ 0} sub PATTERN_CLONE         (){ 1} sub UNIT_PIXEL            (){ 0}
-sub UNIT_PICA             (){ 4} sub UNIT_END              (){ 5} sub UNIT_POINT            (){ 3}
-sub UNIT_MM               (){ 2} sub UNIT_INCH             (){ 1} sub RGB_IMAGE             (){ 0}
-sub INDEXEDA_IMAGE        (){ 5} sub INDEXED_IMAGE         (){ 4} sub GRAYA_IMAGE           (){ 3}
-sub RGBA_IMAGE            (){ 1} sub GRAY_IMAGE            (){ 2} sub MESSAGE_BOX           (){ 0}
-sub ERROR_CONSOLE         (){ 2} sub CONSOLE               (){ 1} sub BRUSH_SOFT            (){ 1}
-sub BRUSH_HARD            (){ 0} sub PLUGIN                (){ 1} sub TEMPORARY             (){ 3}
-sub EXTENSION             (){ 2} sub INTERNAL              (){ 0} sub INDEXED               (){ 2}
-sub GRAY                  (){ 1} sub RGB                   (){ 0} sub CYAN_HUES             (){ 4}
-sub ALL_HUES              (){ 0} sub BLUE_HUES             (){ 5} sub MAGENTA_HUES          (){ 6}
-sub GREEN_HUES            (){ 3} sub YELLOW_HUES           (){ 2} sub RED_HUES              (){ 1}
-sub WEB_PALETTE           (){ 2} sub REUSE_PALETTE         (){ 1} sub MONO_PALETTE          (){ 3}
-sub CUSTOM_PALETTE        (){ 4} sub MAKE_PALETTE          (){ 0} sub FSLOWBLEED_DITHER     (){ 2}
-sub NO_DITHER             (){ 0} sub FIXED_DITHER          (){ 3} sub FS_DITHER             (){ 1}
-sub PATTERN_BUCKET_FILL   (){ 2} sub FG_BUCKET_FILL        (){ 0} sub BG_BUCKET_FILL        (){ 1}
-sub INDEXED_CHANNEL       (){ 4} sub BLUE_CHANNEL          (){ 2} sub ALPHA_CHANNEL         (){ 5}
-sub GRAY_CHANNEL          (){ 3} sub RED_CHANNEL           (){ 0} sub GREEN_CHANNEL         (){ 1}
-sub RUN_NONINTERACTIVE    (){ 1} sub RUN_WITH_LAST_VALS    (){ 2} sub RUN_INTERACTIVE       (){ 0}
-sub REPEAT_NONE           (){ 0} sub REPEAT_TRIANGULAR     (){ 2} sub REPEAT_SAWTOOTH       (){ 1}
-sub MASK_DISCARD          (){ 1} sub MASK_APPLY            (){ 0} sub ADD_WHITE_MASK        (){ 0}
-sub ADD_ALPHA_TRANSFER_MASK (){3 }
-sub ADD_SELECTION_MASK    (){ 4} sub ADD_BLACK_MASK        (){ 1} sub ADD_ALPHA_MASK        (){ 2}
-sub ADD_COPY_MASK         (){ 5} sub TRANSPARENT_FILL      (){ 3} sub BACKGROUND_FILL       (){ 1}
-sub FOREGROUND_FILL       (){ 0} sub WHITE_FILL            (){ 2} sub NO_FILL               (){ 4}
-sub CHANNEL_OP_SUBTRACT   (){ 1} sub CHANNEL_OP_REPLACE    (){ 2} sub CHANNEL_OP_INTERSECT  (){ 3}
-sub CHANNEL_OP_ADD        (){ 0} sub FLATTEN_IMAGE         (){ 3} sub EXPAND_AS_NECESSARY   (){ 0}
-sub CLIP_TO_BOTTOM_LAYER  (){ 2} sub CLIP_TO_IMAGE         (){ 1} sub CUSTOM_MODE           (){ 3}
-sub FG_TRANSPARENT_MODE   (){ 2} sub FG_BG_HSV_MODE        (){ 1} sub FG_BG_RGB_MODE        (){ 0}
-sub ROTATE_90             (){ 0} sub ROTATE_270            (){ 2} sub ROTATE_180            (){ 1}
-#ENUM_DEFS#
-
-sub WRAP               (){ 0 }
-sub SMEAR              (){ 1 }
-sub BLACK              (){ 2 }
-
-# defined in Gimp.xs for some reason
-#sub EXPORT_CAN_HANDLE_RGB                   (){1}
-#sub EXPORT_CAN_HANDLE_GRAY                  (){2}
-#sub EXPORT_CAN_HANDLE_INDEXED               (){4}
-#sub EXPORT_CAN_HANDLE_BITMAP                (){8}
-#sub EXPORT_CAN_HANDLE_ALPHA               (){16}
-#sub EXPORT_CAN_HANDLE_LAYERS              (){32}
-#sub EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION   (){64}
-#sub EXPORT_CAN_HANDLE_LAYER_MASKS           (){128}
-#sub EXPORT_NEEDS_ALPHA                      (){256}
-       
-# file_tiff_*
-sub COMPRESSION_NONE           (){ 0 }
-sub COMPRESSION_LZW            (){ 1 }
-sub COMPRESSION_PACKBITS       (){ 2 }
-
-# True/False for PDB
-sub TRUE                       (){ 1 }
-sub FALSE                      (){ 0 }
-
 use Gimp::ColorDB;
 use Carp qw(croak);
 
@@ -185,19 +28,32 @@ my @_procs = ('main', '__', 'N_');
 #my @_default = (@_procs, ':consts' ,':_auto2');
 my @_default = (@_procs, ':consts');
 my @POLLUTE_CLASSES;
+my $net_init;
 
 # we really abuse the import facility..
 sub import($;@) {
    my $pkg = shift;
-   warn "$pkg->import(@_)" if $verbose;
+   warn "$$-$pkg->import(@_)" if $verbose;
    my $up = caller;
    my @export;
 
+   # make sure we can call GIMP functions - start net conn if required
+   map { $net_init = $1 if /net_init=(\S+)/; } @_;
+   if ($interface_type eq "net") {
+      map { *{"Gimp::$_"} = \&{"Gimp::Constant::$_"} }
+        qw(RUN_INTERACTIVE RUN_NONINTERACTIVE);
+      Gimp::Net::gimp_init(grep {defined} $net_init);
+   }
+   warn "$$-Loading constants" if $verbose;
+   # now get constants from GIMP
+   require Gimp::Constant;
+   import Gimp::Constant;
+
    @_= _default unless @_;
-   
+
    for(map { $_ eq ":DEFAULT" ? @_default : $_ } @_) {
       if ($_ eq ":auto") {
-         push(@export,@_consts,@_procs);
+         push @export,@Gimp::Constant::EXPORT,@_procs;
          *{"$up\::AUTOLOAD"} = sub {
             croak "Cannot call '$AUTOLOAD' at this time" unless initialized();
             my ($class,$name) = $AUTOLOAD =~ /^(.*)::(.*?)$/;
@@ -206,7 +62,7 @@ sub import($;@) {
             goto &$AUTOLOAD;
          };
       } elsif ($_ eq ":_auto2") {
-         push(@export,@_consts,@_procs);
+         push @export,@Gimp::Constant::EXPORT,@_procs;
          *{"$up\::AUTOLOAD"} = sub {
             warn __"$function: calling $AUTOLOAD without specifying the :auto import tag is deprecated!\n";
             croak __"Cannot call '$AUTOLOAD' at this time" unless initialized();
@@ -221,13 +77,15 @@ sub import($;@) {
          push @{"$class\::PREFIXES"}, @{"Gimp::$class\::PREFIXES"};
        }
       } elsif ($_ eq ":consts") {
-         push(@export,@_consts);
+         push @export,@Gimp::Constant::EXPORT;
       } elsif ($_ eq ":param") {
-         push(@export,@_param);
+         push @export,@Gimp::Constant::PARAMS;
       } elsif (/^interface=(\S+)$/) {
          croak __"interface=... tag is no longer supported\n";
-      } elsif ($_=~/spawn_options=(\S+)/) {
+      } elsif (/spawn_options=(\S+)/) {
          $spawn_opts = $1;
+      } elsif (/net_init=(\S+)/) {
+        # already used above, no-op
       } elsif ($_ ne "") {
          push(@export,$_);
       } elsif ($_ eq "") {
@@ -460,16 +318,17 @@ if ($interface_type=~/^lib$/i) {
 } else {
    croak __"interface '$interface_type' unsupported.";
 }
+warn "$$-Using interface '$interface_type'" if $Gimp::verbose;
 
 eval "require $interface_pkg" or croak $@;
 $interface_pkg->import;
+warn "$$-Finished loading '$interface_pkg'" if $Gimp::verbose;
 
 # create some common aliases
 for(qw(gimp_procedural_db_proc_exists gimp_call_procedure set_trace initialized)) {
    *$_ = \&{"$interface_pkg\::$_"};
 }
 
-*init  = \&{"$interface_pkg\::gimp_init"};
 *end   = \&{"$interface_pkg\::gimp_end"};
 *lock  = \&{"$interface_pkg\::lock"};
 *unlock= \&{"$interface_pkg\::unlock"};
@@ -486,7 +345,7 @@ sub ignore_functions(@) {
 
 sub AUTOLOAD {
   my ($class,$name) = $AUTOLOAD =~ /^(.*)::(.*?)$/;
-  warn "AUTOLOAD $AUTOLOAD(@_)" if $Gimp::verbose;
+  warn "$$-AUTOLOAD $AUTOLOAD(@_)" if $Gimp::verbose;
   for(@{"$class\::PREFIXES"}) {
     my $sub = $_.$name;
     if (exists $ignore_function{$sub}) {
@@ -512,10 +371,11 @@ sub AUTOLOAD {
       goto &$AUTOLOAD;
     } elsif (gimp_procedural_db_proc_exists($sub)) {
       *{$AUTOLOAD} = sub {
-       warn "gimp_call_procedure(@_)" if $Gimp::verbose;
+       warn "$$-gimp_call_procedure{0}(@_)" if $Gimp::verbose;
        shift unless ref $_[0];
        unshift @_, $sub;
        #goto &gimp_call_procedure; # does not work, PERLBUG! #FIXME
+       warn "$$-gimp_call_procedure{1}(@_)" if $Gimp::verbose;
        my @r = eval { gimp_call_procedure (@_) };
        die $@ if $@; wantarray ? @r : $r[0];
       };
@@ -766,8 +626,8 @@ special handling. Currently they do not work when used over C<Gimp::Net>.
 
 =head1 OUTLINE OF A GIMP PLUG-IN
 
-All plug-ins (with the exception of those using C<Gimp::init>) I<must>
-contain a call to C<Gimp::main>.
+All plug-ins (running in "plugin mode") I<must> finish with a call to
+C<Gimp::main>.
 
 The return code should be immediately handed out to exit:
 
@@ -843,7 +703,7 @@ using OO-Syntax:
 
  Gimp->gimp_palette_set_foreground([20,5,7]);
  Gimp->palette_set_background("cornsilk");
- Palette->set_foreground('#1230f0');
+ Gimp::Palette->set_foreground('#1230f0');
 
 As you can see, you can also drop part of the name prefixes with this
 syntax, so its actually shorter to write and hopefully clearer to read.
@@ -880,20 +740,12 @@ which is too late for registering types.
 
 This function has not been well tested.
 
-=item Gimp::init([connection-argument]), Gimp::end()
-
-These is an alternative interface that replaces the call to Gimp::main
-and the net callback. At the moment it only works for the Net interface
-(L<Gimp::Net>), and not as a native plug-in. Here's an example:
-
- use Gimp;
- 
- Gimp::init;
- <do something with GIMP>
+=item use Gimp qw(net_init=...);
 
-The optional argument to init has the same format as the GIMP_HOST variable
-described in L<Gimp::Net>. Calling C<Gimp::end> is optional.  This is used
-in the process of testing the module ('make test').
+This is how to use Gimp-Perl in "net mode". Previous versions of this
+package required a call to Gimp::init. This is no longer necessary. The
+technical reason for this change is that when C<Gimp.pm> loads, it must
+connect to GIMP to load its constants, like PDB_INT32.
 
 =item Gimp::lock(), Gimp::unlock()
 
@@ -910,8 +762,8 @@ interface.
 Use the given rgb database instead of the default one. The format is
 the same as the one used by the X11 Consortiums rgb database (you might
 have a copy in /usr/lib/X11/rgb.txt). You can view the default database
-with C<perldoc -m Gimp>, at the end of the file (the default database is
-similar, but not identical to the X11 default rgb.txt)
+with C<perldoc -m Gimp::ColorDB>, at the end of the file (the default
+database is similar, but not identical to the X11 default rgb.txt)
 
 =item Gimp::initialized()
 
@@ -1025,8 +877,8 @@ has a section:
 
 SOME SYNTAX ALTERNATIVES
        $image = Gimp->image_new (width,height,type)
-       $image = new Image (width,height,type)
-       $image = image_new Display (width,height,type)
+       $image = new Gimp::Image (width,height,type)
+       $image = image_new Gimp::Display (width,height,type)
 
 =head1 DEBUGGING AIDS
 
@@ -1133,7 +985,7 @@ on input, either an array ref with 3 or 4 elements (i.e. [0.1,0.4,0.9]
 or [233,40,40]), a X11-like string ("#rrggbb") or a colour name
 ("papayawhip") (see set_rgb_db).
 
-=item DISPLAY, IMAGE, LAYER, CHANNEL, DRAWABLE, SELECTION, VECTORS
+=item DISPLAY, IMAGE, LAYER, CHANNEL, DRAWABLE, SELECTION, VECTORS, ITEM
 
 these will be mapped to corresponding objects (IMAGE => Gimp::Image). In
 trace output you will see small integers (the image/layer/etc..-ID)
@@ -1143,9 +995,10 @@ trace output you will see small integers (the image/layer/etc..-ID)
 represented as an array ref [name, flags, data], where name and data
 should be perl strings and flags is the numerical flag value.
 
-=item REGION, BOUNDARY, PATH, STATUS
+=item STATUS
 
-Not yet supported.
+Not yet supported, except implicitly - this is how exceptions (from
+"die") get returned in "net mode".
 
 =back
 
diff --git a/Gimp.xs b/Gimp.xs
index 7fe87c0..8bbdf1d 100644
--- a/Gimp.xs
+++ b/Gimp.xs
@@ -45,7 +45,6 @@ _exit()
 #endif
        abort();
 
-
 BOOT:
 #ifdef ENABLE_NLS
        setlocale (LC_MESSAGES, ""); /* calling twice doesn't hurt, no? */
@@ -83,43 +82,6 @@ xs_exit(status)
        CODE:
        exit (status);
 
-BOOT:
-{
-   HV *stash = gv_stashpvn ("Gimp", 4, TRUE);
-   
-   newCONSTSUB (stash, "PARASITE_PERSISTENT", newSViv (GIMP_PARASITE_PERSISTENT));
-   newCONSTSUB (stash, "PARASITE_UNDOABLE", newSViv (GIMP_PARASITE_UNDOABLE));
-
-   newCONSTSUB (stash, "PARASITE_ATTACH_PARENT", newSViv (GIMP_PARASITE_ATTACH_PARENT));
-   newCONSTSUB (stash, "PARASITE_PARENT_PERSISTENT", newSViv (GIMP_PARASITE_PARENT_PERSISTENT));
-   newCONSTSUB (stash, "PARASITE_PARENT_UNDOABLE", newSViv (GIMP_PARASITE_PARENT_UNDOABLE));
-   
-   newCONSTSUB (stash, "PARASITE_ATTACH_GRANDPARENT", newSViv (GIMP_PARASITE_ATTACH_GRANDPARENT));
-   newCONSTSUB (stash, "PARASITE_GRANDPARENT_PERSISTENT", newSViv (GIMP_PARASITE_GRANDPARENT_PERSISTENT));
-   newCONSTSUB (stash, "PARASITE_GRANDPARENT_UNDOABLE", newSViv (GIMP_PARASITE_GRANDPARENT_UNDOABLE));
-   
-   newCONSTSUB (stash, "TRACE_NONE", newSViv (TRACE_NONE));
-   newCONSTSUB (stash, "TRACE_CALL", newSViv (TRACE_CALL));
-   newCONSTSUB (stash, "TRACE_TYPE", newSViv (TRACE_TYPE));
-   newCONSTSUB (stash, "TRACE_NAME", newSViv (TRACE_NAME));
-   newCONSTSUB (stash, "TRACE_DESC", newSViv (TRACE_DESC));
-   newCONSTSUB (stash, "TRACE_ALL" , newSViv (TRACE_ALL ));
-
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_RGB", newSViv (GIMP_EXPORT_CAN_HANDLE_RGB));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_GRAY", newSViv (GIMP_EXPORT_CAN_HANDLE_GRAY));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_INDEXED", newSViv (GIMP_EXPORT_CAN_HANDLE_INDEXED));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_ALPHA", newSViv (GIMP_EXPORT_CAN_HANDLE_ALPHA ));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_BITMAP", newSViv (GIMP_EXPORT_CAN_HANDLE_BITMAP));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_LAYERS", newSViv (GIMP_EXPORT_CAN_HANDLE_LAYERS));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION", newSViv 
(GIMP_EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION));
-   newCONSTSUB (stash, "EXPORT_CAN_HANDLE_LAYER_MASKS", newSViv (GIMP_EXPORT_CAN_HANDLE_LAYER_MASKS));
-   newCONSTSUB (stash, "EXPORT_NEEDS_ALPHA", newSViv (GIMP_EXPORT_NEEDS_ALPHA));
-
-   newCONSTSUB (stash, "EXPORT_CANCEL", newSViv (GIMP_EXPORT_CANCEL));
-   newCONSTSUB (stash, "EXPORT_IGNORE", newSViv (GIMP_EXPORT_CANCEL));
-   newCONSTSUB (stash, "EXPORT_EXPORT", newSViv (GIMP_EXPORT_EXPORT));
-}
-
 MODULE = Gimp  PACKAGE = Gimp::RAW
 
 # some raw byte/bit-manipulation (e.g. for avi and miff), use PDL instead
@@ -257,4 +219,65 @@ convert_bgr_rgb_inplace (datasv)
        OUTPUT:
         datasv
 
+# when move back to separate .xs, change MODULE
+MODULE = Gimp  PACKAGE = Gimp::Constant
+
+PROTOTYPES: ENABLE
 
+#define ADD_GIMP_CONST(name, value) { \
+  newCONSTSUB(stash, name, newSViv (value)); \
+  av_push(inxs, newSVpv(name, 0)); \
+}
+
+BOOT:
+{
+   HV *stash = gv_stashpvn ("Gimp::Constant", strlen("Gimp::Constant"), TRUE);
+   AV *inxs = get_av("Gimp::Constant::INXS", GV_ADD);
+
+   ADD_GIMP_CONST("RUN_INTERACTIVE", GIMP_RUN_INTERACTIVE);
+   ADD_GIMP_CONST("RUN_NONINTERACTIVE", GIMP_RUN_NONINTERACTIVE);
+   ADD_GIMP_CONST("RUN_WITH_LAST_VALS", GIMP_RUN_WITH_LAST_VALS);
+
+   ADD_GIMP_CONST("PARASITE_PERSISTENT", GIMP_PARASITE_PERSISTENT);
+   ADD_GIMP_CONST("PARASITE_UNDOABLE", GIMP_PARASITE_UNDOABLE);
+
+   ADD_GIMP_CONST("PARASITE_ATTACH_PARENT", GIMP_PARASITE_ATTACH_PARENT);
+   ADD_GIMP_CONST("PARASITE_PARENT_PERSISTENT", GIMP_PARASITE_PARENT_PERSISTENT);
+   ADD_GIMP_CONST("PARASITE_PARENT_UNDOABLE", GIMP_PARASITE_PARENT_UNDOABLE);
+   
+   ADD_GIMP_CONST("PARASITE_ATTACH_GRANDPARENT", GIMP_PARASITE_ATTACH_GRANDPARENT);
+   ADD_GIMP_CONST("PARASITE_GRANDPARENT_PERSISTENT", GIMP_PARASITE_GRANDPARENT_PERSISTENT);
+   ADD_GIMP_CONST("PARASITE_GRANDPARENT_UNDOABLE", GIMP_PARASITE_GRANDPARENT_UNDOABLE);
+   
+   ADD_GIMP_CONST("TRACE_NONE", TRACE_NONE);
+   ADD_GIMP_CONST("TRACE_CALL", TRACE_CALL);
+   ADD_GIMP_CONST("TRACE_TYPE", TRACE_TYPE);
+   ADD_GIMP_CONST("TRACE_NAME", TRACE_NAME);
+   ADD_GIMP_CONST("TRACE_DESC", TRACE_DESC);
+   ADD_GIMP_CONST("TRACE_ALL" , TRACE_ALL );
+
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_RGB", GIMP_EXPORT_CAN_HANDLE_RGB);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_GRAY", GIMP_EXPORT_CAN_HANDLE_GRAY);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_INDEXED", GIMP_EXPORT_CAN_HANDLE_INDEXED);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_ALPHA", GIMP_EXPORT_CAN_HANDLE_ALPHA );
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_BITMAP", GIMP_EXPORT_CAN_HANDLE_BITMAP);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_LAYERS", GIMP_EXPORT_CAN_HANDLE_LAYERS);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION", GIMP_EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION);
+   ADD_GIMP_CONST("EXPORT_CAN_HANDLE_LAYER_MASKS", GIMP_EXPORT_CAN_HANDLE_LAYER_MASKS);
+   ADD_GIMP_CONST("EXPORT_NEEDS_ALPHA", GIMP_EXPORT_NEEDS_ALPHA);
+
+   ADD_GIMP_CONST("EXPORT_CANCEL", GIMP_EXPORT_CANCEL);
+   ADD_GIMP_CONST("EXPORT_IGNORE", GIMP_EXPORT_CANCEL);
+   ADD_GIMP_CONST("EXPORT_EXPORT", GIMP_EXPORT_EXPORT);
+
+   ADD_GIMP_CONST("TRUE", TRUE);
+   ADD_GIMP_CONST("FALSE", FALSE);
+
+   ADD_GIMP_CONST("UNIT_PIXEL", GIMP_UNIT_PIXEL);
+   ADD_GIMP_CONST("UNIT_INCH", GIMP_UNIT_INCH);
+   ADD_GIMP_CONST("UNIT_MM", GIMP_UNIT_MM);
+   ADD_GIMP_CONST("UNIT_POINT", GIMP_UNIT_POINT);
+   ADD_GIMP_CONST("UNIT_PICA", GIMP_UNIT_PICA);
+   ADD_GIMP_CONST("UNIT_END", GIMP_UNIT_END);
+   ADD_GIMP_CONST("UNIT_PERCENT", GIMP_UNIT_PERCENT);
+}
diff --git a/Gimp/Constant.pm b/Gimp/Constant.pm
new file mode 100644
index 0000000..5ecd9da
--- /dev/null
+++ b/Gimp/Constant.pm
@@ -0,0 +1,40 @@
+package Gimp::Constant;
+
+use Exporter 'import';
+
+BEGIN {
+   $VERSION = 2.3001;
+# XS code in Gimp.xs... for now
+#   eval {
+#      require XSLoader;
+#      XSLoader::load Gimp::Constant $VERSION;
+#   } or do {
+#      require DynaLoader;
+#      @ISA = qw(DynaLoader);
+#      bootstrap Gimp::Constant $VERSION;
+#   }
+}
+
+use vars qw(@EXPORT @PARAMS @INXS);
+
+my %sub2value;
+
+for my $class (Gimp->enums_get_type_names) {
+  if ($class eq 'GimpRunMode') {
+    # done in XS - special case as need in Gimp::Net
+    next;
+  }
+  my %gname2value = Gimp->enums_list_type($class);
+  map {
+    my $gname = $_;
+    s#^GIMP_##;
+    $sub2value{$_} = $gname2value{$gname};
+    push @PARAMS, $_ if $class eq GimpPDBArgType;
+  } keys %gname2value;
+}
+
+ EXPORT = (@INXS, keys %sub2value);
+
+map { my $sub = $_; *{$sub} = sub { $sub2value{$sub} }; } keys %sub2value;
+
+1;
diff --git a/Gimp/Lib.pm b/Gimp/Lib.pm
index e4bcc27..265b6f5 100644
--- a/Gimp/Lib.pm
+++ b/Gimp/Lib.pm
@@ -7,6 +7,7 @@ BEGIN {
    $VERSION = 2.3001;
    require XSLoader;
    XSLoader::load Gimp::Lib $VERSION;
+   warn "$$-Loading ".__PACKAGE__ if $Gimp::verbose;
 }
 
 use subs qw(
@@ -79,6 +80,8 @@ sub gimp_drawable_bounds {
    (@b[0,1],$b[2]-$b[0],$b[3]-$b[1]);
 }
 
+warn "$$-Finished loading ".__PACKAGE__ if $Gimp::verbose;
+
 1;
 __END__
 
@@ -92,8 +95,8 @@ Gimp::Lib - Interface to libgimp (as opposed to Gimp::Net)
 
 =head1 DESCRIPTION
 
-This is the package that interfaces to The Gimp via the libgimp interface,
-i.e. the normal interface to use with the Gimp. You don't normally use this
+This is the package that interfaces to GIMP via the libgimp interface,
+i.e. the normal interface to use with GIMP. You don't normally use this
 module directly, look at the documentation for the package "Gimp".
 
 =head1 AUTHOR
diff --git a/Gimp/Lib.xs b/Gimp/Lib.xs
index a5dcf3e..f2e897f 100644
--- a/Gimp/Lib.xs
+++ b/Gimp/Lib.xs
@@ -1340,26 +1340,20 @@ gimp_main(...)
                    char *argv [10];
                    int argc = 0;
 
-                   if (items == 0)
-                     {
-                       AV *av = perl_get_av ("ARGV", FALSE);
-
-                       argv [argc++] = SvPV_nolen (perl_get_sv ("0", FALSE));
-                       if (av && av_len (av) < 10-1)
-                         {
-                           while (argc-1 <= av_len (av))
-                             argv [argc] = SvPV_nolen (*av_fetch (av, argc-1, 0)),
-                             argc++;
-                         }
-                       else
-                         croak ("internal error (please report): too many arguments to main");
-                     }
-                   else
+                   if (items != 0)
                      croak (__("arguments to main not yet supported!"));
+                   AV *av = perl_get_av ("ARGV", FALSE);
+
+                   argv [argc++] = SvPV_nolen (perl_get_sv ("0", FALSE));
+                   if (!(av && av_len (av) < 10-1))
+                     croak ("internal error (please report): too many arguments to main");
+                   while (argc-1 <= av_len (av))
+                     argv [argc] = SvPV_nolen (*av_fetch (av, argc-1, 0)),
+                     argc++;
 
-                   gimp_is_initialized = 1;
+                   gimp_is_initialized = 1;
                    RETVAL = gimp_main (&PLUG_IN_INFO, argc, argv);
-                   gimp_is_initialized = 0;
+                   gimp_is_initialized = 0;
                     /*exit (0);*/ /*D*//* shit, some memory problem here, so just exit */
                  }
        OUTPUT:
@@ -1395,6 +1389,40 @@ gimp_micro_version()
        OUTPUT:
        RETVAL
 
+void
+gimp_enums_get_type_names()
+INIT:
+  gimp_enums_init ();
+  gint n_type_names;
+  const gchar **etn;
+  int i;
+PPCODE:
+  etn = gimp_enums_get_type_names (&n_type_names);
+  if (!etn) XSRETURN_EMPTY;
+  EXTEND(SP, n_type_names);
+  for (i = 0; i < n_type_names; i++) {
+    PUSHs(sv_2mortal(newSVpv(etn[i], 0)));
+  }
+
+# return list of pair => value, ...
+void
+gimp_enums_list_type(name)
+  const char *name
+INIT:
+  GType enum_type;
+  GEnumClass *enum_class;
+  GEnumValue *value;
+  HV *ret_hash;
+PPCODE:
+  if (!(enum_type = g_type_from_name (name)))
+    croak (__("gimp_enums_list_type(%s) invalid name"), name);
+  if (!(enum_class = g_type_class_peek (enum_type)))
+    croak (__("gimp_enums_list_type(%s) invalid class"), name);
+  for (value = enum_class->values; value->value_name; value++) {
+    XPUSHs(sv_2mortal(newSVpv(value->value_name,0)));
+    XPUSHs(sv_2mortal(newSViv(value->value)));
+  }
+
 # checks whether a gimp procedure exists
 int
 gimp_procedural_db_proc_exists(char *proc_name)
@@ -2245,6 +2273,9 @@ gimp_pixel_rgn_data(...)
 #endif
 
 BOOT:
+#if (GLIB_MAJOR_VERSION < 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 36))
+       g_type_init();
+#endif
        trace_file = PerlIO_stderr ();
        g_log_set_handler(
          "LibGimp",
diff --git a/Net/Net.pm b/Net/Net.pm
index 4cc6906..1641971 100644
--- a/Net/Net.pm
+++ b/Net/Net.pm
@@ -25,7 +25,7 @@ package Gimp::Net;
 # Aelem1\0elem2...
 # Rclass\0scalar-value
 
-BEGIN { warn "Loading ".__PACKAGE__ if $Gimp::verbose; }
+BEGIN { warn "$$-Loading ".__PACKAGE__ if $Gimp::verbose; }
 
 use strict 'vars';
 use vars qw($VERSION $trace_res);
@@ -81,7 +81,7 @@ sub command {
 
 sub import {
    my $pkg = shift;
-   warn "$pkg->import(@_)" if $Gimp::verbose;
+   warn "$$-$pkg->import(@_)" if $Gimp::verbose;
    return if @_;
    # overwrite some destroy functions
    *Gimp::Tile::DESTROY=
@@ -93,7 +93,7 @@ sub import {
 }
 
 sub gimp_call_procedure {
-   warn "Net::gimp_call_procedure[$trace_level](@_)" if $Gimp::verbose;
+   warn "$$-Net::gimp_call_procedure[$trace_level](@_)" if $Gimp::verbose;
    my $func = shift;
    unshift @_, $trace_level if $trace_level;
    my @response = command($trace_level ? "TRCE" : "EXEC", $func, @_);
@@ -143,7 +143,7 @@ my @gimp_gui_functions = qw(
 sub start_server {
    my $opt = shift;
    $opt = $Gimp::spawn_opts unless $opt;
-   print __"start_server \"$opt\"" if $Gimp::verbose;
+   warn __"$$-start_server($opt)" if $Gimp::verbose;
    croak __"unable to create socketpair for gimp communications: $!"
       unless ($server_fh, my $gimp_fh) =
         IO::Socket->socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC);
@@ -161,15 +161,16 @@ sub start_server {
    unless ($Gimp::verbose) {
       open STDIN,"</dev/null";
       open STDOUT,">/dev/null";
-      open STDERR,">&1";
+      #open STDERR,">&1";
    }
    my @args;
-   my $flags = PS_FLAG_BATCH | ($Gimp::verbose ? PS_FLAG_QUIET : 0);
+   my $flags = PS_FLAG_BATCH | ($Gimp::verbose ? 0 : PS_FLAG_QUIET);
    my $args = join ' ',
      &Gimp::RUN_NONINTERACTIVE,
      $flags,
      fileno($gimp_fh),
      int($Gimp::verbose);
+   warn __"$$-extension-perl-server args='$args'" if $Gimp::verbose;
    push(@args,"--no-data") if $opt=~s/(^|:)no-?data//;
    push(@args,"-i") unless $opt=~s/(^|:)gui//;
    push(@args,"--verbose") if $Gimp::verbose;
@@ -217,7 +218,7 @@ sub try_connect {
 
 sub gimp_init {
    $Gimp::in_top=1;
-   warn "gimp_init(@_)" if $Gimp::verbose;
+   warn "$$-gimp_init(@_)" if $Gimp::verbose;
    if (@_) {
       $server_fh = try_connect ($_[0]);
    } elsif (defined($Gimp::host)) {
@@ -251,10 +252,11 @@ sub gimp_init {
 
    $initialized = 1;
    Gimp::_initialized_callback;
+   warn "$$-Finished gimp_init(@_)" if $Gimp::verbose;
 }
 
 sub gimp_end {
-   warn "gimp_end - gimp_pid=$gimp_pid" if $Gimp::verbose;
+   warn "$$-gimp_end - gimp_pid=$gimp_pid" if $Gimp::verbose;
    $initialized = 0;
    #close $server_fh if $server_fh;
    undef $server_fh;
@@ -262,7 +264,6 @@ sub gimp_end {
 }
 
 sub gimp_main {
-   gimp_init;
    no strict 'refs';
    $Gimp::in_top=0;
    eval { Gimp::callback("-net") };
diff --git a/Perl-Server b/Perl-Server
index a5587bb..6d159a4 100755
--- a/Perl-Server
+++ b/Perl-Server
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 use strict;
+#BEGIN { $Gimp::verbose = 1; }
 use Gimp qw(__ N_);
 use Gimp::Net ();
 
diff --git a/t/import.t b/t/import.t
index f01f1bd..33d9126 100644
--- a/t/import.t
+++ b/t/import.t
@@ -1,15 +1,14 @@
 use strict;
 use Test::More;
-#BEGIN { $Gimp::verbose = 1; }
-use Gimp qw(:auto);
+our ($dir, $DEBUG);
+BEGIN {
+#  $Gimp::verbose = 1;
+  $DEBUG = 0;
+  require 't/gimpsetup.pl';
+}
+use Gimp qw(:auto), "net_init=spawn/";
 #Gimp::set_trace(TRACE_ALL);
 
-our $dir;
-our $DEBUG = 0;
-require 't/gimpsetup.pl';
-
-Gimp::init("spawn/");
-
 eval { Image->new(10,10,RGB); };
 ok($@, 'polluting version should fail');
 
diff --git a/t/load.t b/t/load.t
index 30d58f7..8aaa571 100644
--- a/t/load.t
+++ b/t/load.t
@@ -1,31 +1,68 @@
 use strict;
 use Test::More;
 
-#BEGIN { $Gimp::verbose = 1; }
-BEGIN { use_ok('Gimp', qw(:auto canonicalise_color)); }
-require 't/gimpsetup.pl';
+our ($dir, $DEBUG);
+BEGIN {
+#  $Gimp::verbose = 1;
+  $DEBUG = 0;
+  require 't/gimpsetup.pl';
+}
+BEGIN { use_ok('Gimp', qw(:auto canonicalise_color net_init=spawn/)); }
 #Gimp::set_trace(TRACE_ALL);
-Gimp::init("spawn/");
 
 my %CONST_DATA = (
-  PDB_FLOAT => 3,
-  PDB_PATH => 19,
-  ABSOLUTE_CONVOL => 1,
-  PDB_PASS_THROUGH => 2,
-  GRADIENT_SPIRAL_ANTICLOCKWISE => 10,
-  HISTOGRAM_BLUE => 3,
-  STACK_TRACE_QUERY => 1,
-  DISSOLVE_MODE => 1,
-  UNIT_POINT => 3,
-  MAGENTA_HUES => 6,
-  RUN_INTERACTIVE => 0,
-  CLIP_TO_IMAGE => 1,
-  COMPRESSION_LZW => 1,
-  TRACE_ALL => 255,
-  ROTATE_90 => 0,
-  TRUE => 1,
-  BLACK => 2,
-  EXPORT_CAN_HANDLE_GRAY => 2,
+  'ADD_COPY_MASK' => 5,
+  'FG_TRANSPARENT_MODE' => 2,
+  'BRUSH_SOFT' => 1,
+  'BRUSH_GENERATED_SQUARE' => 1,
+  'PATTERN_BUCKET_FILL' => 2,
+  'CHANNEL_OP_REPLACE' => 2,
+  'GRAY_CHANNEL' => 3,
+  'PATTERN_CLONE' => 1,
+  'FS_DITHER' => 1,
+  'CUSTOM_PALETTE' => 4,
+  'ABSOLUTE_CONVOL' => 1,
+  'SHARPEN_CONVOLVE' => 1,
+  'DESATURATE_LUMINOSITY' => 1,
+  'DODGE' => 0,
+  'TRANSPARENT_FILL' => 3,
+  'FOREGROUND_EXTRACT_SIOX' => 0,
+  'GRADIENT_SEGMENT_HSV_CCW' => 1,
+  'GRADIENT_SEGMENT_SINE' => 2,
+  'GRADIENT_SHAPEBURST_ANGULAR' => 6,
+  'GRID_ON_OFF_DASH' => 2,
+  'HISTOGRAM_BLUE' => 3,
+  'MAGENTA_HUES' => 6,
+  'ICON_TYPE_INLINE_PIXBUF' => 1,
+  'RGB' => 0,
+  'GRAY_IMAGE' => 2,
+  'INK_BLOB_TYPE_CIRCLE' => 0,
+  'INTERPOLATION_LINEAR' => 1,
+  'GRAIN_EXTRACT_MODE' => 20,
+  'MASK_DISCARD' => 1,
+  'CLIP_TO_IMAGE' => 1,
+  'ERROR_CONSOLE' => 2,
+  'OFFSET_BACKGROUND' => 0,
+  'ORIENTATION_VERTICAL' => 1,
+  'PDB_ERROR_HANDLER_PLUGIN' => 1,
+  'EXTENSION' => 2,
+  'PDB_SUCCESS' => 3,
+  'PAINT_CONSTANT' => 0,
+  'PROGRESS_COMMAND_PULSE' => 4,
+  'REPEAT_SAWTOOTH' => 1,
+  'ROTATE_180' => 1,
+  'RUN_WITH_LAST_VALS' => 2,
+  'SELECT_CRITERION_S' => 5,
+  'POINTS' => 1,
+  'STACK_TRACE_NEVER' => 0,
+  'TEXT_DIRECTION_RTL' => 1,
+  'TEXT_HINT_STYLE_MEDIUM' => 2,
+  'TEXT_JUSTIFY_FILL' => 3,
+  'MIDTONES' => 1,
+  'TRANSFORM_FORWARD' => 0,
+  'TRANSFORM_RESIZE_CROP' => 2,
+  'USER_DIRECTORY_PICTURES' => 4,
+  'VECTORS_STROKE_TYPE_BEZIER' => 0,
 );
 
 {
diff --git a/t/perlplugin.t b/t/perlplugin.t
index a44a240..a6724c4 100644
--- a/t/perlplugin.t
+++ b/t/perlplugin.t
@@ -1,18 +1,14 @@
 use strict;
 use Test::More;
-#BEGIN { $Gimp::verbose = 1; }
-use Gimp qw(:auto);
-#Gimp::set_trace(TRACE_ALL);
-use Config;
-
-our $dir;
-our $myplugins;
-our $DEBUG = 0;
-require 't/gimpsetup.pl';
-
-my $plugin = "$myplugins/test_perl_filter";
-write_plugin($DEBUG, $plugin, $Config{startperl}.
-  "\nBEGIN { \$Gimp::verbose = ".int($Gimp::verbose).'; }'.<<'EOF');
+our ($dir, $DEBUG, $myplugins);
+BEGIN {
+#  $Gimp::verbose = 1;
+  $DEBUG = 0;
+  require 't/gimpsetup.pl';
+  use Config;
+  my $plugin = "$myplugins/test_perl_filter";
+  write_plugin($DEBUG, $plugin, $Config{startperl}.
+    "\nBEGIN { \$Gimp::verbose = ".int($Gimp::verbose).'; }'.<<'EOF');
 
 use strict;
 use Gimp qw(:auto __ N_);
@@ -111,8 +107,9 @@ sub boilerplate_params {
 
 exit main;
 EOF
-
-Gimp::init("spawn/");
+}
+use Gimp qw(:auto), "net_init=spawn/";
+#Gimp::set_trace(TRACE_ALL);
 
 ok((my $i = Gimp::Image->new(10,10,RGB)), 'new image');
 ok(
diff --git a/t/run.t b/t/run.t
index f979940..a8892a3 100644
--- a/t/run.t
+++ b/t/run.t
@@ -1,15 +1,15 @@
 use strict;
-use Test::More tests => 15;
-#BEGIN { $Gimp::verbose = 1; }
-use Gimp qw(:auto);
+use Test::More;
+
+our ($dir, $DEBUG);
+BEGIN {
+#  $Gimp::verbose = 1;
+  $DEBUG = 0;
+  require 't/gimpsetup.pl';
+}
+use Gimp qw(:auto), "net_init=spawn/";
 #Gimp::set_trace(TRACE_ALL);
 
-our $dir;
-our $DEBUG = 0;
-require 't/gimpsetup.pl';
-
-Gimp::init("spawn/");
-
 ok((my $i = new Gimp::Image(10,10,RGB)), 'OO Syntax for new image');
 ok(
   (my $l = $i->layer_new(10,10,RGBA_IMAGE,"new layer",100,VALUE_MODE)),



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