Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 759 lines (627 sloc) 18.965 kb
ea9e6c3 - the Win32 font driver now uses DEFAULT_CHARSET rather than
Tony Cook authored
1 #!perl -w
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
2 use strict;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
3 use ExtUtils::MakeMaker;
4 use Cwd;
5 use Config;
07ea6c2 - Makefile.PL now attempts to use freetype-config to configure freetype ...
Tony Cook authored
6 use File::Spec;
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
7 use Getopt::Long;
92bda63 - start of external Imager API access:
Tony Cook authored
8 use ExtUtils::Manifest qw(maniread);
10b8592 when probing for TIFF, set LD_RUN_PATH just as the Makefile does so
Tony Cook authored
9 use ExtUtils::Liblist;
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
10 use vars qw(%formats $VERBOSE $INCPATH $LIBPATH $NOLOG $DEBUG_MALLOC $MANUAL $CFLAGS $LFLAGS $DFLAGS);
812ae05 extract the installed tifflib version and don't use tifflib if it's
Tony Cook authored
11 use lib 'inc';
12 use Devel::CheckLib;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
13
1d7e312 merge PNG branch and some clean-up
Tony Cook authored
14 # EU::MM runs Makefile.PL all in the same process, so sub-modules will
15 # see this
16 our $BUILDING_IMAGER = 1;
17
d97c8db @tonycoz [RT #9675] add the library detection summary back in and improve it
authored
18 # used to display a summary after we've probed the world
19 our %IMAGER_LIBS;
20
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
21 #
22 # IM_INCPATH colon seperated list of paths to extra include paths
23 # IM_LIBPATH colon seperated list of paths to extra library paths
24 #
25 # IM_VERBOSE turns on verbose mode for the library finding and such
26 # IM_MANUAL to manually select which libraries are used and which not
27 # IM_ENABLE to programmatically select which libraries are used
28 # and which are not
29 # IM_NOLOG if true logging will not be compiled into the module
30 # IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module
31 # do not use IM_DEBUG_MALLOC in production - this slows
32 # everything down by alot
33 # IM_CFLAGS Extra flags to pass to the compiler
34 # IM_LFLAGS Extra flags to pass to the linker
35 # IM_DFLAGS Extra flags to pass to the preprocessor
36
812ae05 extract the installed tifflib version and don't use tifflib if it's
Tony Cook authored
37 my $KEEP_FILES = $ENV{IMAGER_KEEP_FILES};
38
855c580 - fixes to verbose mode in Makefile.PL, also added a -v switch so you
Tony Cook authored
39 getenv(); # get environment variables
40
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
41 my $lext=$Config{'so'}; # Get extensions of libraries
42 my $aext=$Config{'_a'};
43
44 my $help; # display help if set
45 my @enable; # list of drivers to enable
46 my @disable; # or list of drivers to disable
47 my @incpaths; # places to look for headers
48 my @libpaths; # places to look for libraries
1ef586b simpler creation of coverage reports
Tony Cook authored
49 my $coverage; # build for coverage testing
b3afeed - an integer division meant that preview scaling to below 1 pixel
Tony Cook authored
50 my $assert; # build with assertions
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
51 GetOptions("help" => \$help,
52 "enable=s" => \@enable,
53 "disable=s" => \@disable,
54 "incpath=s", \@incpaths,
55 "libpath=s" => \@libpaths,
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
56 "verbose|v" => \$VERBOSE,
f745047 - added experimental EXIF decoding when reading JPEG files.
Tony Cook authored
57 "nolog" => \$NOLOG,
b3afeed - an integer division meant that preview scaling to below 1 pixel
Tony Cook authored
58 'coverage' => \$coverage,
59 "assert|a" => \$assert);
60
1d7e312 merge PNG branch and some clean-up
Tony Cook authored
61 setenv();
62
b3afeed - an integer division meant that preview scaling to below 1 pixel
Tony Cook authored
63 if ($ENV{AUTOMATED_TESTING}) {
64 $assert = 1;
65 }
855c580 - fixes to verbose mode in Makefile.PL, also added a -v switch so you
Tony Cook authored
66
67 if ($VERBOSE) {
68 print "Verbose mode\n";
69 require Data::Dumper;
70 import Data::Dumper qw(Dumper);
71 }
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
72
73 if ($help) {
74 usage();
75 }
76
f745047 - added experimental EXIF decoding when reading JPEG files.
Tony Cook authored
77 my @defines;
78
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
79 if ($NOLOG) { print "Logging not compiled into module\n"; }
80 else {
81 push @defines, [ IMAGER_LOG => 1, "Logging system" ];
82 }
83
b3afeed - an integer division meant that preview scaling to below 1 pixel
Tony Cook authored
84 if ($assert) {
85 push @defines, [ IM_ASSERT => 1, "im_assert() are effective" ];
86 }
87
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
88 if ($DEBUG_MALLOC) {
89 push @defines, [ IMAGER_DEBUG_MALLOC => 1, "Use Imager's DEBUG malloc()" ];
90 print "Malloc debugging enabled\n";
91 }
92
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
93 if (@enable && @disable) {
94 print STDERR "Only --enable or --disable can be used, not both, try --help\n";
95 exit 1;
96 }
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
97
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
98 my %definc;
99 my %deflib;
100 my @incs; # all the places to look for headers
101 my @libs; # all the places to look for libraries
102
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
103 init(); # initialize global data
104 pathcheck(); # Check if directories exist
105
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
106 if (exists $ENV{IM_ENABLE}) {
107 my %en = map { $_, 1 } split ' ', $ENV{IM_ENABLE};
108 for my $key (keys %formats) {
109 delete $formats{$key} unless $en{$key};
110 }
111 }
112 if (@enable) {
113 my %en = map { $_ => 1 } map { split /,/ } @enable;
114 for my $key (keys %formats) {
115 delete $formats{$key} unless $en{$key};
116 }
117 }
118 elsif (@disable) {
119 delete @formats{map { split /,/ } @disable};
120 }
121
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
122 # Pick what libraries are used
123 if ($MANUAL) {
124 manual();
125 } else {
126 automatic();
127 }
128
07ea6c2 - Makefile.PL now attempts to use freetype-config to configure freetype ...
Tony Cook authored
129 my $lib_cflags = '';
a8395b4 move linker flags from freetype-config/pkg-config up to the front to
Tony Cook authored
130 my $lib_lflags = '';
80c15fc - prevent warnings from Makefile.PL when there's no libraries found
Tony Cook authored
131 my $F_LIBS = '';
132 my $F_OBJECT = '';
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
133 for my $frmkey (sort { $formats{$a}{order} <=> $formats{$b}{order} } keys %formats) {
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
134 my $frm = $formats{$frmkey};
135 push @defines, [ $frm->{def}, 1, "$frmkey available" ];
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
136 $F_OBJECT .= ' ' .$frm->{objfiles};
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
137 if ($frm->{cflags}) {
138 $lib_cflags .= ' ' .$frm->{cflags};
139 ++$definc{$_} for map { /^-I(.*)$/ ? ($1) : () }
140 grep /^-I./, split ' ', $frm->{cflags};
141 }
a8395b4 move linker flags from freetype-config/pkg-config up to the front to
Tony Cook authored
142 if ($frm->{lflags}) {
143 $lib_lflags .= ' ' . $frm->{lflags};
144 }
145 else {
146 $F_LIBS .= ' ' .$frm->{libfiles};
147 }
148
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
149 }
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
150
151 my $F_INC = join ' ', map "-I$_", map / / ? qq{"$_"} : $_,
152 grep !$definc{$_}, @incs;
153 $F_LIBS = join(' ',map "-L$_", map / / ? qq{"$_"} : $_,
154 grep !$deflib{$_}++, @libs) . $F_LIBS;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
155
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
156 my $OSLIBS = '';
157 my $OSDEF = "-DOS_$^O";
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
158
159 if ($^O eq 'hpux') { $OSLIBS .= ' -ldld'; }
160 if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; }
161
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
162 my @objs = qw(Imager.o draw.o polygon.o image.o io.o iolayer.o
b47464c add the combine method
Tony Cook authored
163 log.o gaussian.o conv.o pnm.o raw.o feat.o font.o combine.o
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
164 filters.o dynaload.o stackmach.o datatypes.o
165 regmach.o trans2.o quant.o error.o convert.o
a2f9a61 @tonycoz split 8-bit image implementation out of the megafile image.c
authored
166 map.o tags.o palimg.o maskimg.o img8.o img16.o rotate.o
d5477d3 - Finished/rewrote Arnar's old SGI RGB file format support, so Imager
Tony Cook authored
167 bmp.o tga.o color.o fills.o imgdouble.o limits.o hlines.o
e41cfe8 - use scanline oriented operations to flip images instead of pixel
Tony Cook authored
168 imext.o scale.o rubthru.o render.o paste.o compose.o flip.o);
92bda63 - start of external Imager API access:
Tony Cook authored
169
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
170 my %opts=(
171 'NAME' => 'Imager',
172 'VERSION_FROM' => 'Imager.pm',
a8395b4 move linker flags from freetype-config/pkg-config up to the front to
Tony Cook authored
173 'LIBS' => "$LFLAGS -lm $lib_lflags $OSLIBS $F_LIBS",
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
174 'DEFINE' => "$OSDEF $CFLAGS",
175 'INC' => "$lib_cflags $DFLAGS $F_INC",
176 'OBJECT' => join(' ', @objs, $F_OBJECT),
f45b774 - use the new EU::MM META_MERGE facility instead of generating
Tony Cook authored
177 clean => { FILES=>'testout rubthru.c scale.c conv.c filters.c gaussian.c render.c rubthru.c' },
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
178 PM => gen_PM(),
867acf5 Test::More is now a pre-requisite for Imager, so remove it from the
Tony Cook authored
179 PREREQ_PM => { 'Test::More' => 0.47 },
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
180 );
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
181
1ef586b simpler creation of coverage reports
Tony Cook authored
182 if ($coverage) {
183 if ($Config{gccversion}) {
184 push @ARGV, 'OPTIMIZE=-ftest-coverage -fprofile-arcs';
185 #$opts{dynamic_lib} = { OTHERLDFLAGS => '-ftest-coverage -fprofile-arcs' };
186 }
187 else {
188 die "Don't know the coverage C flags for your compiler\n";
189 }
190 }
191
c52cbef comparisons against $ExtUtils::MakeMaker::VERSION were warning when
Tony Cook authored
192 # eval to prevent warnings about versions with _ in them
193 my $MM_ver = eval $ExtUtils::MakeMaker::VERSION;
194 if ($MM_ver > 6.06) {
5b480b1 @tonycoz replace (imager|tony)@imager.perl.org with tonyc@cpan.org
authored
195 $opts{AUTHOR} = 'Tony Cook <tonyc@cpan.org>, Arnar M. Hrafnkelsson';
ca50810 add the extra attributes that PPDs want
Tony Cook authored
196 $opts{ABSTRACT} = 'Perl extension for Generating 24 bit Images';
197 }
f45b774 - use the new EU::MM META_MERGE facility instead of generating
Tony Cook authored
198
199 if ($MM_ver >= 6.46) {
200 $opts{META_MERGE} =
201 {
202 recommends =>
203 {
204 "Parse::RecDescent" => 0
205 },
206 license => "perl",
207 dynamic_config => 1,
4345243 update META.yml so PNG isn't indexed, and add some resources
Tony Cook authored
208 no_index =>
209 {
210 directory =>
211 [
212 "PNG",
ec6d890 move the GIF file handling code into a sub-module
Tony Cook authored
213 "GIF",
797a9f9 move JPEG into it's own module
Tony Cook authored
214 "TIFF",
215 "JPEG",
bd7c1b3 don't index W32
Tony Cook authored
216 "W32",
d7ca208 don't index FT2/
Tony Cook authored
217 "FT2",
85702fb @tonycoz basic clean up of Makefile.PL
authored
218 "T1",
4345243 update META.yml so PNG isn't indexed, and add some resources
Tony Cook authored
219 ],
220 },
221 resources =>
222 {
223 homepage => "http://imager.perl.org/",
4989229 @tonycoz re-work META.yml validation and fix the detected errors
authored
224 repository => "git://git.imager.perl.org/imager.git",
225 bugtracker => "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Imager",
4345243 update META.yml so PNG isn't indexed, and add some resources
Tony Cook authored
226 },
f45b774 - use the new EU::MM META_MERGE facility instead of generating
Tony Cook authored
227 };
135d30e - fix/simplify META.yml generation - we now generate META.yml at
Tony Cook authored
228 }
ca50810 add the extra attributes that PPDs want
Tony Cook authored
229
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
230 make_imconfig(\@defines);
231
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
232 if ($VERBOSE) { print Dumper(\%opts); }
233 mkdir('testout',0777); # since we cannot include it in the archive.
135d30e - fix/simplify META.yml generation - we now generate META.yml at
Tony Cook authored
234
812ae05 extract the installed tifflib version and don't use tifflib if it's
Tony Cook authored
235 -d "probe" and rmdir "probe";
236
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
237 WriteMakefile(%opts);
4dce694 Made Makefile.PL run $Config{make} lib/Imager/Regops.pm so it exists
Arnar Mar Hrafnkelsson authored
238
d97c8db @tonycoz [RT #9675] add the library detection summary back in and improve it
authored
239 my @good;
240 my @bad;
241 for my $name (sort { lc $a cmp lc $b } keys %IMAGER_LIBS) {
242 if ($IMAGER_LIBS{$name}) {
243 push @good, $name;
244 }
245 else {
246 push @bad, $name;
247 }
248 }
249
250 print "\n";
251 print "Libraries found:\n" if @good;
252 print " $_\n" for @good;
253 print "Libraries *not* found:\n" if @bad;
254 print " $_\n" for @bad;
255
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
256 exit;
257
258
259 sub MY::postamble {
5a7e62b - minor changes for older perl/ExtUtils::MM
Tony Cook authored
260 my $self = shift;
261 my $perl = $self->{PERLRUN} ? '$(PERLRUN)' : '$(PERL)';
fe415ad the rubthrough() method now supports destination images with an alpha
Tony Cook authored
262 my $mani = maniread;
263
264 my @ims = grep /\.im$/, keys %$mani;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
265 '
faa9b3e Egads
Tony Cook authored
266 dyntest.$(MYEXTLIB) : dynfilt/Makefile
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
267 cd dynfilt && $(MAKE) $(PASTHRU)
268
269 lib/Imager/Regops.pm : regmach.h regops.perl
270 $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
271
92bda63 - start of external Imager API access:
Tony Cook authored
272 imconfig.h : Makefile.PL
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
273 $(ECHO) "imconfig.h out-of-date with respect to $?"
274 $(PERLRUN) Makefile.PL
275 $(ECHO) "==> Your Makefile has been rebuilt - re-run your make command <=="
5a7e62b - minor changes for older perl/ExtUtils::MM
Tony Cook authored
276 '.qq!
6cfee9d API documentation (mostly)
Tony Cook authored
277 lib/Imager/APIRef.pod : \$(C_FILES) \$(H_FILES) apidocs.perl
2a69ed2 rename APIRef.pm, API.pm to *.pod since they contain no code
Tony Cook authored
278 $perl apidocs.perl lib/Imager/APIRef.pod
92bda63 - start of external Imager API access:
Tony Cook authored
279
fe415ad the rubthrough() method now supports destination images with an alpha
Tony Cook authored
280 !.join('', map _im_rule($perl, $_), @ims)
281
282 }
283
284 sub _im_rule {
285 my ($perl, $im) = @_;
286
287 (my $c = $im) =~ s/\.im$/.c/;
288 return <<MAKE;
289
9b1ec2b commit changes from draw branch
Tony Cook authored
290 $c: $im lib/Imager/Preprocess.pm
291 $perl -Ilib -MImager::Preprocess -epreprocess $im $c
fe415ad the rubthrough() method now supports destination images with an alpha
Tony Cook authored
292
293 MAKE
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
294
55932d2 - Makefile.PL now adds rules to generate a suitable META.yml to the
Tony Cook authored
295 }
296
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
297 # manual configuration of helper libraries
298
299 sub manual {
300 print <<EOF;
301
302 Please answer the following questions about
303 which formats are avaliable on your computer
304
305 press <return> to continue
306 EOF
307
308 <STDIN>; # eat one return
309
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
310 for my $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) {
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
311 SWX:
312 if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; }
313 print "Enable $frm support: ";
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
314 my $gz = <STDIN>;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
315 chomp($gz);
316 if ($gz =~ m/^(y|yes|n|no)/i) {
317 $gz=substr(lc($gz),0,1);
318 if ($gz eq 'n') {
319 delete $formats{$frm};
320 }
321 } else { goto SWX; }
322 }
323 }
324
325
326 # automatic configuration of helper libraries
327
328 sub automatic {
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
329 print "Automatic probing:\n" if $VERBOSE;
330 for my $frm (sort { $formats{$a}{order} <=> $formats{$b}{order} } keys %formats) {
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
331 delete $formats{$frm} if !checkformat($frm);
332 }
333 }
334
c6e870a removed --noprobe option, since probing is now required to scan
Tony Cook authored
335 sub grep_directory {
336 my($path, $chk)=@_;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
337
338 # print "checking path $path\n";
339 if ( !opendir(DH,$path) ) {
340 warn "Cannot open dir $path: $!\n";
341 return;
342 }
343 my @l=grep { $chk->($_) } readdir(DH);
344 # print @l;
345 close(DH);
346 return map $path, @l;
347 }
348
812ae05 extract the installed tifflib version and don't use tifflib if it's
Tony Cook authored
349 sub _probe_default {
350 my ($format, $frm) = @_;
07ea6c2 - Makefile.PL now attempts to use freetype-config to configure freetype ...
Tony Cook authored
351
c6e870a removed --noprobe option, since probing is now required to scan
Tony Cook authored
352 my $lib_check=$formats{$frm}{'libcheck'};
353 my $inc_check=$formats{$frm}{'inccheck'};
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
354
c6e870a removed --noprobe option, since probing is now required to scan
Tony Cook authored
355 if ($lib_check) {
356 my @l;
357 for my $lp (@libs) {
358 push(@l, grep_directory($lp,$lib_check));
359 }
360
361 my @i;
362 for my $ip (@incs) {
363 push(@i, $ip) if $inc_check->($ip,$frm);
364 }
365
366 printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found'));
367 $formats{$frm}{incdir} = \@i;
368 $formats{$frm}{libdir} = \@l;
369 return 1 if scalar(@i && @l);
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
370 }
c6e870a removed --noprobe option, since probing is now required to scan
Tony Cook authored
371 else {
372 printf("%10s: not available\n", $frm);
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
373 }
374
c6e870a removed --noprobe option, since probing is now required to scan
Tony Cook authored
375 return 0;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
376 }
377
812ae05 extract the installed tifflib version and don't use tifflib if it's
Tony Cook authored
378 sub checkformat {
379 my $frm=shift;
380
381 print " checkformat($frm)\n" if $VERBOSE;
382
383 my $format = $formats{$frm};
384
385 my @probes;
386 if (my $code = $format->{'code'}) {
387 if (ref $code eq 'ARRAY') {
388 push @probes, @$code;
389 }
390 else {
391 push @probes, $code;
392 }
393 }
394 push @probes, \&_probe_default;
395
396 print " Calling probe function\n" if $VERBOSE;
397 my $found;
398 for my $func (@probes) {
399 if ($func->($format, $frm)) {
400 ++$found;
401 last;
402 }
403 }
404
405 $found or return;
406
407 if ($format->{postcheck}) {
408 print " Calling postcheck function\n" if $VERBOSE;
409 $format->{postcheck}->($format, $frm)
410 or return;
411 }
412
413 return 1;
414 }
415
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
416
417 sub pathcheck {
418 if ($VERBOSE) {
419 print "pathcheck\n";
420 print " Include paths:\n";
421 for (@incs) { print $_,"\n"; }
422 }
3a6bb91 All the little fixup changes for the 0.42 release.
Arnar Mar Hrafnkelsson authored
423 @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed.\n"),0) } @incs;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
424
425 if ($VERBOSE) {
426 print "\nLibrary paths:\n";
855c580 - fixes to verbose mode in Makefile.PL, also added a -v switch so you
Tony Cook authored
427 for (@libs) { print $_,"\n"; }
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
428 }
3a6bb91 All the little fixup changes for the 0.42 release.
Arnar Mar Hrafnkelsson authored
429 @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed.\n"),0) } @libs;
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
430 print "\ndone.\n";
431 }
432
433
434 # Format data initialization
435
436 # format definition is:
437 # defines needed
438 # default include path
439 # files needed for include (boolean perl code)
440 # default lib path
441 # libs needed
442 # files needed for link (boolean perl code)
443 # object files needed for the format
444
445
446 sub init {
447
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
448 my @definc = qw(/usr/include);
449 @definc{@definc}=(1) x @definc;
d8e0c3b rearrange dynaload code to avoid some OS X issues
Tony Cook authored
450 @incs=
451 (
452 split(/\Q$Config{path_sep}/, $INCPATH),
453 map _tilde_expand($_), map { split /\Q$Config{path_sep}/ } @incpaths
454 );
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
455 if ($Config{locincpth}) {
6552acf - avoid complaining about include/lib directories we pull from
Tony Cook authored
456 push @incs, grep -d, split ' ', $Config{locincpth};
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
457 }
88a763e libpng support for Win32
Tony Cook authored
458 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
459 push(@incs, split /;/, $ENV{INCLUDE}) if exists $ENV{INCLUDE};
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
460 }
16cf461 search $Config{incpath} for headers too, why this was left out I don't k...
Tony Cook authored
461 if ($Config{incpath}) {
462 push @incs, grep -d, split /\Q$Config{path_sep}/, $Config{incpath};
463 }
6552acf - avoid complaining about include/lib directories we pull from
Tony Cook authored
464 push @incs, grep -d,
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
465 qw(/sw/include
466 /usr/include/freetype2
467 /usr/local/include/freetype2
468 /usr/local/include/freetype1/freetype
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
469 /usr/include /usr/local/include /usr/include/freetype
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
470 /usr/local/include/freetype);
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
471 if ($Config{ccflags}) {
472 my @hidden = map { /^-I(.*)$/ ? ($1) : () } split ' ', $Config{ccflags};
473 push @incs, @hidden;
474 @definc{@hidden} = (1) x @hidden;
475 }
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
476
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
477 @libs= ( split(/\Q$Config{path_sep}/,$LIBPATH),
d8e0c3b rearrange dynaload code to avoid some OS X issues
Tony Cook authored
478 map _tilde_expand($_), map { split /\Q$Config{path_sep}/} @libpaths );
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
479 if ($Config{loclibpth}) {
6552acf - avoid complaining about include/lib directories we pull from
Tony Cook authored
480 push @libs, grep -d, split ' ', $Config{loclibpth};
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
481 }
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
482
6552acf - avoid complaining about include/lib directories we pull from
Tony Cook authored
483 push @libs, grep -d, qw(/sw/lib), split(/ /, $Config{'libpth'});
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
484 push @libs, grep -d, split / /, $Config{libspath} if $Config{libspath};
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
485 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
88a763e libpng support for Win32
Tony Cook authored
486 push(@libs, split /;/, $ENV{LIB}) if exists $ENV{LIB};
487 }
faa9b3e Egads
Tony Cook authored
488 if ($^O eq 'cygwin') {
489 push(@libs, '/usr/lib/w32api') if -d '/usr/lib/w32api';
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
490 push(@incs, '/usr/include/w32api') if -d '/usr/include/w32api';
faa9b3e Egads
Tony Cook authored
491 }
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
492 if ($Config{ldflags}) {
493 # some builds of perl put -Ldir into ldflags without putting it in
494 # loclibpth, let's extract them
495 my @hidden = grep -d, map { /^-L(.*)$/ ? ($1) : () }
496 split ' ', $Config{ldflags};
497 push @libs, @hidden;
498 # don't mark them as seen - EU::MM will remove any libraries
499 # it can't find and it doesn't look for -L in ldflags
500 #@deflib{@hidden} = @hidden;
501 }
ed28c9c we search /usr/local/include by default but we weren't searching
Tony Cook authored
502 push @libs, grep -d, qw(/usr/local/lib);
2646b26 - Makefile.PL now checks the directories specified by $Config{locincpth}
Tony Cook authored
503
f8e9bc0 - scanning for required include files is now down by directory rather
Tony Cook authored
504 $formats{'TT-fonts'}=
505 {
506 order=>'31',
507 def=>'HAVE_LIBTT',
508 inccheck=>sub { -e catfile($_[0], 'freetype.h')
509 && !-e catfile($_[0], 'fterrors.h') },
510 libcheck=>sub { $_[0] eq "libttf$aext" or $_[0] eq "libttf.$lext" },
511 libfiles=>'-lttf',
512 objfiles=>'',
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
513 code => \&freetype1_probe,
f8e9bc0 - scanning for required include files is now down by directory rather
Tony Cook authored
514 docs=>q{
515 Truetype fonts are scalable fonts. They can include
516 kerning and hinting information and generally yield good
517 visual quality esp on low resultions. The freetype library is
518 used to rasterize for us. The only drawback is that there
519 are alot of badly designed fonts out there.}
02d1d62 Initial revision
Arnar Mar Hrafnkelsson authored
520 };
521 # Make fix indent
522 for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
523 }
524
525
526
527 sub gen {
528 my $V = $ENV{$_[0]};
529 defined($V) ? $V : "";
530 }
531
532
533 # Get information from environment variables
534
535 sub getenv {
536
537 ($VERBOSE,
538 $INCPATH,
539 $LIBPATH,
540 $NOLOG,
541 $DEBUG_MALLOC,
542 $MANUAL,
543 $CFLAGS,
544 $LFLAGS,
545 $DFLAGS) = map { gen $_ } qw(IM_VERBOSE
546 IM_INCPATH
547 IM_LIBPATH
548 IM_NOLOG
549 IM_DEBUG_MALLOC
550 IM_MANUAL
551 IM_CFLAGS
552 IM_LFLAGS
553 IM_DFLAGS);
554
555 }
07ea6c2 - Makefile.PL now attempts to use freetype-config to configure freetype ...
Tony Cook authored
556
1d7e312 merge PNG branch and some clean-up
Tony Cook authored
557 # populate the environment so that sub-modules get the same info
558 sub setenv {
559 $ENV{IM_VERBOSE} = 1 if $VERBOSE;
560 $ENV{IM_INCPATH} = join $Config{path_sep}, @incpaths if @incpaths;
561 $ENV{IM_LIBPATH} = join $Config{path_sep}, @libpaths if @libpaths;
562 }
563
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
564 sub make_imconfig {
565 my ($defines) = @_;
566
567 open CONFIG, "> imconfig.h"
568 or die "Cannot create imconfig.h: $!\n";
569 print CONFIG <<EOS;
570 /* This file is automatically generated by Makefile.PL.
571 Don't edit this file, since any changes will be lost */
572
573 #ifndef IMAGER_IMCONFIG_H
574 #define IMAGER_IMCONFIG_H
575 EOS
576 for my $define (@$defines) {
577 if ($define->[2]) {
578 print CONFIG "\n/*\n $define->[2]\n*/\n\n";
579 }
580 print CONFIG "#define $define->[0] $define->[1]\n";
581 }
53ea6b6 @tonycoz avoid warning about gccversion being non-numeric
authored
582 if ($Config{gccversion} && $Config{gccversion} =~ /^([0-9]+)/ && $1 > 3) {
8d14daa @tonycoz switch to using size_t and i_img_dim strictly
authored
583 print CONFIG <<EOS;
584 /*
585
586 Compiler supports the GCC __attribute__((format...)) syntax.
587
588 */
589
590 #define IMAGER_FORMAT_ATTR 1
53ea6b6 @tonycoz avoid warning about gccversion being non-numeric
authored
591
8d14daa @tonycoz switch to using size_t and i_img_dim strictly
authored
592 EOS
593 }
594
86c8d19 @tonycoz [rt #69147] detect and use snprintf() more
authored
595 if ($Config{d_snprintf}) {
596 print CONFIG <<EOS;
597 /* We can use snprintf() */
598 #define IMAGER_SNPRINTF 1
599
600 EOS
601 }
602
603 if ($Config{d_vsnprintf}) {
604 print CONFIG <<EOS;
605 /* We can use vsnprintf() */
606 #define IMAGER_VSNPRINTF 1
607
608 EOS
609 }
610
8d14daa @tonycoz switch to using size_t and i_img_dim strictly
authored
611 print CONFIG <<EOS;
612 /*
613 Type and format code for formatted output as with printf.
614
615 This is intended for formatting i_img_dim values.
616 */
617 typedef $Config{ivtype} i_dim_format_t;
618 #define i_DF $Config{ivdformat}
619 EOS
620
e11d297 - Makefile.PL now builds imconfig.h with #defines for libraries
Tony Cook authored
621 print CONFIG "\n#endif\n";
622 close CONFIG;
623 }
624
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
625 # probes for freetype1 by scanning @incs for the includes and
626 # @libs for the libs. This is done separately because freetype's headers
627 # are stored in a freetype or freetype1 directory under PREFIX/include.
628 #
629 # we could find the files with the existing mechanism, but it won't set
630 # -I flags correctly.
631 #
632 # This could be extended to freetype2 too, but freetype-config catches
633 # that
634 sub freetype1_probe {
635 my ($frm, $frmkey) = @_;
636
637 my $found_inc;
638 INCS:
639 for my $inc (@incs) {
640 for my $subdir (qw/freetype freetype1/) {
641 my $path = File::Spec->catfile($inc, $subdir, 'freetype.h');
642 -e $path or next;
643 $path = File::Spec->catfile($inc, $subdir, 'fterrors.h');
644 -e $path and next;
645
646 $found_inc = File::Spec->catdir($inc, $subdir);
647 last INCS;
648 }
649 }
650
651 my $found_lib;
652 LIBS:
653 for my $lib (@libs) {
654 my $a_path = File::Spec->catfile($lib, "libttf$aext");
655 my $l_path = File::Spec->catfile($lib, "libttf.$lext");
656 if (-e $a_path || -e $l_path) {
657 $found_lib = $lib;
658 last LIBS;
659 }
660 }
661
89d3718 prevent duplicate probe messages for freetype 1.x probing
Tony Cook authored
662 return unless $found_inc && $found_lib;
714cf15 - check $Config{ldflags} and $Config{ccflags} for places to search for
Tony Cook authored
663 printf("%10s: includes %s - libraries %s\n", $frmkey,
664 ($found_inc ? 'found' : 'not found'),
665 ($found_lib ? 'found' : 'not found'));
666
667 $frm->{cflags} = "-I$found_inc";
668 $frm->{libfiles} = "-lttf";
669
670 return 1;
671 }
672
07ea6c2 - Makefile.PL now attempts to use freetype-config to configure freetype ...
Tony Cook authored
673 sub catfile {
674 return File::Spec->catfile(@_);
675 }
676
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
677 sub usage {
678 print STDERR <<EOS;
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
679 Usage: $0 [--enable feature1,feature2,...] [other options]
680 $0 [--disable feature1,feature2,...] [other options]
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
681 $0 --help
682 Possible feature names are:
85702fb @tonycoz basic clean up of Makefile.PL
authored
683 T1-fonts
274cd32 - check the correct directory when adding the cygwin Win32 API include
Tony Cook authored
684 Other options:
685 --verbose | -v
686 Verbose library probing (or set IM_VERBOSE in the environment)
687 --nolog
688 Disable logging (or set IM_NOLOG in the environment)
689 --incpath dir
690 Add to the include search path
691 --libpath dir
692 Add to the library search path
35a1560 document some undocumented Makefile.PL parameters
Tony Cook authored
693 --coverage
694 Build for coverage testing.
695 --assert
696 Build with assertions active.
3795907 - Makefile.PL now accepts command-line options to set include and librar...
Tony Cook authored
697 EOS
698 exit 1;
699
700 }
92bda63 - start of external Imager API access:
Tony Cook authored
701
702 # generate the PM MM argument
703 # I'd prefer to modify the public version, but there doesn't seem to be
704 # a public API to do that
705 sub gen_PM {
706 my %pm;
707 my $instbase = '$(INST_LIBDIR)';
708
709 # first the basics, .pm and .pod files
710 $pm{"Imager.pm"} = "$instbase/Imager.pm";
711
712 my $mani = maniread();
713
714 for my $filename (keys %$mani) {
715 if ($filename =~ m!^lib/! && $filename =~ /\.(pm|pod)$/) {
716 (my $work = $filename) =~ s/^lib//;
717 $pm{$filename} = $instbase . $work;
718 }
719 }
720
721 # need the typemap
722 $pm{typemap} = $instbase . '/Imager/typemap';
723
724 # and the core headers
725 for my $filename (keys %$mani) {
726 if ($filename =~ /^\w+\.h$/) {
727 $pm{$filename} = $instbase . '/Imager/include/' . $filename;
728 }
729 }
730
731 # and the generated header
732 $pm{"imconfig.h"} = $instbase . '/Imager/include/imconfig.h';
733
734 \%pm;
735 }
135d30e - fix/simplify META.yml generation - we now generate META.yml at
Tony Cook authored
736
d8e0c3b rearrange dynaload code to avoid some OS X issues
Tony Cook authored
737 my $home;
738 sub _tilde_expand {
739 my ($path) = @_;
740
741 if ($path =~ m!^~[/\\]!) {
742 defined $home or $home = $ENV{HOME};
743 if (!defined $home && $^O eq 'MSWin32'
744 && defined $ENV{HOMEDRIVE} && defined $ENV{HOMEPATH}) {
745 $home = $ENV{HOMEDRIVE} . $ENV{HOMEPATH};
746 }
747 unless (defined $home) {
748 $home = eval { (getpwuid($<))[7] };
749 }
750 defined $home or die "You supplied $path, but I can't find your home directory\n";
751 $path =~ s/^~//;
752 $path = File::Spec->catdir($home, $path);
753 }
754
755 $path;
756 }
757
678a9a6 - work around Module::Depends::Intrusive bug #21229
Tony Cook authored
758 1;
Something went wrong with that request. Please try again.