use Config;
use File::Spec;
use Getopt::Long;
-use vars qw(%Recommends);
use ExtUtils::Manifest qw(maniread);
+use ExtUtils::Liblist;
use vars qw(%formats $VERBOSE $INCPATH $LIBPATH $NOLOG $DEBUG_MALLOC $MANUAL $CFLAGS $LFLAGS $DFLAGS);
+use lib 'inc';
+use Devel::CheckLib;
+
+# EU::MM runs Makefile.PL all in the same process, so sub-modules will
+# see this
+our $BUILDING_IMAGER = 1;
#
# IM_INCPATH colon seperated list of paths to extra include paths
# IM_CFLAGS Extra flags to pass to the compiler
# IM_LFLAGS Extra flags to pass to the linker
# IM_DFLAGS Extra flags to pass to the preprocessor
-# IM_SUPPRESS_PROMPT Suppress the prompt asking about gif support
+
+my $KEEP_FILES = $ENV{IMAGER_KEEP_FILES};
getenv(); # get environment variables
my @disable; # or list of drivers to disable
my @incpaths; # places to look for headers
my @libpaths; # places to look for libraries
-my $noexif; # non-zero to disable EXIF parsing of JPEGs
-my $no_gif_set_version; # disable calling EGifSetGifVersion
my $coverage; # build for coverage testing
+my $assert; # build with assertions
GetOptions("help" => \$help,
"enable=s" => \@enable,
"disable=s" => \@disable,
"libpath=s" => \@libpaths,
"verbose|v" => \$VERBOSE,
"nolog" => \$NOLOG,
- "noexif" => \$noexif,
- "nogifsetversion" => \$no_gif_set_version,
- 'coverage' => \$coverage);
+ 'coverage' => \$coverage,
+ "assert|a" => \$assert);
+
+setenv();
+
+if ($ENV{AUTOMATED_TESTING}) {
+ $assert = 1;
+}
if ($VERBOSE) {
print "Verbose mode\n";
push @defines, [ IMAGER_LOG => 1, "Logging system" ];
}
+if ($assert) {
+ push @defines, [ IM_ASSERT => 1, "im_assert() are effective" ];
+}
+
if ($DEBUG_MALLOC) {
push @defines, [ IMAGER_DEBUG_MALLOC => 1, "Use Imager's DEBUG malloc()" ];
print "Malloc debugging enabled\n";
automatic();
}
-# Make sure there isn't a clash between the gif libraries.
-gifcheck();
-
my $lib_cflags = '';
my $lib_lflags = '';
my $F_LIBS = '';
}
-unless ($noexif) {
- print "EXIF support enabled\n";
- push @defines, [ 'IMEXIF_ENABLE', 1, "Enable experimental EXIF support" ];
- $F_OBJECT .= ' imexif.o';
-}
-
my $F_INC = join ' ', map "-I$_", map / / ? qq{"$_"} : $_,
grep !$definc{$_}, @incs;
$F_LIBS = join(' ',map "-L$_", map / / ? qq{"$_"} : $_,
if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; }
my @objs = qw(Imager.o draw.o polygon.o image.o io.o iolayer.o
- log.o gaussian.o conv.o pnm.o raw.o feat.o font.o
+ log.o gaussian.o conv.o pnm.o raw.o feat.o font.o combine.o
filters.o dynaload.o stackmach.o datatypes.o
regmach.o trans2.o quant.o error.o convert.o
map.o tags.o palimg.o maskimg.o img16.o rotate.o
bmp.o tga.o color.o fills.o imgdouble.o limits.o hlines.o
- imext.o scale.o rubthru.o render.o);
-
-$Recommends{Imager} =
- { 'Parse::RecDescent' => 0 };
+ imext.o scale.o rubthru.o render.o paste.o compose.o flip.o);
my %opts=(
'NAME' => 'Imager',
'DEFINE' => "$OSDEF $CFLAGS",
'INC' => "$lib_cflags $DFLAGS $F_INC",
'OBJECT' => join(' ', @objs, $F_OBJECT),
- clean => { FILES=>'testout meta.tmp rubthru.c scale.c' },
+ clean => { FILES=>'testout rubthru.c scale.c conv.c filters.c gaussian.c render.c rubthru.c' },
PM => gen_PM(),
PREREQ_PM => { 'Test::More' => 0.47 },
);
$opts{AUTHOR} = 'Tony Cook <tony@imager.perl.org>, Arnar M. Hrafnkelsson';
$opts{ABSTRACT} = 'Perl extension for Generating 24 bit Images';
}
-if ($MM_ver > 6.10) {
- $opts{NO_META} = 1;
+
+if ($MM_ver >= 6.46) {
+ $opts{META_MERGE} =
+ {
+ recommends =>
+ {
+ "Parse::RecDescent" => 0
+ },
+ license => "perl",
+ dynamic_config => 1,
+ no_index =>
+ {
+ directory =>
+ [
+ "PNG",
+ "GIF",
+ "TIFF",
+ "JPEG",
+ "W32",
+ "FT2",
+ ],
+ },
+ resources =>
+ {
+ homepage => "http://imager.perl.org/",
+ repository =>
+ {
+ url => "git://git.imager.perl.org/imager.git",
+ web => "http://git.imager.perl.org/imager.git",
+ type => "git",
+ },
+ bugtracker =>
+ {
+ web => "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Imager",
+ mailto => 'bug-Imager@rt.cpan.org',
+ },
+ },
+ };
}
make_imconfig(\@defines);
if ($VERBOSE) { print Dumper(\%opts); }
mkdir('testout',0777); # since we cannot include it in the archive.
-make_metafile(\%opts);
+-d "probe" and rmdir "probe";
WriteMakefile(%opts);
$(PERLRUN) Makefile.PL
$(ECHO) "==> Your Makefile has been rebuilt - re-run your make command <=="
'.qq!
-lib/Imager/APIRef.pod : \$(C_FILES) apidocs.perl
+lib/Imager/APIRef.pod : \$(C_FILES) \$(H_FILES) apidocs.perl
$perl apidocs.perl lib/Imager/APIRef.pod
!.join('', map _im_rule($perl, $_), @ims)
(my $c = $im) =~ s/\.im$/.c/;
return <<MAKE;
-$c: $im imtoc.perl
- $perl imtoc.perl $im $c
+$c: $im lib/Imager/Preprocess.pm
+ $perl -Ilib -MImager::Preprocess -epreprocess $im $c
MAKE
}
-sub gifcheck {
- if ($formats{'gif'} and $formats{'ungif'}) {
- print "ungif and gif can not coexist - removing ungif support\n";
- delete $formats{'ungif'};
- }
-
- for my $frm (qw(gif ungif)) {
- checkformat($frm) if ($MANUAL and $formats{$frm});
- }
-
- my @dirs;
- for my $frm (grep $formats{$_}, qw(gif ungif)) {
- push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
- }
- my $minor = 0;
- my $major = 0;
- FILES: for my $dir (@dirs) {
- my $h = "$dir/gif_lib.h";
- open H, "< $h" or next;
- while (<H>) {
- if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
- $major = $1;
- $minor = $2;
- close H;
- last FILES;
- }
- }
- close H;
- }
-
- # we need the version in a #ifdefable form
-
- push @defines, [ IM_GIFMAJOR => $major, "Parsed giflib version" ];
- push @defines, [ IM_GIFMINOR => $minor ];
- push @defines, [ IM_NO_SET_GIF_VERSION => 1, "Disable EGifSetGifVersion" ]
- if $no_gif_set_version;
-}
+# sub gifcheck {
+# if ($formats{'gif'} and $formats{'ungif'}) {
+# print "ungif and gif can not coexist - removing ungif support\n";
+# delete $formats{'ungif'};
+# }
+
+# for my $frm (qw(gif ungif)) {
+# checkformat($frm) if ($MANUAL and $formats{$frm});
+# }
+
+# my @dirs;
+# for my $frm (grep $formats{$_}, qw(gif ungif)) {
+# push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
+# }
+# my $minor = 0;
+# my $major = 0;
+# FILES: for my $dir (@dirs) {
+# my $h = "$dir/gif_lib.h";
+# open H, "< $h" or next;
+# while (<H>) {
+# if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
+# $major = $1;
+# $minor = $2;
+# close H;
+# last FILES;
+# }
+# }
+# close H;
+# }
+
+# # we need the version in a #ifdefable form
+
+# push @defines, [ IM_GIFMAJOR => $major, "Parsed giflib version" ];
+# push @defines, [ IM_GIFMINOR => $minor ];
+# push @defines, [ IM_NO_SET_GIF_VERSION => 1, "Disable EGifSetGifVersion" ]
+# if $no_gif_set_version;
+# }
sub grep_directory {
return map $path, @l;
}
-
-sub checkformat {
- my $frm=shift;
-
- print " checkformat($frm)\n" if $VERBOSE;
-
- my $probe_array = $formats{$frm}{'code'};
- if ($probe_array) {
- print " Calling probe function\n" if $VERBOSE;
- if (ref $probe_array ne 'ARRAY') {
- $probe_array = [ $probe_array ];
- }
- for my $func (@$probe_array) {
- return 1 if $func->($formats{$frm}, $frm);
- }
- }
+sub _probe_default {
+ my ($format, $frm) = @_;
my $lib_check=$formats{$frm}{'libcheck'};
my $inc_check=$formats{$frm}{'inccheck'};
return 0;
}
+sub checkformat {
+ my $frm=shift;
+
+ print " checkformat($frm)\n" if $VERBOSE;
+
+ my $format = $formats{$frm};
+
+ my @probes;
+ if (my $code = $format->{'code'}) {
+ if (ref $code eq 'ARRAY') {
+ push @probes, @$code;
+ }
+ else {
+ push @probes, $code;
+ }
+ }
+ push @probes, \&_probe_default;
+
+ print " Calling probe function\n" if $VERBOSE;
+ my $found;
+ for my $func (@probes) {
+ if ($func->($format, $frm)) {
+ ++$found;
+ last;
+ }
+ }
+
+ $found or return;
+
+ if ($format->{postcheck}) {
+ print " Calling postcheck function\n" if $VERBOSE;
+ $format->{postcheck}->($format, $frm)
+ or return;
+ }
+
+ return 1;
+}
+
sub pathcheck {
if ($VERBOSE) {
}
push @libs, grep -d, qw(/usr/local/lib);
- $formats{'jpeg'}={
- order=>'21',
- def=>'HAVE_LIBJPEG',
- inccheck=>sub { -e catfile($_[0], 'jpeglib.h') },
- libcheck=>sub { $_[0] eq "libjpeg$aext" or $_ eq "libjpeg.$lext" },
- libfiles=>'-ljpeg',
- objfiles=>'jpeg.o',
- docs=>q{
- In order to use jpeg with this module you need to have libjpeg
- installed on your computer}
- };
-
- $formats{'tiff'}={
- order=>'23',
- def=>'HAVE_LIBTIFF',
- inccheck=>sub { -e catfile($_[0], 'tiffio.h') },
- libcheck=>sub { $_[0] eq "libtiff$aext" or $_ eq "libtiff.$lext" },
- libfiles=>'-ltiff',
- objfiles=>'tiff.o',
- docs=>q{
- In order to use tiff with this module you need to have libtiff
- installed on your computer}
- };
-
- $formats{'png'}={
- order=>'22',
- def=>'HAVE_LIBPNG',
- inccheck=>sub { -e catfile($_[0], 'png.h') },
- libcheck=>sub { $_[0] eq "libpng$aext" or $_[0] eq "libpng.$lext" },
- libfiles=>$^O eq 'MSWin32' ? '-lpng -lzlib' : '-lpng -lz',
- objfiles=>'png.o',
- docs=>q{
- Png stands for Portable Network Graphics and is intended as
- a replacement for gif on the web. It is patent free and
- is recommended by the w3c, you need libpng to use these formats},
- code => \&png_probe,
- };
-
- $formats{'gif'}={
- order=>'20',
- def=>'HAVE_LIBGIF',
- inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
- libcheck=>sub { $_[0] eq "libgif$aext" or $_[0] eq "libgif.$lext" },
- libfiles=>'-lgif',
- objfiles=>'gif.o',
- docs=>q{
- gif is the de facto standard for webgraphics at the moment,
- it does have some patent problems. If you have giflib and
- are not in violation with the unisys patent you should use
- this instead of the 'ungif' option. Note that they cannot
- be in use at the same time}
- };
-
- $formats{'ungif'}={
- order=>'21',
- def=>'HAVE_LIBGIF',
- inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
- libcheck=>sub { $_[0] eq "libungif$aext" or $_[0] eq "libungif.$lext" },
- libfiles=>'-lungif',
- objfiles=>'gif.o',
- docs=>q{
- gif is the de facto standard for webgraphics at the moment,
- it does have some patent problems. If you have libungif and
- want to create images free from LZW patented compression you
- should use this option instead of the 'gif' option}
- };
-
- $formats{'T1-fonts'}={
- order=>'30',
- def=>'HAVE_LIBT1',
- inccheck=>sub { -e catfile($_[0], 't1lib.h') },
- libcheck=>sub { $_[0] eq "libt1$aext" or $_[0] eq "libt1.$lext" },
- libfiles=>'-lt1',
- objfiles=>'',
- docs=>q{
- postscript t1 fonts are scalable fonts. They can include
- ligatures and kerning information and generally yield good
- visual quality. We depend on libt1 to rasterize the fonts
- for use in images.}
- };
+# $formats{'jpeg'}={
+# order=>'21',
+# def=>'HAVE_LIBJPEG',
+# inccheck=>sub { -e catfile($_[0], 'jpeglib.h') },
+# libcheck=>sub { $_[0] eq "libjpeg$aext" or $_ eq "libjpeg.$lext" },
+# libfiles=>'-ljpeg',
+# objfiles=>'jpeg.o',
+# docs=>q{
+# In order to use jpeg with this module you need to have libjpeg
+# installed on your computer}
+# };
+
+# $formats{'tiff'}={
+# order=>'23',
+# def=>'HAVE_LIBTIFF',
+# inccheck=>sub { -e catfile($_[0], 'tiffio.h') },
+# libcheck=>sub { $_[0] eq "libtiff$aext" or $_ eq "libtiff.$lext" },
+# libfiles=>'-ltiff',
+# objfiles=>'tiff.o',
+# docs=>q{
+# In order to use tiff with this module you need to have libtiff
+# installed on your computer},
+# postcheck => \&postcheck_tiff,
+# };
+
+# $formats{'png'}={
+# order=>'22',
+# def=>'HAVE_LIBPNG',
+# inccheck=>sub { -e catfile($_[0], 'png.h') },
+# libcheck=>sub { $_[0] eq "libpng$aext" or $_[0] eq "libpng.$lext" },
+# libfiles=>$^O eq 'MSWin32' ? '-lpng -lzlib' : '-lpng -lz',
+# objfiles=>'png.o',
+# docs=>q{
+# Png stands for Portable Network Graphics and is intended as
+# a replacement for gif on the web. It is patent free and
+# is recommended by the w3c, you need libpng to use these formats},
+# code => \&png_probe,
+# };
+
+# $formats{'gif'}={
+# order=>'20',
+# def=>'HAVE_LIBGIF',
+# inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
+# libcheck=>sub { $_[0] eq "libgif$aext" or $_[0] eq "libgif.$lext" },
+# libfiles=>'-lgif',
+# objfiles=>'gif.o',
+# docs=>q{
+# gif is the de facto standard for webgraphics at the moment,
+# it does have some patent problems. If you have giflib and
+# are not in violation with the unisys patent you should use
+# this instead of the 'ungif' option. Note that they cannot
+# be in use at the same time}
+# };
+
+# $formats{'ungif'}={
+# order=>'21',
+# def=>'HAVE_LIBGIF',
+# inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
+# libcheck=>sub { $_[0] eq "libungif$aext" or $_[0] eq "libungif.$lext" },
+# libfiles=>'-lungif',
+# objfiles=>'gif.o',
+# docs=>q{
+# gif is the de facto standard for webgraphics at the moment,
+# it does have some patent problems. If you have libungif and
+# want to create images free from LZW patented compression you
+# should use this option instead of the 'gif' option}
+# };
+
+# $formats{'T1-fonts'}={
+# order=>'30',
+# def=>'HAVE_LIBT1',
+# inccheck=>sub { -e catfile($_[0], 't1lib.h') },
+# libcheck=>sub { $_[0] eq "libt1$aext" or $_[0] eq "libt1.$lext" },
+# libfiles=>'-lt1',
+# objfiles=>'',
+# docs=>q{
+# postscript t1 fonts are scalable fonts. They can include
+# ligatures and kerning information and generally yield good
+# visual quality. We depend on libt1 to rasterize the fonts
+# for use in images.}
+# };
$formats{'TT-fonts'}=
{
used to rasterize for us. The only drawback is that there
are alot of badly designed fonts out there.}
};
- $formats{'w32'} = {
- order=>40,
- def=>'HAVE_WIN32',
- inccheck=>sub { -e catfile($_[0], 'windows.h') },
- libcheck=>sub { lc $_[0] eq 'gdi32.lib'
- || lc $_[0] eq 'libgdi32.a' },
- libfiles=>$^O eq 'cygwin' ? '-lgdi32' : '',
- objfiles=>'win32.o',
- docs => <<DOCS
-Uses the Win32 GDI for rendering text.
-
-This currently only works on under normal Win32 and cygwin.
-DOCS
- };
- $formats{'freetype2'} =
- {
- order=>'29',
- def=>'HAVE_FT2',
- # we always use a probe function
- #inccheck=>sub { -e catfile($_[0], 'ft2build.h') },
- #libcheck=>sub { $_[0] eq "libfreetype$aext" or $_[0] eq "libfreetype.$lext" },
- libfiles=>'-lfreetype',
- objfiles=>'freetyp2.o',
- docs=><<DOCS,
-Freetype 2 supports both Truetype and Type 1 fonts, both of which are
-scalable. It also supports a variety of other fonts.
-DOCS
- code =>
- [
- \&freetype2_probe_ftconfig,
- \&freetype2_probe_scan
- ],
- };
+# $formats{'w32'} = {
+# order=>40,
+# def=>'HAVE_WIN32',
+# inccheck=>sub { -e catfile($_[0], 'windows.h') },
+# libcheck=>sub { lc $_[0] eq 'gdi32.lib'
+# || lc $_[0] eq 'libgdi32.a' },
+# libfiles=>$^O eq 'cygwin' ? '-lgdi32' : '',
+# objfiles=>'win32.o',
+# docs => <<DOCS
+# Uses the Win32 GDI for rendering text.
+
+# This currently only works on under normal Win32 and cygwin.
+# DOCS
+# };
+# $formats{'freetype2'} =
+# {
+# order=>'29',
+# def=>'HAVE_FT2',
+# # we always use a probe function
+# #inccheck=>sub { -e catfile($_[0], 'ft2build.h') },
+# #libcheck=>sub { $_[0] eq "libfreetype$aext" or $_[0] eq "libfreetype.$lext" },
+# libfiles=>'-lfreetype',
+# objfiles=>'freetyp2.o',
+# docs=><<DOCS,
+# Freetype 2 supports both Truetype and Type 1 fonts, both of which are
+# scalable. It also supports a variety of other fonts.
+# DOCS
+# code =>
+# [
+# \&freetype2_probe_ftconfig,
+# \&freetype2_probe_scan
+# ],
+# };
# Make fix indent
for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
}
+# populate the environment so that sub-modules get the same info
+sub setenv {
+ $ENV{IM_VERBOSE} = 1 if $VERBOSE;
+ $ENV{IM_INCPATH} = join $Config{path_sep}, @incpaths if @incpaths;
+ $ENV{IM_LIBPATH} = join $Config{path_sep}, @libpaths if @libpaths;
+}
+
sub make_imconfig {
my ($defines) = @_;
close CONFIG;
}
-# use pkg-config to probe for libraries
-# works around the junk that pkg-config dumps on FreeBSD
-sub _pkg_probe {
- my ($pkg) = @_;
+# # use pkg-config to probe for libraries
+# # works around the junk that pkg-config dumps on FreeBSD
+# sub _pkg_probe {
+# my ($pkg) = @_;
- is_exe('pkg-config') or return;
+# is_exe('pkg-config') or return;
- my $redir = $^O eq 'MSWin32' ? '' : '2>/dev/null';
+# my $redir = $^O eq 'MSWin32' ? '' : '2>/dev/null';
- !system("pkg-config $pkg --exists $redir");
-}
+# !system("pkg-config $pkg --exists $redir");
+# }
# probes for freetype1 by scanning @incs for the includes and
# @libs for the libs. This is done separately because freetype's headers
}
# probes for freetype2 by trying to run freetype-config
-sub freetype2_probe_ftconfig {
- my ($frm, $frmkey) = @_;
-
- is_exe('freetype-config') or return;
-
- my $cflags = `freetype-config --cflags`
- and !$? or return;
- chomp $cflags;
-
- my $lflags = `freetype-config --libs`
- and !$? or return;
- chomp $lflags;
-
- # before 2.1.5 freetype-config --cflags could output
- # the -I options in the wrong order, causing a conflict with
- # freetype1.x installed with the same --prefix
- #
- # can happen iff:
- # - both -Iprefix/include and -Iprefix/include/freetype2 are in cflags
- # in that order
- # - freetype 1.x headers are in prefix/include/freetype
- my @incdirs = map substr($_, 2), grep /^-I/, split ' ', $cflags;
- if (@incdirs == 2
- && $incdirs[1] eq "$incdirs[0]/freetype2"
- && -e "$incdirs[0]/freetype/freetype.h"
- && -e "$incdirs[0]/freetype/fterrid.h") {
- print "** freetype-config provided -I options out of order, correcting\n"
- if $VERBOSE;
- $cflags = join(' ', grep(!/-I/, split ' ', $cflags),
- map "-I$_", reverse @incdirs);
- }
- $frm->{cflags} = $cflags;
- $frm->{lflags} = $lflags;
-
- printf "%10s: configured via freetype-config\n", $frmkey;
-
- return 1;
-}
+# sub freetype2_probe_ftconfig {
+# my ($frm, $frmkey) = @_;
+
+# is_exe('freetype-config') or return;
+
+# my $cflags = `freetype-config --cflags`
+# and !$? or return;
+# chomp $cflags;
+
+# my $lflags = `freetype-config --libs`
+# and !$? or return;
+# chomp $lflags;
+
+# # before 2.1.5 freetype-config --cflags could output
+# # the -I options in the wrong order, causing a conflict with
+# # freetype1.x installed with the same --prefix
+# #
+# # can happen iff:
+# # - both -Iprefix/include and -Iprefix/include/freetype2 are in cflags
+# # in that order
+# # - freetype 1.x headers are in prefix/include/freetype
+# my @incdirs = map substr($_, 2), grep /^-I/, split ' ', $cflags;
+# if (@incdirs == 2
+# && $incdirs[1] eq "$incdirs[0]/freetype2"
+# && -e "$incdirs[0]/freetype/freetype.h"
+# && -e "$incdirs[0]/freetype/fterrid.h") {
+# print "** freetype-config provided -I options out of order, correcting\n"
+# if $VERBOSE;
+# $cflags = join(' ', grep(!/-I/, split ' ', $cflags),
+# map "-I$_", reverse @incdirs);
+# }
+# $frm->{cflags} = $cflags;
+# $frm->{lflags} = $lflags;
+
+# printf "%10s: configured via freetype-config\n", $frmkey;
+
+# return 1;
+# }
# attempt to probe for freetype2 by scanning directories
# we can't use the normal scan since we need to find the directory
# containing most of the includes
-sub freetype2_probe_scan {
- my ($frm, $frmkey) = @_;
-
- my $found_inc;
- my $found_inc2;
- INCS:
- for my $inc (@incs) {
- my $path = File::Spec->catfile($inc, 'ft2build.h');
- -e $path or next;
-
- # try to find what it's including
- my $ftheader;
- open FT2BUILD, "< $path"
- or next;
- while (<FT2BUILD>) {
- if (m!^\s*\#\s*include\s+<([\w/.]+)>!
- || m!^\s*\#\s*include\s+"([\w/.]+)"!) {
- $ftheader = $1;
- last;
- }
- }
- close FT2BUILD;
- $ftheader
- or next;
- # non-Unix installs put this directly under the same directory in
- # theory
- if (-e File::Spec->catfile($inc, $ftheader)) {
- $found_inc = $inc;
- last INCS;
- }
- for my $subdir (qw/freetype2 freetype/) {
- $path = File::Spec->catfile($inc, $subdir, 'fterrors.h');
- -e $path and next;
-
- $found_inc = $inc;
- $found_inc2 = File::Spec->catdir($inc, $subdir);
- last INCS;
- }
- }
-
- my $found_lib;
- LIBS:
- for my $lib (@libs) {
- my $a_path = File::Spec->catfile($lib, "libfreetype$aext");
- my $l_path = File::Spec->catfile($lib, "libfreetype.$lext");
- if (-e $a_path || -e $l_path) {
- $found_lib = $lib;
- last LIBS;
- }
- }
-
- printf("%10s: includes %s - libraries %s\n", $frmkey,
- ($found_inc ? 'found' : 'not found'),
- ($found_lib ? 'found' : 'not found'));
-
- return unless $found_inc && $found_lib;
-
- $frm->{cflags} = _make_I($found_inc);
- $frm->{cflags} .= " " . _make_I($found_inc2) if $found_inc2;
- $frm->{libfiles} = "-lfreetype";
-
- return 1;
-}
+# sub freetype2_probe_scan {
+# my ($frm, $frmkey) = @_;
+
+# my $found_inc;
+# my $found_inc2;
+# INCS:
+# for my $inc (@incs) {
+# my $path = File::Spec->catfile($inc, 'ft2build.h');
+# -e $path or next;
+
+# # try to find what it's including
+# my $ftheader;
+# open FT2BUILD, "< $path"
+# or next;
+# while (<FT2BUILD>) {
+# if (m!^\s*\#\s*include\s+<([\w/.]+)>!
+# || m!^\s*\#\s*include\s+"([\w/.]+)"!) {
+# $ftheader = $1;
+# last;
+# }
+# }
+# close FT2BUILD;
+# $ftheader
+# or next;
+# # non-Unix installs put this directly under the same directory in
+# # theory
+# if (-e File::Spec->catfile($inc, $ftheader)) {
+# $found_inc = $inc;
+# last INCS;
+# }
+# for my $subdir (qw/freetype2 freetype/) {
+# $path = File::Spec->catfile($inc, $subdir, 'fterrors.h');
+# -e $path and next;
+
+# $found_inc = $inc;
+# $found_inc2 = File::Spec->catdir($inc, $subdir);
+# last INCS;
+# }
+# }
+
+# my $found_lib;
+# LIBS:
+# for my $lib (@libs) {
+# my $a_path = File::Spec->catfile($lib, "libfreetype$aext");
+# my $l_path = File::Spec->catfile($lib, "libfreetype.$lext");
+# if (-e $a_path || -e $l_path) {
+# $found_lib = $lib;
+# last LIBS;
+# }
+# }
+
+# printf("%10s: includes %s - libraries %s\n", $frmkey,
+# ($found_inc ? 'found' : 'not found'),
+# ($found_lib ? 'found' : 'not found'));
+
+# return unless $found_inc && $found_lib;
+
+# $frm->{cflags} = _make_I($found_inc);
+# $frm->{cflags} .= " " . _make_I($found_inc2) if $found_inc2;
+# $frm->{libfiles} = "-lfreetype";
+
+# return 1;
+# }
sub _make_I {
my ($inc_dir) = @_;
}
# probes for libpng via pkg-config
-sub png_probe {
- my ($frm, $frmkey) = @_;
+# sub png_probe {
+# my ($frm, $frmkey) = @_;
- is_exe('pkg-config') or return;
+# is_exe('pkg-config') or return;
- my $config;
- for my $check_conf (qw(libpng libpng12 libpng10)) {
- if (_pkg_probe($check_conf)) {
- $config = $check_conf;
- last;
- }
- }
- $config or return;
+# my $config;
+# for my $check_conf (qw(libpng libpng12 libpng10)) {
+# if (_pkg_probe($check_conf)) {
+# $config = $check_conf;
+# last;
+# }
+# }
+# $config or return;
- my $cflags = `pkg-config $config --cflags`
- and !$? or return;
+# my $cflags = `pkg-config $config --cflags`
+# and !$? or return;
- my $lflags = `pkg-config $config --libs`
- and !$? or return;
+# my $lflags = `pkg-config $config --libs`
+# and !$? or return;
- chomp $cflags;
- chomp $lflags;
- $frm->{cflags} = $cflags;
- $frm->{lflags} = $lflags;
+# chomp $cflags;
+# chomp $lflags;
+# $frm->{cflags} = $cflags;
+# $frm->{lflags} = $lflags;
- printf "%10s: configured via `pkg-config $config ...`\n", $frmkey;
+# printf "%10s: configured via `pkg-config $config ...`\n", $frmkey;
- return 1;
-}
+# return 1;
+# }
sub catfile {
return File::Spec->catfile(@_);
}
-sub is_exe {
- my ($name) = @_;
+# sub is_exe {
+# my ($name) = @_;
- for my $dir (File::Spec->path) {
- -x catfile($dir, "$name$Config{_exe}")
- and return 1;
- }
+# my @exe_suffix = $Config{_exe};
+# if ($^O eq 'MSWin32') {
+# push @exe_suffix, qw/.bat .cmd/;
+# }
- return;
-}
+# for my $dir (File::Spec->path) {
+# for my $suffix (@exe_suffix) {
+# -x catfile($dir, "$name$suffix")
+# and return 1;
+# }
+# }
+
+# return;
+# }
sub usage {
print STDERR <<EOS;
$0 [--disable feature1,feature2,...] [other options]
$0 --help
Possible feature names are:
- png gif ungif jpeg tiff T1-fonts TT-fonts freetype2
+ T1-fonts TT-fonts freetype2
Other options:
--verbose | -v
Verbose library probing (or set IM_VERBOSE in the environment)
Add to the include search path
--libpath dir
Add to the library search path
+ --coverage
+ Build for coverage testing.
+ --assert
+ Build with assertions active.
EOS
exit 1;
\%pm;
}
-sub make_metafile {
- my ($opts) = @_;
-
- # extract the version
- my $version = MM->parse_version($opts->{VERSION_FROM})
- or die "Could not extract version number from $opts->{VERSION_FROM}\n";
-
- # we don't set this on older EU::MM and it corrupts META.yml
- # so don't generate it
- return unless $opts->{AUTHOR};
-
- my $meta = <<YAML;
---- #YAML:1.0
-name: $opts->{NAME}
-version: $version
-version_from: $opts->{VERSION_FROM}
-author:
-YAML
- for my $author (split /,\s*/, $opts->{AUTHOR}) {
- $meta .= " - $author\n";
- }
- $meta .= <<YAML;
-abstract: $opts->{ABSTRACT}
-installdirs: site
-YAML
- if (keys %{$Recommends{$opts->{NAME}}}) {
- $meta .= "recommends:\n";
- while (my ($module, $version) = each %{$Recommends{$opts->{NAME}}}) {
- $meta .= " $module: $version\n";
- }
- }
- if ($opts->{PREREQ_PM}) {
- $meta .= "requires:\n";
- while (my ($module, $version) = each %{$opts->{PREREQ_PM}}) {
- $meta .= " $module: $version\n";
- }
- }
- $meta .= <<YAML;
-license: perl
-dynamic_config: 1
-distribution_type: module
-meta-spec:
- version: 1.3
- url: http://module-build.sourceforge.net/META-spec-v1.3.html
-generated_by: $opts->{NAME} version $version
-YAML
- my $save_meta;
- if (open META, "< META.yml") {
- my $old_meta = do { local $/; <META> };
- close META;
-
- $save_meta = $old_meta ne $meta;
- }
- else {
- ++$save_meta;
- }
- if ($save_meta) {
- print "Updating META.yml\n";
- open META, "> META.yml" or die "Cannot create META.yml: $!";
- print META $meta;
- close META;
- }
-}
-
my $home;
sub _tilde_expand {
my ($path) = @_;
$path;
}
+# sub postcheck_tiff {
+# my ($format, $frm) = @_;
+
+# -d "probe" or mkdir "probe";
+
+# my $tiffver_name = "probe/tiffver.txt";
+
+# my $lib;
+# if ($Config{cc} =~ /\b(cl|bcc)\b/) {
+# $lib = "libtiff";
+# }
+# else {
+# $lib = "tiff";
+# }
+
+# # setup LD_RUN_PATH to match link time
+# my $lopts = join " " , map("-L$_", @{$format->{libdir}}), " -ltiff";
+# my ($extra, $bs_load, $ld_load, $ld_run_path) =
+# ExtUtils::Liblist->ext($lopts, $VERBOSE);
+# local $ENV{LD_RUN_PATH};
+
+# if ($ld_run_path) {
+# print "Setting LD_RUN_PATH=$ld_run_path for TIFF probe\n" if $VERBOSE;
+# $ENV{LD_RUN_PATH} = $ld_run_path;
+# }
+
+# my $good =
+# eval {
+# assert_lib
+# (
+# debug => $VERBOSE,
+# incpath => $format->{incdir},
+# libpath => $format->{libdir},
+# lib => $lib,
+# header => [ qw(stdio.h tiffio.h) ],
+# function => <<FUNCTION,
+# {
+# const char *vers = TIFFGetVersion();
+# FILE *f = fopen("$tiffver_name", "wb");
+# if (!f)
+# return 1;
+# fputs(vers, f);
+# if (fclose(f))
+# return 1;
+# return 0;
+# }
+# FUNCTION
+# );
+# 1;
+# };
+
+# unless ($good && -s $tiffver_name
+# && open(VERS, "< $tiffver_name")) {
+# unlink $tiffver_name unless $KEEP_FILES;
+# print <<EOS;
+# **tiff: cannot determine libtiff version number
+# tiff: DISABLED
+# EOS
+# return;
+# }
+
+# # version file seems to be there, load it up
+# my $ver_str = do { local $/; <VERS> };
+# close VERS;
+# unlink $tiffver_name unless $KEEP_FILES;
+
+# my ($version) = $ver_str =~ /(\d+\.\d+\.\d+)/;
+
+# if ($version eq '3.9.0') {
+# print <<EOS;
+# **tiff: libtiff 3.9.0 introduced a serious bug, please install 3.9.1
+# tiff: DISABLED
+# EOS
+# return;
+# }
+
+# return 1;
+# }
+
# This isn't a module, but some broken tools, like
# Module::Depends::Instrusive insist on treating it like one.
#