summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl0/lib/Imager/ExtUtils.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl0/lib/Imager/ExtUtils.pm')
-rwxr-xr-xMaster/tlpkg/tlperl0/lib/Imager/ExtUtils.pm135
1 files changed, 135 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl0/lib/Imager/ExtUtils.pm b/Master/tlpkg/tlperl0/lib/Imager/ExtUtils.pm
new file mode 100755
index 00000000000..a43a7bc418d
--- /dev/null
+++ b/Master/tlpkg/tlperl0/lib/Imager/ExtUtils.pm
@@ -0,0 +1,135 @@
+package Imager::ExtUtils;
+use strict;
+use File::Spec;
+
+use vars qw($VERSION);
+
+$VERSION = "1.002";
+
+=head1 NAME
+
+Imager::ExtUtils - functions handy in writing Imager extensions
+
+=head1 SYNOPSIS
+
+ # make Imager easier to use with Inline
+ # perldoc Imager::Inline
+ use Inline with => 'Imager';
+
+=head1 DESCRIPTION
+
+=over
+
+=item base_dir
+
+Returns the base directory where Imager is installed.
+
+=cut
+
+# figure out where Imager is installed
+sub base_dir {
+ for my $inc_dir (@INC) {
+ if (-e "$inc_dir/Imager.pm") {
+ my $base_dir = $inc_dir;
+ unless (File::Spec->file_name_is_absolute($base_dir)) {
+ $base_dir = File::Spec->rel2abs($base_dir);
+ }
+ return $base_dir;
+ }
+ }
+
+ die "Cannot locate an installed Imager!";
+}
+
+=item inline_config
+
+Implements Imager's Inline::C C<with> hook.
+
+=cut
+
+sub inline_config {
+ my ($class) = @_;
+ my $base = base_dir();
+
+ return
+ {
+ INC => $class->includes,
+ TYPEMAPS => $class->typemap,
+ AUTO_INCLUDE => <<CODE,
+/* Inserted by Imager $Imager::VERSION */
+#include "imext.h"
+#include "imperl.h"
+DEFINE_IMAGER_CALLBACKS;
+CODE
+ BOOT => 'PERL_INITIALIZE_IMAGER_CALLBACKS;',
+ FILTERS => \&_inline_filter,
+ };
+}
+
+my @inline_replace =
+ qw(
+ Imager::ImgRaw
+ Imager::Color::Float
+ Imager::Color
+ Imager::IO
+ );
+
+my %inline_replace =
+ map { (my $tmp = $_) =~ s/::/__/g; $_ => $tmp } @inline_replace;
+
+my $inline_replace_re = "\\b(" . join('|', @inline_replace) . ")\\b";
+
+sub _inline_filter {
+ my $code = shift;
+
+ $code =~ s/$inline_replace_re/$inline_replace{$1}/g;
+
+ $code;
+}
+
+=item includes
+
+Returns -I options suitable for use with ExtUtils::MakeMaker's INC
+option.
+
+=cut
+
+sub includes {
+ my $class = shift;
+ my $base = $class->base_dir();
+
+ "-I" . $base . '/Imager/include',
+}
+
+=item typemap
+
+Returns the full path to Imager's installed typemap.
+
+=cut
+
+sub typemap {
+ my $class = shift;
+ my $base = $class->base_dir();
+
+ $base . '/Imager/typemap';
+}
+
+1;
+
+__END__
+
+=back
+
+=head1 AUTHOR
+
+Tony Cook <tony@imager.perl.org>
+
+=head1 REVISION
+
+$Revision$
+
+=head1 SEE ALSO
+
+Imager, Imager::API, Imager::Inline, Imager::APIRef.
+
+=cut