The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use LWP::Simple;
use File::Path;
use Archive::Zip;

sub get_amalgamation {
        my ($dir_root,$site_root) = @_;
        my $download_file = "";
        # Download the Spatialite amalgamation if it isn't there, already.
        eval { mkpath($dir_root) };
        if ($@) {
                die "Couldn't create $dir_root: $@\n";
        }
        print "Downloading amalgation.\n";

        # find out what's current amalgamation ZIP file
        my $download_page = get($site_root . "/sources.html");
        if($download_page =~ /(libspatialite-amalgamation.*?\.zip)/) {
                $download_file = $1;
        } else {
                die "Couldn't find the amalgamation archive name.\n";
        }
        my $amalgamation_url = $site_root . "/" . $download_file;
        my $zip_dir = $download_file;
        $zip_dir =~ s/\.zip//;
        # and download it
        my $download_status = getstore($amalgamation_url, "tmp.zip");
        die "Error $download_status on $amalgamation_url" unless is_success($download_status);

        my $zf = Archive::Zip->new("tmp.zip");

        my @files = (
                "sqlite3.c",
                "headers/spatialite/sqlite3.h",
                "spatialite.c",
                "headers/spatialite/sqlite3ext.h",
                "headers/spatialite/spatialite.h",
                "headers/spatialite/gaiaaux.h",
                "headers/spatialite/gaiaexif.h",
                "headers/spatialite/gaiageo.h"
        );
        foreach(@files) {
                my $fn = $_;
                my ($lfn) = reverse(split(/\//,$fn,-1));
                my $afn = $zip_dir . "/" . $fn;
                print "Extracting " . $afn . "\n";
                $zf->extractMember($afn,$dir_root . '/' . $lfn);
        }
        unlink("tmp.zip")
}
get_amalgamation("../amalgamation/stable/","http://www.gaia-gis.it/spatialite");
get_amalgamation("../amalgamation/edge/","http://www.gaia-gis.it/spatialite-2.4.0-4");