use 5.008; use Config; use ExtUtils::MakeMaker; my %missing_modules; $missing_modules{chk_module('ExtUtils::Depends')} = 1; $missing_modules{chk_module('ExtUtils::PkgConfig')} = 1; $missing_modules{chk_module('File::Basename')} = 1; $missing_modules{chk_module('JSON::XS')} = 1; $missing_modules{chk_module('Geo::GDAL', 1.81)} = 1; $missing_modules{chk_module('Geo::Raster', 0.62)} = 1; $missing_modules{chk_module('Geo::OGC::Geometry', 0.04)} = 1; $missing_modules{chk_module('Gtk2::GladeXML')} = 1; $missing_modules{chk_module('Gtk2::Ex::Geo', 0.62)} = 1; $missing_modules{chk_module('Win32::OLE')} = 1 if $^O eq 'MSWin32'; delete $missing_modules{''}; my @missing_modules = keys %missing_modules; warn "Following required modules are missing: @missing_modules\n" if @missing_modules; require ExtUtils::Depends; require ExtUtils::PkgConfig; my($inc,$libs,$cflags) = ('','',''); for $package ('gdal','gdk-pixbuf-2.0','libral') { print "Checking for $package: "; my($c,$l); if ($package eq 'gdal') { if ($^O ne 'MSWin32') { $c = `gdal-config --cflags`; chomp $c; $l = `gdal-config --libs`; chomp $l; } else { ($l, $c) = gdal_config("c:/msys/1.0/local/bin/gdal-config"); } } else { %pkg_info = ExtUtils::PkgConfig->find ($package); $c = $pkg_info{cflags}; $l = $pkg_info{libs}; } $cflags .= " $c"; $libs .= " $l"; print "ok\n"; } our $deps = ExtUtils::Depends->new('Geo::Vector', 'Gtk2::Ex::Geo', 'Gtk2'); $deps->set_inc($inc); $deps->set_libs($libs); our %pm_files = ( 'lib/Geo/Vector.pm' => '$(INST_LIBDIR)/Vector.pm', 'lib/Geo/Vector/Layer.pm' => '$(INST_LIBDIR)/Vector/Layer.pm', 'lib/Geo/Vector/Feature.pm' => '$(INST_LIBDIR)/Vector/Feature.pm', 'lib/Geo/Vector/Layer/Dialogs.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs.pm', 'lib/Geo/Vector/Layer/Dialogs/New.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/New.pm', 'lib/Geo/Vector/Layer/Dialogs/Copy.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Copy.pm', 'lib/Geo/Vector/Layer/Dialogs/Open.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Open.pm', 'lib/Geo/Vector/Layer/Dialogs/Rasterize.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Rasterize.pm', 'lib/Geo/Vector/Layer/Dialogs/Vertices.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Vertices.pm', 'lib/Geo/Vector/Layer/Dialogs/Features.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Features.pm', 'lib/Geo/Vector/Layer/Dialogs/FeatureCollection.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/FeatureCollection.pm', 'lib/Geo/Vector/Layer/Dialogs/Properties.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Properties.pm', 'lib/Geo/Vector/Layer/Dialogs/Feature.pm' => '$(INST_LIBDIR)/Vector/Layer/Dialogs/Feature.pm', ); $deps->add_pm (%pm_files); $deps->add_xs('lib/Geo/Vector.xs'); @for_windows = (); if ($^O eq 'MSWin32') { $lddlflags = $Config{lddlflags}; $lddlflags =~ s/-mdll/-shared/; @for_windows = ( LDDLFLAGS => $lddlflags, dynamic_lib=> {OTHERLDFLAGS=>"-Wl,--out-implib=blib\\arch\\auto\\Geo\\Vector\\Vector.dll.a "}); } $deps->save_config("Files.pm"); WriteMakefile( NAME => 'Geo::Vector', VERSION_FROM => 'lib/Geo/Vector.pm', $deps->get_makefile_vars(), ( $] >= 5.005 ? (ABSTRACT_FROM => 'lib/Geo/Vector.pm', AUTHOR => 'Ari Jolma ') : () ), CCFLAGS => "-O2 -fno-builtin $cflags $inc", $deps->get_makefile_vars, @for_windows ); if (eval {require ExtUtils::Constant; 1}) { # If you edit these definitions to change the constants used by this module, # you will need to use the generated const-c.inc and const-xs.inc # files to replace their "fallback" counterparts before distributing your # changes. my @names = (qw(CONCAVE CONVEX)); ExtUtils::Constant::WriteConstants( NAME => 'Geo::Vector', NAMES => \@names, DEFAULT_TYPE => 'IV', C_FILE => 'const-c.inc', XS_FILE => 'const-xs.inc', ); } else { use File::Copy; use File::Spec; foreach my $file ('const-c.inc', 'const-xs.inc') { my $fallback = File::Spec->catfile('fallback', $file); copy ($fallback, $file) or die "Can't copy $fallback to $file: $!"; } } sub chk_module { my($pkg, $version) = @_; print "Checking for $pkg ($version):"; eval { my $p; ($p = $pkg . ".pm") =~ s#::#/#g; require $p; }; if ($@) { print " failed)\n"; return $pkg; } else { my $v = '$v=$'.$pkg.'::VERSION'; eval($v); if ($v < $version) { print " failed\n"; return "$pkg is old version $v"; } print " ok\n"; return ''; } } sub gdal_config { my $fh = shift; open $fh, $fh or die "$fh not found!"; my $LIB = ''; my $INC = ''; if ($fh) { my @config = <$fh>; close $fh; for (@config) { if (/^CONFIG_DEP_LIBS/) { s/^CONFIG_DEP_LIBS="//; s/"\s*$//; $LIB .= $_; } if (/^CONFIG_CFLAGS/) { s/^CONFIG_CFLAGS="//; s/"\s*$//; $INC .= $_; } } } $usr_local = "/usr/local"; $msys_local = "c:/msys/1.0/local"; $LIB =~ s/$usr_local/$msys_local/; $INC =~ s/$usr_local/$msys_local/; return ("$LIB -lgdal", $INC); } # -o on the compiler command line... package MY; use Cwd; sub const_cccmd { my $inherited = shift->SUPER::const_cccmd(@_); $inherited .= ' -o $@'; $inherited; } sub postamble { my $ret = ''; my $lib = 'lib/Geo/Vector/Layer/'; for ('Dialogs') { $ret .= "\n$lib$_.pm: $lib$_.pm.in $lib$_.glade\n"; if ($^O eq 'MSWin32') { } else { $ret .= "\tif [ -f $lib$_.pm ]; then chmod u+w $lib$_.pm; fi\n\n"; } my $l = $lib; if ($^O eq 'MSWin32') { $l =~ s/\//\\/g; $ret .= "\tcopy $l$_.pm.in+$l$_.glade $l$_.pm\n"; } else { $ret .= "\tcat $l$_.pm.in $l$_.glade >$l$_.pm\n"; $ret .= "\tchmod a-w $lib$_.pm\n\n"; # to remember to edit .pm.in :) } } return $ret; }