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);
68 'VERSION_FROM' => 'Imager.pm',
69 'LIBS' => "$LFLAGS -lm $OSLIBS $F_LIBS",
70 'DEFINE' => "$F_DEFINE $EXTDEF $OSDEF $CFLAGS",
71 'INC' => "$DFLAGS $F_INC",
72 'OBJECT' => join(' ', @objs, $F_OBJECT)
76 $opts{AUTHOR} = 'Arnar M. Hrafnkelsson, addi@umich.edu';
77 $opts{ABSTRACT} = 'Perl extension for Generating 24 bit Images';
80 if ($VERBOSE) { print Dumper(\%opts); }
81 mkdir('testout',0777); # since we cannot include it in the archive.
88 dyntest.(MYEXTLIB) : dynfilt/Makefile
89 cd dynfilt && $(MAKE) $(PASTHRU)
91 lib/Imager/Regops.pm : regmach.h regops.perl
92 $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
96 # manual configuration of helper libraries
101 Please answer the following questions about
102 which formats are avaliable on your computer
104 press <return> to continue
107 <STDIN>; # eat one return
109 for $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) {
111 if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; }
112 print "Enable $frm support: ";
115 if ($gz =~ m/^(y|yes|n|no)/i) {
116 $gz=substr(lc($gz),0,1);
118 delete $formats{$frm};
125 # automatic configuration of helper libraries
128 for $frm(keys %formats) {
129 delete $formats{$frm} if !checkformat($frm);
135 if ($formats{'gif'} and $formats{'ungif'}) {
136 print "ungif and gif can not coexist - removing ungif support\n";
137 delete $formats{'ungif'};
140 for my $frm (grep $formats{$_}, qw(gif ungif)) {
141 push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
145 FILES: for my $dir (@dirs) {
146 my $h = "$dir/gif_lib.h";
147 open H, "< $h" or next;
149 if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
159 # we need the version in a #ifdefable form
161 $F_DEFINE .= "-DIM_GIFMAJOR=$major -DIM_GIFMINOR=$minor";
168 # print "checking path $path\n";
169 if ( !opendir(DH,$path) ) {
170 warn "Cannot open dir $path: $!\n";
173 my @l=grep { $chk->($_) } readdir(DH);
176 return map $path, @l;
182 my $libchk=$formats{$frm}{'libcheck'};
183 my $incchk=$formats{$frm}{'inccheck'};
187 push(@l, gd($lp,$libchk));
192 push(@i, gd($ip,$incchk));
195 printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found'));
196 $formats{$frm}{incdir} = \@i;
197 $formats{$frm}{libdir} = \@l;
198 return scalar(@i && @l);
207 print " Include paths:\n";
208 for (@incs) { print $_,"\n"; }
210 @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @incs;
213 print "\nLibrary paths:\n";
214 for (@incs) { print $_,"\n"; }
216 @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed."),0) } @libs;
221 # Format data initialization
223 # format definition is:
225 # default include path
226 # files needed for include (boolean perl code)
229 # files needed for link (boolean perl code)
230 # object files needed for the format
235 @definc{'/usr/include'}=();
236 @incs=(qw(/usr/include /usr/local/include /usr/include/freetype /usr/local/include/freetype), split /:/, $INCPATH );
237 @libs=(split(/ /, $Config{'libpth'}), split(/:/, $LIBPATH) );
238 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
239 push(@incs, split /;/, $ENV{INCLUDE}) if exists $ENV{INCLUDE};
240 push(@libs, split /;/, $ENV{LIB}) if exists $ENV{LIB};
246 inccheck=>sub { $_[0] eq 'jpeglib.h' },
247 libcheck=>sub { $_[0] eq "libjpeg$aext" or $_ eq "libjpeg.$lext" },
251 In order to use jpeg with this module you need to have libjpeg
252 installed on your computer}
258 inccheck=>sub { $_[0] eq 'tiffio.h' },
259 libcheck=>sub { $_[0] eq "libtiff$aext" or $_ eq "libtiff.$lext" },
263 In order to use tiff with this module you need to have libtiff
264 installed on your computer}
270 inccheck=>sub { $_[0] eq 'png.h' },
271 libcheck=>sub { $_[0] eq "libpng$aext" or $_[0] eq "libpng.$lext" },
272 libfiles=>'-lpng -lz',
275 Png stands for Portable Network Graphics and is intended as
276 a replacement for gif on the web. It is patent free and
277 is recommended by the w3c, you need libpng to use these formats}
283 inccheck=>sub { $_[0] eq 'gif_lib.h' },
284 libcheck=>sub { $_[0] eq "libgif$aext" or $_[0] eq "libgif.$lext" },
288 gif is the de facto standard for webgraphics at the moment,
289 it does have some patent problems. If you have giflib and
290 are not in violation with the unisys patent you should use
291 this instead of the 'ungif' option. Note that they cannot
292 be in use at the same time}
298 inccheck=>sub { $_[0] eq 'gif_lib.h' },
299 libcheck=>sub { $_[0] eq "libungif$aext" or $_[0] eq "libungif.$lext" },
303 gif is the de facto standard for webgraphics at the moment,
304 it does have some patent problems. If you have libungif and
305 want to create images free from LZW patented compression you
306 should use this option instead of the 'gif' option}
309 $formats{'T1-fonts'}={
312 inccheck=>sub { $_[0] eq 't1lib.h' },
313 libcheck=>sub { $_[0] eq 'libt1.a' or $_[0] eq "libt1.$lext" },
317 postscript t1 fonts are scalable fonts. They can include
318 ligatures and kerning information and generally yield good
319 visual quality. We depend on libt1 to rasterize the fonts
323 $formats{'TT-fonts'}={
326 inccheck=>sub { $_[0] eq 'freetype.h' },
327 libcheck=>sub { $_[0] eq 'libttf.a' or $_[0] eq "libttf.$lext" },
331 Truetype fonts are scalable fonts. They can include
332 kerning and hinting information and generally yield good
333 visual quality esp on low resultions. The freetype library is
334 used to rasterize for us. The only drawback is that there
335 are alot of badly designed fonts out there.}
338 for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
345 defined($V) ? $V : "";
349 # Get information from environment variables
361 $DFLAGS) = map { gen $_ } qw(IM_VERBOSE
371 if ($VERBOSE) { print "Verbose mode\n"; require Data::Dumper; import Data::Dumper qw(Dumper);}
373 if ($NOLOG) { print "Logging not compiled into module\n"; }
374 else { $EXTDEF.=' -DIMAGER_LOG'; }
377 $EXTDEF.=' -DIMAGER_DEBUG_MALLOC';
378 print "Malloc debugging enabled\n";