2 use ExtUtils::MakeMaker;
6 $lext=$Config{'so'}; # Get extensions of libraries
10 # IM_INCPATH colon seperated list of paths to extra include paths
11 # IM_LIBPATH colon seperated list of paths to extra library paths
13 # IM_VERBOSE turns on verbose mode for the library finding and such
14 # IM_MANUAL to manually select which libraries are used and which not
15 # IM_ENABLE to programmatically select which libraries are used
17 # IM_NOLOG if true logging will not be compiled into the module
18 # IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module
19 # do not use IM_DEBUG_MALLOC in production - this slows
20 # everything down by alot
21 # IM_CFLAGS Extra flags to pass to the compiler
22 # IM_LFLAGS Extra flags to pass to the linker
23 # IM_DFLAGS Extra flags to pass to the preprocessor
26 getenv(); # get environment variables
27 init(); # initialize global data
28 pathcheck(); # Check if directories exist
30 # Pick what libraries are used
35 if (exists $ENV{IM_ENABLE}) {
36 my %en = map { $_, 1 } split ' ', $ENV{IM_ENABLE};
37 for my $key (keys %formats) {
38 delete $formats{$key} unless $en{$key};
43 # Make sure there isn't a clash between the gif libraries.
46 for $frm(values %formats) {
47 $F_DEFINE .= ' -D'.$frm->{def};
48 $F_LIBS .= ' ' .$frm->{libfiles};
49 $F_OBJECT .= ' ' .$frm->{objfiles};
52 $F_INC = join(" ",map { (exists $definc{$_})?'':'-I'.$_ } @incs);
53 $F_LIBS = join(" ",map { '-L'.$_ } @libs).' '.$F_LIBS;
58 if ($^O eq 'hpux') { $OSLIBS .= ' -ldld'; }
59 if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; }
61 @objs = qw(Imager.o draw.o image.o io.o iolayer.o log.o
62 gaussian.o conv.o pnm.o raw.o feat.o font.o
63 filters.o dynaload.o stackmach.o datatypes.o
64 regmach.o trans2.o quant.o error.o convert.o
69 'VERSION_FROM' => 'Imager.pm',
70 'LIBS' => "$LFLAGS -lm $OSLIBS $F_LIBS",
71 'DEFINE' => "$F_DEFINE $EXTDEF $OSDEF $CFLAGS",
72 'INC' => "$DFLAGS $F_INC",
73 'OBJECT' => join(' ', @objs, $F_OBJECT),
74 clean => { FILES=>'testout' },
78 $opts{AUTHOR} = 'Arnar M. Hrafnkelsson, addi@umich.edu';
79 $opts{ABSTRACT} = 'Perl extension for Generating 24 bit Images';
82 if ($VERBOSE) { print Dumper(\%opts); }
83 mkdir('testout',0777); # since we cannot include it in the archive.
91 dyntest.(MYEXTLIB) : dynfilt/Makefile
92 cd dynfilt && $(MAKE) $(PASTHRU)
94 lib/Imager/Regops.pm : regmach.h regops.perl
95 $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
99 # manual configuration of helper libraries
104 Please answer the following questions about
105 which formats are avaliable on your computer
107 press <return> to continue
110 <STDIN>; # eat one return
112 for $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) {
114 if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; }
115 print "Enable $frm support: ";
118 if ($gz =~ m/^(y|yes|n|no)/i) {
119 $gz=substr(lc($gz),0,1);
121 delete $formats{$frm};
128 # automatic configuration of helper libraries
131 for $frm(keys %formats) {
132 delete $formats{$frm} if !checkformat($frm);
138 if ($formats{'gif'} and $formats{'ungif'}) {
139 print "ungif and gif can not coexist - removing ungif support\n";
140 delete $formats{'ungif'};
143 for my $frm (grep $formats{$_}, qw(gif ungif)) {
144 push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
148 FILES: for my $dir (@dirs) {
149 my $h = "$dir/gif_lib.h";
150 open H, "< $h" or next;
152 if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
162 # we need the version in a #ifdefable form
164 $F_DEFINE .= "-DIM_GIFMAJOR=$major -DIM_GIFMINOR=$minor";
171 # print "checking path $path\n";
172 if ( !opendir(DH,$path) ) {
173 warn "Cannot open dir $path: $!\n";
176 my @l=grep { $chk->($_) } readdir(DH);
179 return map $path, @l;
185 my $libchk=$formats{$frm}{'libcheck'};
186 my $incchk=$formats{$frm}{'inccheck'};
190 push(@l, gd($lp,$libchk));
195 push(@i, gd($ip,$incchk));
198 printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found'));
199 $formats{$frm}{incdir} = \@i;
200 $formats{$frm}{libdir} = \@l;
201 return scalar(@i && @l);
210 print " Include paths:\n";
211 for (@incs) { print $_,"\n"; }
213 @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @incs;
216 print "\nLibrary paths:\n";
217 for (@incs) { print $_,"\n"; }
219 @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @libs;
224 # Format data initialization
226 # format definition is:
228 # default include path
229 # files needed for include (boolean perl code)
232 # files needed for link (boolean perl code)
233 # object files needed for the format
238 @definc{'/usr/include'}=();
239 @incs=(qw(/usr/include /usr/local/include /usr/include/freetype /usr/local/include/freetype), split /:/, $INCPATH );
240 @libs=(split(/ /, $Config{'libpth'}), split(/:/, $LIBPATH) );
241 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
242 push(@incs, split /;/, $ENV{INCLUDE}) if exists $ENV{INCLUDE};
243 push(@libs, split /;/, $ENV{LIB}) if exists $ENV{LIB};
249 inccheck=>sub { $_[0] eq 'jpeglib.h' },
250 libcheck=>sub { $_[0] eq "libjpeg$aext" or $_ eq "libjpeg.$lext" },
254 In order to use jpeg with this module you need to have libjpeg
255 installed on your computer}
261 inccheck=>sub { $_[0] eq 'tiffio.h' },
262 libcheck=>sub { $_[0] eq "libtiff$aext" or $_ eq "libtiff.$lext" },
266 In order to use tiff with this module you need to have libtiff
267 installed on your computer}
273 inccheck=>sub { $_[0] eq 'png.h' },
274 libcheck=>sub { $_[0] eq "libpng$aext" or $_[0] eq "libpng.$lext" },
275 libfiles=>'-lpng -lz',
278 Png stands for Portable Network Graphics and is intended as
279 a replacement for gif on the web. It is patent free and
280 is recommended by the w3c, you need libpng to use these formats}
286 inccheck=>sub { $_[0] eq 'gif_lib.h' },
287 libcheck=>sub { $_[0] eq "libgif$aext" or $_[0] eq "libgif.$lext" },
291 gif is the de facto standard for webgraphics at the moment,
292 it does have some patent problems. If you have giflib and
293 are not in violation with the unisys patent you should use
294 this instead of the 'ungif' option. Note that they cannot
295 be in use at the same time}
301 inccheck=>sub { $_[0] eq 'gif_lib.h' },
302 libcheck=>sub { $_[0] eq "libungif$aext" or $_[0] eq "libungif.$lext" },
306 gif is the de facto standard for webgraphics at the moment,
307 it does have some patent problems. If you have libungif and
308 want to create images free from LZW patented compression you
309 should use this option instead of the 'gif' option}
312 $formats{'T1-fonts'}={
315 inccheck=>sub { $_[0] eq 't1lib.h' },
316 libcheck=>sub { $_[0] eq 'libt1.a' or $_[0] eq "libt1.$lext" },
320 postscript t1 fonts are scalable fonts. They can include
321 ligatures and kerning information and generally yield good
322 visual quality. We depend on libt1 to rasterize the fonts
326 $formats{'TT-fonts'}={
329 inccheck=>sub { $_[0] eq 'freetype.h' },
330 libcheck=>sub { $_[0] eq 'libttf.a' or $_[0] eq "libttf.$lext" },
334 Truetype fonts are scalable fonts. They can include
335 kerning and hinting information and generally yield good
336 visual quality esp on low resultions. The freetype library is
337 used to rasterize for us. The only drawback is that there
338 are alot of badly designed fonts out there.}
341 for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
348 defined($V) ? $V : "";
352 # Get information from environment variables
364 $DFLAGS) = map { gen $_ } qw(IM_VERBOSE
374 if ($VERBOSE) { print "Verbose mode\n"; require Data::Dumper; import Data::Dumper qw(Dumper);}
376 if ($NOLOG) { print "Logging not compiled into module\n"; }
377 else { $EXTDEF.=' -DIMAGER_LOG'; }
380 $EXTDEF.=' -DIMAGER_DEBUG_MALLOC';
381 print "Malloc debugging enabled\n";