Intertangle-Yarn
view release on metacpan or search on metacpan
lib/Intertangle/Yarn/Graphene.pm view on Meta::CPAN
use Modern::Perl;
package Intertangle::Yarn::Graphene;
# ABSTRACT: Load the Graphene graphic types library
$Intertangle::Yarn::Graphene::VERSION = '0.002';
use Glib::Object::Introspection;
use DynaLoader;
my $_GRAPHENE_BASENAME = 'Graphene';
my $_GRAPHENE_VERSION = '1.0';
my $_GRAPHENE_PACKAGE = __PACKAGE__;
my @_FLATTEN_ARRAY_REF_RETURN_FOR = qw/
/;
use Env qw(@GI_TYPELIB_PATH @PATH);
use Alien::Graphene;
sub import {
my @search_path = ();
if( Alien::Graphene->install_type eq 'share' ) {
unshift @GI_TYPELIB_PATH, Alien::Graphene->gi_typelib_path;
@search_path = ( search_path => Alien::Graphene->gi_typelib_path );
if( $^O eq 'MSWin32' ) {
push @PATH, Alien::Graphene->rpath;
} else {
push @DynaLoader::dl_library_path, Alien::Graphene->rpath;
my @files = DynaLoader::dl_findfile("-lgraphene-1.0");
DynaLoader::dl_load_file($files[0]) if @files;
}
}
Glib::Object::Introspection->setup(
basename => $_GRAPHENE_BASENAME,
version => $_GRAPHENE_VERSION,
package => $_GRAPHENE_PACKAGE,
flatten_array_ref_return_for => \@_FLATTEN_ARRAY_REF_RETURN_FOR,
@search_path,
);
}
sub Inline {
return unless $_[-1] eq 'C';
require Intertangle::API::Glib;
require Hash::Merge;
my $glib = Intertangle::API::Glib->Inline($_[-1]);
my @nosearch = $^O eq 'MSWin32' ? (':nosearch') : ();
my @search = $^O eq 'MSWin32' ? ( ':search' ) : ();
my $graphene = {
CCFLAGSEX => join(" ", delete $glib->{CCFLAGSEX}, Alien::Graphene->cflags),
LIBS => join(" ", @nosearch, delete $glib->{LIBS}, Alien::Graphene->libs, @search),
AUTO_INCLUDE => <<C,
#include <graphene.h>
#include <graphene-gobject.h>
C
};
my $merge = Hash::Merge->new('RETAINMENT_PRECEDENT');
$merge->merge( $glib, $graphene );
}
( run in 4.082 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )