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); try_to_autoconfigure(\$options,\$lib_gd_path,\@INC,\@LIBPATH,\@LIBS); @INC = qw(-I/usr/include -I/usr/include/gd) unless @INC; @LIBPATH = qw(-L/usr/lib/X11 -L/usr/X11R6/lib -L/usr/X11/lib -L/usr/lib) unless @LIBPATH; @LIBS = qw(-lgd) unless @LIBS; # support for AMD64 libraries if (-d '/usr/lib64') { my @libs64 = map {my $a = $_; $a=~ s/lib$/lib64/; $a} @LIBPATH; @LIBPATH = (@LIBPATH,@libs64); } ############################################################################################# # Build options passed in to script to support reproducible builds via Makefiles ############################################################################################# use Getopt::Long; my $result = GetOptions("options=s" => \$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', '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', }, # 'CFLAGS' => '-nostdinclude', '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); } 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 %libraries = map {$_=>1} (split /:/,$libraries),'/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; }