Imager
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
# used to display a summary after we've probed the world
our %IMAGER_LIBS;
#
# IM_INCPATH colon seperated list of paths to extra include paths
# IM_LIBPATH colon seperated list of paths to extra library paths
#
# IM_VERBOSE turns on verbose mode for the library finding and such
# IM_MANUAL to manually select which libraries are used and which not
# IM_ENABLE to programmatically select which libraries are used
# and which are not
# IM_NOLOG if true logging will not be compiled into the module
# IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module
# do not use IM_DEBUG_MALLOC in production - this slows
# everything down by alot
# 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
my $KEEP_FILES = $ENV{IMAGER_KEEP_FILES};
# make sure --verbose will dump environment settings
if (grep $_ =~ /^--?v(?:erbose)?$/, @ARGV) {
$VERBOSE = 1;
}
# modules/features bundled with Imager that can be enabled/disabled
# withs --enable/--disable
my @bundled = qw(FT1 FT2 GIF JPEG PNG T1 TIFF W32);
# extra modules bundled with Imager not available on CPAN
my @extras = qw(CountColor DynTest ICO SGI Mandelbrot Flines);
# alternate names for modules
my %bundled_names = qw(win32 w32 tt ft1);
getenv(); # get environment variables
my $lext=$Config{'so'}; # Get extensions of libraries
my $aext=$Config{'_a'};
my $help; # display help if set
my @enable; # list of drivers to enable
my @disable; # or list of drivers to disable
my @incpaths; # places to look for headers
my @libpaths; # places to look for libraries
my $coverage; # build for coverage testing
my $assert; # build with assertions
my $trace_context; # trace context management to stderr
GetOptions("help" => \$help,
"enable=s" => \@enable,
"disable=s" => \@disable,
"incpath=s", \@incpaths,
"libpath=s" => \@libpaths,
"verbose|v" => \$VERBOSE,
"nolog" => \$NOLOG,
'coverage' => \$coverage,
"assert|a" => \$assert,
"tracecontext" => \$trace_context);
setenv();
if ($ENV{AUTOMATED_TESTING}) {
$assert = 1;
}
if ($VERBOSE) {
print "Verbose mode\n";
require Data::Dumper;
import Data::Dumper qw(Dumper);
}
if ($help) {
usage();
}
my @defines;
if ($NOLOG) { print "Logging not compiled into module\n"; }
else {
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";
}
if (@enable && @disable) {
print STDERR "Only --enable or --disable can be used, not both, try --help\n";
exit 1;
}
if (!@enable && !@disable) {
@disable = qw(T1 FT1);
}
my %definc;
my %deflib;
my @incs; # all the places to look for headers
my @libs; # all the places to look for libraries
init(); # initialize global data
pathcheck(); # Check if directories exist
my @enabled_bundled;
if (exists $ENV{IM_ENABLE}) {
push @enable, split ' ', $ENV{IM_ENABLE};
}
if (@enable) {
my %en = map { lc $_ => 1 } map_bundled(@enable);
@enabled_bundled = grep $en{lc $_}, @bundled;
}
elsif (@disable) {
my %dis = map { lc $_ => 1 } map_bundled(@disable);
@enabled_bundled = grep !$dis{lc $_}, @bundled;
}
else {
Makefile.PL view on Meta::CPAN
split ' ', $Config{ldflags};
push @libs, @hidden;
# don't mark them as seen - EU::MM will remove any libraries
# it can't find and it doesn't look for -L in ldflags
#@deflib{@hidden} = @hidden;
}
push @libs, grep -d, qw(/usr/local/lib);
$formats{FT1}=
{
order=>'31',
def=>'HAVE_LIBTT',
objfiles=>'fontft1.o',
LIBS => "-lttf",
docs=>q{
Freetype 1.x supports Truetype fonts and is obsoleted by Freetype 2.x.
It's probably insecure.
}
};
# Make fix indent
for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
}
sub gen {
my $V = $ENV{$_[0]};
print " $_[0]: '$V'\n"
if $VERBOSE && defined $V;
defined($V) ? $V : "";
}
# Get information from environment variables
sub getenv {
$VERBOSE ||= gen("IM_VERBOSE");
print "Environment config:\n" if $VERBOSE;
($INCPATH,
$LIBPATH,
$NOLOG,
$DEBUG_MALLOC,
$MANUAL,
$CFLAGS,
$LFLAGS,
$DFLAGS) = map { gen $_ } qw(IM_INCPATH
IM_LIBPATH
IM_NOLOG
IM_DEBUG_MALLOC
IM_MANUAL
IM_CFLAGS
IM_LFLAGS
IM_DFLAGS);
}
# 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) = @_;
open my $config, "> imconfig.h"
or die "Cannot create imconfig.h: $!\n";
print $config <<EOS;
/* This file is automatically generated by Makefile.PL.
Don't edit this file, since any changes will be lost */
#ifndef IMAGER_IMCONFIG_H
#define IMAGER_IMCONFIG_H
#ifdef __cplusplus
extern "C" {
#endif
EOS
for my $define (@$defines) {
if ($define->[2]) {
print $config "\n/*\n $define->[2]\n*/\n\n";
}
print $config "#define $define->[0] $define->[1]\n";
}
if ($Config{gccversion} && $Config{gccversion} =~ /^([0-9]+)/ && $1 > 3) {
print $config <<EOS;
/*
Compiler supports the GCC __attribute__((format...)) syntax.
*/
#define IMAGER_FORMAT_ATTR 1
EOS
}
if ($Config{d_snprintf}) {
print $config <<EOS;
/* We can use snprintf() */
#define IMAGER_SNPRINTF 1
EOS
}
if ($Config{d_vsnprintf}) {
print $config <<EOS;
/* We can use vsnprintf() */
#define IMAGER_VSNPRINTF 1
EOS
}
print $config <<EOS;
/*
Type and format code for formatted output as with printf.
( run in 0.414 second using v1.01-cache-2.11-cpan-140bd7fdf52 )