Alien-wxWidgets

 view release on metacpan or  search on metacpan

lib/Alien/wxWidgets.pm  view on Meta::CPAN

    my %crit = awx_smart_config @_;

    my @configs = awx_sort_config awx_grep_config [ $class->_list ], %crit ;

    unless( @configs ) {
        my @all_configs = $class->get_configurations;

        my $message = "Searching configuration for:\n";
        $message .= _pretty_print_criteria( \%crit );
        $message .= "\nAvailable configurations:\n";
        if( @all_configs ) {
            $message .= _pretty_print_configuration( $_ ) foreach @all_configs;
        } else {
            $message .= "No wxWidgets build found\n";
        }

        die $message;
    }

    %VALUES = $configs[0]->{package}->values;
}

sub _pretty_print_criteria {
    my $criteria = shift;
    my %display = %$criteria;

    $display{version} = join '-', @{$display{version}} if ref $display{version};
    $display{version} = '(any version)' unless $display{version};
    $display{toolkit} = '(any toolkit)' unless $display{toolkit};
    $display{compiler_kind} = '(any compiler)' unless $display{compiler_kind};
    $display{compiler_version} = '(any version)' unless $display{compiler_version};

    return _pretty_print_configuration( \%display );
}

sub _pretty_print_configuration {
    my $config = shift;
    my @options = map { !defined $config->{$_} ? () :
                                 $config->{$_} ? ( $_ ) :
                                                 ( "no $_" ) }
                      qw(debug unicode mslu);

    return "wxWidgets $config->{version} for $config->{toolkit}; " .
           "compiler compatibility: $config->{compiler_kind} " .
           $config->{compiler_version} . '; ' .
           ( @options ? 'options: ' . join( ', ', @options ) : '' ) .
           "\n";
}

sub show_configurations {
    my $class = shift;
    my @configs = $class->get_configurations( @_ );

    print _pretty_print_configuration( $_ ) foreach @configs;
}

sub dump_configurations {
    my $class = shift;
    my @configs = $class->get_configurations( @_ );

    require Data::Dumper;
    print Data::Dumper->Dump( \@configs );
}

sub get_configurations {
    my $class = shift;

    return awx_sort_config awx_grep_config [ $class->_list ], @_;
}

my $lib_nok  = 'adv|base|html|net|xml|media';
my $lib_mono_28 = 'adv|base|html|net|xml|xrc|media|aui|richtext';
my $lib_mono_29 = 'adv|base|html|net|xml|xrc|media|aui|richtext|stc';

sub _grep_libraries {
    my $lib_filter = $VALUES{version} >= 2.005001 ? qr/(?!a)a/ : # no match
                     $^O =~ /MSWin32/             ? qr/^(?:$lib_nok|gl)$/ :
                                                    qr/^(?:$lib_nok)$/;

    my( $type, @libs ) = @_;

    my $dlls = $VALUES{_libraries};

    @libs = keys %$dlls unless @libs;
    push @libs, 'core', 'base'  unless grep /^core|mono$/, @libs;

    my $lib_mono = $VALUES{version} >= 2.009 ? $lib_mono_29 : $lib_mono_28;
    if( ( $VALUES{config}{build} || '' ) eq 'mono' ) {
        @libs = map { $_ eq 'core'            ? ( 'mono' ) :
                      $_ =~ /^(?:$lib_mono)$/ ? () :
                      $_ } @libs;
        @libs = qw(mono) unless @libs;
    }

    return map  { _remap( $_ ) }
           map  { defined( $dlls->{$_}{$type} ) ? $dlls->{$_}{$type} :
                      croak "No such '$type' library: '$_'" }
           grep !/$lib_filter/, @libs;
}

sub link_libraries { shift; return _grep_libraries( 'link', @_ ) }
sub shared_libraries { shift; return _grep_libraries( 'dll', @_ ) }
sub import_libraries { shift; return _grep_libraries( 'lib', @_ ) }
sub library_keys { shift; return keys %{$VALUES{_libraries}} }

sub libraries {
    my $class = shift;

    return ( _remap( $VALUES{link_libraries} ) || '' ) . ' ' .
           join ' ', map { _remap( $_ ) }
                         $class->link_libraries( @_ );
}

1;

__END__

=head1 METHODS

=head2 load/import

    use Alien::wxWidgets version          => 2.004 | [ 2.004, 2.005 ],



( run in 0.535 second using v1.01-cache-2.11-cpan-524268b4103 )