# Copyright (C) 2016-2021 Simon Josefsson
# 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 library name
source_base=lib/gl
local_gl_dir=$source_base
tests_base=tests-gl
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
stdint
strverscmp
update-copyright
valgrind-tests
"

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

GTKDOCIZE=$(which gtkdocize 2>/dev/null)
if test $? -ne 0; then
  echo "No gtk-doc support found. You can't build the docs."
  # rm because gtk-doc.make might be a link to a protected file
  rm -f gtk-doc.make 2>/dev/null
  echo "EXTRA_DIST =" >gtk-doc.make
  echo "CLEANFILES =" >>gtk-doc.make
  GTKDOCIZE=""
else
  $GTKDOCIZE --copy
fi

bootstrap_post_import_hook ()
{
  # Automake requires that ChangeLog exist.
  touch ChangeLog || return 1
}
