#! /usr/bin/perl

# Check out the Autoconf sources and prepare them for building.
# A copy of Automake must already be available in $PATH.
# Takes one optional command line argument, which identifies the
# commit to be checked out (this is passed directly to git clone's
# --branch option: anything acceptable to that option may be used).

# Copyright (C) 2021 Free Software Foundation, Inc.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

use v5.14;    # implicit use strict, use feature ':5.14'
use warnings FATAL => 'all';
use utf8;
use open qw(:utf8);

use Cwd qw(getcwd);
use FindBin ();
use lib $FindBin::Bin;
use BuildCommon qw(
    ensure_C_locale
    ensure_empty_stdin
    error
    run
);

# FIXME these should be either specified on the command line
# or in some kind of config file.
use constant {
    AUTOCONF_REPO => 'https://git.savannah.gnu.org/git/autoconf.git',
    AUTOCONF_LAST_RELEASE => 'v2.71'
};

sub main {
    my @branch;
    if (@_ == 0) {
        # If we are checking out the default branch, we can use
        # --shallow-exclude <most recent release tag> to save some
        # bandwidth (as of 2.72a.22-6027, roughly 1.5 MB with this,
        # vs 11.5 MBwith just --single-branch).  We can't just use
        # --depth 1 because then git-version-gen will fail.
        @branch = ('--shallow-exclude', AUTOCONF_LAST_RELEASE);
    } elsif (@_ == 1) {
        # If we are not checking out the default branch, we don't
        # know where to cut off the history without breaking
        # git-version-gen.
        @branch = ('--branch', shift);
    } else {
        error("usage: $FindBin::Script [commit]");
    }

    ensure_empty_stdin();
    ensure_C_locale();

    my $wd = getcwd();

    run(qw(git clone --single-branch), @branch, AUTOCONF_REPO, 's-autoconf');

    chdir('s-autoconf') or error("cd s-autoconf");
    run('./bootstrap', '-v');

    chdir('..') or error('cd ..');
    mkdir('b-autoconf') or error('mkdir b-autoconf');
    chdir('b-autoconf') or error('cd b-autoconf');
    run('../s-autoconf/configure', '--prefix='.$wd.'/i-autoconf');
    run(qw(make distcheck));
    run(qw(make));
    run(qw(make install));
}

eval {
    main(@ARGV);
    exit(0);
};
error("$@");
