3 use ExtUtils::MakeMaker;
8 use ExtUtils::Manifest qw(maniread);
10 use vars qw(%formats $VERBOSE $INCPATH $LIBPATH $NOLOG $DEBUG_MALLOC $MANUAL $CFLAGS $LFLAGS $DFLAGS);
14 # EU::MM runs Makefile.PL all in the same process, so sub-modules will
16 our $BUILDING_IMAGER = 1;
19 # IM_INCPATH colon seperated list of paths to extra include paths
20 # IM_LIBPATH colon seperated list of paths to extra library paths
22 # IM_VERBOSE turns on verbose mode for the library finding and such
23 # IM_MANUAL to manually select which libraries are used and which not
24 # IM_ENABLE to programmatically select which libraries are used
26 # IM_NOLOG if true logging will not be compiled into the module
27 # IM_DEBUG_MALLOC if true malloc debbuging will be compiled into the module
28 # do not use IM_DEBUG_MALLOC in production - this slows
29 # everything down by alot
30 # IM_CFLAGS Extra flags to pass to the compiler
31 # IM_LFLAGS Extra flags to pass to the linker
32 # IM_DFLAGS Extra flags to pass to the preprocessor
34 my $KEEP_FILES = $ENV{IMAGER_KEEP_FILES};
36 getenv(); # get environment variables
38 my $lext=$Config{'so'}; # Get extensions of libraries
39 my $aext=$Config{'_a'};
41 my $help; # display help if set
42 my @enable; # list of drivers to enable
43 my @disable; # or list of drivers to disable
44 my @incpaths; # places to look for headers
45 my @libpaths; # places to look for libraries
46 my $coverage; # build for coverage testing
47 my $assert; # build with assertions
48 GetOptions("help" => \$help,
49 "enable=s" => \@enable,
50 "disable=s" => \@disable,
51 "incpath=s", \@incpaths,
52 "libpath=s" => \@libpaths,
53 "verbose|v" => \$VERBOSE,
55 'coverage' => \$coverage,
56 "assert|a" => \$assert);
60 if ($ENV{AUTOMATED_TESTING}) {
65 print "Verbose mode\n";
67 import Data::Dumper qw(Dumper);
76 if ($NOLOG) { print "Logging not compiled into module\n"; }
78 push @defines, [ IMAGER_LOG => 1, "Logging system" ];
82 push @defines, [ IM_ASSERT => 1, "im_assert() are effective" ];
86 push @defines, [ IMAGER_DEBUG_MALLOC => 1, "Use Imager's DEBUG malloc()" ];
87 print "Malloc debugging enabled\n";
90 if (@enable && @disable) {
91 print STDERR "Only --enable or --disable can be used, not both, try --help\n";
97 my @incs; # all the places to look for headers
98 my @libs; # all the places to look for libraries
100 init(); # initialize global data
101 pathcheck(); # Check if directories exist
103 if (exists $ENV{IM_ENABLE}) {
104 my %en = map { $_, 1 } split ' ', $ENV{IM_ENABLE};
105 for my $key (keys %formats) {
106 delete $formats{$key} unless $en{$key};
110 my %en = map { $_ => 1 } map { split /,/ } @enable;
111 for my $key (keys %formats) {
112 delete $formats{$key} unless $en{$key};
116 delete @formats{map { split /,/ } @disable};
119 # Pick what libraries are used
130 for my $frmkey (sort { $formats{$a}{order} <=> $formats{$b}{order} } keys %formats) {
131 my $frm = $formats{$frmkey};
132 push @defines, [ $frm->{def}, 1, "$frmkey available" ];
133 $F_OBJECT .= ' ' .$frm->{objfiles};
134 if ($frm->{cflags}) {
135 $lib_cflags .= ' ' .$frm->{cflags};
136 ++$definc{$_} for map { /^-I(.*)$/ ? ($1) : () }
137 grep /^-I./, split ' ', $frm->{cflags};
139 if ($frm->{lflags}) {
140 $lib_lflags .= ' ' . $frm->{lflags};
143 $F_LIBS .= ' ' .$frm->{libfiles};
148 my $F_INC = join ' ', map "-I$_", map / / ? qq{"$_"} : $_,
149 grep !$definc{$_}, @incs;
150 $F_LIBS = join(' ',map "-L$_", map / / ? qq{"$_"} : $_,
151 grep !$deflib{$_}++, @libs) . $F_LIBS;
154 my $OSDEF = "-DOS_$^O";
156 if ($^O eq 'hpux') { $OSLIBS .= ' -ldld'; }
157 if (defined $Config{'d_dlsymun'}) { $OSDEF .= ' -DDLSYMUN'; }
159 my @objs = qw(Imager.o draw.o polygon.o image.o io.o iolayer.o
160 log.o gaussian.o conv.o pnm.o raw.o feat.o font.o combine.o
161 filters.o dynaload.o stackmach.o datatypes.o
162 regmach.o trans2.o quant.o error.o convert.o
163 map.o tags.o palimg.o maskimg.o img16.o rotate.o
164 bmp.o tga.o color.o fills.o imgdouble.o limits.o hlines.o
165 imext.o scale.o rubthru.o render.o paste.o compose.o flip.o);
169 'VERSION_FROM' => 'Imager.pm',
170 'LIBS' => "$LFLAGS -lm $lib_lflags $OSLIBS $F_LIBS",
171 'DEFINE' => "$OSDEF $CFLAGS",
172 'INC' => "$lib_cflags $DFLAGS $F_INC",
173 'OBJECT' => join(' ', @objs, $F_OBJECT),
174 clean => { FILES=>'testout rubthru.c scale.c conv.c filters.c gaussian.c render.c rubthru.c' },
176 PREREQ_PM => { 'Test::More' => 0.47 },
180 if ($Config{gccversion}) {
181 push @ARGV, 'OPTIMIZE=-ftest-coverage -fprofile-arcs';
182 #$opts{dynamic_lib} = { OTHERLDFLAGS => '-ftest-coverage -fprofile-arcs' };
185 die "Don't know the coverage C flags for your compiler\n";
189 # eval to prevent warnings about versions with _ in them
190 my $MM_ver = eval $ExtUtils::MakeMaker::VERSION;
191 if ($MM_ver > 6.06) {
192 $opts{AUTHOR} = 'Tony Cook <tony@imager.perl.org>, Arnar M. Hrafnkelsson';
193 $opts{ABSTRACT} = 'Perl extension for Generating 24 bit Images';
196 if ($MM_ver >= 6.46) {
201 "Parse::RecDescent" => 0
219 homepage => "http://imager.perl.org/",
222 url => "http://imager.perl.org/svn/trunk/Imager",
223 web => "http://imager.perl.org/svnweb/public/browse/trunk/Imager",
228 web => "http://rt.cpan.org/NoAuth/Bugs.html?Dist=Imager",
229 mailto => 'bug-Imager@rt.cpan.org',
235 make_imconfig(\@defines);
237 if ($VERBOSE) { print Dumper(\%opts); }
238 mkdir('testout',0777); # since we cannot include it in the archive.
240 -d "probe" and rmdir "probe";
242 WriteMakefile(%opts);
249 my $perl = $self->{PERLRUN} ? '$(PERLRUN)' : '$(PERL)';
252 my @ims = grep /\.im$/, keys %$mani;
254 dyntest.$(MYEXTLIB) : dynfilt/Makefile
255 cd dynfilt && $(MAKE) $(PASTHRU)
257 lib/Imager/Regops.pm : regmach.h regops.perl
258 $(PERL) regops.perl regmach.h lib/Imager/Regops.pm
260 imconfig.h : Makefile.PL
261 $(ECHO) "imconfig.h out-of-date with respect to $?"
262 $(PERLRUN) Makefile.PL
263 $(ECHO) "==> Your Makefile has been rebuilt - re-run your make command <=="
265 lib/Imager/APIRef.pod : \$(C_FILES) \$(H_FILES) apidocs.perl
266 $perl apidocs.perl lib/Imager/APIRef.pod
268 !.join('', map _im_rule($perl, $_), @ims)
273 my ($perl, $im) = @_;
275 (my $c = $im) =~ s/\.im$/.c/;
278 $c: $im lib/Imager/Preprocess.pm
279 $perl -Ilib -MImager::Preprocess -epreprocess $im $c
285 # manual configuration of helper libraries
290 Please answer the following questions about
291 which formats are avaliable on your computer
293 press <return> to continue
296 <STDIN>; # eat one return
298 for my $frm(sort { $formats{$b}{order} <=> $formats{$a}{order} } keys %formats) {
300 if ($formats{$frm}{docs}) { print "\n",$formats{$frm}{docs},"\n\n"; }
301 print "Enable $frm support: ";
304 if ($gz =~ m/^(y|yes|n|no)/i) {
305 $gz=substr(lc($gz),0,1);
307 delete $formats{$frm};
314 # automatic configuration of helper libraries
317 print "Automatic probing:\n" if $VERBOSE;
318 for my $frm (sort { $formats{$a}{order} <=> $formats{$b}{order} } keys %formats) {
319 delete $formats{$frm} if !checkformat($frm);
325 # if ($formats{'gif'} and $formats{'ungif'}) {
326 # print "ungif and gif can not coexist - removing ungif support\n";
327 # delete $formats{'ungif'};
330 # for my $frm (qw(gif ungif)) {
331 # checkformat($frm) if ($MANUAL and $formats{$frm});
335 # for my $frm (grep $formats{$_}, qw(gif ungif)) {
336 # push(@dirs, @{$formats{$frm}{incdir}}) if $formats{$frm}{incdir};
340 # FILES: for my $dir (@dirs) {
341 # my $h = "$dir/gif_lib.h";
342 # open H, "< $h" or next;
344 # if (/GIF_LIB_VERSION\s+"\s*version\s*(\d+)\.(\d+)/i) {
354 # # we need the version in a #ifdefable form
356 # push @defines, [ IM_GIFMAJOR => $major, "Parsed giflib version" ];
357 # push @defines, [ IM_GIFMINOR => $minor ];
358 # push @defines, [ IM_NO_SET_GIF_VERSION => 1, "Disable EGifSetGifVersion" ]
359 # if $no_gif_set_version;
366 # print "checking path $path\n";
367 if ( !opendir(DH,$path) ) {
368 warn "Cannot open dir $path: $!\n";
371 my @l=grep { $chk->($_) } readdir(DH);
374 return map $path, @l;
378 my ($format, $frm) = @_;
380 my $lib_check=$formats{$frm}{'libcheck'};
381 my $inc_check=$formats{$frm}{'inccheck'};
386 push(@l, grep_directory($lp,$lib_check));
391 push(@i, $ip) if $inc_check->($ip,$frm);
394 printf("%10s: includes %s - libraries %s\n",$frm,(@i?'found':'not found'),(@l?'found':'not found'));
395 $formats{$frm}{incdir} = \@i;
396 $formats{$frm}{libdir} = \@l;
397 return 1 if scalar(@i && @l);
400 printf("%10s: not available\n", $frm);
409 print " checkformat($frm)\n" if $VERBOSE;
411 my $format = $formats{$frm};
414 if (my $code = $format->{'code'}) {
415 if (ref $code eq 'ARRAY') {
416 push @probes, @$code;
422 push @probes, \&_probe_default;
424 print " Calling probe function\n" if $VERBOSE;
426 for my $func (@probes) {
427 if ($func->($format, $frm)) {
435 if ($format->{postcheck}) {
436 print " Calling postcheck function\n" if $VERBOSE;
437 $format->{postcheck}->($format, $frm)
448 print " Include paths:\n";
449 for (@incs) { print $_,"\n"; }
451 @incs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed.\n"),0) } @incs;
454 print "\nLibrary paths:\n";
455 for (@libs) { print $_,"\n"; }
457 @libs=grep { -d $_ && -r _ && -x _ or ( print(" $_ doesnt exist or is unaccessible - removed.\n"),0) } @libs;
462 # Format data initialization
464 # format definition is:
466 # default include path
467 # files needed for include (boolean perl code)
470 # files needed for link (boolean perl code)
471 # object files needed for the format
476 my @definc = qw(/usr/include);
477 @definc{@definc}=(1) x @definc;
480 split(/\Q$Config{path_sep}/, $INCPATH),
481 map _tilde_expand($_), map { split /\Q$Config{path_sep}/ } @incpaths
483 if ($Config{locincpth}) {
484 push @incs, grep -d, split ' ', $Config{locincpth};
486 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
487 push(@incs, split /;/, $ENV{INCLUDE}) if exists $ENV{INCLUDE};
489 if ($Config{incpath}) {
490 push @incs, grep -d, split /\Q$Config{path_sep}/, $Config{incpath};
494 /usr/include/freetype2
495 /usr/local/include/freetype2
496 /usr/local/include/freetype1/freetype
497 /usr/include /usr/local/include /usr/include/freetype
498 /usr/local/include/freetype);
499 if ($Config{ccflags}) {
500 my @hidden = map { /^-I(.*)$/ ? ($1) : () } split ' ', $Config{ccflags};
502 @definc{@hidden} = (1) x @hidden;
505 @libs= ( split(/\Q$Config{path_sep}/,$LIBPATH),
506 map _tilde_expand($_), map { split /\Q$Config{path_sep}/} @libpaths );
507 if ($Config{loclibpth}) {
508 push @libs, grep -d, split ' ', $Config{loclibpth};
511 push @libs, grep -d, qw(/sw/lib), split(/ /, $Config{'libpth'});
512 push @libs, grep -d, split / /, $Config{libspath} if $Config{libspath};
513 if ($^O =~ /win32/i && $Config{cc} =~ /\bcl\b/i) {
514 push(@libs, split /;/, $ENV{LIB}) if exists $ENV{LIB};
516 if ($^O eq 'cygwin') {
517 push(@libs, '/usr/lib/w32api') if -d '/usr/lib/w32api';
518 push(@incs, '/usr/include/w32api') if -d '/usr/include/w32api';
520 if ($Config{ldflags}) {
521 # some builds of perl put -Ldir into ldflags without putting it in
522 # loclibpth, let's extract them
523 my @hidden = grep -d, map { /^-L(.*)$/ ? ($1) : () }
524 split ' ', $Config{ldflags};
526 # don't mark them as seen - EU::MM will remove any libraries
527 # it can't find and it doesn't look for -L in ldflags
528 #@deflib{@hidden} = @hidden;
530 push @libs, grep -d, qw(/usr/local/lib);
534 # def=>'HAVE_LIBJPEG',
535 # inccheck=>sub { -e catfile($_[0], 'jpeglib.h') },
536 # libcheck=>sub { $_[0] eq "libjpeg$aext" or $_ eq "libjpeg.$lext" },
537 # libfiles=>'-ljpeg',
538 # objfiles=>'jpeg.o',
540 # In order to use jpeg with this module you need to have libjpeg
541 # installed on your computer}
546 # def=>'HAVE_LIBTIFF',
547 # inccheck=>sub { -e catfile($_[0], 'tiffio.h') },
548 # libcheck=>sub { $_[0] eq "libtiff$aext" or $_ eq "libtiff.$lext" },
549 # libfiles=>'-ltiff',
550 # objfiles=>'tiff.o',
552 # In order to use tiff with this module you need to have libtiff
553 # installed on your computer},
554 # postcheck => \&postcheck_tiff,
559 # def=>'HAVE_LIBPNG',
560 # inccheck=>sub { -e catfile($_[0], 'png.h') },
561 # libcheck=>sub { $_[0] eq "libpng$aext" or $_[0] eq "libpng.$lext" },
562 # libfiles=>$^O eq 'MSWin32' ? '-lpng -lzlib' : '-lpng -lz',
565 # Png stands for Portable Network Graphics and is intended as
566 # a replacement for gif on the web. It is patent free and
567 # is recommended by the w3c, you need libpng to use these formats},
568 # code => \&png_probe,
573 # def=>'HAVE_LIBGIF',
574 # inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
575 # libcheck=>sub { $_[0] eq "libgif$aext" or $_[0] eq "libgif.$lext" },
579 # gif is the de facto standard for webgraphics at the moment,
580 # it does have some patent problems. If you have giflib and
581 # are not in violation with the unisys patent you should use
582 # this instead of the 'ungif' option. Note that they cannot
583 # be in use at the same time}
586 # $formats{'ungif'}={
588 # def=>'HAVE_LIBGIF',
589 # inccheck=>sub { -e catfile($_[0], 'gif_lib.h') },
590 # libcheck=>sub { $_[0] eq "libungif$aext" or $_[0] eq "libungif.$lext" },
591 # libfiles=>'-lungif',
594 # gif is the de facto standard for webgraphics at the moment,
595 # it does have some patent problems. If you have libungif and
596 # want to create images free from LZW patented compression you
597 # should use this option instead of the 'gif' option}
600 $formats{'T1-fonts'}={
603 inccheck=>sub { -e catfile($_[0], 't1lib.h') },
604 libcheck=>sub { $_[0] eq "libt1$aext" or $_[0] eq "libt1.$lext" },
608 postscript t1 fonts are scalable fonts. They can include
609 ligatures and kerning information and generally yield good
610 visual quality. We depend on libt1 to rasterize the fonts
614 $formats{'TT-fonts'}=
618 inccheck=>sub { -e catfile($_[0], 'freetype.h')
619 && !-e catfile($_[0], 'fterrors.h') },
620 libcheck=>sub { $_[0] eq "libttf$aext" or $_[0] eq "libttf.$lext" },
623 code => \&freetype1_probe,
625 Truetype fonts are scalable fonts. They can include
626 kerning and hinting information and generally yield good
627 visual quality esp on low resultions. The freetype library is
628 used to rasterize for us. The only drawback is that there
629 are alot of badly designed fonts out there.}
631 # $formats{'w32'} = {
634 # inccheck=>sub { -e catfile($_[0], 'windows.h') },
635 # libcheck=>sub { lc $_[0] eq 'gdi32.lib'
636 # || lc $_[0] eq 'libgdi32.a' },
637 # libfiles=>$^O eq 'cygwin' ? '-lgdi32' : '',
638 # objfiles=>'win32.o',
640 # Uses the Win32 GDI for rendering text.
642 # This currently only works on under normal Win32 and cygwin.
645 # $formats{'freetype2'} =
649 # # we always use a probe function
650 # #inccheck=>sub { -e catfile($_[0], 'ft2build.h') },
651 # #libcheck=>sub { $_[0] eq "libfreetype$aext" or $_[0] eq "libfreetype.$lext" },
652 # libfiles=>'-lfreetype',
653 # objfiles=>'freetyp2.o',
655 # Freetype 2 supports both Truetype and Type 1 fonts, both of which are
656 # scalable. It also supports a variety of other fonts.
660 # \&freetype2_probe_ftconfig,
661 # \&freetype2_probe_scan
666 for (keys %formats) { $formats{$_}->{docs} =~ s/^\s+/ /mg; }
673 defined($V) ? $V : "";
677 # Get information from environment variables
689 $DFLAGS) = map { gen $_ } qw(IM_VERBOSE
701 # populate the environment so that sub-modules get the same info
703 $ENV{IM_VERBOSE} = 1 if $VERBOSE;
704 $ENV{IM_INCPATH} = join $Config{path_sep}, @incpaths if @incpaths;
705 $ENV{IM_LIBPATH} = join $Config{path_sep}, @libpaths if @libpaths;
711 open CONFIG, "> imconfig.h"
712 or die "Cannot create imconfig.h: $!\n";
714 /* This file is automatically generated by Makefile.PL.
715 Don't edit this file, since any changes will be lost */
717 #ifndef IMAGER_IMCONFIG_H
718 #define IMAGER_IMCONFIG_H
720 for my $define (@$defines) {
722 print CONFIG "\n/*\n $define->[2]\n*/\n\n";
724 print CONFIG "#define $define->[0] $define->[1]\n";
726 print CONFIG "\n#endif\n";
730 # # use pkg-config to probe for libraries
731 # # works around the junk that pkg-config dumps on FreeBSD
735 # is_exe('pkg-config') or return;
737 # my $redir = $^O eq 'MSWin32' ? '' : '2>/dev/null';
739 # !system("pkg-config $pkg --exists $redir");
742 # probes for freetype1 by scanning @incs for the includes and
743 # @libs for the libs. This is done separately because freetype's headers
744 # are stored in a freetype or freetype1 directory under PREFIX/include.
746 # we could find the files with the existing mechanism, but it won't set
747 # -I flags correctly.
749 # This could be extended to freetype2 too, but freetype-config catches
751 sub freetype1_probe {
752 my ($frm, $frmkey) = @_;
756 for my $inc (@incs) {
757 for my $subdir (qw/freetype freetype1/) {
758 my $path = File::Spec->catfile($inc, $subdir, 'freetype.h');
760 $path = File::Spec->catfile($inc, $subdir, 'fterrors.h');
763 $found_inc = File::Spec->catdir($inc, $subdir);
770 for my $lib (@libs) {
771 my $a_path = File::Spec->catfile($lib, "libttf$aext");
772 my $l_path = File::Spec->catfile($lib, "libttf.$lext");
773 if (-e $a_path || -e $l_path) {
779 return unless $found_inc && $found_lib;
780 printf("%10s: includes %s - libraries %s\n", $frmkey,
781 ($found_inc ? 'found' : 'not found'),
782 ($found_lib ? 'found' : 'not found'));
784 $frm->{cflags} = "-I$found_inc";
785 $frm->{libfiles} = "-lttf";
790 # probes for freetype2 by trying to run freetype-config
791 # sub freetype2_probe_ftconfig {
792 # my ($frm, $frmkey) = @_;
794 # is_exe('freetype-config') or return;
796 # my $cflags = `freetype-config --cflags`
800 # my $lflags = `freetype-config --libs`
804 # # before 2.1.5 freetype-config --cflags could output
805 # # the -I options in the wrong order, causing a conflict with
806 # # freetype1.x installed with the same --prefix
809 # # - both -Iprefix/include and -Iprefix/include/freetype2 are in cflags
811 # # - freetype 1.x headers are in prefix/include/freetype
812 # my @incdirs = map substr($_, 2), grep /^-I/, split ' ', $cflags;
814 # && $incdirs[1] eq "$incdirs[0]/freetype2"
815 # && -e "$incdirs[0]/freetype/freetype.h"
816 # && -e "$incdirs[0]/freetype/fterrid.h") {
817 # print "** freetype-config provided -I options out of order, correcting\n"
819 # $cflags = join(' ', grep(!/-I/, split ' ', $cflags),
820 # map "-I$_", reverse @incdirs);
822 # $frm->{cflags} = $cflags;
823 # $frm->{lflags} = $lflags;
825 # printf "%10s: configured via freetype-config\n", $frmkey;
830 # attempt to probe for freetype2 by scanning directories
831 # we can't use the normal scan since we need to find the directory
832 # containing most of the includes
833 # sub freetype2_probe_scan {
834 # my ($frm, $frmkey) = @_;
839 # for my $inc (@incs) {
840 # my $path = File::Spec->catfile($inc, 'ft2build.h');
843 # # try to find what it's including
845 # open FT2BUILD, "< $path"
847 # while (<FT2BUILD>) {
848 # if (m!^\s*\#\s*include\s+<([\w/.]+)>!
849 # || m!^\s*\#\s*include\s+"([\w/.]+)"!) {
857 # # non-Unix installs put this directly under the same directory in
859 # if (-e File::Spec->catfile($inc, $ftheader)) {
863 # for my $subdir (qw/freetype2 freetype/) {
864 # $path = File::Spec->catfile($inc, $subdir, 'fterrors.h');
868 # $found_inc2 = File::Spec->catdir($inc, $subdir);
875 # for my $lib (@libs) {
876 # my $a_path = File::Spec->catfile($lib, "libfreetype$aext");
877 # my $l_path = File::Spec->catfile($lib, "libfreetype.$lext");
878 # if (-e $a_path || -e $l_path) {
884 # printf("%10s: includes %s - libraries %s\n", $frmkey,
885 # ($found_inc ? 'found' : 'not found'),
886 # ($found_lib ? 'found' : 'not found'));
888 # return unless $found_inc && $found_lib;
890 # $frm->{cflags} = _make_I($found_inc);
891 # $frm->{cflags} .= " " . _make_I($found_inc2) if $found_inc2;
892 # $frm->{libfiles} = "-lfreetype";
903 $inc_dir =~ / / ? qq!-I"$inc_dir"! : "-I$inc_dir";
906 # probes for libpng via pkg-config
908 # my ($frm, $frmkey) = @_;
910 # is_exe('pkg-config') or return;
913 # for my $check_conf (qw(libpng libpng12 libpng10)) {
914 # if (_pkg_probe($check_conf)) {
915 # $config = $check_conf;
921 # my $cflags = `pkg-config $config --cflags`
924 # my $lflags = `pkg-config $config --libs`
929 # $frm->{cflags} = $cflags;
930 # $frm->{lflags} = $lflags;
932 # printf "%10s: configured via `pkg-config $config ...`\n", $frmkey;
938 return File::Spec->catfile(@_);
944 # my @exe_suffix = $Config{_exe};
945 # if ($^O eq 'MSWin32') {
946 # push @exe_suffix, qw/.bat .cmd/;
949 # for my $dir (File::Spec->path) {
950 # for my $suffix (@exe_suffix) {
951 # -x catfile($dir, "$name$suffix")
961 Usage: $0 [--enable feature1,feature2,...] [other options]
962 $0 [--disable feature1,feature2,...] [other options]
964 Possible feature names are:
965 T1-fonts TT-fonts freetype2
968 Verbose library probing (or set IM_VERBOSE in the environment)
970 Disable logging (or set IM_NOLOG in the environment)
972 Add to the include search path
974 Add to the library search path
976 Build for coverage testing.
978 Build with assertions active.
984 # generate the PM MM argument
985 # I'd prefer to modify the public version, but there doesn't seem to be
986 # a public API to do that
989 my $instbase = '$(INST_LIBDIR)';
991 # first the basics, .pm and .pod files
992 $pm{"Imager.pm"} = "$instbase/Imager.pm";
994 my $mani = maniread();
996 for my $filename (keys %$mani) {
997 if ($filename =~ m!^lib/! && $filename =~ /\.(pm|pod)$/) {
998 (my $work = $filename) =~ s/^lib//;
999 $pm{$filename} = $instbase . $work;
1004 $pm{typemap} = $instbase . '/Imager/typemap';
1006 # and the core headers
1007 for my $filename (keys %$mani) {
1008 if ($filename =~ /^\w+\.h$/) {
1009 $pm{$filename} = $instbase . '/Imager/include/' . $filename;
1013 # and the generated header
1014 $pm{"imconfig.h"} = $instbase . '/Imager/include/imconfig.h';
1023 if ($path =~ m!^~[/\\]!) {
1024 defined $home or $home = $ENV{HOME};
1025 if (!defined $home && $^O eq 'MSWin32'
1026 && defined $ENV{HOMEDRIVE} && defined $ENV{HOMEPATH}) {
1027 $home = $ENV{HOMEDRIVE} . $ENV{HOMEPATH};
1029 unless (defined $home) {
1030 $home = eval { (getpwuid($<))[7] };
1032 defined $home or die "You supplied $path, but I can't find your home directory\n";
1034 $path = File::Spec->catdir($home, $path);
1040 # sub postcheck_tiff {
1041 # my ($format, $frm) = @_;
1043 # -d "probe" or mkdir "probe";
1045 # my $tiffver_name = "probe/tiffver.txt";
1048 # if ($Config{cc} =~ /\b(cl|bcc)\b/) {
1055 # # setup LD_RUN_PATH to match link time
1056 # my $lopts = join " " , map("-L$_", @{$format->{libdir}}), " -ltiff";
1057 # my ($extra, $bs_load, $ld_load, $ld_run_path) =
1058 # ExtUtils::Liblist->ext($lopts, $VERBOSE);
1059 # local $ENV{LD_RUN_PATH};
1061 # if ($ld_run_path) {
1062 # print "Setting LD_RUN_PATH=$ld_run_path for TIFF probe\n" if $VERBOSE;
1063 # $ENV{LD_RUN_PATH} = $ld_run_path;
1070 # debug => $VERBOSE,
1071 # incpath => $format->{incdir},
1072 # libpath => $format->{libdir},
1074 # header => [ qw(stdio.h tiffio.h) ],
1075 # function => <<FUNCTION,
1077 # const char *vers = TIFFGetVersion();
1078 # FILE *f = fopen("$tiffver_name", "wb");
1091 # unless ($good && -s $tiffver_name
1092 # && open(VERS, "< $tiffver_name")) {
1093 # unlink $tiffver_name unless $KEEP_FILES;
1095 # **tiff: cannot determine libtiff version number
1101 # # version file seems to be there, load it up
1102 # my $ver_str = do { local $/; <VERS> };
1104 # unlink $tiffver_name unless $KEEP_FILES;
1106 # my ($version) = $ver_str =~ /(\d+\.\d+\.\d+)/;
1108 # if ($version eq '3.9.0') {
1110 # **tiff: libtiff 3.9.0 introduced a serious bug, please install 3.9.1
1119 # This isn't a module, but some broken tools, like
1120 # Module::Depends::Instrusive insist on treating it like one.
1122 # http://rt.cpan.org/Public/Bug/Display.html?id=21229