###################################################################################
# Distribution    Wx::Perl::Packager
# File            Wx/Perl/Packager/Mini.pm
# Description:    Overload Wx startup
# File Revision:  $Id: Mini.pm 48 2010-04-25 00:26:34Z  $
# License:        This program is free software; you can redistribute it and/or
#                 modify it under the same terms as Perl itself
# Copyright:      Copyright (c) 2006 - 2010 Mark Dootson
###################################################################################

package Wx::Perl::Packager::Mini;
use Carp;

our $VERSION = '0.27';

#########################################################################################


package
  Wx;
no warnings;

sub _start {
    warnings;
    &Wx::_init_binary_loader;
    my $_xs_version = $Wx::XS_VERSION;
    if ( my $handler = $Wx::Perl::Packager::handler ) {
        my $result = Wx::Perl::Packager::Mini::XSLoader::loadwx($handler, 'Wx', $_xs_version);
        Wx::wx_boot( 'Wx', $_xs_version ) if !$result;
    } else {
        Wx::wx_boot( 'Wx', $_xs_version );
    }
    
    Wx::_boot_Constant( 'Wx', $_xs_version );
    Wx::_boot_GDI( 'Wx', $_xs_version );
    Wx::Load();
}

package Wx::Perl::Packager::Mini::XSLoader;

our $VERSION = '0.27';

sub loadwx {
    
    package
       DynaLoader;
    my $wxloadhandler = shift;
    my $file = $wxloadhandler->get_module_core_load_path('wx');
    return 0 unless( $file && -f $file );
    $wxloadhandler->debug_print('Internal XSLoader used for Wx');
    
    #------------------------------------------
    # From XSLoader
    #------------------------------------------
    
    my($module) = @_;
    
    my $boots = "$module\::bootstrap";
    my $bootname = "boot_$module";
    $bootname =~ s/\W/_/g;
    @DynaLoader::dl_require_symbols = ($bootname);
    my $boot_symbol_ref;
    
    my $libref = dl_load_file($file, 0) or do { 
        Carp::croak("Can't load '$file' for module $module: " . dl_error());
    };
    push(@DynaLoader::dl_librefs,$libref);  # record loaded object

    my @unresolved = dl_undef_symbols();
    if (@unresolved) {
        Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
    }

    $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do {
        Carp::croak("Can't find '$bootname' symbol in $file\n");
    };

    push(@DynaLoader::dl_modules, $module); # record loaded module

    my $xs = dl_install_xsub($boots, $boot_symbol_ref, $file);

    # See comment block above
    push(@DynaLoader::dl_shared_objects, $file); # record files loaded
    return &$xs(@_);

}

1;