| #! /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("$@"); |