use
5.010;
my
$have_alien_gdal
=
eval
'require Alien::gdal'
;
if
(0 &&
$have_alien_gdal
) {
my
$ag_version
= Alien::gdal->version;
say
"Found existing gdal via alien ($ag_version) in "
. Alien::gdal->dist_dir;
my
$sep
= ($^O =~ /mswin/i) ?
';'
:
':'
;
$ENV
{PKG_CONFIG_PATH}
= Alien::gdal->dist_dir .
'/lib/pkgconfig/'
.
$sep
. (
$ENV
{PKG_CONFIG_PATH} //
''
);
$ENV
{PATH} = Alien::gdal->dist_dir .
'/bin'
.
$sep
.
$ENV
{PATH};
}
my
$base_dir
= getcwd();
my
$patch_file
=
"$base_dir/patch_isnan_gcc.patch"
;
say
"Patch file is $patch_file"
;
my
$min_target_version
=
'2.2.0'
;
plugin
'PkgConfig'
=> (
pkg_name
=>
'gdal'
,
minimum_version
=>
$min_target_version
,
);
say
'$ENV{PATH} is '
.
$ENV
{PATH};
share {
plugin
Download
=> (
version
=>
qr/^gdal-([0-9\.]+)\.tar\.gz$/
,
);
plugin
Extract
=>
'tar.gz'
;
if
($^O =~ /mswin/i) {
patch [
'%{patch} --verbose --backup port/cpl_port.h < '
.
$patch_file
,
];
}
plugin
'Build::Autoconf'
=> ();
my
$build_static
= ($^O =~ /mswin/i) ?
''
:
'--disable-shared'
;
$build_static
=
''
if
$ENV
{FORCE_DYNAMIC};
my
$make_cmd
=
'%{make}'
;
if
(
$ENV
{PERL_CPAN_REPORTER_DIR} ||
$ENV
{AUTOMATED_TESTING}) {
print
"Running under automated testing\n"
;
$make_cmd
.=
q/ | perl -ne "BEGIN {$|=1; open our $log, q|>|, q|build.log|}; print qq|\n| if 0 == ($. %% 100); print q|.|; print {$log} $_;" || type build.log/
;
if
(not $^O =~ /mswin/) {
$make_cmd
=~ s/%%/%/;
$make_cmd
=~ s/type/cat/;
$make_cmd
=~ s/"/'/g;
}
}
build [
'%{configure} '
.
$build_static
,
$make_cmd
,
\
&patch_pkgconfig
,
'%{make} install'
,
];
};
sub
patch_pkgconfig {
my
@gdal_configs
= File::Find::Rule->file()
->name(
'gdal-config'
)
->in(
'.'
);
my
@pkg_configs
= File::Find::Rule->file()
->name(
'gdal.pc'
)
->in(
'.'
);
say
'gdal-configs: '
.
join
' '
,
@gdal_configs
;
say
'pkg-configs: '
.
join
' '
,
@pkg_configs
;
return
if
!
@gdal_configs
|| !
@pkg_configs
;
open
my
$gc_fh
,
'<'
,
$gdal_configs
[0] or
die
$!;
my
$dep_libs
=
''
;
while
(
defined
(
my
$line
= <
$gc_fh
>)) {
if
(
$line
=~ /CONFIG_DEP_LIBS=(.+)$/) {
$dep_libs
= $1;
last
;
}
}
close
$gc_fh
;
$dep_libs
=~ s/^\"//;
$dep_libs
=~ s/\"$//;
open
my
$pk_fh
,
'<'
,
$pkg_configs
[0] or
die
$!;
my
@pkg_conf
;
while
(
defined
(
my
$line
= <
$pk_fh
>)) {
push
@pkg_conf
,
$line
;
}
close
$pk_fh
;
foreach
my
$pkg_config_file
(
@pkg_configs
) {
say
"Adding gdal dep_libs to $pkg_config_file"
;
open
$pk_fh
,
'>'
,
$pkg_config_file
or
die
$!;
foreach
my
$line
(
@pkg_conf
) {
if
(
$line
=~ /^CONFIG_INST_LIBS/) {
chomp
$line
;
$line
.=
' '
.
$dep_libs
.
"\n"
;
}
print
{
$pk_fh
}
$line
;
}
close
$pk_fh
;
}
}