use ExtUtils::MakeMaker qw(prompt WriteMakefile); use Config; use strict; require 5.6.0; unless (@ARGV) { warn < PATHS: CHECK AND ADJUST <===== my (@INC,@LIBPATH,@LIBS); my $AUTOCONFIG = 0; # global set by try_to_autoconfigure() below my ($options,$lib_gd_path,$lib_ft_path,$lib_png_path,$lib_jpeg_path,$lib_xpm_path,$lib_zlib_path,$force); use Getopt::Long; GetOptions("ignore_missing_gd" => \$force); unless (try_to_autoconfigure(\$options,\$lib_gd_path,\@INC,\@LIBPATH,\@LIBS) || $force) { die < \$options, "lib_gd_path=s" => \$lib_gd_path, "lib_ft_path=s" => \$lib_ft_path, "lib_png_path=s" => \$lib_png_path, "lib_jpeg_path=s" => \$lib_jpeg_path, "lib_xpm_path=s" => \$lib_xpm_path, "lib_zlib_path=s" => \$lib_zlib_path, ); unless ($result) { print STDERR <.config.cache"; print F $DEFINES,"\n"; close F; WriteMakefile( 'NAME' => 'GD', 'VERSION_FROM' => 'GD.pm', 'PREREQ_PM' => { 'Math::Trig' => 0, }, 'PM' => { 'GD.pm' => '$(INST_LIBDIR)/GD.pm', 'GD/Polyline.pm' => '$(INST_LIBDIR)/GD/Polyline.pm', 'GD/Polygon.pm' => '$(INST_LIBDIR)/GD/Polygon.pm', 'GD/Simple.pm' => '$(INST_LIBDIR)/GD/Simple.pm', 'GD/Image.pm' => '$(INST_LIBDIR)/GD/Image.pm', 'GD/Group.pm' => '$(INST_LIBDIR)/GD/Group.pm', 'qd.pl' => '$(INST_LIBDIR)/qd.pl'}, 'dist' => {'COMPRESS'=>'gzip -9f', 'SUFFIX' => 'gz', 'ZIP'=>'/usr/bin/zip','ZIPFLAGS'=>'-rl'}, 'LIBS' => [join(' ',$ENV{'GD_LIBS'},@LIBPATH,@LIBS)], 'INC' => join(' ',$ENV{'GD_INC'},@INC), 'PL_FILES' => {'bdf_scripts/bdf2gdfont.PLS' => 'bdf_scripts/bdf2gdfont.pl', 'GD/Image.pm.PLS' => 'GD/Image.pm', }, 'CCFLAGS' => '-Wformat=0', 'EXE_FILES' => ['bdf_scripts/bdf2gdfont.pl'], 'AUTHOR' => 'Lincoln Stein (lstein@cshl.org)', 'ABSTRACT' => 'Interface to Gd Graphics Library', $CAPI ? ('CAPI' => 'TRUE') : (), 'DEFINE' => $DEFINES, ); exit 0; sub try_to_autoconfigure { my ($options,$lib_gd_path,$INC,$LIBPATH,$LIBS) = @_; my $config = `gdlib-config --all`; return unless $config; $AUTOCONFIG++; my ($version) = $config =~ /^GD library\s+(\S+)/m; warn "Configuring for libgd version $version.\n"; my ($cflags) = $config =~ /^cflags:\s+(.+)/m; my ($ldflags) = $config =~ /^ldflags:\s+(.+)/m; my ($libs) = $config =~ /^libs:\s+(.+)/m; my ($libdir) = $config =~ /^libdir:\s+(.+)/m; my ($features) = $config =~ /^features:\s+(.+)/m; my ($includedir) = $config =~ /^includedir:\s+(.+)/m; @$INC = map {s/^-I// && "-I$_"} split /\s+/,$cflags; @$LIBPATH = map {s/^-L// && "-L$_"} split /\s+/,$ldflags; @$LIBS = split /\s+/,$libs; push @$LIBS,"-lgd"; push @$LIBPATH,"-L$libdir"; ($$lib_gd_path = $libdir) =~ s!/[^/]+$!!; $$options = $features; my ($minor) = $version =~ /^2\.\d+\.(\d+)$/; $$options .= " GD_UNCLOSEDPOLY GD_ANIMGIF GD_FTCIRCLE VERSION_33" if defined($minor) && $minor >= 33; my @correct_inc = map {s/^-I// && $_} split /\s+/,$cflags; check_for_stray_headers(@correct_inc); return 1; } sub check_for_stray_headers { my @official_libraries = @_; my %official_libraries = map {$_=>1} @official_libraries; print STDERR "Checking for stray libgd header files..."; my $cc = $Config{'cc'}; my $data = `$cc -print-search-dirs`; $data ||= ''; my ($libraries) = $data =~ /^libraries: =(.+)/m; my @cc_libs = split /:/,$libraries; foreach (@cc_libs) { s/\/$//; } my %libraries = map {$_=>1} (@cc_libs,'/include','/usr/include', '/usr/local/include','/opt/include', '/usr/X11R6/include'); my $problems; foreach (keys %libraries) { s/\blib\b/include/; next if $official_libraries{$_}; next unless -e "$_/gd.h"; warn "\n\n** WARNING: found gd.h header file in ${_}gd.h, but it is expected at $official_libraries[0]/gd.h. This may cause compile errors! **\n"; $problems++; } print STDERR $problems ? "** Possible problems found **\n" : "none found.\n"; print STDERR "\n"; } sub MY::postamble { my $postamble = <<'END'; html: GD.pm pod2html --outfile=GD.html GD.pm END $postamble; } package MY; sub processPL { my $inherited = shift->SUPER::processPL(@_); $inherited =~ s/(:: GD\/Image.pm.PLS)/$1 .config.cache/; $inherited; }