# Bootstrap configuration.                                          -*- sh -*-

# Copyright (C) 2016-2026 Free Software Foundation, Inc.
# Copyright (C) 2016,2018 Tim Rühsen

# 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/>.

GNULIB_REVISION=491f1bb7d3049f3ab7825f3ee665c209658e9965

# gnulib library name
source_base=lib/gl
local_gl_dir=$source_base
tests_base=lib/gl/tests
gnulib_name=libgnu
gnulib_tool_option_extras="--lgpl=2 --without-tests --no-vc-files"
checkout_only_file=.gitignore

gnulib_modules="
c-ctype
git-version-gen
gitlog-to-changelog
intprops
lib-msvc-compat
lib-symbol-versions
lib-symbol-visibility
manywarnings
minmax
readme-release
realloc-posix
stdarg-h
stdint-h
strverscmp
update-copyright
valgrind-tests
"

src_gnulib_modules="
getopt-gnu
gettime
progname
read-file
version-etc-fsf
"

# Build prerequisites
buildreq="\
autoconf   2.64
automake   1.13
git        1.4.4
bison      -
make       -
"

if ! command -v gtkdocize >/dev/null; then
    # Pacify autoreconf's invocation of gtkdocize.
    GTKDOCIZE="true gtkdocize"
    export GTKDOCIZE
fi

bootstrap_post_import_hook ()
{
  # No test modules are used but 'valgrind-tests' make gnulib-tool
  # believe we need this.
  rm -rf lib/gl/tests

  ${GNULIB_SRCDIR}/gnulib-tool --import --libtool --m4-base=src/gl/m4 --macro-prefix=sgl --lib=libsgl --source-base=src/gl --local-dir=src/gl --tests-base=src/gl/tests --no-conditional-dependencies --without-tests $src_gnulib_modules

  if ! gtkdocize --copy; then
      echo "warning: gtkdocize missing -- gtk-doc manual will be missing"
      # rm because gtk-doc.make might be a link to a protected file
      rm -f gtk-doc.make
      echo "EXTRA_DIST =" > gtk-doc.make
      echo "CLEANFILES =" >> gtk-doc.make
  fi

  # Automake requires that ChangeLog exist.
  touch ChangeLog || return 1
}

bootstrap_epilogue ()
{
    # Run automake again.  It seems the first time ./bootstrap runs
    # automake, it will not add some files to am__DIST_COMMON in
    # top-level Makefile.in, but on subsequent runs (for example
    # through autoreconf, which is triggered on 'make release') it
    # will add the files.  The missing files include
    # build-aux/depcomp, build-aux/mdate-sh, build-aux/texinfo.texi,
    # and build-aux/ylwrap.  We want the am__DIST_COMMON value to be
    # identical so that "make dist" and "make release" tarballs are
    # identical and reproducible.
    ${AUTOMAKE=automake} --no-force
}
