use ExtUtils::MakeMaker;
# pick up our parameters from @ARGV
my %ARGV;
for (@ARGV) {
if (/^(.*?)\=(.*)/) {
$ARGV{$1} = $2;
} else {
$ARGV{$_} = 1;
}
$_ = '' if /^--gdal-config/;
$_ = '' if /^--no-version-check/;
}
# search and decide which GDAL (gdal-config) to build against
# scan known possible locations in the order of preference:
my @configs;
for ('../../apps/gdal-config',
'c:/msys/1.0/local/bin/gdal-config',
'/usr/local/bin/gdal-config',
'/usr/bin/gdal-config') {
push @configs, $_ if -r $_;
}
print "Found @configs\n";
my $config;
if ($ARGV{'--gdal-config'}) {
die "'$ARGV{'--gdal-config'}' does not exist or is unreadable." unless -r $ARGV{'--gdal-config'};
$config = $ARGV{'--gdal-config'};
} else {
$config = shift @configs;
}
die "Can't find gdal-config. Please install GDAL development files or\n".
"define the location of gdal-config using --gdal-config=XXX.\n"
unless $config;
print "Using $config.\n";
# check that we're part of GDAL distro
# or that installed GDAL version is the same as that in lib/Geo/GDAL.pm
my $LIB = '';
my $INC = '';
if ($config eq '../../apps/gdal-config') {
print "Building against GDAL in this distro tree\n";
$LIB .= '-L../../.libs -L../.. ';
} elsif ($config eq 'c:/msys/1.0/local/bin/gdal-config') {
print "Building against GDAL in c:/msys/1.0/local/bin/\n";
$LIB .= '-Lc:/msys/1.0/local/lib ';
$INC .= '-Ic:/msys/1.0/local/include ';
} else {
print "Building against GDAL defined in $config\n";
}
my $gdal_version;
my $pm_version;
my $fh;
if (open($fh, $config)) {
for (<$fh>) {
($gdal_version) = /(\d+\.\d+\.\d+)/ if /^CONFIG_VERSION/;
if (/^CONFIG_LIBS/) {
s/^CONFIG_LIBS="//;
s/"\s*$//;
if ($_ =~ /\.la$/) {
# parse a libtool library file
$LIB .= parse_libtool_library_file_for_l($_);
} else {
$LIB .= $_;
}
$LIB .= ' ';
}
if (/^CONFIG_DEP_LIBS/) {
s/^CONFIG_DEP_LIBS="//;
s/"\s*$//;
$LIB .= $_;
}
if (/^CONFIG_CFLAGS/) {
s/^CONFIG_CFLAGS="//;
s/"\s*$//;
$INC .= $_;
}
}
close $fh;
}
if (open($fh, "lib/Geo/GDAL.pm")) {
for (<$fh>) {
($pm_version) = /(\d+\.\d+\.\d+)/ if /GDAL_VERSION/;
}
close $fh;
} else {
die "GDAL Perl modules not found, perhaps you need to run make generate?";
}
die "=======================================================\n".
"PLEASE NOTE!\n".
"The GDAL that you try to build against has version\n".
"$gdal_version and this module was released from version\n".
"$pm_version. These do not match. Building against newer\n".
"version may work but you need to remove this check first.\n".
"You can pass by this warning with --no-version-check.\n".
"Thank you.\n".
"=======================================================\n"
if ($gdal_version ne $pm_version) and !$ARGV{'--no-version-check'};
%object = ( 'Geo::GDAL' => 'gdal_wrap.o',
'Geo::GDAL::Const' => 'gdalconst_wrap.o',
'Geo::OGR' => 'ogr_wrap.o',
'Geo::OSR' => 'osr_wrap.o' );
#print "LIB = $LIB\n";
#print "INC = $INC\n";
for my $module (keys %object) {
my $add = $module;
$add =~ s/:/_/g;
WriteMakefile( NAME => $module,
VERSION_FROM => 'lib/Geo/GDAL.pm',
MAKEFILE => 'Makefile_'.$add,
LIBS => $LIB,
INC => $INC,
OBJECT => $object{$module},
PM => {'lib/Geo/GDAL.pm' => '$(INST_LIBDIR)/GDAL.pm',
'lib/Geo/OGR.pm' => '$(INST_LIBDIR)/OGR.pm',
'lib/Geo/OSR.pm' => '$(INST_LIBDIR)/OSR.pm',
'lib/Geo/GDAL/Const.pm' => '$(INST_LIBDIR)/GDAL/Const.pm'}
);
}
sub parse_libtool_library_file_for_l {
my $fn = shift;
my $fh;
my $l = '';
if (open($fh, $fn)) {
while (<$fh>) {
if (/^dlname=(.*)/) {
$l = $1;
$l =~ s/^'//;
$l =~ s/^lib/\-l/;
$l =~ s/\..*$//;
last;
}
}
close $fh;
}
return $l;
}